Die hier vorgestellte Uhr basiert auf einem Paspberry Pi Pico-Mikrocontroller und einem LED-Ring bestehend aus 24 Neopixel-LEDs, auf dem die Uhrzeit analog anzeigt wird. Das Programm ist vollständig in der Programmiersprache Python implementiert und baut auf Micropython auf.
Die Uhr ermittelt beim Starten die aktuelle Uhrzeit über eine API (application programming interface) eines Zeitservers (https://timeapi.io). Zusätzlich findet einmal täglich eine Synchronisierung statt.
Das Ziffernblatt zeigt Stundenmarkierungen in blau an, die Stunden 3, 6, 9 und 12 werden heller dargestellt. Ein roter Punkt zeigt die Stunde, ein grüner die Minute und ein weißer die Sekunde an. Der Sekundenzeiger ändert dabei im Sekundentakt die Helligkeit. Werden Stunde und Minute von dem gleichen Punkt dargestellt, so wechselt die Farbe der LED jede Sekunde zwischen rot und grün.
Die Hardware ist eine selbstentwickelte Schaltung. Sie ermöglicht Eingaben über zwei Taster, einen vierpoligen DIP-Schalter und ein Trimm-Potentiometer. Ausgaben können optisch auf 24 ringförmig angeordneten LEDs angezeigt werden sowie akustisch über einen Piezo-Summer erfolgen. Die Steuerung erfolgt über einen Mikrocontroller vom Typ Raspberry Pi Pico-W, der ein WiFi-Modul besitzt und somit über WLAN kommmunizieren kann.
Für die LED-Ring-Uhr werden nicht alle Ein-/Ausgabekomponenten benötigt. Die Schaltung ist so ausgelegt, dass sie auch für andere Anwendungen genutzt werden kann (siehe Abschnitt "Weitere Projekt-Ideen").
Basisplatine:
Anzeige:
Stromversorgung:
Gehäuse:
Anschluss | Pin | Nutzung |
---|---|---|
Versorgungsspannung | ||
VBUS | 40 | Anschlussklemme VCC |
GND | 38 | Anschlussklemme GND |
Taster | ||
GPIO 0 | 1 | Taster links |
GND | 3 | Taster links GND |
GPIO 15 | 20 | Taster rechts |
GND | 18 | Taster rechts GND |
DIP-Schalter | ||
GPIO 19 | 25 | DIP-Schalter 1 |
GPIO 20 | 26 | DIP-Schalter 2 |
GPIO 21 | 27 | DIP-Schalter 3 |
GPIO 22 | 29 | DIP-Schalter 4 |
GND | 23 | DIP-Schalter GND |
Potentiometer | ||
3,3V | 36 | Potentiometer Außenkontakt rechts |
ADC 2 (GPIO 28) | 34 | Potentiometer Abgriff |
AGND | 33 | Potentiometer Außenkontakt links |
LED-Ring | ||
GPIO 2 | 4 | LED-Ring IN |
GND | 38 | LED-Ring GND |
VBUS | 40 | LED-Ring VCC |
Piezo-Summer | ||
GPIO 16 | 21 | Piezo-Summer |
GND | 23 | Piezo-Summer GND |
Thonny ist ein kostenloses Entwicklungsprogramm für den PC, das von einem unabhängigen Entwickler namens Thonny erstellt wurde. Es handelt sich um eine integrierte Entwicklungsumgebung (IDE) mit Open-Source-Code, die verwendet werden kann, um verschiedene Anwendungen mit der Programmiersprache Python zu erstellen.
Bildquelle: https://thonny.org/img/screenshot.png
Download:
Installation:
C:\PortableApps\Thonny
anlegenC:\PortableApps\Thonny
kopierenTools
→Options…
im Reiter General
bei Language
aus der Liste Deutsch
auswählenExtras
→Optionen…
im Reiter Interpreter
aus der Liste MicroPython (Raspbeery Pi Pico)
auswählenExtras
→Optionen…
im Reiter Themes & Schriftart
beide Schriftgrößen auf 8
setzenDie Nutzung von Microsoft Visual Studio Code (VSC) ist zwar sehr komfortabel, aber erfordert aber eine längere Einarbeitung. Außerdem ist die Anbindung an den Raspberry Pi Pico noch in einem experimentellen Stadium.
Download:
Installation:
C:\PortableApps\VisualStudioCode
anlegenC:\PortableApps\VisualStudioCode
kopierenGerman Language Pack for Visual Studio Code
suchen, diese installieren und VSC neu starten (https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-de)Datei → Einstellungen → Design → Farbdesing
den Eintrag Hell (Visual Studio)
wählenErweiterung für den Pico installieren:
MicroPico
suchen, diese installieren und den Anweisungen folgen (https://marketplace.visualstudio.com/items?itemName=paulober.pico-w-go)
Die Erweiterung MicroPico
wurde umbenannt. Frühere Versionen hießen Pico-W-Go
. Man findet daher in vielen Beschreibungen im Internet immer mal auch diese Bezeichnung.
Öffnen/Anlegen eines Projektordners:
Datei → Ordner öffnen
öffnen oder einen neuen Ordner mit Datei → Ordner öffnen → Neuer Ordner
anlegenZum Pico verbinden (der Pico muss über das USB-Kabel angeschlossen sein):
Pico Disconnected
/ Pico Connected
Run
/ Stop
Reset
All Commands
Toggle Pico-W-FS
Anlegen eines VSC-Projekts (einmalig):
Datei → Ordner öffnen …
den Projektordner öffnenAll Commands
anklickenMicroPico: Configure project
auswählen, um ein Projekt anzulegen. Hierdurch werden der Ordner .vscode
und die Datei .micropico
angelegtHochladen aller Dateien auf den Pico:
All Commands
anklickenMicroPico: Delete all files from board
auswählen, um alle vorhandenen Dateien auf dem Pico zu ladenMicroPico: Upload project to Pico
auswählen, um alle Dateien in dem Ordner auf den Pico zu ladenReset
anklicken, um sicherzustellen, dass die neu geladenen Dateien genutzt werdenHochladen einer einzelnen Dateien auf den Pico:
Upload current file to Pico
auswählenReset
anklicken, um sicherzustellen, dass die neu geladene Datei genutzt werdenProgramm auf dem Pico starten:
Run
anklickenProgramm anhalten:
Stop
anklickenHow To's:
MicroPython ist eine schlanke und effiziente Implementierung der Programmiersprache Python 3, die eine Teilmenge der Python-Standardbibliothek enthält und für die Ausführung auf Mikrocontrollern und in eingeschränkten Umgebungen optimiert ist.
Aktuell genutze Version ist MicroPython Pico W v1.24.1(2024-11-29).uf2
Das Software für die LED-Ring-Uhr ist in der Programmiersprache Python geschrieben. Python ist eine einfach zu lernende, aber mächtige Programmiersprache mit effizienten abstrakten Datenstrukturen und einem einfachen, aber effektiven Ansatz zur objektorientierten Programmierung. Durch die elegante Syntax und die dynamische Typisierung ist Python als interpretierte Sprache sowohl für Skripte als auch für schnelle Anwendungsentwicklung hervorragend geeignet.
Download von Python:
Installation von Python:
Add Python to PATH
ticked to add Python to path.Der Quellcode ist in zwei Bereiche aufgeteilt. Die Applikationsdateien bilden die notwendigen Funktionen und Klassen für die Steuerung der LED-Ring-Uhr ab. Die Bibliothesdateien stellen Hilfsfunktionen und -klassen zur Verfügung, die allgemeiner Natur sind und somit auch in anderen Projekten genutzt werden können (siehe Abschnitt "Weitere Projekt-Ideen").
clock/mainClock.py
: Steuerung des Programmablaufsclock/ClockTime.py
: Berechnung der Uhrzeitclock/LedRingClockDisplay.py
: Anzeige der aktuellen Uhrzeit auf dem LED-Ringclock/secrets.py
: Zugangsdaten für das Wireless-LANlib/Button.py
: Auslesen der Tasterlib/Buzzer.py
: Ansteuerung des Piezosummerslib/DipSwitch.py
: Auslesen der DIP-Schaltereinstellunglib/LedRing.py
: Ansteuerung des LED-Ringslib/PicoWlan.py
: enthält die Zugangsdaten für das Wireless-LANlib/Potentiometer.py
: Auslesen der Potentiometerstellunglib/mymachine.py
: Instanziierung der konkreten Hardwarekomponentenlib/TimeApiIo.py
: Holen der aktuellen Uhrzeit von einem Zeitserverlib/Timer.py
: Hilfsfunktionen für Steuerung des zeitlichen AblaufsDer vollständige Quellcode ist unter Git-Versionskontrolle und in folgendem GitLab-Repository abgelegt:
Für der Zugriff auf das Repository ist der Besitz eines passenden Accesstokens erforderlich! Mithilfe des Programms curl
kann dann die entsprechende Version heruntergeladen werden. glpat-XXXXXXXXXXXXXXXXXXXX
muss hierfür durch de entsprechenden Token ersetzt werden, sha=vX.X.X
wird auf die gewünschte Version gesetzt, z.B. sha=v0.0.1
.
Der Befehl in der Kommandozeile lautet:
curl --header "Private-Token: glpat-XXXXXXXXXXXXXXXXXXXX" https://gitlab.com/api/v4/projects/52515253/repository/archive.zip?sha=vX.X.X --output led-ring-uhr.zip
Die Quellcodes der Softwareversion werden dann in ein Archiv mit dem Namen led-ring-uhr.zip
heruntergeladen.
Zur Zeit kann über folgenden Link eine erste Prototypversion des Quellcodes heruntergeladen werden: Quellcode Version 0.0.1
Die selbstentwickelte Softwarebibliothek abstrahiert die bereitgstellten Komponenten der Hardwareschaltung und ermöglicht so die einfache Nutzung dieser. Desweiteren werden mehrere Hilfsklassen und -funktionen zur Verfügung gestellt.