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.
Version 1
Rhytme de balayage de l'image fixe, pas de synchronisation. Déplacement
manuel.
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).
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.
Version 2
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.
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.
Version 2.1
Rhytme de balayage fixe, avec synchronisation. Déplacement par
roue de bicyclette.
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: 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...)
Version 2.2
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.
Version X
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
Avertissement
Je ne saurais être tenu responsable pour les dommages
que l'utilisation des informations ou la mise en œuvre des instructions présentées
sur cette page pourrait causer à votre équipement,
à vous-même ou à autrui. Aussi, je ne donne aucune garantie quant
à l'exactitude des informations et à leur fonctionnement.