In diesem Beitrag zum Raspberry PI Pico, möchte ich dir zeigen wie du dir einen kleinen LED-Würfel bauen kannst.
Schaltung
Aufbau auf einer Lochrasterplatine
Das Projekt baue ich auf einer Lochrasterplatine auf. Du kannst das natürlich auch auf einer Streifenrasterplatine aufbauen jedoch musst du hier die Leiterbahnen unterbrechen und dieser Schritt entfällt bei einer Lochrasterplatine.
Für den Aufbau benötigst du folgende elektrische Bauteile:
- sieben LEDs, 5 mm* **,
- sieben 220 Ohm-Widerstände*,
- einen 10 kOhm Widerstand*,
- einen Taster für die Printmontage*,
- zwei 20 Pin Buchsenleisten* ***,
- eine Lochrasterplatine*
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!
** Die LEDs kaufe ich bei aliexpress.com im 100er-Pack für knapp 1,5 € inkl. Versandkosten.
*** Die Buchsenleisten in 20 Pin sind recht teuer, du kannst dir auch welche in 40 Pin kaufen und diese mit einem Seitenschneider vorsichtig trennen. Jedoch gehen beim Trennen min. eine Buchse kaputt d.h. du benötigst zwei 40 Pin Buchsenleisten.
Werkzeuge
Folgende Werkzeuge habe ich verwendet:
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!
Die Werkzeuge benötigst zu bestimmt auch für andere Projekte daher lohnt es sich den ein oder anderen Euro mehr zu investieren um dann zum Beispiel einen vernünftigen Lötkolben zu haben, welcher zuverlässig funktioniert!
Die Abbiegevorrichtung für Widerstände, bekommst du bei ebay.de für knapp 3,5€ zzgl. Versandkosten. Du kannst dir diese aber auch mit einem 3D Drucker selber drucken (3D Projekt auf Thingiverse.com).
Unter dem Abschnitt “Schaltung” findest du auch die Belegung der LEDs und dem Taster zu GPIO Pins.
Wie man eine (oder mehrere) LED am Raspberry PI Pico anschließt habe ich dir im Beitrag Raspberry PI Pico #2 – LEDs steuern erläutert. Und wie du einen Taster am auswertest findest du im Beitrag xyz.
Programm
Wie man am Raspberry PI eine LED an & aus schaltet habe ich dir bereits im Beitrag Raspberry PI Pico #2 – LEDs steuern erläutert. In unserem Programm verwenden wir 7 LEDs und zusätzlich einen Taster welcher über einen Pulldown Widerstand angeschlossen ist. Wie du einen Taster am Raspberry PI Pico anschließt und und auswertest habe ich dir im gelichnamigen Beitrag ausführlich erläutert Raspberry PI Pico #4 – Taster mit PullDown & PullUp abfragen.
importieren der benötigten Module
Wir benötigen lediglich zwei Module, zum einen “machine” damit wir die GPIOs steuern können und das Modul “random” damit wir eine Zufallszahl generieren können.
#wird benötigt um die GPIOs anzusteuern from machine import Pin #benötigen wir um eine Zufallszahl zu generieren import random
definieren der GPIOs
Damit wir später den Taster & die LEDs ansteuern können müssen wir uns ein paar Variablen anlegen mit “button” & “led1” bis “led7”. Der Taster wird als Eingangssignal definiert und die LEDs als Ausgangssignal.
#der Taster ist am GPIO 00 angeschlossen button = Pin(0, Pin.IN) #die LEDs sind auf dne GPIOs 01 bis 07 led1 = Pin(1, Pin.OUT) led2 = Pin(2, Pin.OUT) led3 = Pin(3, Pin.OUT) led4 = Pin(4, Pin.OUT) led5 = Pin(5, Pin.OUT) led6 = Pin(6, Pin.OUT) led7 = Pin(7, Pin.OUT)
Tupel mit Listen für die Augenzahlen am Würfel
Um später die Würfelaugen anzuzeigen erzeugen wir uns ein Tupel (eine Art Liste) mit den möglichen Augenzahlen. Der Vorteil ist dass, wir mit einer Schleife durch diese Liste iterieren können und so unser Code deutlich schlanker wird.
numbers = ( [led4], #Zahl 1 [led1, led7], #Zahl 2 [led1, led4, led7], #Zahl 3 [led1,led3, led5, led7], #Zahl4 [led1, led3, led4, led5, led7], #Zahl 5 [led1, led2, led3, led5, led6, led7]) #Zahl 6
zurücksetzen der LEDs
Bevor wir eine neue Zahl anzeigen können müssen wir erstmal alle LEDs zurücksetzen dazu dient die Funktion “resetLeds”.
In dieser Funktion setzen wir die Zustände der LEDs (value) auf 0 also LOW / AUS.
def resetLeds(): led1.value(0) led2.value(0) led3.value(0) led4.value(0) led5.value(0) led6.value(0) led7.value(0)
anzeigen von Augenzahlen
Um die Augenzahl anzeigen zu lassen dient die Funktion “showNumber”. Dieser Funktion wird eine Liste mit GPIOs übergeben. In einer Schleife wird dann jeder GPIO aktiviert.
def showNumber(leds): resetLeds() for led in leds: led.value(1)
Tasterdruck auswerten
In einer Endlosschleife prüfen wir ob der Taster gedrückt wurde. Wenn dieser gedrückt wurde dann wird eine Zufallszahl zwischen 1 und 6 ermittelt. Da diese Zahl eine Gleitkommazahl ist runden wir diese. Diese ermittelte Zahl dient als Index zum zuvor definierten Tupel.
while True: if button.value(): number = int(random.uniform(1,6)) showNumber(numbers[number])
ACHTUNG: Ggf. kann unser Taster prellen, d.h. wenn wir einmal draufdrücken kann dieser beim loslassen zwei (oder sogar mehr) Signale senden. Hier müsste man mit einem kleinen Timer arbeiten , aber für den LED Würfel ist das völlig ausreichend.
das gesamte Programm
from machine import Pin import random button = Pin(0, Pin.IN) led1 = Pin(1, Pin.OUT) led2 = Pin(2, Pin.OUT) led3 = Pin(3, Pin.OUT) led4 = Pin(4, Pin.OUT) led5 = Pin(5, Pin.OUT) led6 = Pin(6, Pin.OUT) led7 = Pin(7, Pin.OUT) numbers = ( [led4], #Zahl 1 [led1, led7], #Zahl 2 [led1, led4, led7], #Zahl 3 [led1,led3, led5, led7], #Zahl4 [led1, led3, led4, led5, led7], #Zahl 5 [led1, led2, led3, led5, led6, led7]) #Zahl 6 def resetLeds(): led1.value(0) led2.value(0) led3.value(0) led4.value(0) led5.value(0) led6.value(0) led7.value(0) def showNumber(leds): resetLeds() for led in leds: led.value(1) while True: if button.value(): number = int(random.uniform(1,6)) showNumber(numbers[number-1])
Besten Dank für die tolle Erklärung.
Ich möchte da Programm benutzen, um von einem Soundchip am Ende zufällige Sprüche oder Geräusche abspielen zu lassen. Ich habe, ohne viel Ahnung vom programmieren zu haben, es schon hinbekommen, dass ich nun pro Tastendruck nur eine LED leuchten lassen. Mein Problem ist zum einen das Prellen und zum anderen das ansteuern aller Ausgänge während des Tastendrucks. Hast du eine Idee, wie man das Programm dahingehend modifizieren könnte?
Ideal wäre, wenn jeweils ein Ausgang aktiviert ist während auch der Eingang aktiviert ist und nach abschalten des Eingangs alle Ausgänge deaktiviert sind.
Jetzt, während des Schreibens fällt mir auf, dass ein Würfel gar nicht geeignet ist, da ja immer eine LED aktiv ist. Hast du trotzdem eine Idee?
Mit freundlichem Gruß,
Torsten.
Hi,
schicke mir doch mal eine genaue Erläuterung deines Projektes an info@draeger-it.blog
Gruß
Stefan Draeger
Dat Programm funzt so nich.
Hi,
ich denke du meinst das Array welches mit Index 0 beginnt und ich hier von 1 bis max. 6 zugreife.
Hier habe ich nun den Code angepasst und den Index mit -1 reduziert.
Gruß und Danke für den Hinweis,
Stefan