jeudi 17 juin 2021

Robot quadrupède à base de Raspberry Pi Pico (MicroPython)

Au début du mois, je vous ai présenté un robot quadrupède très facile à fabriquer qui comportait deux servomoteurs branchés à un Arduino Uno. Je vous présente aujourd'hui le même robot, dans lequel j'ai remplacé l'Arduino par un Raspberry Pi Pico programmé en MicroPython.


Dans un premier temps, voici une courte vidéo qui montre le robot en mouvement.

Fabrication du robot

J'ai fabriqué le robot en utilisant du carton et quelques bâtonnets de bois, assemblés avec de la colle et du ruban gommé.



Pour que le robot puisse avancer, il est important que les deux servomoteurs soient inclinés par rapport à l'horizontale, d'où la forme triangulaire du châssis du robot.



Connexions des servomoteurs au Rasbperry Pi Pico

Chaque servomoteur est alimenté par une tension continue de 5 V (broche Vbus du Raspberry Pi Pico).

Servomoteur avant: 

  • fil jaune: broche GP15 du Raspberry Pi Pico
  • fil rouge: broche Vbus du Raspberry Pi Pico
  • fil brun: broche GND du Raspberry Pi Pico

Servomoteur arrière: 

  • fil jaune: broche GP13 du Raspberry Pi Pico
  • fil rouge: broche Vbus du Raspberry Pi Pico
  • fil brun: broche GND du Raspberry Pi Pico


Script en MicroPython

Ce script fait avancer le robot de quelques pas vers l'avant, puis de quelques pas vers l'arrière. Vous devrez probablement ajuster les variables "pwm_avant" et "pwm_arriere": il s'agit de la durée de l'impulsion pour laquelle chaque servomoteur se trouve à sa positon moyenne  (la patte droite n'est alors ni en avant, ni en arrière par rapport à la patte gauche).

Il sera peut-être pertinent de modifier également le contenu de la variable "pas": si vous l'augmentez, le robot fera de plus grandes enjambées (ainsi, il marchera peut-être un peu plus vite, à moins qu'il ne perde l'équilibre...). 

-
-

À lire également

Yves Pelletier (Facebook)

lundi 14 juin 2021

Utilisation d'un écran tactile TFT SPI 240 X 320 (ILI9341) avec le Raspberry Pi Pico

Nous allons maintenant brancher un Raspberry Pi Pico à un écran tactile SPI 240 X 320 muni d'un contrôleur ILI9341 (pour l'affichage) et d'un contrôleur XPT2046 (capteur tactile). Le Raspberry Pi Pico sera programmé en MicroPython.


Connexions de l'écran au Raspberry Pi Pico

Le module comporte un total de 18 broches:

  • 2 broches pour l'alimentation (VCC et GND)
  • 7 broches pour l'affichage
  • 5 broches pour le capteur tactile (celles dont le nom débute par "T_")
  • De l'autre côté de la carte, 4 broches pour le lecteur de carte SD (que je n'ai pas utilisé)

Il serait tout à fait acceptable de brancher l'afficheur et le capteur tactile (XPT2046) sur le même bus SPI. Toutefois, l'auteur de la bibliothèque que nous allons utiliser fait remarquer que l'affichage supporte une vitesse de communication beaucoup plus rapide que le capteur tactile. Pour cette raison, il suggère de brancher l'afficheur et le capteur tactile sur deux bus SPI différents, et c'est ce que j'ai fait (affichage sur le bus SPI0 et détection du touché sur le bus SPI1).

