banner

Blog

May 12, 2023

Pirater un microscope d'inspection

Parfois, j'ai besoin de pouvoir prendre des photos de très petites choses, et le soi-disant mode macro de mon appareil photo compact ne suffit pas. Et cela ne fait jamais de mal d'avoir une lunette d'inspection à portée de main pour les petits travaux de soudure, même si je préfère une simple loupe de bijoutier dans un œil pour la plupart des tâches. J'ai donc envoyé un peu plus de 40 $ de réduction à mon ami proche Alibaba, et quelques semaines plus tard, j'étais l'heureux propriétaire d'une lunette d'inspection à moitié utilisable qui enregistre des images fixes ou des vidéos sur une carte SD.

Malheureusement, il n'est utilisable qu'à moitié en raison de la conception de l'interface chintzy et d'un support bancal. J'ai donc passé un après-midi à démonter le microscope et à le placer sous le contrôle d'un microcontrôleur, avec le Wi-Fi et un langage de script. Bien mieux ! Maintenant, je peux faire des time-lapses au microscope, mais plus important encore, je peux prendre des photos sans flou sans toucher la plate-forme ondulée. C'était un hack amusant, alors j'ai pensé que je partagerais. Continuer à lire!

La portée, telle qu'elle arrive, est vraiment amusante. L'image est très bien et presque tout fonctionne comme annoncé. Regarder des insectes et des fleurs était bon pour quelques heures au moins. Cependant, tous les petits détails qui rendent l'expérience utilisateur agréable sont bâclés.

Par exemple, l'espace libre sur la carte SD est si serré que vous ne pouvez pas l'insérer ou la retirer sans quelque chose de fin pour la presser ou sans avoir de très longs ongles. Certains des boutons sont difficiles à atteindre derrière le gros bouton de mise au point. Le système de menu, pour allumer ou éteindre la lumière annulaire LED par exemple, est horrible. Ce sont des problèmes mineurs, et pour le prix, je suis tout à fait prêt à les ignorer.

Mais le tueur, pour mes besoins, est que le support est si bancal que le fait d'appuyer sur le bouton "OK" pour prendre une photo brouille l'image qui s'y trouvait. Le mode vidéo a une méthode de "détection de mouvement" - il est toujours activé car la caméra vacille tellement qu'elle pense toujours que l'objet vient de bouger. Le coupable est le cadre ringard qui se termine par une ventouse en silicone épaisse qui se tortille comme un bol de gelée. Ce n'est pas ainsi que vous concevez des trépieds.

Il existe deux solutions possibles pour le problème de vibration. La première consiste à construire un meilleur cadre, et c'est quelque chose que je finirai probablement par faire, car la lunette d'inspection est un équipement utile. L'autre solution consiste simplement à déclencher les boutons d'exposition (et autres) sans toucher la petite bête qui se tortille. Bienvenue sur l'Internet des microscopes !

En ouvrant le boîtier, la première chose que j'ai trouvée était une rangée de cinq points de test sur le panneau de touches, alors j'ai soudé des fils d'en-tête pour voir ce qui se passait. (C'était facile !) Ils sont étiquetés GND, VCC, KEY, PWR et VBAT, ce qui ne laisse pas grand-chose à l'imagination. Quatre des cinq sont étiquetés correctement.

Je suis un hacker analogique dans l'âme, et je commence généralement avec un oscilloscope lorsque je fouille des signaux inconnus, mais j'ai décidé de commencer avec une sonde logique cette fois, car la ligne KEY encodait sûrement les cinq boutons du panneau avant dans une sorte de code numérique. Imaginez ma surprise lorsque chaque pression sur un bouton semblait identique sur le renifleur logique. Brûlé à nouveau. Retour au fidèle oscilloscope.

Il s'avère que les cinq boutons sont liés à cinq résistances différentes qui servent de moitié inférieure d'un diviseur de tension, et un ADC lit cette tension pour déterminer quelle touche a été enfoncée. Cela explique les cinq niveaux de tension sur la trace jaune de l'oscilloscope.

C'est un sale tour classique et j'attendais le jour où je devais absolument minimiser le nombre de fils connectés à un panneau. Qui savait que je verrais quelque chose de hack comme ça dans un produit réel ?

Le bouton d'alimentation est séparé et tire la ligne PWR (en vert sur la trace de l'oscilloscope, sur une échelle verticale de 5 V) vers la ligne VBAT. Un test rapide avec une alimentation 3,3 V m'a convaincu que je pouvais allumer et éteindre l'appareil avec le GPIO d'un microcontrôleur. J'étais également à peu près sûr de pouvoir connecter cinq broches GPIO à différentes résistances et "appuyer" sur le bouton correspondant. J'ai donc retiré le panneau pour mesurer les résistances individuelles.

