Construire un Cylindre POV Époustouflant avec Arduino Due – Guide Pas à Pas
Composants et fournitures
| Arduino Due | ×1 |
| Module Bluetooth HC-06 | ×1 |
| Bande LED RGB LPD8806 1 m (60 LEDs/m, 30 ICs/m, IP20) | ×1 |
| Régulateur linéaire à sortie ajustable | ×1 |
| Double amplificateur opérationnel Texas Instruments | ×1 |
| Résistance 20 kΩ | ×3 |
| Résistance 220 Ω | ×1 |
| Résistance 1 kΩ | ×2 |
| Transistor NPN à usage général | ×1 |
| Condensateur 1000 µF | ×1 |
| Condensateur 100 nF | ×1 |
| Condensateur 1 µF | ×1 |
| Résistance 240 Ω | ×1 |
| Résistance d'ajustement 1 kΩ | ×1 |
| Émetteur IR (générique) | ×1 |
| Récepteur IR (générique) | ×1 |
| Plaque d'essai (breadboard) | ×1 |
| Cylindre en polystyrène (Ø 20 cm, hauteur 10 cm) | ×2 |
| Moteur électrique 12 V, XDRIVE 545-1 | ×1 |
| Couronne dentée 60 dents, 8 mm | ×1 |
| Couronne dentée 12 dents, 3,2 mm | ×1 |
| Courroie crantée, 80 dents, 6 × 200 mm | ×1 |
| Barre filetée M8, 125 mm | ×3 |
| Barre filetée M8, 330 mm (utilisée comme arbre) | ×1 |
| Bague de contact ASL9017 | ×1 |
| Ruban adhésif noir (48 mm) | ×1 |
| Disque en contreplaqué (Ø 150 mm, épaisseur 10 mm) | ×2 |
| Disque en aluminium (Ø 200 mm, épaisseur 2,5 mm) | ×2 |
Outils et machines nécessaires
- Fer à souder
- Scie à chantourner
- Perceuse à colonne
- Alimentation de laboratoire
- Ordinateur portable sous Windows 10
Applications et services en ligne
- Microchip Studio (développement logiciel Arduino)
- Arduino IDE (alternative à Atmel Studio)
- Cygwin (environnement Linux sous Windows pour le programme de contrôle PC)
- Microsoft Visual Studio 2015 (interface graphique)
À propos du projet
Introduction
C'est mon premier projet Arduino. Il s'inspire de plusieurs projets de makers ayant réalisé des affichages à persistance rétinienne (POV) [2,3,4].
La persistance rétinienne (POV) est l'illusion d'optique par laquelle plusieurs images discrètes se fondent en une seule image dans l'esprit humain, censée expliquer la perception du mouvement au cinéma et dans les films d'animation [1].
Les projets [2,3,4] implémentent des affichages globulaires POV, utilisant des LEDs discrètes et des registres à décalage. Mon dispositif utilise quant à lui un cylindre rotatif et des bandes LED RGB du commerce comme affichage POV.
Caractéristiques principales
- Affichage POV (Persistence of Vision)
- Affichage d'images GIF animées sur un cylindre rotatif
- Stockage des images GIF dans la RAM ou la Flash de l'Arduino
- Communication avec PC via Bluetooth
Vue technique
- Diamètre du cylindre : 200 mm
- Hauteur du cylindre : 200 mm
- Matériau : polystyrène
- Poids : 420 g
- 4 bandes LED RGB basées sur LPD8806
- Résolution d'affichage : 151 × 40 pixels
- Basé sur Arduino Due
- Module Bluetooth HC-06 inclus
- Contrôle via Bluetooth depuis un PC
Construction mécanique
La construction mécanique est illustrée dans le dessin ci-dessous.

L'appareil comprend un châssis et un rotor. Le châssis est constitué de deux disques en contreplaqué circulaires reliés par trois barres filetées, espacés de 120 mm. Au centre se trouvent deux roulements à billes et l'arbre (aussi une barre filetée). L'arbre est entraîné par un moteur électrique via deux couronnes dentées et une courroie crantée. La vitesse de rotation atteint 1300 tr/min (22 Hz).
Le rotor comprend deux cylindres en polystyrène et deux disques circulaires en aluminium. Les cylindres sont collés sur le disque inférieur. Le disque supérieur est amovible et sert à fixer le rotor sur l'arbre.

L'électronique est logée dans la partie supérieure du rotor :
- Carte Arduino Due
- Shield maison pour Arduino Due
- Carte d'alimentation
- Module Bluetooth HC-06

L'alimentation (7,5 V) est acheminée vers la carte d'alimentation via des contacts glissants et une bague de contact.
Quatre bandes LED totalisant 40 LEDs RGB sont utilisées, reliées par câbles au shield Arduino.