Ça représente beaucoup de fils à connecter... De gauche à droite sur l'écran du schéma ci-dessous:

  • Broche T_IRQ de l'écran : Broche GP2 du RP Pico
  • Broche T_DO de l'écran: Broche GP8 du RP Pico
  • Broche T_DIN de l'écran: Broche GP11 du RP Pico
  • Broche T_CS de l'écran: Broche GP12 du RP Pico
  • Broche T_CLK de l'écran: Broche GP10 du RP Pico
  • Broche SDO (MISO) de l'écran: Broche GP4 du RP Pico (probablement pas nécessaire)
  • Broche LED de l'écran: Sortie 3,3 V du RP Pico
  • Broche SCK de l'écran: Broche GP6 du RP Pico
  • Broche SDI (MOSI) de l'écran: Broche GP7 du RP Pico
  • Broche DC de l'écran: Broche GP13 du RP Pico
  • Broche RESET de l'écran: Broche GP14 du RP Pico
  • Broche CS de l'écran: Broche GP15 du RP Pico
  • Broche GND de l'écran: Broche GND du RP Pico
  • Broche VCC de l'écran: Sortie 3,3 V du RP Pico

Installation des bibliothèques

J'ai utilisé les bibliothèques MicroPython offertes par rdagger.

Pour que les scripts que je présente plus loin dans cet article fonctionnent correctement, tous les fichiers suivants doivent être copiés dans le Raspberry Pi Pico:

  • ili9341.py (gestion de l'affichage)
  • xpt2046.py (gestion du capteur tactile)
  • xglcd_font.py (pour affichage de texte)
  • Unispace12x24.c, à l'intérieur du répertoire "fonts"


Le dépôt github présente une bonne quantité de scripts en MicroPython qui montrent comment afficher du texte, des formes géométriques, des images et des animations sur l'écran (il s'agit des 11 fichiers dont le titre débute par "demo").  Mais puisqu'il n'y a aucun exemple simple montrant comment utiliser la bibliothèque xpt2046.py, c'est sur cet aspect que je vais insister.

Routine de calibration

Lorsqu'on touche l'écran, le capteur tactile envoie au Raspberry Pi Pico deux valeurs qui sont proportionnelles à la position (horizontale et verticale) qui a été touchée.  Ces valeurs brutes doivent toutefois être transformées si on désire qu'elles correspondent aux coordonnées des pixels sur l'écran.

Pour compliquer les choses, les valeurs générées ne sont pas identiques d'un écran à l'autre. Pour cette raison, il est utile d'exécuter une routine comme celle qui est présentée ci-dessous, afin de connaître les valeurs propres à l'écran que nous utilisons.

Le script ci-dessous invite l'utilisateur à toucher tour à tour chacun des 4 coins de l'écran.


Lorsque c'est terminé, les valeurs extrêmes sont affichées:
  • x_min (coordonnée x lorsqu'on touche le bord gauche de l'écran)
  • x_max (coordonnée x lorsqu'on touche le bord droit de l'écran)
  • y_min (coordonnée y lorsqu'on touche le haut de l'écran)
  • y_max (coordonnée y lorsqu'on touche le bas de l'écran)



Ces informations peuvent être entrées dans nos scripts afin que les coordonnées de la position touchée correspondent aux coordonnées du pixel correspondant sur l'écran.

-
-

Vérification de la calibration

Voici maintenant un script minimaliste qui permet de vérifier rapidement la qualité de la calibration: avant de l'utiliser, c'est important de modifier le contenu de la ligne 29 pour qu'il corresponde aux valeurs trouvées au moyen du script de calibration.

Lorsque vous exécutez ce script, un point blanc est tracé chaque fois que vous touchez l'écran. Si la calibration est correcte, le point devrait se tracer à la position touchée.


-

-

Script: un exemple avec des boutons

Voici finalement un exemple dans lequel deux boutons apparaissent à l'écran. Lorsqu'on touche le bouton de gauche, un cercle vert est affichée, alors que c'est un rectangle rouge qui s'affiche lorsqu'on clique sur le bouton de droite. Encore une fois, pour que ça fonctionne bien, c'est important d'écrire vos paramètres de calibration à la ligne 68 du script.


-
-

À lire également

