Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Raspberry PI Pico #5 – Ultraschallabstandssensor RCW-001 & OLED Display anschließen

Posted on 7. Juni 20219. März 2024 by Stefan Draeger

In diesem Beitrag möchte ich dir zeigen wie du einen Ultraschallabstandssensor vom Typ RCW-001 und ein OLED Display an den Raspberry PI Pico anschließt.

Für den einfachen Aufbau kannst du ein Erweiterungsboard mit Grove Connectors verwenden.

DIY Expansion Board für den Raspberry PI Pico mit Grove Adapter
DIY Expansion Board für den Raspberry PI Pico mit Grove Adapter

Natürlich kannst du die Schaltung auch, ohne aufbauen aber diese Boards geben dir zbsp die Möglichkeit Sensoren / Aktoren mit Grove Schnittstelle zu verwenden und somit ist zumindest die Verkabelung recht schnell und vor allem sicher erledigt.

  • Benötigte Ressourcen für den Aufbau der Schaltung
  • Aufbau der Schaltung
    • Unterschied zwischen HC-SR04 & RCW-001
    • Pinout des Raspberry PI Pico
  • Programmieren in MicroPython
    • Schritt 1 – programmieren des Sensors RCW-001
      • Ausgabe auf der Konsole in Thonny
    • Schritt 2 – anzeigen von Text auf einem OLED Display
      • Installieren der Bibliothek für den Chip SSD1306
      • Initialisieren der I2C Kommunikation
      • Formatieren der Ausgabe für das OLED Display
      • Globale Variable erstellen
      • verwenden der Globalen Variable
      • schreiben des Textes auf das OLED Display
  • Quellcode
  • Download
  • Video
  • Quellenangaben
  • Ausblick & Fazit

Benötigte Ressourcen für den Aufbau der Schaltung

Für den Aufbau der Schaltung benötigst du:

  • einen Raspberry PI Pico*,
    • ein USB Datenkabel*
  • acht Breadboardkabel*, weiblich – weiblich, 20 cm
  • einen Ultraschallabstandssensor RCW-001*, sowie
  • ein OLED Display mit I2C Schnittstelle*

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Das OLED Display erhältst du in diversen Größen, da wir in diesem Beitrag lediglich einen Abstand in Zentimeter anzeigen wollen, kommen wir mit einem kleinen Display zurecht.

1,3" OLED Display, Auflösung 128x64 Pixel
1,3″ OLED Display, Auflösung 128×64 Pixel
Nichtproportionale Schriftart auf dem 0,42" OLED Display
Nichtproportionale Schriftart auf dem 0,42″ OLED Display
0,91 Zoll OLED Display
0,91 Zoll OLED Display

Das 0,91″ OLED Display sowie den Ultraschallabstandssensor habe ich bereits in einigen Arduino Projekten eingesetzt und dir auf meinem Blog vorgestellt, hier möchte ich dir nun zeigen wie du diese Sensoren / Aktoren am Raspberry PI Pico anschließt und betreibst.

Aufbau der Schaltung

Das 0,91″ OLED Display wird in meinem Fall über I2C angeschlossen d.h. über SDA & SCL der Ultraschallabstandssensor RCW-001 benötigt lediglich 2 digitale Pins und natürlich beide noch eine 3,3V Spannungsversorgung.

Sensor / AktorRaspberry PI Pico
RCW-001
VCC Pin 36 / 3,3V
Trigger GP3
Echo GP2
GND Pin 38 / GND
OLED Display
SDA GP0
SCL GP1
VCC PIN 36 / 3,3V
GND Pin 38 / GND
Aufbau der Schaltung „Raspberry PI Pico mit Ultraschallabstandssensor und OLED Display“

Da ich für die Erstellung der Grafik für die Schaltung keinen RCW-001 gefunden habe, habe ich einen HC-SR04 genommen.

Unterschied zwischen HC-SR04 & RCW-001

Für den Aufbau benötigst du einen RCW-001 Sensor, dieser hat eine Betriebsspannung von 3,3V. Der bekanntere Ultraschallsensor HC-SR04 arbeitet jedoch mit einer Spannung von 5V.

Pinout des Raspberry PI Pico

Hier nun für den Aufbau der Schaltung das Pinout.

Pinout des Raspberry PI Pico
Pinout des Raspberry PI Pico

Programmieren in MicroPython

Nachdem die Schaltung fertiggestellt ist, wollen wir nun den Quellcode erstellen. Ich nutze zum Programmieren die Software Thonny welche kostenfrei unter https://thonny.org heruntergeladen werden kann. Wie du dieses Tool auf einen Microsoft Windows 10 PC einrichtest habe ich dir im Beitrag Raspberry PI Pico #1 – Vorstellung ausführlich erläutert.

Schritt 1 – programmieren des Sensors RCW-001

Im ersten Schritt wollen wir den Ultraschallabstandssensor programmieren und die Daten zunächst einfach mit dem „print()“ Befehl auf der seriellen Schnittstelle ausgeben.

Um einen Abstand per Ultraschall zu messen, müssen wir ein Ultraschallsignal ausgeben und Zeit messen, in welcher dieses Signal zurückgeliefert wurde.

