Horloge à persistance rétinienne (POV) style analogique — Arduino Nano 17 LEDs
Principe POV
Une barre de LEDs tournant rapidement affiche une image par balayage angulaire. L'œil intègre les points successifs en une image continue (persistance rétinienne ~1/25 s).
Matériel
- 1 × Arduino Nano
- 17 × LEDs (groupes de couleurs différentes : heures, minutes, secondes, marqueurs)
- 17 × Résistances 100 Ω
- 1 × Capteur à effet Hall (détection position angulaire)
- 1 × Moteur DC 12 V + alimentation variable
- 1 × Convertisseur step-up (Li-ion → 5 V)
- Batterie Li-ion centrée sur l'axe de rotation (stabilité mécanique)
Organisation des LEDs (broches Arduino)
| Groupe | LEDs | Broches | Rôle |
|---|---|---|---|
| Aiguilles | LED1–LED11 | D2–D12 | Heures (7), Minutes (9), Secondes (11) |
| Marqueurs | LED12–LED16 | A1–A5 | Quarts (2), Heures (2), Minutes (1) |
| Cercle intérieur | LED1 (D2) | D2 | Repère central |
Code principal (extrait)
byte hours = 12, minutes = 15, seconds = 0;
unsigned long previousTime = 0;
unsigned int propeller_posn = 30; // position angulaire 0–59
int n = 0;
void loop() {
// Attente front montant Hall (début de tour)
while (digitalRead(A0) == LOW);
while (digitalRead(A0) == HIGH);
// Mise à jour heure chaque seconde réelle
if (millis() >= previousTime) {
previousTime += 1000;
if (++seconds == 60) { seconds = 0; if (++minutes == 60) { minutes = 0; if (++hours == 12) hours = 0; } }
}
// Balayage 60 positions par tour
n = 0; propeller_posn = 30;
while (n < 60) {
drawMinuteMarker(); // LED16
if (propeller_posn % 5 == 0) drawHourMarker(); // LED15+14
if (propeller_posn % 15 == 0) drawQuarterMarker(); // LED13+12
if (propeller_posn == hours * 5) drawHoursHand(); // LED1–7
if (propeller_posn == minutes) drawMinutesHand(); // LED1–9
if (propeller_posn == seconds) drawSecondsHand(); // LED1–11
delayMicroseconds(140); // largeur pixel (ajuster selon vitesse moteur)
displayClear();
drawInner_Circle(); // LED1 pulse 30 µs
delayMicroseconds(600); // espace inter-pixels
n++;
propeller_posn = (propeller_posn + 1) % 60;
}
}
Réglage critique : delayMicroseconds
Les deux valeurs (140 µs et 600 µs) dépendent de la vitesse de rotation. Augmentez pour moteur lent, diminuez pour moteur rapide. Un capteur Hall + aimant sur l'axe donne une référence angulaire précise (top-de-début-de-tour).
Difficultés rencontrées
- Équilibrage mécanique : batterie décentrée → vibrations fortes. Solution : centrer la masse sur l'axe.
- Qualité vidéo : nécessite caméra high-fps pour rendre l'effet POV visible à l'écran.
Évolutions
- Ajout RTC (DS3231) pour heure réelle sans reset.
- Affichage date, température, messages personnalisés.
- Version PCB circulaire intégrée (plus compacte, plus stable).
Processus de fabrication
- Séquenceur LED avec timer 555 et compteur 4017 — Division de fréquence et anti-rebond
- L'Horloge à Coucou : Histoire, Artisanat et Évolution Moderne
- Construisez votre propre LUMAZOID : Visualiseur musical DIY Arduino
- Horloge POV Arduino : Construire un affichage LED à persistance rétinienne
- Dispositif de mesure précis de pression et débit d'air avec capteur analogique
- Créer votre propre jeu de roulette à 37 LED avec Arduino Nano
- Construire une horloge maître LED personnalisée avec alarme – Visible à 12 mètres
- Horloge 3D RGB Arduclock – Montre LED Bluetooth avec horloge temps réel
- Construisez une molette de trim d'élévateur compacte pour FlightGear avec Arduino Nano