samedi 25 juin 2022

Actionneur linéaire (tige filetée) contrôlé par Arduino

Une tige filetée (longue vis) constitue un moyen efficace de transformer un mouvement de rotation en un mouvement de translation linéaire. Ce court projet consiste à bricoler un actionneur électrique linéaire (vérin électrique) au moyen d'un moteur électrique et d'une tige filetée. Le dispositif sera automatisé au moyen d'une carte Arduino Uno.


Voici d'abord une courte séquence vidéo qui montre le résultat:



Couplage de la tige filetée au moteur électrique

J'ai utilisé une tige filetée d'environ 30 cm de longueur et un moteur à courant continu.  Il est possible de se procurer un moteur déjà muni d'une tige fileté, mais je n'en avais pas, et j'ai préféré utiliser un des nombreux moteurs électriques que j'ai accumulés avec les années. C'est facile de trouver une tige filetée dans une quincaillerie.

Pour le couplage de la tige à l'arbre du moteur, j'ai utilisé des tubes thermorétractables (ceux qu'on utilise habituellement pour l'isolation des fils électriques). J'en ai d'abord superposé plusieurs couches sur l'arbre du moteur jusqu'à ce que son diamètre soit similaire à celui de la tige filetée, en prenant soin de chauffer le tube chaque fois pour qu'il soit bien serré sur la couche précédente.

J'ai ensuite couplé l'arbre du moteur et la tige filetée grâce à un tube thermorétractable, bien chauffé pour qu'il enserre bien les deux tiges. 


Partie mobile

L'écrou adapté à la tige fileté est encastrée dans la partie mobile. Il ne faut pas que la partie mobile puisse tourner, d'où sa forme rectangulaire.




Pont en H L9110S

Puisque le moteur devra nécessairement pouvoir tourner dans les deux sens, un pont en H est  nécessaire. J'ai utilisé un module L9110S mais vous avez bien sûr l'embarras du choix: L293D, L298, etc. 


Voici comment j'ai branché le module L9110 au moteur et à l'Arduino Uno:

  • Broche GND du L9110: GND de l'Arduino et borne négative de l'alimentation du moteur
  • Broche VCC du L9110: Alimentation du moteur (2,5 V à 12 V: utiliser ce qui convient à votre moteur)
  • Broche A-IA du L9110: broche 10 de l'Arduino Uno *
  • Broche A-IB du L9110: broche 11 de l'Arduino Uno *

*:Doivent être des sorties PWM.


Détecteurs de fin de course: paire LED infrarouge + phototransistor

Pour détecter la présence du mobile près des extrémités de la tige filetée, j'ai choisi d'utiliser, à chaque extrémité, une LED infrarouge et le phototransistor. Lorsque la partie mobile passe entre la LED et le phototransistor, la diminution de luminosité provoque une augmentation de la tension acheminée à une entrée analogique de l'Arduino.



La LED infrarouge était protégée par une résistance de 220 Ω et alimentée par une tension de 5 V. Le modèle que j'ai utilisé était TSAL7400.

Le phototransistor était également alimenté avec une tension de 5 V, et il était associé à une résistance de 10 kΩ. C'est la plus courte des broches du phototransistor qui est branchée à la masse (GND). J'ai utilisé le modèle TOPS-050.

Ici encore, bien d'autres solutions seraient possibles: interrupteur, aimant avec détecteur à effet hall, télémètre à ultrasons...

Sketch Arduino

Le principe est assez simple: on fait tourner le moteur dans un sens ou dans l'autre, selon la valeur de la variable booléenne "sens". Si la partie mobile est détectée par un des phototransistors, il faut changer le sens de rotation des moteurs (donc modifier la valeur de la variable "sens").

Vous devrez probablement modifier la valeur des constantes "seuil1" et "seuil2" qui dépendent de la distance entre la LED infrarouge et le phototransistor, leur alignement, etc.

-

-

À lire aussi:


Yves Pelletier (Facebook)


samedi 11 juin 2022

Écran OLED à rotation automatique (Rasperry Pi Pico)

Dans cet article, je programme le Raspberry Pi Pico en Micropython de façon à ce que le texte affiché sur un petit écran OLED SH1106 se mette à jour selon l'orientation de l'écran.  L'orientation de l'écran est mesurée au moyen d'un accéléromètre-gyro MPU-6050.


L'image ci-dessous illustre le comportement du circuit, similaire à celui d'un téléphone ou d'une tablette: le texte affiché sur l'écran OLED est toujours orienté de façon à pouvoir être lu par la personne qui fait face à l'écran. Si on tourne l'écran, le texte se met à jour automatiquement.



Connexions

Mon afficheur OLED SH1106 et l'accéléromètre MPU-6050 communiquent tous les deux en I2C. Je les ai donc branchés à deux canaux I2C différents.

  • Broche GND de l'écran OLED: Broche GND du Raspberry Pi Pico
  • Broche VCC de l'écran OLED: Sortie 3,3 V du Raspberry Pi Pico
  • Broche SCL de l'écran OLED: Broche GP7 du Raspberry Pi Pico
  • Broche SDA de l'écran OLED: Broche GP6 du Raspberry Pi Pico

  • Broche VCC du MPU-6050: Sortie 3,3 V du Raspberry Pi Pico
  • Broche GND du MPU-6050: Broche GND du Raspberry Pi Pico
  • Broche SCL du MPU-6050: Broche GP9 du Raspberry Pi Pico
  • Broche SDA du MPU-6050: Broche GP8 du Raspberry Pi Pico

L'accéléromètre doit rester dans le même plan que l'écan OLED, avec l'axe des x pointant vers le bas de l'écran, et l'axe des y vers la droite.

Installation des bibliothèques Micropython

Pour l'accéléromètre MPU-6050, j'utilise, comme la dernière fois, les fichiers "imu.py" et "vector3d.py" disponibles sur le dépôt Github micropython-mpu9x50

Ce ne sont pas tous les pilotes SH1106 qui permettent de contrôler la rotation de l'image affichée. Pour cette raison, c'est important d'utiliser cette version récente du pilote SH1106.

Trois fichiers doivent donc être copiés dans la mémoire flash du Raspberry Pi Pico.


Script Micropython

Voici le programme. L'accéléromètre est régulièrement interrogé afin de connaître l'orientation de l'écran. Si on constate qu'un changement dans la rotation de l'écran nécessite une mise à jour de l'affichage, on redessine à nouveau le texte affiché, dans la nouvelle orientation. Notez que les seules orientations acceptées par la bibliothèque sont 0, 90, 180 et 270.  (0 et 180 correspondent à une orientation de type "paysage" alors que les deux autres sont pour une orientation "portrait").

-

-


À lire aussi:


Yves Pelletier (Facebook)


vendredi 3 juin 2022