#Bibliothek zum ansteuern der GPIOs des Microcontrollers
from machine import Pin
#Bibliothek zum pausieren des Microcontrollers in Millisekunden
import utime

#Trigger Pin am GPIO03 angeschlossen
trigger = Pin(3, Pin.OUT)
#Echo Pin am GPIO02 angeschlossen
echo = Pin(2, Pin.IN)

#Funktion zum auslesen eines Ultraschallsensors
def readSensor():
    #deaktivieren des digitalen Pins
    trigger.low()
    #Pause von 2 Mikrosekunden
    utime.sleep_us(2)
    #aktivieren des digitalen Pins
    trigger.high()
    #Pause von 5 Mikrosekunden
    utime.sleep_us(5)
    #deaktivieren des digitalen Pins
    trigger.low()
    #solange der Echo Pin nicht aktiviert ist, mache...
    #die Schleife wird abgebrochen wenn der Echo Pin auf HIGH also
    # auf 1 ist. Der letzte gespeicherte Wert ist dann unsere Zeit.
    while echo.value() == 0:
        #aktuellen Timestamp in Microsekunden speichern
        signaloff = utime.ticks_us()
    #solange der Echo Pin aktiviert ist, mache...
    #im letzten durchlauf wurde der Pin aktiviert, dieser wird
    #beim empfangen des zweiten Signals deaktiviert
    while echo.value() == 1:
        #speichern des aktuellen Zeitstempels in Mikrosekunden
        signalon = utime.ticks_us()
    #berechnen des zeitlichen Abstands zwischen den beiden Signalen
    timepassed = signalon - signaloff
    #berechen des Abstands in Zentimeter
    #dazu wird die Schallgeschwindigkeit bei 20C genommen
    #diese liegt bei 343,24 m/s umgerechnet auf Zentimeter pro Mikrosekunden
    #ist dieses 0.0343 cm/us, das Ergebnis wird durch 2 geteilt da wir nur die
    #einfache Strecke für das Signal wollen. Ansonsten wäre dieses Hin- und Zurück.
    distance = (timepassed * 0.0343) / 2
    #Ausgeben des Abstands als Formatierte Zeichenkette.
    print("Abstand: ",distance," cm")
    
#Endlosschleife
while True:
    #Funktion "readSensor" ausführen
    readSensor()
    #1 Sekunde Pause
    utime.sleep(1)

Ausgabe auf der Konsole in Thonny

Schritt 2 – anzeigen von Text auf einem OLED Display

Im ersten Schritt haben wir die Sensordaten des Ultraschallabstandsensors ausgelesen, nun möchte ich dir zeigen wie du diese Daten auf einem OLED Display anzeigen lassen kannst.

Installieren der Bibliothek für den Chip SSD1306

Die mir vorliegenden OLED Displays werden mit dem Chip SSD1306 betrieben.

Die Thonny IDE kleiner als 3.3.8 hat einen Fehler welcher behindert das du eine zusätzliche Bibliothek installieren kannst. Ich empfehle dir also zu mindest auf die Version 3.3.10 zu aktualisieren.

In der Thonny IDE kannst du den passenden Treiber über „Extras“ > „Verwalte Pakete…“ hinzufügen.

Im ersten Dialog suchst zunächst mit dem Schlagwort „ssd1306“ (1) auf der Seite PyPI (2) in der Ergebnisliste wählst du dann den Hyperlink im ersten Eintrag (3) aus. Im neu geöffneten Dialog wählst du dann nur noch die Schaltfläche „Installieren“ (4) und die Bibliothek ist installiert.

Initialisieren der I2C Kommunikation

Nachdem die Bibliothek installiert wurde und wir das OLED Display angeschlossen haben, müssen wir zunächst im Quellcode die I2C Kommunikation initialisieren.

#Bibliothek für die I2C Kommunikation
from machine import I2C
#Bibliothek für das OLED Display
from ssd1306 import SSD1306_I2C

#erstellen einer Instanz für das OLED Display,
#SDA auf GPIO0
#SCL auf GPIO1
i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000)
#für ein schmales, 0,91" OLED Display ist die Auflösung 128x32
oled = SSD1306_I2C(128, 32, i2c)

Formatieren der Ausgabe für das OLED Display

Da wir auf dem OLED Display nur begrenzten Platz haben möchte ich den Wert für den Abstand in Zentimeter formatieren. Hier nutzen wir die Python Funktion „format“.

Nachfolgender Code formatiert eine Gleitkommazahl in eine Zahl mit maximal 4 Stellen vor und 2 Stellen nach dem Komma.

"{:4.2f}".format(distance)

Globale Variable erstellen

Für das Anzeigen des Abstandes speichern wir uns den Wert in eine Globale Variable. Dafür müssen wir zunächst im Kopfbereich des Quellcodes das Feld „distance“ anlegen.

distance = 0.0

verwenden der Globalen Variable

Um dieser Variable einen Wert zuzuweisen müssen wir in der Funktion „readSensor“ zunächst definieren das wir die Globale Variable „distance“ verwenden wollen.

