Dans ce tuto, nous contrôlons un afficheur "LED & KEY" à base de TM1638 au moyen d'un Raspberry Pi Pico. Ces modules comportent 8 afficheurs à 7 segments, 8 LEDs et 8 boutons poussoirs.
Connexions
Un avantage intéressant de ce module est que, hormis l'alimentation, trois broches du microcontrôleur suffisent pour afficher des nombres, allumer des LEDs et connaître l'état des boutons.
Vous pouvez choisir d'autres broches si vous le désirez, mais je vous suggère ces connexions:
Broche VCC du module TM1638: Sortie 3,3 V du Raspberry Pi Pico
Broche GND du module TM1638: Broche GND du Raspberry Pi Pico
Broche STB du module TM1638: Broche GP13 du Raspberry Pi Pico
Broche CLK du module TM1638: Broche GP14 du Raspberry Pi Pico
Broche DIO du module TM1638: Broche GP15 du Raspberry Pi Pico
Installation du pilote TM1638
Mike Causer a mis au point un pilote MicroPython pour le TM1638. Le fichier tm1638.py doit être copié dans le système de fichier MicroPython du Raspberry Pi Pico (ça peut se faire, par exemple, au moyen de Thonny).
Exemple de script MicroPython
Le pilote de Mike Causer met à notre disposition un grand nombre de méthodes permettant d'interagir avec le module TM1638:
number() pour afficher un nombre
show() pour afficher une chaîne de caractères
led() pour allumer ou éteindre une LED
leds() pour régler en une seule étape l'état des 8 LEDs
keys() pour connaître l'état des boutons poussoirs
Plusieurs exemples très instructifs sont fournis avec la bibliothèque. Voici un script qui affiche des nombres, allume et éteint des LEDs, puis affiche le numéro du dernier bouton sur lequel vous avez appuyé.
Le A4988 est un circuit intégré spécialement conçu pour le contrôle d'un moteur à pas bipolaire. Deux broches suffisent pour contrôler le moteur: une entrée qui provoque la rotation d'un pas, et une autre qui détermine la direction de la rotation.
Le circuit intégré est étonnement petit pour un dispositif capable de tolérer une tension de 35 V et un courant de 2 A. Le module est accompagné d'un petit dissipateur thermique qu'il est conseillé de coller sur le circuit intégré.
Le module comporte 16 broches.
VDD et GND servent à l'alimentation du circuit intégré (3 V à 5,5 V)
Vmot et GND servent à l'alimentation du moteur (8 V à 35 V). Il faut placer un condensateur de 100 µF en parallèle avec l'alimentation pour atténuer les surtensions.
1A, 1B, 2A et 2B sont les sorties vers le bobinage 1 et le bobinage 2 du moteur pas à pas.
Chaque fois que l'entrée STEP passe du niveau logique bas au niveau logique haut, le moteur tourne d'un pas.
Le moteur tourne dans le sens horaire si l'entrée DIRECTION est au niveau logique haut, et dans l'autre sens si elle est au niveau logique bas.
On peut désactiver le module en plaçant l'entrée ENABLE au niveau logique bas. Si vous ne branchez rien à cette entrée, elle demeure par défaut au niveau logique haut.
On peut mettre le module en veille (pour qu'il consomme moins d'énergie) en plaçant son entrée SLEEP au niveau logique bas. Cette entrée est maintenue au niveau logique haut pendant l'utilisation du moteur.
La broche RESET peut être mise brièvement au niveau logique bas pour déclencher une réinitialisation du module (suite à un arrêt pour cause de surchauffe, par exemple). Cette entrée est maintenue au niveau logique haut pendant l'utilisation du moteur.
Les broches MS1, MS2 et MS3 permettent de sélectionner différents degrés de micropas (microstepping). Si vous ne les connectez pas, elles sont, par défaut, au niveau logique bas et le moteur fonctionnera en pas complets. Mais il est possible de régler ces broches de façon à obtenir des demi pas, des quarts de pas, des huitièmes de pas et des seizièmes de pas.
Pas complet: MS1 Bas - MS2 Bas - MS3 Bas
Demi pas: MS1 Haut - MS2 Bas - MS3 Bas
Quart de pas: MS1 Bas - MS2 Haut - MS3 Bas
Huitième de pas: MS1 Haut - MS2 Haut - MS3 Bas
Seizième de pas: MS1 Haut - MS2 Haut - MS3 Haut
Connexions du module A4988 à l'Arduino
Voici comment j'ai branché le module A4988 à une carte Arduino Uno pour effectuer quelques tests.
Réglage du courant maximal
Un petit potentiomètre sert à limiter le courant pour éviter qu'un courant trop intense n'endommage le moteur ou le circuit intégré. Vous pouvez mesurer le courant en plaçant le multimètre en série avec un des bobinages du moteur, ou encore mesurer la tension entre le potentiomètre et la masse. Le courant en ampères est approximativement égal à la tension mesurée (en volts) multipliée par 2,5. Cette mesure dépend de la tension à laquelle est soumise l'entrée Vmot, il faut donc refaire ce réglage si vous modifiez l'alimentation du moteur.
Un exemple de sketch
Voici un sketch qui fait tourner le moteur rapidement dans une direction, et lentement dans l'autre. Le programme est très simple: il n'a pas à alterner la direction du courant dans chaque bobinage comme il aurait à le faire pour un L293D, puisque c'est le A4988 qui fait tout le travail.
Le moteur tourne d'un pas chaque fois que le signal de son entrée STEP passe du niveau logique bas au niveau logique haut. Plus ces impulsions sont rapides, plus le moteur tourne rapidement (la vitesse de rotation est contrôlée par des delay() dans le sketch: un délai court correspond à une vitesse rapide).
Le sens de rotation du moteur dépend de l'état logique de la broche DIRECTION.
Je poursuis mon exploration du Raspberry Pi Pico en le combinant à un petit écran couleur SPI de 128 par 160 pixels (1.8") muni du contrôleur ST7735. Le Raspberry Pi Pico sera encore une fois programmé en MicroPython.
L'écran
L'écran que j'ai utilisé porte les mentions "1.8 SPI TFT 128*160" et "KMR-1.8 SPI".
Il comporte 16 connecteurs, mais nous en utiliserons 9, puisque 3 connecteurs ne servent à rien, et 4 autres servent au lecteur de carte SD, que nous n'utiliserons pas pour l'instant.
Connexions
J'ai branché l'écran au Raspberry Pi Pico de cette façon:
Broche LED- de l'écran - Broche GND du Pico
Broche LED+ de l'écran - Sortie 3,3 V du Pico
Broche SD_CS de l'écran - pas branchée (carte SD)
Broche MOSI de l'écran - pas branchée (carte SD)
Broche MISO de l'écran - pas branchée (carte SD)
Broche SCK de l'écran - pas branchée (carte SD)
Broche CS de l'écran - broche GP 15 du Pico
Broche SCL de l'écran - broche GP 6 du Pico
Broche SDA de l'écran - broche GP7 du Pico
Broche AO de l'écran - Broche GP 13 du Pico
Broche RESET de l'écran - Broche GP 14 du Pico
Broches NC de l'écran (il y en a trois): pas branchées
Broche VCC de l'écran: Broche VBUS du Pico *
Broche GND de l'écran: Broche GND du Pico
* Mon écran comporte un régulateur de tension et doit donc être alimenté avec une tension de 5 V. Ce n'est pas le cas pour tous les écrans, toutefois.
Pilote MicroPython pour le ST7735
J'ai utilisé le pilote pour ST7735 de Boochow et Carver. Le fichier "ST7735.py" doit être copié dans le système de fichiers MicroPython du Pico (si vous utilisez Thonny, ça peut se faire par le menu Fichier - Enregistrer une copie).
Deux exemples sont disponibles au même endroit: graphicstest.py, une démonstration mise au point par Adafruit et tftbmp.py qui affiche le contenu d'un fichier bmp enregistré dans la mémoire flash du Pico. Les deux exemples sont parfaitement fonctionnels à la condition de modifier la numérotation des broches utilisées.
Fichier de définition de police de caractère
Pour afficher du texte sur l'écran, il faut définir une police de caractère. Pour mon script ci-dessous, j'ai utilisé la police sysfont mis à notre disposition par Guy Carver. Ici encore, le fichier sysfont.py doit être enregistré dans la mémoire Flash du Pico.
Exemple de script
J'ai préparé un court script en MicroPython qui illustre l'utilisation des principales méthodes permettant de dessiner des formes géométriques de base à l'écran: affichage de texte, contrôle d'un pixel individuel, tracé d'une droite, d'un rectangle ou d'un cercle.