Globe POV (Persistance Rétinienne) DIY – Art LED avec Arduino Mega & NeoPixel
Principe de la Persistance Rétinienne (POV)
Une LED clignotante à > 50 Hz apparaît allumée en continu. En faisant tourner une rangée de LED à grande vitesse et en allumant chaque LED au bon moment angulaire, on « dessine » une image 2D dans l'espace 3D. Un globe POV utilise deux demi-cercles de LED (58 par demi-cercle = 116 LED totales) montés sur un axe motorisé.
Matériel
| Arduino Mega 2560 (mémoire suffisante pour les patterns) | 1 |
| Anneaux NeoPixel WS2812B 5050 RGB (ou bande découpée) – 116 LED total | 1 |
| Résistance 330 Ω (sur ligne DATA) | 1 |
| Capteur de proximité (effet Hall ou optique) – détection position angulaire | 1 |
| Moteur DC + réducteur (vitesse stable ~ 1000–1500 tr/min) | 1 |
| Roulement à billes 625 2RS (5×16×5 mm) pour l'axe | 1 |
| Pièces imprimées 3D (structure globe, support moteur, capteur) | 1 jeu |
Outils
- Imprimante 3D
- Fer à souder (câblage LED, capteur)
Câblage
- NeoPixel DATA → Pin 6 (via R 330 Ω)
- NeoPixel VCC → 5V alim externe (3–4 A pointe), GND commun
- Capteur proximité → Pin 3 (interruption INT1)
- Moteur DC → Driver MOSFET/PWM sur pin 9–10 (non géré par le code POV, contrôle séparé)
Logiciel – Gestion du timing
Le code utilise :
- Bibliothèque FastLED pour piloter les WS2812B.
- Une interruption matérielle (pin 3, front montant) déclenchée par le capteur à chaque tour → référence angulaire (zéro).
- Un tableau 2D
kalp[40][75](booléens) stockant l'image (cœur, texte, logo…). 40 lignes radiales × 75 colonnes angulaires. - Boucle principale : à chaque tour (flag
hall), balayage des 75 colonnes, mise à jour des 40 LED radiales (offset +7 pour centrer),FastLED.show(), micro-délaiwait(≈ 1–10 µs) pour résolution angulaire.
Sketch principal (d_nya.ino)
#include "FastLED.h"
#define NUM_LEDS 58
#define DATA_PIN 6
CRGB leds[NUM_LEDS];
// kalp[40][75] = patterns (0/1) – défini en dur dans le code source complet
bool kalp[40][75] = { ... }; // voir fichier original
unsigned char i, m;
unsigned int wait = 1; // µs par colonne
unsigned int wait2 = 10; // µs entre frames
byte hall = 0;
void setup() {
FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);
attachInterrupt(1, LEDiyak, RISING); // Pin 3 sur Mega = INT1
for (int i = 0; i < NUM_LEDS; i++) leds[i] = CRGB::Black;
FastLED.show();
}
void LEDiyak() { hall++; if (hall > 2) hall = 0; }
void loop() {
if (hall > 0) {
for (m = 0; m < 75; m++) {
for (i = 0; i < 40; i++) {
leds[i + 7] = kalp[i][m] ? CRGB::Green : CRGB::Blue;
}
FastLED.show();
delayMicroseconds(wait);
}
// Effacement / frame suivante
for (i = 0; i < NUM_LEDS; i++) leds[i] = CRGB::Blue;
FastLED.show(); delayMicroseconds(wait2);
for (i = 0; i < NUM_LEDS; i++) leds[i] = CRGB::White;
FastLED.show(); delayMicroseconds(wait2);
}
}
Création des patterns (images)
Le tableau kalp est généré hors ligne :
- Image cible (ex. 40×75 px, noir/blanc).
- Script Python (PIL/OpenCV) → conversion en tableau C booléen.
- Intégration dans le sketch.
Pour du texte défilant ou animations, pré-calculer une séquence de frames.
Construction mécanique
- Imprimer les deux demi-globes et le moyeu central.
- Insérer la bande NeoPixel dans la rainure du pourtour de chaque demi-globe.
- Monter l'axe sur roulement 625, entraînement par moteur DC + courroie ou direct.
- Positionner le capteur (Hall + aimant sur l'axe, ou optique fourche + drapeau) pour 1 impulsion/tour.
- Équilibrer dynamiquement (masse symétrique) pour éviter vibrations.
Alimentation
116 LED × 60 mA (blanc max) ≈ 7 A ! En pratique, avec motifs partiels et luminosité réduite (FastLED setBrightness(64)), 3–4 A suffisent. Utilisez une LiPo 3S/4S + BEC 5V 5A ou alim secteur 5V 10A. Condensateur 1000 µF 6,3V au plus près des LED.
Améliorations & variantes
- Double rangée de LED (haute/basse) pour résolution verticale doublée.
- Capteur absolu (encodeur magnétique AS5600) pour position angulaire précise sans impulsion unique.
- Contrôle vitesse moteur en boucle fermée (PID) pour stabilité RPM.
- Communication sans fil (ESP32) pour changer d'image à la volée.
- Version « baguette POV » (linéaire) plus simple pour débuter.
Ressources
- Bibliothèque FastLED : GitHub
- Schéma :
schéma.png(inclus dans le projet)
Processus de fabrication
- Horloge POV Arduino : Construire un affichage LED à persistance rétinienne
- Carte de Visite PCB Tic-Tac-Toe 4×4 Personnalisée – Guide de Conception, Fabrication et Programmation
- Système de Capteur de Température Multi-Position pour Intégration Domotique
- Contrôleur DIY pour fer à souder 862D+ — Précision et fiabilité
- MotionSense : Détection d'intrusion intelligente avec Arduino et ESP8266
- Prévention incendie imprimante 3D : Système de sécurité à capteur intelligent
- Construire un affichage à persistance rétinienne portable avec Arduino UNO et ATtiny85
- Créer une jauge IoT connectée au Web avec Arduino, Yaler et IFTTT
- CoroFence : Détecteur Thermique Avancé PIR + Capteur Grid-EYE & IoT