raphnet.net banner
This page is also available in English
Électronique > Leds et persistance rétinienne
Résumé | Version 1 | Version 2 | Version 2.1 | Version 2.2 | Version X | Avertissement
Résumé [cacher]
Dans un article de Make Magazine volume 1 intitulé Glowstick a Go-Go, il était question d'une série de leds affichant momentanément chaque ligne verticale d'une petite image. Lorsqu'on déplace rapidement cette série de leds dans l'espace (avec sa main), l'image est recréée et semble flotter dans le vide.

Moi et mes collègues (voir le blog d'Étienne à www.naid.net) avons trouvé cela très amusant et avons décidé d'expérimenter un peu suivant le même concept.

goto top Retour en haut



Version 1 [cacher]
Rhytme de balayage de l'image fixe, pas de synchronisation. Déplacement manuel.
circuit
J'ai récupéré le circuit imprimé d'un projet précédent qui possédait un MCU Atmega8, un uln2003 et 7 leds rouge haute intensité.

Le MCU utilise sont circuit d'horloge interne. Les 7 leds sont crontrolables via le port D du microcontroleur. Pour controler les leds, il suffit donc simplement d'ecrire dans le PORTD et ensuite d'attendre (ce que j'ai fait avec une simple boucle).

Voici le code (compilé avec avr-gcc):
main1.c

Problèmes, solutions et améliorations possibles:
  • Le texte commence à n'importe quel moment. Il faudrait qu'il débute lorsqu'il y a une accélération.
  • Lorsqu'on agite le circuit manuellement de gauche à droite, le texte apparait renversé une fois sur deux. Il faudrait détecter la direction du mouvement, et inverser le texte si nécéssaire.

goto top Retour en haut



Version 2 [cacher]
Rhytme de balayage de l'image fixe, pas de synchronisation. Déplacement par roue de bicyclette.

Suite a la premiere version de cette expérience, un ami m'a montré une page web ou quelqu'un dessine une image fixe sur une roue de bicyclette, et une autre page ou il y avait du texte autour de la roue. Nous avons donc eu l'idée de fixer notre circuit sur une roue de bicyclette. (Merci à Nic pour la bicyclette :))

Aucun changements au code n'était nécéssaires, mais j'ai changé le texte pour quelques petit pattern style jeux vidéo old school.
on bike on bike2

Problèmes, solutions et améliorations possibles:
  • Le pattern commence à n'importe quel moment, donc il n'apparait jamais au même endroit (sauf lorsque le temps requis pour un tour de roue est égal au temps de balayage du pattern). Il faudrait connaitre la position de la roue. Ceci est réglé dans la version 2.1.
  • Le pattern s'étire ou se contracte selon la vitesse de la roue. Il faudrait calculer la vitesse de la roue et ajuster le rhytme de balayage du pattern en conséquence.

goto top Retour en haut



Version 2.1 [cacher]
Rhytme de balayage fixe, avec synchronisation. Déplacement par roue de bicyclette.

sync Afin que le pattern s'affiche toujours au même endroit, j'ai ajouté un senseur générant une pulsation &agreave; chaque tour. Mon senseur est composé de la bobine d'un relais, d'un aimant et d'un circuit d'amplification.

L'aimant est fixé sur le cadre de la bicyclette, et la bobine dans la roue. A chaque fois que l'aimant passe devant la bobine, une petite pulsation d'une centaine de millivolts est créée par la bobine. Le circuit d'amplification convertit la pulsation en 0-5volts pour que le MCU puisse la recevoir.

Une petite modification au code a du étre effectuée. Maintenant, le MCU attends la pulsation, balaye l'image une fois et attends la suivante:
fixe
Problèmes, solutions et améliorations possibles:
  • Le circuit de synchronisation est gros et un peu complexe. Un senseur hall effect serait plus simple. Solution: Commande digikey...
  • Le pattern s'étire ou se contracte selon la vitesse de la roue. Il faudrait calculer la vitesse de la roue et ajuster le rhytme de balayage du pattern en conséquence.
  • Si on fait un trè long pattern, après un tour complet il se peut que la fin écrase le début. Il faudrait maintenant choisir combien on souhaite avoir de pixels dans un tour, ajuster la vitesse de balayage selon la vitesse de la roue, et améliorer le code.
  • La roue ne tourne pas assez vite pour que l'image soit parfaitement constante. Utiliser plusieurs séries de leds en opposition sur la roue pourrait grandement aider. (Aller à 100Km/h avec ca bicyclette n'est pas une solution réaliste...)

