Tournevis sonique (Doctor Who)

on . Posted in Hardware

 

Grand fan de Doctor Who, j’ai un jour décidé d’imaginer ma propre version du tournevis sonique. L’idée était d’avoir un objet qui fonctionnait dans la vraie vie.
J’aurais voulu implémenter les fonctions suivantes : Bluetooth, NFC, émetteur/récepteur radio, télémètre ultrasons, micro, haut-parleur, centrale inertielle, un écran, lien infra-rouge, multimètre, et décapsuleur.
Par faute de moyen, et parce qu’il vaut mieux commencer petit, j’ai réduit la liste à:

  • Microcontrôleur ATMEL ATmega328p
  • Écran OLED 128×32 px
  • Télémètre ultrasons
  • Haut-parleur récupéré sur un vieux téléphone
  • Émetteur infrarouge
  • Un mini joystick et un bouton pour naviguer dans les menus
  • Le tout alimenté par une batterie au Lithium de 550mAh

L’objectif de cette première version est d’avoir un appareil permettant de mesurer des distances avec le télémètre, de reproduire le son du tournevis sonique, et avec l’éméteur IR de piloter télévisions, appareil photo, etc…
Le joystick permet de choisir ce qu’on veut faire.

Réalisation du prototype sur breadboard

Écran OLED

J’ai acheté un petit écran compatible breadboard sur adafruit.com. Avantage : même si c’est un peu cher, ça permet d’avoir quelque chose de fiable et accessible pour commencer.

J’ai pu débuter mes essais et chercher tout ce qu’il est possible de faire avec.
C’est un écran monochome à commande par SPI. Les pixels peuvent uniquement être allumés ou éteins. Il sont adressés par groupe de 8 en colonnes. ces groupes sont arrangés en 4 lignes (32 pixels) et 128 colonnes. Lors de l’envoi de données, un octet pilote un groupe de pixels, chacun étant associé à un bit.
Cette méthode permet de rafraichir l’image en un peu moins de 9 ms, ce qui donne un taux de rafraichissement d’environ 120 ips.
L’écran étant monochrome, afficher des images complexes est difficilement possible – ce n’est évidement pas le but ici, mais j’aime bien explorer l’ensemble des possibilités offertes par un composant – mais avec le taux de rafraichissement atteint, on peut essayer d’exploiter la persistance rétinienne pour obtenir des niveaux de gris. 120 Hz -> on peut afficher 4 images représentant chacune un niveau différent, tout en restant à 30 ips. À 30 image par secondes l’œil continue d’être trompé et on perçoit des nuances de gris, plus du noir.

écran OLED essais niveaux de gris

écran OLED niveaux de gris essais 2

Sur la première image on voit  un trait horizontal plus clair au milieu. C’est dû au fait que le contrôleur de l’écran a son propre taux de rafraichissement qui est indépendant des commandes qu’on lui envoi. En conséquence, comme il n’y a pas de synchronisation, certaines images sont écrites dans la mémoire avant la fin du rafraichissement, et il y a un chevauchement des différents niveaux.
Sauf erreur de ma part, il existe des modèles qui ont une broche de synchronisation, qui permet à la commande (nous) d’envoyer les données au bon moment.

La platine qui accompagne l’écran est bien trop grosse pour rentrer dans l’objet final, cylindrique de diamètre 20 mm, surtout que l’écran doit se trouver en surface.
Pour ça j’ai dessoudé la nappe de l’écran ainsi que tous les composants nécessaires à sont fonctionnement. Puis j’ai tout ressoudé sur un adaptateur CMS SOIC28 coupé en deux.

écran OLED ressoudé sur petit PCB

Télémètre ultrasons

Les essais avec l’écran terminés, j’ai pu passer au télémètre ultrasons. Également acheté chez adafruit.com . Très facile à utiliser, il suffit de l’alimenter et une sortie PWM retourne un signal dont la longueur d’impultion est proportionnelle à la distance mesurée. Un simple timer démarre au front montant et est relevé au front descendant suivant, on obtient ainsi une valeur de temps directement proportionnelle à la distance.

 

La suite est en cours d'écriture

En attendant, une vidéo : https://www.youtube.com/watch?v=_UEKLkQYIRc

Les détails de ce projets, en moins détaillés et en anglais, mais complets, ici: http://hackaday.io/project/880-custom-sonic-screwdriver