#Funktion zum auslesen eines Ultraschallsensors
def readSensor():
    global distance
    ...

schreiben des Textes auf das OLED Display

Nachdem wir uns in der Globalen Variable „distance“ den Abstand als Gleitkommazahl gespeichert haben wollen wir diese nun auf dem OLED Display anzeigen. Aber wir wollen diese auch formatieren, denn die sechste Nachkommastelle ist nicht wirklich interessant und verbraucht nur Platz.

    #befüllen des Displays mit Schwarz
    oled.fill(0)
    #formatieren und schreiben des Textes auf das OLED Display
    oled.text(str("Abstand: "+"{:4.2f}".format(distance)+"cm"), 0, 0)
    #anzeigen des Textes
    oled.show()

Quellcode

Hier nun der gesamte Quellcode für das kleine Projekt.

#Bibliothek zum ansteuern der GPIOs des Microcontrollers
from machine import Pin

#Bibliothek für die I2C Kommunikation
from machine import I2C
#Bibliotek für das OLED Display
from ssd1306 import SSD1306_I2C

#Bibliothek zum pausieren des Microcontrollers in Millisekunden
import utime

#Trigger Pin am GPIO03 angeschlossen
trigger = Pin(3, Pin.OUT)
#Echo Pin am GPIO02 angeschlossen
echo = Pin(2, Pin.IN)

i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000)
oled = SSD1306_I2C(128, 32, i2c)

distance = 0.0

#Funktion zum auslesen eines Ultraschallsensors
def readSensor():
    global distance
    #deaktivieren des digitalen Pins
    trigger.low()
    #Pause von 2 Mikrosekunden
    utime.sleep_us(2)
    #aktivieren des digitalen Pins
    trigger.high()
    #Pause von 5 Mikrosekunden
    utime.sleep_us(5)
    #deaktivieren des digitalen Pins
    trigger.low()
    #solange der Echo Pin nicht aktiviert ist, mache...
    #die Schleife wird abgebrochen wenn der Echo Pin auf HIGH also
    # auf 1 ist. Der letzte gespeicherte Wert ist dann unsere Zeit.
    while echo.value() == 0:
        #aktuellen Timestamp in Microsekunden speichern
        signaloff = utime.ticks_us()
    #solange der Echo Pin aktiviert ist, mache...
    #im letzten durchlauf wurde der Pin aktiviert, dieser wird
    #beim empfangen des zweiten Signals deaktiviert
    while echo.value() == 1:
        #speichern des aktuellen Zeitstempels in Mikrosekunden
        signalon = utime.ticks_us()
    #berechnen des zeitlichen Abstands zwischen den beiden Signalen
    timepassed = signalon - signaloff
    #berechen des Abstands in Zentimeter
    #dazu wird die Schallgeschwindigkeit bei 20C genommen
    #diese liegt bei 343,24 m/s umgerechnet auf Zentimeter pro Mikrosekunden
    #ist dieses 0.0343 cm/us, das Ergebnis wird durch 2 geteilt da wir nur die
    #einfache Strecke für das Signal wollen. Ansonsten wäre dieses Hin- und Zurück.
    distance = (timepassed * 0.0343) / 2
    #Ausgeben des Abstands als Formatierte Zeichenkette.
    print("Abstand:",distance,"cm")
    
#Endlosschleife
while True:
    #befüllen des Displays mit Schwarz
    oled.fill(0)
    #formatieren und schreiben des Textes auf das OLED Display
    oled.text(str("Abstand: "+"{:4.2f}".format(distance)+"cm"), 0, 0)
    #anzeigen des Textes
    oled.show()
        
    #Funktion "readSensor" ausführen
    readSensor()
    #1 Sekunde Pause
    utime.sleep(1)

Download

Hier nun der komplette Quellcode als ZIP Datei zum Download.

Raspberry PI Pico #5 – Ultraschallabstandssensor RCW-001 & OLED Display anschließenHerunterladen

Video

Quellenangaben

Für dieses Tutorial habe ich teile aus dem englischen Beitrag How to Use an Ultrasonic Sensor with Raspberry Pi Pico verwendet. Daher geht ein großer Dank an „tom’s HARDWARE„.

Ausblick & Fazit

Da man auf dem Display nicht nur einfachen Text darstellen kann sondern auch einfache Bilder (XBMP) und Geometrische Figuren werde ich dem Thema „OLED Display am Raspberry PI Pico“ einen eigenen Beitrag widmen.

Als Fazit möchte ich ziehen dass, das kleine Projekt doch recht einfach zu programmieren war (mit etwas Hilfe aus dem benannten Beitrag).

Die Genauigkeit des Ultraschallsensors RCW-001 ist recht gut und konnte mit einem Zollstock auf wenige Millimeter validiert werden.

2 thoughts on “Raspberry PI Pico #5 – Ultraschallabstandssensor RCW-001 & OLED Display anschließen”

  1. Pingback: Aufbau eines Ultraschall-Abstandswarners mit Raspberry Pi Pico - Technik Blog
  2. Pingback: Raspberry PI Pico #8 - Temperatursensor LM35DZ - Technik Blog

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}