Raspberry Pi Pico: Stoppuhr mit Anzeige (TM1637)
Eine eigene Stoppuhr bauen? Wer braucht das schon? Jedes Smartphone hat eine App dafür. Aber das ist nicht in jedem Fall die Lösung. Beispielsweise dann nicht, wenn die laufende Zeit öffentlich auf einem Display oder ähnlich angezeigt werden soll. Hier kann ein Raspberry Pi Pico mit einer externen Anzeige eine Lösung sein.
Folgende Probleme müssen wir lösen:
- Anzeigen der Zeit mit Minuten und Sekunden.
- Starten und Stoppen, sowie zurückstellen auf „00:00“.
- Zähler-Funktion mit Echtzeit-Fähigkeit.
Zum Anzeigen der laufenden Zeit verwenden wir eine 4-fach 7-Segment-Anzeige vom Typ TM1637. Für die Software-seitige Ansteuerung ist eine externe Bibliothek notwendig.
Zum Starten, Stoppen und Zurückstellen der Zeitanzeige verwenden wir einen Taster. Mit einem einfachen Druck starten und stoppen wir den Zähler. Ein langer Tasterdruck stellt die Zeit zurück. Zur Auswertung des Tasters verwenden wir als Hilfsmittel die externe MicroPython-Bibliothek „picozero“.
Für die Echtzeit-Fähigkeit bedienen wir uns der Timer-Funktion von MicroPython, die vom Raspberry Pi Pico unterstützt wird.
Aufbau und Bauteile
Raspberry Pi Pico | TM1637 | |
---|---|---|
Pin 38 | GND | GND |
Pin 36 | VCC +3,3V | VCC |
Pin 27 | GPIO 21 | CLK |
Pin 26 | GPIO 20 | DIO |
Schnell und einfach alle Bauteile zusammen bestellen
MicroPython-Bibliothek für TM1637
Zur Ansteuerung der 7-Segment-Anzeige TM1637 ist eine externe Bibliothek erforderlich, die heruntergeladen und mit dem Dateinamen „tm1637.py“ auf dem Raspberry Pi Pico gespeichert werden muss.
MicroPython-Bibliothek „picozero“ zur Taster-Auswertung
Eine Taster-Betätigung auszuwerten ist nicht ganz so einfach. Unter anderem benötigt man eine Lösung gegen das Prellen des Tasters. Hierfür empfiehlt es sich externe Bibliotheken zu verwenden, um Probleme auszuschließen. MicroPython-Bibliothek „picozero“ macht die Taster-Auswertung einfacher und wird im folgenden Programmcode verwendet.
Hierzu ist die Bibliothek herunterzuladen und mit dem Dateinamen „picozero.py“ auf dem Raspberry Pi Pico zu speichern.
Programmcode
Am Anfang des Programmcodes werden die Bibliotheken geladen und die Anzeige und der Taster initialisiert. Danach wird noch der Startwert für den Zähler definiert (counter). Der Wert ist die Anzahl in Sekunden. Bei einer Stoppuhr ist der Startwert „0“.
In dieser Lösung wird nur die Anzahl der vergangenen Sekunden gezählt. Erst bei der Darstellung der Zeit, wird aus der Anzahl der Sekunden die Minuten und Sekunden berechnet. MicroPython hat dafür eine eigene Funktion.
Wie können wir die Echtzeit-Fähigkeit des Zählers gewährleisten? Echtzeit bedeutet, dass eine Sekunde auch wirklich eine Sekunde dauert oder vergeht. Wenn wir also Sekunden zählen wollen, dann bedarf es einer Zeitlösung, die auch wirklich sekundengenau ist. Die einzige zuverlässige Lösung ist ein Hardware-Timer oder eine Echtzeituhr, die jede Sekunde eine Funktion auslöst, den Zähler hochzählt, die Anzeige ändert und zeitabhängige Funktionen ausführt.
Dann brauchen wir noch eine Auswertung für den Taster. Damit wollen wir den Zähler starten, stoppen und auf 0 bzw. die Anzeige auf „00:00“ zurückstellen. Starten und Stoppen geht mit einem einfachen Tasterdruck. Durch einen längeren Tasterdruck wird nach dem loslassen der Zähler zurückgestellt.
# Bibliotheken laden from machine import Pin, Timer from picozero import Button import time import tm1637 # Display TM1637 initialisieren display = tm1637.TM1637(clk=Pin(21), dio=Pin(20)) # Taster initialisieren button = Button(15) # Startwert der Stoppuhr counter = 0 # Funktion: Ausgabe auf dem Display def outputDisplay(counter, points): # Zähler in Minuten und Sekunden umrechnen und anzeigen timeValue = time.localtime(counter) secs = timeValue[5] if counter >= 3600: mins = int(counter/60) else: mins = timeValue[4] display.numbers(mins, secs, points) # Funktion: Herunterzählen und zeitabhängige Bedingungen def count(value): global counter global points global run # Blinkender Doppelpunkt im Wechsel if points == 0: points = 1 else: points = 0 # Zähler erhöhen counter += 1 # höchster darstellbarer Wert erreicht if counter == 5940: clock.deinit() run = 0 points = 1 print('Ende') # Ausgabe auf dem Display outputDisplay(counter, points) # Funktion: Start-Auswertung def buttonPressed(): global run global start if run == 0: start = time.ticks_ms() # Funktion: Stop- und Rücksetz-Auswertung def buttonReleased(): global start global run global counter if run == 1: clock.deinit() run = 0 outputDisplay(counter, 1) print('Stop') else: diff = time.ticks_ms() - start #print('Diff:', diff) if diff < 1000: clock.init(freq=1, mode=Timer.PERIODIC, callback=count) run = 1 print('Start') else: counter = 0 outputDisplay(counter, 1) print('Reset') # Countdown läuft (1) / läuft nicht (0) run = 0 # Doppelpunkt points = 1 # Initialisierung Timer für Countdown clock = Timer() # Ausgabe auf dem Display outputDisplay(counter, points) print('Taster drücken zum Starten, Stoppen und Gedrückt halten zum Zurücksetzen') # Taster-Steuerung button.when_pressed = buttonPressed button.when_released = buttonReleased
Darf es ein bisschen mehr sein?
Tolle Lösung, oder? Naja, das war jetzt nicht besonders spannend. Aber wie wäre es, wenn die Stoppuhr nicht lokal per Taster, sondern über das WLAN per Browser bedient wird?
Weitere verwandte Themen:
- Raspberry Pi Pico: 4-fach 7-Segment-Anzeige programmieren (TM1637)
- Raspberry Pi Pico: Digitale Uhr mit Anzeige (TM1637)
- Raspberry Pi Pico: Countdown mit Zeitanzeige (TM1637)
Frag Elektronik-Kompendium.de
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.
- LED: Einschalten, ausschalten, blinken und Helligkeit steuern
- Taster: Entprellen und Zustände anzeigen
- LED mit Taster einschalten und ausschalten
- Ampel- und Lauflicht-Steuerung
- Elektronischer Würfel
- Eigene Steuerungen programmieren
Online-Workshop: Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Für Ihre Fragen zu unseren Online-Workshops mit dem Raspberry Pi Pico besuchen Sie unseren PicoTalk (Online-Meeting). (Headset empfohlen)