mardi 11 juin 2019

Ajout de 8 entrées analogiques à l'ESP8266 grâce au MCP3008

L'ESP8266 ne comporte qu'une seule entrée analogique. Pour certaines applications, c'est parfaitement suffisant, alors que pour d'autres, ça ne l'est pas du tout!


Il s'agit d'un problème pour lequel nous avons déjà décrit deux solutions élégantes et efficaces: l'utilisation d'un convertisseur analogique-numérique PCF8591, et l'utilisation d'un multiplexeur CD4051.

Aujourd'hui, nous explorons une troisième option: l'utilisation d'un circuit intégré MCP3008; il s'agit d'un convertisseur analogique-numérique à 8 canaux, ayant une résolution de 10 bits. Grâce à ce circuit intégré, vous pouvez donc ajouter 8 entrées analogiques à votre ESP8266.


Connexions du MCP3008 à l'ESP8266

Le schéma ci-contre, tirée de la fiche technique du MCP3008, montre son brochage.

Les 8 entrées analogiques (canal 0 à canal 7) se trouvent sur les broches 1 à 8, du côté gauche du circuit intégré.

Du côté droit, on retrouve l'alimentation (VDD), la tension de référence (VREF), les masses (AGND et DGND), l'horloge (CLK), la sortie des signaux numériques vers l'ESP8266 (DOUT), l'entrée des signaux numériques en provenance de l'ESP8266 (DIN) et la broche "chip select" (CS/SHDN) qui permet d'activer ou de désactiver le circuit intégré.

Le circuit illustré ci-dessous permet de mesurer une tension variant entre 0 et 3,3 V (contrôlée par un potentiomètre) au canal 0 du convertisseur.  VDD et VREF sont à 3,3 V, AGND et DGND sont branchés à la masse de l'ESP8266.

J'ai branché CLK à la broche GPIO 14  de l'ESP8266, DIN à GPIO 13, DOUT à GPIO 12 et CS/SHDN 15 à GPIO 15. Mais tout ça se définit dans le sketch, vous pouvez donc utiliser d'autres broches de l'ESP8266 au besoin.

