In diesem Beitrag möchte ich dir ein kleines Projekt mit dem Raspberry Pi Pico, Ultraschall-Abstandssensor & 8×8 LED Matrix MAX7219 vorstellen.
Die Idee zu diesem Beitrag habe ich von Instagram, wo ich dieses mit einem Arduino UNO R3 gesehen habe. Hier soll es nun darum gehen, wie du dieses auf dem Raspberry Pi Pico mit Micropython umsetzt.
Ich werde in diesem Beitrag den Mikrocontroller Sumolink Erhw RP2040 verwenden, dieser ist dem Raspberry Pi Pico gleich (beide ohne WiFi Support).
Die beiden verwendeten Bauteile habe ich dir bereits in nachfolgenden separaten Beiträgen beschrieben, hier bediene ich mich also am alten Code.
- Raspberry Pi Pico #10: 8×8 LED Punktmatrix
- Aufbau eines Ultraschall-Abstandswarners mit Raspberry Pi Pico
Ziel des kleinen Projektes
Es soll der Wert des Ultraschall-Abstandssensors auf der 8×8 LED Matrix visualisiert werden. Dabei wird ein Rechteck auf der Matrix gezeichnet, umso näher ein Objekt dem Sensor kommt, desto größer wird dieses.
Benötigte Ressourcen für das Projekt – Raspberry Pi Pico mit Ultraschall-Abstandssensor & MAX7219
Für den Aufbau des Projektes benötigst du:
- einen Raspberry Pi Pico* (oder vergleichbaren Mikrocontroller),
- ein passendes USB-Datenkabel*,
- eine 8×8 LED Matrix MAX7219*,
- ein Ultraschall-Abstandssensor Typ HC-SR04*,
- acht Breadboardkabel*,
- ein 400 Pin Breadboard*
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!
Pinout des Raspberry Pi Pico
Für den Aufbau der Schaltung benötigst du das Pinout des Pi Pico welches ich dir hier einmal gerne an die Hand gebe. Wenn du den Pi Pico W verwendest ist, das Pinout ebenso zu verwenden, da diese beiden Mikrocontroller vom Pinout gleich sind.
Aufbau der Schaltung
Der Aufbau der Schaltung ist recht simple und sollte in wenigen Minuten erfolgt sein.
Hier nun der kleine Anschlussplan in tabellarischer Form:
Bauteil | Raspberry Pi Pico |
---|---|
Ultraschall-Abstandssensor HC-SR04 | |
VCC | 5V |
GND | GND |
Trigger | GP8 |
Echo | GP9 |
8×8 LED Matrix | |
VCC | 3.3 V |
GND | GND |
DIN | GP3 |
CS | GP5 |
CLK | GP2 |
Programmieren in Micropython
Wie man eine 8×8 LED Matrix in Micropython programmiert, habe ich dir bereits im Beitrag Raspberry Pi Pico #10: 8×8 LED Punktmatrix erläutert, hier möchte ich jetzt gerne an diesen Beitrag anknüpfen und noch den Ultraschall-Abstandssensor HC-SR04 mit ins Spiel bringen.
Den kompletten Code kannst du dir nachfolgend als ZIP-Datei herunterladen. In dem ZIP findest du die Python Datei code.py welche du einfach auf deinem Pi Pico speichern kannst.
Hier der Code:
from machine import Pin, SPI import max7219 from time import sleep import utime #Ultraschall-Abstandssensor sensorTrigger = Pin(8, Pin.OUT) sensorEcho = Pin(9, Pin.IN) sensorValue = 0 #8x8 LED Matrix spi = SPI(0,sck=Pin(2),mosi=Pin(3)) cs = Pin(5, Pin.OUT) display = max7219.Matrix8x8(spi, cs, 1) display.brightness(10) #Formatiert einen Gleitkommawert #auf maximal 4 Zeichen vor und 2 Zeichen #nach dem Komma. def formatValue(value): return str("{:4.2f}".format(value)+" cm") #Ermittelt einen Abstandswert def readUltrasonicSensor(trigger, echo): trigger.low() utime.sleep_us(2) trigger.high() utime.sleep_us(5) trigger.low() signaloff = 0 while echo.value() == 0: signaloff = utime.ticks_us() signalon = 0 while echo.value() == 1: signalon = utime.ticks_us() timepassed = signalon - signaloff return (timepassed * 0.0343) / 2 #Zeichnet ein Rechteck #auf die 8x8 LED Matrix def displayRect(size): display.fill(0) if size == 1 : display.rect(0,0,8,8,1) elif size == 2: display.rect(1,1,6,6,1) elif size == 3: display.rect(2,2,4,4,1) elif size == 4: display.rect(3,3,2,2,1) elif size == 5: display.rect(2,2,4,4,1) elif size == 6: display.rect(1,1,6,6,1) elif size == 7: display.rect(0,0,8,8,1) display.show() #Ermittelt aus zwei Gültigkeitsbereichen #einen Wert. Wird für die ermittlung des #zu zeichnenden Rechtecks benötigt. def map(value, fromLow, fromHigh, toLow, toHigh): return round((value - fromLow) * (toHigh - toLow) / (fromHigh - fromLow) + toLow) #Funktion welche fortlaufend ausgeführt wird def main(): global sensorValue while True: sensorValue = readUltrasonicSensor(sensorTrigger, sensorEcho) rectSize = map(sensorValue,5,30,1,7) #Fallback für den Fall das die Funktion map einen #Wert kleiner 1 oder größer 7 liefert. if rectSize < 1: rechtSize = 1 elif rectSize > 7: rectSize = 7 displayRect(rectSize) print("Ultraschall-Sensor: " + formatValue(sensorValue)) sleep(0.125) #ausführen der Funktion main main()
Wenn du den Code auf der Schaltung ausführst, dann kannst du mit einer geraden Fläche vor dem Ultraschallabstandssensor den Abstand verringern und dieses wird auf der 8×8 LED Matrix angezeigt.