Les quatre bandes sont disposées comme indiqué ci-dessous. En utilisant quatre bandes décalées, la distance sur l'axe Y entre les LEDs est divisée par 4. La distance sur l'axe X est gérée par logiciel. Le logiciel met à jour les 40 LEDs 151 fois par tour. La grille du dessin correspond aux pixels visibles.
Circuit électronique
Le circuit électronique est présenté dans le schéma PDF joint.
La carte d'alimentation intègre un régulateur de tension LM317. La tension d'entrée est de 7,5 V, la sortie de 4,6 V. Ce régulateur alimente l'Arduino Due et les bandes LED.
Un shield maison pour l'Arduino contient les connecteurs vers les bandes LED et le circuit du récepteur IR. Ce récepteur détecte la position du rotor et est connecté à une entrée timer/interruption de l'Arduino.
Quatre bandes LED nommées STRIP0 à STRIP3 sont utilisées. Chaque bande comporte 5 drivers LPD8806 et 10 LEDs RGB. STRIP0 est connecté à USART0 et STRIP1 à USART1, tous deux en mode SPI. STRIP2 et STRIP3 sont montées en série et pilotées par l'interface SPI de l'Arduino.
Pour la communication PC, un module Bluetooth HC-06 est connecté à USART3, alimenté par le 3,3 V de l'Arduino.
Logiciel Arduino
Le logiciel se compose du programme principal (mpc.ino) et des bibliothèques suivantes :
- bt – Driver pour module Bluetooth
- LDP8806 – Driver pour bandes LED
- MemoryFree – Détection de la RAM libre
- mpcgif – Lecture de fichiers GIF en RAM ou Flash
- pictures – Images GIF internes stockées en Flash
- trace – Fonctions de débogage
L'affichage périodique des images sur les bandes LED est piloté par interruptions. Deux tampons d'image (frame buffers) sont utilisés. Chaque tampon contient une image de 40 × 151 pixels, chaque pixel étant un index de palette de couleurs sur un octet. Pendant qu'un tampon est envoyé aux LEDs via interruption et DMA, l'autre est préparé par le programme principal (décodage GIF). La bascule entre tampons est gérée par la routine d'interruption de trame.
Une interruption de trame par tour est déclenchée par le capteur IR. Elle mesure la vitesse de rotation (via un timer matériel) et programme des interruptions de colonne (150 par tour) avec un timer matériel. La routine d'interruption de colonne envoie la colonne courante aux bandes LED. Pour les performances, la sortie utilise trois canaux DMA fonctionnant en parallèle.
Le code source complet est disponible sur GitHub.
Programme de contrôle PC
Le programme de contrôle PC (pccp) est un outil en ligne de commande C++ s'exécutant sous Cygwin, communiquant avec l'Arduino via Bluetooth. Il permet de contrôler le cylindre POV avec des commandes à un caractère :
- 0-7 – Remplir l'écran avec une couleur (noir, rouge, jaune, vert, cyan, bleu, violet, blanc)
- t – Dessiner une courbe triangulaire (test)
- s – Activer/désactiver la rotation de l'image affichée
- r – Dessiner une seule ligne
- c – Dessiner une seule colonne
- y – Lire une image GIF interne stockée en Flash
- f – Télécharger un fichier GIF externe depuis le PC via Bluetooth
- x – Lire le fichier GIF externe téléchargé
Le pccp offre aussi une interface vers une interface graphique, et affiche la vitesse de rotation (Hz et µs) ainsi qu'un compteur de trames.
Le code source complet est sur GitHub.
Interface graphique utilisateur
L'interface graphique est une application universelle Windows. Elle permet de sélectionner le fichier GIF à afficher. Elle dérive de l'exemple FilePicker des « Microsoft Windows Universal Samples » [5].

Le code source complet est sur GitHub.
Références
- https://en.wikipedia.org/wiki/Persistence_of_vision
- RGB LED GLOBE - POV - 40 x 200
- POV Globe Display RGB
- POV Globe Display RGB - Description du projet (en allemand)
- https://github.com/Microsoft/Windows-universal-samples
Code source
- Code Arduino pour cylindre POV
- Programme de contrôle PC (C++ sous Cygwin)
- Interface graphique (Windows Universal App)
Schémas
Le schéma électronique est disponible dans la section schémas.
Processus de fabrication
- Horloge POV Arduino : Construire un affichage LED à persistance rétinienne
- Construire un oscilloscope Arduino 20 kHz sur écran Nokia 5110 – Guide DIY facile
- Stores intelligents : contrôle automatisé de la lumière avec Arduino et énergie solaire
- Construire un jeu Tic-Tac-Toe tactile sur Arduino Due
- Construire une Tirelire Intelligente : Contrôler un Accepteur de Pièces avec Arduino Nano
- Horloge à Mots Italienne avec Arduino Nano, NeoPixel, LCD et RTC
- Contrôler une LED par Bluetooth avec Arduino et MIT App Inventor
- Capteur d'obstacle IR simple avec Arduino — LED IR + Photodiode
- Circuit d'entrée analogique isolée pour Arduino : Protection contre les parasites industriels