N.B.: mon schéma montre les branchements sur ma carte Wemos D1 R1, mais vous utilisez évidemment n'importe quel module ESP8266. Puisque j'ai utilisé la sortie 3,3 V de la carte Wemos, j'ai branché un condensateur de 100 nF aux broches 16 et 14 du MCP3008 pour assurer une meilleure stabilité de l'alimentation (sans le condensateur, le MCP3008 refusait parfois de fonctionner, retournant la valeur 1023 peu importe la tension d'entrée).

Installation de la bibliothèque MCP3008

J'ai utilisé  la bibliothèque MCP3008 réalisée par Uros Petrevski.

Exemple de sketch

L'utilisation de la bibliothèque est très simple: pour lire une valeur, on utilise la méthode readADC()readADC(0) pour lire la valeur du canal 0 (donc la broche numéro 1), readADC(1) pour lire le canal 1 (broche 2), etc.

Puisque la résolution est de 10 bits, la valeur retournée se situe entre 0 et 1023. Elle varie lorsque vous tournez le potentiomètre.






Yves Pelletier   (TwitterFacebook)

samedi 8 juin 2019

Utilisation du moteur pas à pas d'un lecteur de CD (Arduino)


Il y a quelques années, à peu près tous les ordinateurs comportaient un indispensable lecteur ou graveur de CD-ROM ou de DVD. Par conséquent, il n'est pas très difficile d'en trouver un de nos jours, encore en état de marche, mais qui ne sert plus.

Une partie intéressante d'un lecteur de CD est le mécanisme qui permet le déplacement du laser: ils s'agit généralement d'un moteur pas à pas qui fait tourner une vis sans fin ou un engrenage, provoquant le mouvement linéaire de la diode laser.

Lorsqu'on démonte un lecteur CD pour récupérer ses composants, il est généralement préférable de conserver la totalité du mécanisme: le moteur pas à pas, la partie mobile, les deux tiges qui guident la partie mobile, et le châssis qui tient tout ça ensemble.

Le principal avantage du mécanisme, c'est sa précision: on peu régler la position de la partie mobile avec une précision d'environ 0,2 mm. On doit par contre se contenter d'un déplacement total ne dépassant guère 4 cm.


Ce moteur pas à pas est bipolaire: il comporte donc 4 connecteurs permettant d'alimenter deux bobinages distincts à l'intérieur du moteur. Il m'a semblé plus pratique de retirer le connecteur à ruban afin de souder 4 fils conducteurs directement sur les bornes du moteur.


Au moyen d'un multimètre, c'est facile de déterminer quels connecteurs partagent la même bobine.

Contrôle du moteur pas à pas au moyen d'un Arduino et d'un L9110S

On ne branche pas le moteur directement aux fragiles sorties de l'Arduino: il faut utiliser, comme intermédiaire, un circuit intégré spécialement conçu pour le contrôle d'un moteur. Dans le présent billet, j'utilise un module L9110S, car il s'agit probablement de l'option la plus économique (le module comporte en fait 2 circuits intégrés L9110S).

Si vous avez en main un autre module conçu pour le pilotage d'un moteur, utilisez-le! Par exemple, vous pouvez vous référer à ces autres billets qui expliquent l'utilisation d'un circuit intégré L293D, d'un circuit intégré L6205, ou d'un module L298N.

Comme le montre le schéma ci-dessous, les connecteurs du moteur pas à pas sont branchés aux 4 sorties du module L9110S (bornier à vis); les deux extrémités d'une même bobine sont branchées sur deux vis adjacentes.

De l'autre côté du module L9110S, on retrouve les entrées, qui sont branchées aux broches 8, 9, 10 et 11 de l'Arduino. Le module L9110S nécessite une alimentation située entre d'au moins 2,5 V (cette alimentation sert à la fois aux moteurs et aux circuits intégrés du module). J'ignore pour quelle tension mon moteur a été conçu, mais j'ai eu du succès avec aussi peu que 3,3 V.



Le sketch

Comme point de départ, je vous recommande l'exemple "stepper_oneRevolution" qui se trouve dans la catégorie "Stepper" de l'IDE Arduino. Dans mon cas, le moteur comporte 20 pas par tour (c'est donc cette valeur que j'ai utilisé pour la constante stepsPerRevolution).


Votre moteur devrait répétitivement effectuer un tour dans un sens, puis un tour dans l'autre sens. Si le moteur ne fait que vibrer plutôt que tourner, essayer de modifier l'ordre dans lequel les fils sont branchés à la sortie du module L9110S.

La vidéo ci-dessous montre mon dispositif en action (je l'ai réglé pour effectuer 12 tours, ce qui représente environ le maximum de déplacement possible, avec une vitesse de 300 tours par minute).



Et à quoi ça peut servir?

Vous trouverez facilement sur le web une grande quantité de projets du genre robot dessinateur, graveuse laser ou même imprimante 3D, comportant 2 ou 3 mécanismes de ce genre. Toutefois, le déplacement maximal de 4 cm constitue souvent une contrainte frustrante.

Pour ma part, puisque je me plaignais dernièrement du manque de précision du support de mon microscope USB, je prévois tenter de créer un support convenant mieux à mes besoins: un moteur réglerait la hauteur du microscope (axe z), et deux autres moteurs permettraient de positionner l'échantillon à observer (axes x et y).

Yves Pelletier   (TwitterFacebook)

mercredi 5 juin 2019

Microscope USB

Aujourd'hui, je vous relate la mise l'essai d'un microscope USB bas de gamme que j'ai acheté sur eBay pour la modique somme de 11 euros.

Il s'agit d'une web cam conçue pour photographier ou filmer des petits objets de très près.  Le grossissement annoncé est de 1000X, et les images ont une résolution de 640 X 480 pixels.

Plus l'objet à étudier se trouve près du microscope, plus l'image est agrandie.  La distance entre l'objet et le microscope peut être réglée en ajustant un support plutôt rudimentaire qui, contrairement à un microscope optique conventionnel, ne comporte pas de vis micrométrique permettant un positionnement de précision.

Ce support est tellement peu pratique que dans bien des cas, lorsqu'on désire obtenir le grossissement maximal, il est plus simple de tenir l'appareil à mains nues en l'appuyant sur l'objet qu'on désire étudier.


Une fois le microscope positionné pour obtenir le grossissement désiré, une molette argentée permet de faire la mise au point. Un potentiomètre situé sur le câble USB permet de varier l'intensité de l'éclairage (8 LEDs disposées en cercle autour du capteur). Un bouton "zoom" semble totalement inopérant ("due to software upgrade", d'après le manuel d'instructions). Les photos présentées sur l'annonce eBay montraient un bouton "snap" qui est carrément absent sur le modèle que j'ai reçu (ce qui n'a pas la moindre importance, à mon avis: il est facile de tout contrôler par logiciel).


Je vous présente quelques images captées avec mon microscope USB.

Quelques grains de sable de plage:


Du sucre:


Tissus de mon T-shirt:


Une zone blanche sur l'écran de mon ordinateur:


Stigmates d'une fleur de pissenlit (recouverts de pollen):


Comme exemple de vidéo, voici un être vivant trouvé dans un échantillon d'eau puisé dans un étang près de chez moi. Je ne sais pas ce que c'est, ni ce qu'il est en train de faire, mais ça nous change des vidéos de chats.



Logiciels

On peut se procurer le logiciel HiView (Windows ou Mac) sur le site www.hvscam.com. En plus d'afficher l'image à l'écran en temps réel et de permettre son enregistrement sous forme de jpeg ou de vidéo, le logiciel comporte des outils permettant de prendre des mesures sur l'image affichée.


Pour que ces mesures correspondent à la réalité, on calibre le logiciel avec la carte fournie avec le microscope.


Le logiciel HiView n'est malheureusement pas disponible en version Linux, mais n'importe quel logiciel pour webcam devrait faire l'affaire (nous ne disposons pas des outils permettant de prendre des mesures sur l'image, toutefois). Sous Ubuntu, j'ai obtenu d'excellent résultats avec le logiciel Cheese.

J'ai également observé quelques grains de sel avec VNC Viewer sur mon Raspberry Pi, sans le moindre problème.



Yves Pelletier   (TwitterFacebook)