- 25 views
Cette application va vous permettre d'apprendre à piloter une matrice composée de 70 leds avec une carte Arduino. Pour ce faire nous utiliserons le module ClickBoard MIKROE-1993 "7x10 R Click qui intègre cette matrice qui sera capable d'afficher toutes sortes de choses (lettres, chiffres, icônes...). Dans le cadre de cette application, nous allons utiliser la matrice pour y afficher le dessin d'un petit bateau à voile. Ce dernier sera composé de plusieurs points (leds allumées).
Les modules ClickBoard™ sont de petits modules additionnels développés par la société MikroElektronika. Ils sont conçus pour s’enficher facilement sur une multitude de cartes de développement via l’interface mikroBUS™, un standard matériel et logiciel pensé pour simplifier le prototypage. Elles permettent d’ajouter rapidement une fonctionnalité sans câblage complexe. Leur format DIL vous permettra également des les utiliser sur des breadboard (boite de connexions sans soudure).
Des modules ClickBoard pour toutes vos applications
Il existe plusieurs centaines de ClickBoard, organisés par catégories
- Capteurs : température, pression, humidité, gaz, mouvement, lumière, etc...
- Communication : Wi-Fi, Bluetooth, LoRa, GSM/LTE, NFC, Ethernet…
- Affichage : écrans OLED, LCD, e-paper, LED matrices.
- Interface utilisateur : boutons, encodeurs, joysticks, pavés tactiles.
- Audio : microphones, DAC/ADC audio, amplificateurs.
- Alimentation : convertisseurs DC-DC, gestion de batterie.
- Contrôle & actionneurs : relais, moteurs, drivers LED.
- Et beaucoup d'autres encore...
Les avantages des ces modules sont multiples :
- Plug-and-play : une fois insérés dans le socket, ils sont immédiatement utilisables.
- Standardisation : chaque module suit la même interface mikroBUS™ (alimentation, UART, SPI, I²C, GPIO, PWM, interruptions).
- Large écosystème : plus de 1900 ClickBoard (à l'heure ou nous rédigeons ce blog) couvrant presque tous les besoins en prototypage.
- Support logiciel : MikroE fournit des bibliothèques prêtes à l’emploi et un IDE (MikroSDK).
En résumé :
Les modules ClickBoards permettent d’ajouter très rapidement des fonctionnalités matérielles à un projet embarqué, sans avoir à concevoir son propre circuit imprimé ou à gérer du câblage.
Dans le cas d'une utilisation avec une carte Arduino, il vous sera possible d'utiliser 2 solutions au choix:
Solution 1 : en reliant le module ClickBoard MIKROE-1993 "7x10 R Click à l'arduino à l'aide de straps mâle /femelle en suivant ce schéma
Solution 2 : en enfichant une platine Shield MIKROE-1581 sur l'arduino. Cette platine shield intègre 2 connecteurs sur lesquels vous pourrez a leurs tours enficher jusqu'à 2 modules ClickBoard afin qu'ils puissent être pilotés par la carte Arduino. Le module MIKROE-1993 devra être placé sur le support 1 de la platine shiels MIKROE-1581.
Présentation du module ClickBoard MIKROE-1993 "7x10 R Click
Le module 7x10 R click repose sur l'utilisation de 2 mini-matrices à leds rouges (5 x 7 leds) pilotées (via un driver de puissance ULN2003) par 2 circuits intégrés 74HC595 (eux-mêmes associés à un circuit intégré 4017). A noter que ce module existe aussi en versions avec des leds vertes ou jaunes ou bleues.
Le circuit intégré 74HC595 est un registre à décalage destiné à être piloté via une liaison série de type SPI. Pour l'utiliser, il vous suffira d'activer celui-ci via une broche spéciale, puis de lui envoyer une donnée sur 8 bits (via ce port série), puis de le désactiver.
A ce moment, chacun des bits de la donnée reçue par le 74HC595 seront « dispatchés » sur ses sorties parallèles. Son utilisation première est de pouvoir par exemple ajouter 8 sorties à votre microcontrôleur au moyen d'une liaison série. Afin de pouvoir augmenter le nombre de sorties, il est possible de cascader 2 circuits intégrés 74HC595 (c’est ce qui est d'ailleurs fait sur le module «7x10 R click »).
Dans cette configuration, on devra envoyer 2 octets (l'un après l'autre) via le port série SPI vers les 74HC595, lesquels à leur désactivation, feront apparaître (à eux deux ) les 16 bits (des 2 octets envoyés) sur chacune de leurs sorties.
C'est cette même configuration qui est utilisée pour piloter la matrice à led de votre module (laquelle est constituée de 7 lignes comportant 10 leds chacune). En regardant de plus près, cette matrice est en fait constituée de 2 mini-matrices placées l'une contre l'autre (elles-mêmes composées de 7 lignes de 5 leds chacune).
L'étude du schéma théorique du module «7x10 R click » montre que les 74HC595 pilotent chacun 5 leds de chacune des mini-matrices. Dès lors, il en résulte qu'on ne pourra allumer que les leds de la première ligne de la matrice principale !
C'est à ce moment qu'intervient le circuit intégré 4017. Ce compteur va nous permettre en fait de sélectionner une à une les 7 lignes de la matrice pour que les 74HC595 allument également tour à tour leurs leds.
La méthode générale va donc consister à sélectionner la première ligne de 10 leds (via le compteur 4017), à y allumer les leds nécessaires (via les 74HC595 en envoyant via le port SPI les 2 x 5 leds à allumer), puis via le 4017, à passer à la deuxième ligne, à allumer à nouveau les leds de cette 2ème ligne via les 74HC595 et ainsi de suite jusqu'à la 7ème ligne.
Le problème majeur est que lorsque le 4017 va passer d'une ligne à l'autre, seules les leds de la ligne sélectionnée seront allumées ! … Mais pas de panique, grâce au principe de la persistance rétinienne (*), en balayant très rapidement les lignes de la matrices, votre œil verra les leds de toutes les lignes allumées en même temps.
Programme de pilotage du module 7x10 R Click avec l'Arduino
Voyons maintenant en pratique comment cela se traduit le pilotage du module par la carte Arduino. L'utilisation du bus de communication série SPI est relativement simple à mettre en œuvre grâce à une librairie spécialisée qui est intégrée en début de programme.
#include <SPI.h>
Une liaison SPI nécessite plusieurs broches de communications, lesquelles sont déclarées et associées à certaines broches de votre platine en début de programme. Les broches dédiées au signal d'horloge et au Reset du compteur 4017 sont également déclarées à cet endroit.
La suite du programme fait appel à la déclaration d'une variable de type tableau. Ce tableau va nous permettre de mémoriser le dessin du petit bateau à voile que nous désirons faire afficher par la matrice. La première ligne de données concerne l'état que devront prendre les 7 lignes (de 5 leds) de la mini-matrice à led de droite La deuxième ligne de données concerne l'état que devront prendre les 7 lignes (de 5 leds) de la mini-matrice à led de gauche. Ces données étant sur 8 bits, il en résulte que les 3 premiers bits de poids forts seront toujours à 0.
La suite du programme concerne les initialisations et attributions de fonctionnement (entrée ou sortie) des différents ports utilisés pour l'application.
Vient ensuite la boucle principale dans laquelle on va venir rafraîchir en permanence chacune des lignes de la matrice principale.
L'opération consiste en premier lieu à effectuer un RESET du compteur 4017 (afin qu'il sélectionne la première ligne de la matrice).
Le programme se poursuit avec une boucle for (byte i = 0 ; i < 7; i++) au cours de laquelle on va tour à tour sélectionner les 74HC595, leur envoyer les données via la variable Matrice[0][i], puis désélectionner les 74HC595 afin que les données envoyées activent alors les leds de la ligne en cours de sélection.
Le programme effectue une légère temporisation via l'instruction delay(2); afin d'éviter un phénomène de scintillement (toujours lié à la persistance rétinienne) et obtenir un affichage stable.
Le programme se poursuit en vidant les buffers des 74HC575 afin qu'ils soient prêts à recevoir une nouvelle salve de données.
A ce stade, un coup d'horloge est généré sur le 4017 afin de passer à la ligne suivante... et ainsi de suite jusqu'à la 6 ème ligne.
La même opération est effectuée à la sortie de la boucle pour la 7 ème ligne (laquelle a été gérée de la sorte pour éviter que le 4017 ne passe sur la 8 ème ligne (qui n'existe pas) suite à un nouveau coup d'horloge.
La boucle principale recommence alors indéfiniment son cycle avec de nouveau l'affichage sur la ligne 1, puis sur la ligne 2... et ainsi de suite.
Afin que vous compreniez bien le fonctionnement de l'ensemble, nous avons ajouté une ligne de temporisation en commentaire.
// delay(50);
Amusez-vous à la rendre active en enlevant les 2 caractères // en début de ligne et vous verrez alors l'affichage de la matrice s'effectuer de façon décomposée (l'effet de persistance rétinienne étant alors inopérant).
Vous avez maintenant toutes les explications nécessaires pour modifier le petit dessin que nous avons choisi dans notre exemple afin de pouvoir afficher d'autres motifs, ou des lettres ou des chiffres.
Vous pouvez retrouver le code source de ce programme en cliquant ici : code source Arduino & MIKROE-1993
(*) La persistance rétinienne est un phénomène physiologique lié à la vision : lorsqu’une image se forme sur la rétine, elle y demeure environ 1/10e de seconde même après la disparition du stimulus lumineux. Cela signifie que si plusieurs images s’affichent rapidement les unes après les autres (comme au cinéma ou dans une animation), elles se superposent dans notre perception, donnant l’illusion d’un mouvement continu au lieu d’une succession d’images fixes.