Au cas où vous voudriez reproduire cela à la maison, les résistances sont respectivement de 0 Ω, 15 kΩ, 30 kΩ, 46,6 kΩ et 70 kΩ, et en faisant un peu de calcul sur les tensions mesurées, la résistance de rappel sur le dessus du diviseur de tension est probablement nominalement de 100 kΩ. Alternativement, si vous avez un DAC, vous pouvez simplement envoyer des tensions de 0 V, 400 mV, 750 mV, 975 mV ou 1325 mV à la broche KEY. J'ai soudé les résistances les plus proches que j'avais dans ma boîte, vérifié qu'elles fonctionnaient toutes et appelé le matériel terminé.

Mais qu'en est-il de la ligne VCC ? Quelque chose n'avait pas de sens, car les boutons ont abaissé la tension malgré leur connexion à VCC, et la ligne KEY a été tirée vers le haut par défaut. En le testant, bien sûr, VCC était un court-circuit à GND et la résistance de rappel était sur la ligne KEY. Il y avait également une résistance non remplie sur le circuit imprimé du panneau du clavier, suggérant que dans une révision précédente, les boutons étaient relevés, mais le fabricant a optimisé une seule résistance en utilisant le pullup interne du microcontrôleur. C'est soit par paresse, soit par sabotage délibéré qu'ils n'ont pas changé la sérigraphie du point de test pour qu'elle corresponde. (Imaginez à quel point ce serait amusant de connecter votre équipement de test à "VCC" et GND !)

Le reste du travail était juste moi utilisant mes outils préférés pour un travail rapide comme celui-ci. Vous voudrez peut-être utiliser un Arduino ou un seul ESP8266, mais j'ai joué avec Mecrisp-Stellaris Forth sur des cartes STM32F103 bon marché ces derniers temps, c'est donc là que je suis allé. Je pensais à l'origine créer un panneau de touches à distance personnalisé, de sorte que les nombreuses broches GPIO auraient signifié que je n'aurais pas à recourir à l'astuce ADC et résistances.

J'utilisais déjà la série UART pour la programmation et le débogage, et j'ai décidé qu'un panneau de touches séparé était un projet en soi, alors j'ai sorti et mis le microscope sur le réseau WiFi. J'ai flashé un ESP8266 avec le micrologiciel du pont série WiFi esp-link. Voila, télécommande. La mise hors tension des microcontrôleurs de la ligne VBAT du microscope (via un interrupteur) rend l'ensemble entièrement autonome lorsque je dois le déplacer sur le bureau.

De nombreux détails nécessitaient des tests par essais et erreurs pour être corrects. Différents délais sont nécessaires pour les pressions sur les boutons en mode appareil photo et dans le système de menus, par exemple. Je ne les ai pas optimisés, mais j'ai fait en sorte que le délai soit suffisamment long pour que cela fonctionne toujours. Le bouton marche/arrêt ne fonctionne que s'il est maintenu enfoncé pendant plus de 1,5 seconde. C'est bizarre. Tout cela a été assez rapide pour travailler avec un système de débogage interactif comme l'environnement Forth, bien que je ne pense pas que ce serait bien pire dans une boucle de compilation et de flash comme en C ou Arduino non plus.

Il y a deux choses mignonnes que j'ai faites dans le firmware qui méritent d'être mentionnées. La ligne KEY qui est utilisée pour détecter les pressions sur les boutons n'est relevée que lorsque le microscope est sous tension, de sorte qu'elle peut être lue par le microcontrôleur pour déterminer si le microscope est actuellement allumé ou éteint. Lorsque le microscope s'allume pour la première fois, il est en mode vidéo, ce qui permet au logiciel de suivre en interne le mode dans lequel il se trouve actuellement.

Combiné, cela permet une seule commande "shoot" qui vérifie d'abord que le microscope est allumé, puis passe en mode appareil photo s'il n'est pas déjà là, puis prend enfin une photo. De même, une commande "supprimer" passe en mode aperçu et supprime la dernière photo, confirmant tous les "êtes-vous sûr?" dialogues automatiquement. Le code est ici si vous êtes intéressé.

Le système de menu prêt à l'emploi est horrible. Il faut quelque chose comme quinze touches pour activer ou désactiver l'anneau lumineux. Le scripter dans le microcontrôleur le rend beaucoup plus agréable. De plus, il est désormais possible de configurer des expositions répétitives pour faire des time-lapses, ou de filmer une vidéo de deux minutes une fois toutes les dix minutes, ou d'automatiser pratiquement n'importe quoi. Je pourrais ajouter un capteur de distance pour rendre le tournage automatique lorsqu'un PCB est présent sous l'objectif, ou quelque chose d'idiot. J'aime vraiment l'idée de lier ces fonctionnalités de script à des boutons externes : une bascule de lumière en une seule pression ou un bouton d'exposition entre crochets serait bien, tout comme une suppression à un seul bouton.

Le monde est maintenant mon huître, alors attendez-vous à voir beaucoup plus de séquences en super gros plan dans les prochains articles de Hackaday. Et si vous prenez l'un de ces microscopes, n'hésitez pas à l'ouvrir, à souder une poignée de résistances et à en prendre le contrôle vous-même. Vous le trouverez probablement suffisamment utile pour en faire un support approprié, mais c'est une autre histoire.

PARTAGER