Projecteur Holographique

by MariusNautin in Circuits > Arduino

208 Views, 0 Favorites, 0 Comments

Projecteur Holographique

PXL_20240131_113832045.jpg

L'afficheur holographique utilise pour fonctionner le principe de rémanence visuelle : il faut un temps aux récepteurs de nos yeux pour se désexciter après avoir vu une lumière forte.

En faisant tourner un bras très vite, et en changeant très vite l'affichage sur les LEDs, il est ainsi possible de donner l'impression qu'à la place d'un bras, nous avons une sorte d'écran.

Supplies

image_2024-01-24_160036987.png
image_2024-01-24_164138221.png
image_2024-01-24_155929262.png
image_2024-01-24_155948541.png
image_2024-01-24_160124100.png
WhatsApp Image 2024-01-24 à 16.17.10_bb5128d6.jpg

Pour construire cet afficheur Holographique, il vous faudra :

  • une carte Arduino
  • une carte Teensy 3.6
  • un moteur Nema 17
  • un driver A4988
  • un ordinateur avec un logiciel de CAO (ex : Catia)
  • une imprimante 3D (ici une creality K1) armée de PLA
  • deux barres LED d'au moins 8 LED de long (ou, à défaut, 16 LEDs et un fer à souder)
  • une photorésistance ou une centrale inertielle (ici, une BMX160)
  • trois piles AAA

Le reste des éléments sera imprimé en 3D.


Ressources pour le code de pilotage du moteur :

https://www.moussasoft.com/comment-utiliser-nema-17-moteur-pas-a-pas-arduino-pilote-a4988

Prise D'inspiration

Hologram Orbiter - closer than ever Arduino DIY

Nous sommes tombés par hasard sur cette vidéo youtube et avons lancé le pari de reproduire un tel dispositif avec les ressources à notre disposition, sans connaissance préalable de son fonctionnement.

Code De L'afficheur

IMG-20240124-WA0010.jpg
image_2024-02-09_185431980.png

Pour coder notre affichage, nous sommes malheureusement limités par la vitesse d'écriture de la carte ARDUINO. En effet, avec des calculs, il est possible de retrouver que la vitesse maximale de rotation sera de 20 Hz et un pseudo-écran de 200 pixels de large, avec nos 8 de haut.


Le circuit total est séparé en deux parties : la partie commande moteur, et la partie affichage LED.


Dans la partie affichage LED, il fallait mettre en relation le capteur (photorésistance ou centrale inertielle) monté sur le rotor et les LEDs afin de modifier la fréquence d'affichage. Le but étant d'adapter la fréquence de rafraichissement à la vitesse du moteur, pour ne pas avoir de pivotement de l'image affichée. Pour ce faire il faut pouvoir détecter un signal à chaque tour afin de connaître la vitesse de rotation du dispositif, en prenant en considération d'éventuelles détection parasites. Pour assurer une image stable et fixe, on moyenne la mesure de vitesse sur plusieurs tours afin d'éviter les discontinuités de la mesure du capteur.

Pour obtenir un effet convaincant, le rotor doit tourner au moins à 20Hz, ce qui implique un taux de rafraîchissement de 2kHz avec 100 colonnes sur toute la périphérie de l'afficheur. Le programme doit donc être en capacité de modifier l'affichage de LEDs en moins de 500µs. Pour être sûr de synchroniser le rafraîchissement à une telle fréquence, on utilise l'horloge interne de la carte avec la fonction micros().

Il faut sans arrêt effectuer une acquisition de la valeur du capteur pour détecter le signal du début de tour, or cette opération peut prendre un temps trop élevé pour la fréquence de rafraîchissement. C'est pour cette raison que nous avons remplacé la centrale inertielle (temps d'acquisition de ≈400µs / mesure) par une photorésistance (mesure via la fonction analogRead() en moins de 10µs). Ce capteur est toutefois plus bruité et dépendant de facteurs extérieurs comme la luminosité ambiante. Pour palier à cela, une phase d'étalonnage de la valeur seuil de détection a été implantée dans l'initialisation du code (mais pas testée).

Une étape supplémentaire d'initialisation consiste en choisir ce que l'on veut afficher avec notre matrice de LEDs RGB et retranscrire l'image sous forme d'objets compatibles avec la librairie Arduino FASTLED (voir le code afficheur_LED_3.2.ino).


Dans la partie commande moteur, il fallait gérer le moteur pas à pas en vitesse à l'aide du driver A4988 et de la librairie Stepper.h .

Impression Des Pièces

IMG-20240124-WA0007.jpg
IMG-20240124-WA0006.jpg
WhatsApp Image 2024-01-24 à 17.15.30_3ff1d8dc.jpg

Pour commencer, nous avons fait des tests de fréquence pour le moteur que nous avions à disposition.

Le premier moteur, un petit à courant continu, pouvait parfaitement tourner jusqu'à 20Hz à vide, mais à plein, il peinait à atteindre même les 10Hz. Le phénomène de rémanence n'étant vraiment intéressant qu'à partir de 16~17Hz, c'était problématique. Nous avons donc décidé de changer de motorisation pour un moteur pas à pas, plus lent, mais bien plus robuste.

Le moteur pas à pas peut tourner jusqu'à 6 Hz, nous avons donc utilisé un réducteur de rapport 4 afin de passer de la fréquence effectivement utilisée, 5Hz, à 20Hz.


Les autres pièces que nous avons imprimées sont :

  • le bras tournant
  • les roues dentées pour le réducteur
  • le support du moteur
  • les porte bandes LED
  • le support de la partie tournante

Il était nécessaire de fixer le moteur et le bras tournant car le moteur exerce un gros couple par l'engrenage, et le rotor vibre un peu, dû au centre de gravité légèrement décalé. C'est pour cela que nous avons ensuite découpé au laser un support qui permettait de stabiliser l'ensemble de la structure !

Nous avons effectué un certain nombre d'ajustements à l'impression 3D, pour obtenir les bons jeus et les bons glissements entre les engrenages par exemple. Cela nous a permis d'obtenir une structure assez satisfaisante.

Soudure Des Leds

Nous avions des LEDs décollées, ainsi, nous avons dû les souder afin d'avoir de belles bandes, comme sur notre modèle final. Il a été assez difficile de le faire de manière tout à fait rectiligne, pour qu'elles rentrent dans le rail.

Assemblage Du Rotor Et Derniers Tests

FGA3EXTLRRSOYXT.jpg

Après impressions et soudures, nous avons fait des tests pour voir si tous les composants fonctionnaient, et pour régler le code.

Enfin, une fois les bugs corrigés et quelques améliorations apportées à l'équilibrage, nous pouvions faire tourner notre afficheur holographique et afficher tous les textes que nous voulions !