Le même écran tactile peut être utilisé avec un ESP32, un ESP8266 ou une STM32 Blue Pill (toutes ces cartes ont été programmées avec l'IDE Arduino).

D'autre part, nous avons déjà exploré l'utilisation d'autres afficheurs avec le Raspberry Pi Pico programmé en MicroPython: 


Yves Pelletier (Facebook)

vendredi 11 juin 2021

Mesurer la pression atmosphérique et la température avec le BMP180 et le Raspberry Pi Pico

Dans cet article, nous mesurons la pression atmosphérique et la température au moyen d'un module BMP180 relié à un Raspberry Pi Pico programmé en MicroPython.


Avant d'aller plus loin, j'aimerais vous faire remarquer que le BMP180 est plutôt désuet, comme capteur. Il n'est plus fabriqué par Bosch, et les modules BMP180 qui avaient été mis au point par Adafruit et Sparkfun ne sont plus commercialisés. Mais mon module BMP180 fonctionne très bien, et je ne vois donc aucune raison de le remplacer par autre chose.


Connexions

Puisque le BMP180 utilise le bus I2C, 4 fils sont suffisants pour connecter le module au Raspberry Pi Pico:

  • Broche VIN du module BMP180 : Sortie 3,3 V du Raspberry Pi Pico
  • Broche GND du module BMP180: Broche GND du Raspberry Pi Pico
  • Broche SCL du module BMP180: Broche GP9 du Rasbperry Pi Pico
  • Broche SDA du module BMP180: Broche GP8 du Raspberry Pi Pico

Installation du pilote MicroPython

J'ai utilisé ce pilote MicroPython bmp180.py. Si vous tentez de l'utiliser tel quel, toutefois, vous obtiendrez probablement le message d'erreur "OSError: I2C operation not supported".


Le problème réside dans la ligne 47 du fichier bmp180.py: la méthode I2C.start() n'est pas supportée par MicroPython sur Raspberry Pi Pico. La bonne nouvelle, c'est que tout semble fonctionner correctement si vous commentez ou effacez le contenu de la ligne 47 ("self._bmp_i2c.start()"):



Après avoir modifié le fichier bmp180.py, il est important de le copier à l'intérieur du Raspberry Pi Pico.


Script

Voici un script assez minimaliste qui affiche à chaque seconde la température (en degrés Celsius) et la pression (en kilopascals). 

-

-

À lire également

  • Pour transformer votre Raspberry Pi Pico en station météorologique, vous pouvez ajouter un DHT22 qui mesure, en plus de la température, l'humidité relative.


Yves Pelletier (Facebook)

samedi 5 juin 2021

Mesurer la température et l'humidité relative avec un DHT22 (AM2302) et un Raspberry Pi Pico

Le capteur DHT22 (également connu sous l'appellation AM2302) est conçu pour mesurer la température ambiante ainsi que l'humidité relative de l'air. Dans cet article, nous le branchons à un Raspberry Pi Pico programmé en MicroPython. Pendant que nous y sommes, nous en profiterons pour calculer le point de rosée et l'indice humidex.


Connexions

J'ai utilisé un module prêt à l'emploi qui comporte, en plus du capteur, une résistance et un condensateur.

Ce module ne comporte que 3 connecteurs: + et - pour l'alimentation, et OUT pour la transmission du signal.

  • Broche + du DHT22: sortie 3,3 V du Raspberry Pi Pico
  • Broche OUT du DHT22: broche GP15 du Raspberry Pi Pico
  • Broche - du DHT22: broche GND du Raspberry Pi Pico


Installation du pilote DHT22

Daniel Perron a publié un pilote MicroPython pour le DHT22 qui utilise de façon très efficace la fonctionnalité PIO (programmable input/output) du Raspberry Pi Pico. 

Le fichier "DHT22.py" doit être installé dans le Raspberry Pi Pico.



Script

Voici un exemple qui affiche à chaque seconde le résultat de la mesure de température et d'humidité. J'ai ajouté le calcul du point de rosée et de l'humidex.


-
-

Point de rosée et indice humidex

Connaissant la température et l'humidité relative, la formule de Heinrich Gustav Magnus-Tetens permet de calculer le point de rosée (il s'agit de la température sous laquelle la vapeur d'eau contenue dans l'air se condense sur les surfaces):



Dans le script, j'ai calculé α(T,RH) à la ligne 26, puis je l'ai utilisée à la ligne 49 pour le calcul du point de rosée (ligne 27).

Finalement, j'ai calculé l'indice humidex (ligne 30) grâce à l'équation mise au point par Masterton et Richardson:


À lire également

  • De façon plus particulière, si vous désirez fabriquer une mini station météo avec votre Raspberry Pi Pico, l'ajout d'un BMP180 vous permettrait de mesurer également la pression atmosphérique.


Yves Pelletier (Facebook)

jeudi 3 juin 2021

Robot quadrupède à 2 servomoteurs (Arduino)

Je vous présente aujourd'hui un robot quadrupède peu coûteux et très facile à fabriquer.  Il est constitué de deux servomoteurs: un premier servomoteur qui contrôle la paire de pattes avant, et un deuxième servomoteur qui contrôle la paire de pattes arrière. Pour que le robot puisse avancer, il est très important que les servomoteurs soient légèrement inclinés (les pattes ne sont donc pas parfaitement perpendiculaires au sol).


Avant d'aller plus loin, observons le robot en mouvement (il se déplace d'abord vers l'avant, puis ensuite vers l'arrière):

