Analog-Style LED Persistence-of-Vision Uhr – DIY Arduino Nano Projekt
Benötigte Komponenten
| Arduino Nano R3 | × | 1 |
| LED (generic) | × | 17 |
| Hall-Effekt-Sensor | × | 1 |
| Widerstand 100 Ω | × | 17 |
| DC-Motor (generic) | × | 1 |
| Boost/Step-Up Wandler (Fixed) | × | 1 |
Werkzeuge
- Lötkolben
Software
- Arduino IDE
Funktionsprinzip: Persistence of Vision (POV)
POV-Displays nutzen die Nachbildwirkung des menschlichen Auges. Eine rotierende LED-Leiste zeigt nacheinander Bildzeilen an – das Gehirn setzt sie zu einem stehenden Bild zusammen. Hier: 16 LEDs auf einem rotierenden Arm + 1 LED für den inneren Kreis.
LED-Gruppierung
- LED 1–11 (D2–D12): Stunden-/Minuten-/Sekundenzeiger (verschiedene Längen)
- LED 12–13 (A1–A2): Viertelstunden-Markierungen (3, 6, 9, 12 Uhr)
- LED 14–15 (A3–A4): Stunden-Markierungen (alle 5 Min)
- LED 16 (A5): Minuten-Markierungen (alle 1 Min)
- LED 17 (A0): Hall-Sensor-Eingang (Referenzposition)
Mechanik & Stromversorgung
- 12V DC-Motor an Labornetzgerät (Drehzahl einstellbar)
- Li-Ion-Akku + Step-Up-Wandler für Arduino + LEDs
- Wichtig: Akku im Drehzentrum montieren, sonst Vibrationen!
Synchronisation
Hall-Sensor + Magnet am festen Teil detektiert jede Umdrehung → Referenzpunkt (12-Uhr-Position). Im Code: Warten auf Hall-Signal, dann 60 Sektoren (Minuten) durchlaufen mit delayMicroseconds für Pixelbreite und Lücken.
Code
// ArduinoNanoPropellerLEDAnalogClock
int LED[16] = {2,3,4,5,6,7,8,9,10,11,12,A1,A2,A3,A4,A5};
int sensorPin = A0;
unsigned long previousTime = 0;
byte hours = 12, minutes = 15, seconds = 0;
void setup() {
for (int i=0; i<16; i++) pinMode(LED[i], OUTPUT);
pinMode(sensorPin, INPUT_PULLUP);
if (hours == 12) hours = 0;
}
void loop() {
// Auf Hall-Sensor (LOW = Magnet erkannt)
int val = digitalRead(sensorPin);
while (val == LOW) val = digitalRead(sensorPin);
// Uhrzeit hochzählen (jede Sekunde)
if (millis() >= previousTime) {
previousTime += 1000;
if (++seconds == 60) { seconds = 0; if (++minutes == 60) { minutes = 0; if (++hours == 12) hours = 0; } }
}
// 60 Sektoren (Minutenpositionen) anzeigen
int propeller_posn = 30; // Startoffset
for (int n=0; n<60; n++) {
drawMinuteMarker(); // LED16: jeder Minutenstrich
if (propeller_posn % 5 == 0) drawHourMarker(); // LED14+15: Stundenstriche
if (propeller_posn % 15 == 0) drawQuarterMarker(); // LED12+13: Viertelstunden
if (propeller_posn == hours*5 || (propeller_posn==0 && hours==0)) drawHoursHand(); // LED1-7
if (propeller_posn == minutes) drawMinutesHand(); // LED1-9
if (propeller_posn == seconds) drawSecondsHand(); // LED1-11
delayMicroseconds(140); // Pixelbreite (an Motordrehzahl anpassen!)
displayClear();
drawInner_Circle(); // LED1 kurz für Mittelpunkt
delayMicroseconds(600); // Lücke zwischen Pixeln
propeller_posn++;
if (propeller_posn == 60) propeller_posn = 0;
val = digitalRead(sensorPin);
while (val == HIGH) val = digitalRead(sensorPin);
}
}
// Hilfsfunktionen: displayClear, drawMinuteMarker, drawHourMarker, drawQuarterMarker,
// drawHoursHand, drawMinutesHand, drawSecondsHand, drawInner_Circle
// (siehe Originalcode für Details)
Einstellung der Timing-Werte
delayMicroseconds(140) und delayMicroseconds(600) hängen von der Motordrehzahl ab. Langsamer Motor → Werte erhöhen, schnellerer Motor → Werte verringern. Am besten per Try-and-Error einstellen bis das Bild stabil steht.
Schaltplan
Siehe Bild: 16 LEDs an D2–D12, A1–A5 mit je 100Ω an GND. Hall-Sensor an A0 (Pullup). Motor extern, Step-Up für Arduino-Versorgung.
Herausforderungen
- Mechanische Stabilität (Wuchtung, Schwerpunkt im Drehzentrum)
- Timing-Abgleich Code ↔ Motordrehzahl
- Kameraaufnahme schwierig (Rolling Shutter, fps) – Live wirkt es perfekt
Herstellungsprozess
- LED-Sequenzer mit 555-Timer & 4017-Zähler bauen – Frequenzteilung & Entprellung
- Kuckucksuhr: Geschichte, Handwerkskunst und moderne Evolution
- Eigenen LUMAZOID bauen: DIY Arduino Musik-Visualisierer
- Arduino POV-Uhr: Persistence-of-Vision LED-Display selbst bauen
- Präzise Druck- & Luftstrommessung mit analogem Sensor und Arduino
- 37-LED-Roulette-Spiel mit Arduino Nano bauen – Europäisches Layout
- Einen eigenen LED-Master-Clock mit Alarm bauen – aus 12 Metern Entfernung ablesbar
- 3D RGB Arduclock – Bluetooth-LED-Uhr mit Echtzeituhr
- Kompaktes Trim-Rad für FlightGear mit Arduino Nano
- Interaktive LED-Matrix Tür-Anzeige mit PIR-Bewegungssensor – Arduino Feiertagsgruß