goto top Retour en haut



Version 2.2 [cacher]
Rhytme de balayage fixe, avec synchronisation. Déplacement par roue de bicyclette.

J'ai remplacé les leds rouges "on-board" par des leds verts très brillants montés sur un petit circuit perforée. Cela donne 2 avantages:
  • Ces leds éclairent plus fort, donc meilleure visibilité.
  • Il est maintenant possible d'installer le circuit du MCU plus près du centre de la roue et donc c'est mieux balancé.


J'ai aussi légèrement amélioré le code:
  • Le signal provenant du senseur de position génère maintenant une interruption.
  • Il y a un timer qui incrémente une variable a chaque milliseconde. La valeur de cette variable est sauvegardée et réinitialisée à chaque fois qu'une interruption est causée par le senseur de position. Cela permet de connaitre le temps qu'a duré le dernier tour.
  • Une police d'écriture a été ajoutée.

Grace au nouveau code il est possible de calculer la vitesse de rotation de la roue:

Le temps manquait pour cette fois, mais il sera facile d'afficher la vitesse du vélo dès que la circonférence de la roue sera mesurée...

Problèmes, solutions et améliorations possibles:
  • Les mêmes problèmes que la version 2.1
  • Connaissant la vitesse de la roue, il est maintenant facile d'ajuster le rhytme de balayage selon la vitesse de la roue.

goto top Retour en haut



Version X [cacher]
Cette version n'existe pas encore, c'est seulement un groupe d'idées à explorer, ce qui va probablement engendrer d'autres versions.

Idées pour le code:
  • Utiliser un timer du MCU pour le balayage. Update des leds dans la routine d'interruption du timer (Output Compare). Les données des leds proviendront d'un buffer. Dans cette routine, si la fin du buffer est atteinte le balayage doit reprendre au début.
  • Brancher le senseur de position sur une pin d'interruption externe. Dans la routine d'interruption il faudra rapidement calculer le temps écoulé depuis la dernière interruption, et ajuster le rhytme du timer de balayage en conséquence. Aussi, il faudra forcer le balayage a retourner au début du buffer immédiatement.
  • Pour permettre l'évaluation du temps écoulé, il faudra utilser un autre timer du MCU pour incrementer régulièrement une variable, ou aller lire directement la valeur de comptage de ce timer.Fait dans version 2.2
  • Texte qui défile, affichage de la vitesse dans la roue, animation dynamique selon la vitesse, effets spéciaux...

Idée pour le circuit/installation:
  • Plusieurs séries de leds opposés sur la roue pour permettre un meilleure taux de rafraichissement (image plus fixe).
  • Mettre plus de leds pour une meilleure résolution. Si on veux plus que 8 leds, il faut utiliser plusieurs ports. Est-ce que le temps entre l'écriture dans le premier port et le deuxième va causer une distortion?
  • Essayer avec des leds de plusieurs couleurs contigüs, ajuster le timing pour qu'ils s'allument au méme moment et faire des couleurs.
  • Essayer de faire plusieurs niveaux d'intensités pour les leds.
  • Faire la même chose sur une roue de voiture.
  • Faire la même chose sur un ventilateur...
  • Avec bonne résolution, faire un jeu vidéo utilisant cela comme affichage

goto top Retour en haut



Avertissement [cacher]
Je ne saurais être tenu responsable pour les dommages que la mise en oeuvre des instructions présentées sur cette page pourraient causer à votre équipement ou à vous-même. Aussi, je ne donne aucune garantie quant à l'exactitude des informations et à leur fonctionnement. Notez toutefois que les procédures ci-haut ont fonctionnées sans aucun problème pour moi.



goto top Retour en haut



Visitez d'autres section du site:

Page principale (frames) | Section Électronique | Manette SNES sur un PC | Ampli 100 Watts | Lecteur de carte mémoire PSX | Haut voltage et arcs électriques | Transformateur d'isolation, Variac, etc.. | Utilisation de Tubes Nixie | VGA pour Dreamcast | Show de laser | Oscilloscope à lampes | Controleur de Stepper | Reset à distance pour NES | PCB chauffant | Photos de mes projets | Interface audio téléphonique | Décodeur de tonalités DTMF | Afficheur téléphonique pour PC | Cable VGA "Sync-On-Green" | Manette de style arcade pour Snes/PC | Module de son SNES sur PC
Les marques de commerce utilisées dans cette page appartiennent à leurs propriétaires respectifs.
Si vous avez des questions ou de commentaires, contactez moi.
Codé manuellement avec edited with VIM