Fabrication du robot

J'ai fabriqué la structure mécanique de mon robot avec du carton, quelques baguettes de bois, un peu de colle et du ruban gommé.

Pour les pattes, j'ai utilisé quatre segments de crayons. Les crayons sont assemblées par paires, collés à chaque extrémité d'une tige de bois. 


Un palonnier de servomoteur est fixé sur la tige de bois, à mi-chemin entre les deux pattes (contrairement à ce que suggère la photo, c'est préférable de visser le palonnier au servomoteur avant de le fixer à la tige de bois).


Pour le châssis, j'ai découpé un rectangle dans du carton ondulé. ainsi que deux triangles pour les côtés. Deux petites ouvertures rectangulaires sont juste assez grandes pour qu'on puisse y insérer les servomoteurs.


On assemble le tout en ne lésinant pas sur le ruban gommé...


J'ai ajouté un peu de ruban gommé sur le bout des pattes pour les rendre plus adhérentes.

Circuit

J'ai fait mes tests avec une carte Arduino Uno mais, puisqu'il s'agit de contrôler deux servomoteurs, n'importe quel microcontrôleur pourvu de 2 sorties PWM fera l'affaire. Si votre robot est de petite taille, vous préférerez peut-être une carte de plus petite dimension comme l'Arduino Nano ou la STM32 Bluepill. Si vous optez pour l'ESP8266 ou l'ESP32, vous ajoutez la possibilité de contrôler votre robot via le réseau WiFi.

Sans surprise, chaque servomoteur est alimenté par une tension de 5 V, et contrôlé par une broche PWM (en l'occurrence les broches 9 et 10).

Installation de la bibliothèque Servo

Si ce n'est pas déjà fait, on installe la bibliothèque Servo au moyen du gestionnaire de bibliothèque.

Sketch

Voici le sketch utilisé: le robot marche un certain temps vers l'avant, puis ensuite vers l'arrière.

-

-

Les 4 phases du mouvement

La marche du robot s'effectue en 4 phases; à chaque phase, un seul des deux servomoteurs change de position:

Phase 1:  servo avant à 70°, servo arrière à 110°


Phase 2: servo avant à 110°, servo arrière à 110°


Phase 3: servo avant à 110°, servo arrière à 70°


Phase 4: servo avant à 70°, servo arrière à 70°


Sources

Ce robot est fortement inspiré de celui qui avait été présenté par Vinod sur son blog Electronics the King of Hobbies. J'ai été intrigué par la simplicité du robot, tout en regrettant que Vinod ait utilisé une carte MSP430 Launchpad programmée...en assembleur!

Le même principe a été utilisé par Edwindertien pour son robot SimpleWalker. Si vous disposez de la machinerie nécessaire, vous serez certainement intéressés par ses plans détaillés (il a fait un robot en contreplaqué et un autre en acrylique). Son sketch Arduino a servi de point de départ à mon propre sketch.

À lire également


Yves Pelletier (Facebook)