Ajouter la détection de mouvement et d'orientation à des projets de loisirs

Je ne sais pas pourquoi, mais depuis longtemps, j'aime m'occuper en construisant des projets impliquant des LED. Comme je le dis souvent : « Il suffit de me montrer une LED qui clignote pour que je sois en extase. » Plus récemment, je me suis intéressé à l'ajout de la détection de mouvement et d'orientation à mes projets. En fait, je viens d'ajouter cette fonctionnalité à une matrice 12 x 12 composée de balles de ping-pong, équipées chacune d'une LED tricolore.

Mais peut-être que je devrais commencer par le début. Au printemps 2020, j'ai discuté par e-mail avec un ami dénommé David Humrich, qui vit en Australie et qui est ingénieur à la retraite. David m'a dit qu'il avait acheté une petite matrice à LED tricolores et m'a demandé ce qu'il pouvait en faire. En guise de réponse, j'ai publié une petite vidéo d'un programme de type ver simple que j'ai implémenté il y a quelques années sur une matrice LED 8 x 8.

En créant cette vidéo pour David, je me suis souvenu de l'un de mes projets que j'avais mis de côté, qui consistait à fabriquer une plus grande matrice. J'ai vu quelques démonstrations très intéressantes basées sur des balles de ping-pong, alors j'ai décidé de faire pareil. J'ai commencé en achetant un grand sac de balles de ping-pong ordinaires et bon marché, que j'ai montées sous forme de matrice 12 x 12 = 144 (Figure 1).

Figure 1 : Votre serviteur présentant fièrement sa matrice 12 x 12 de balles de ping-pong, chacune contenant une LED tricolore. (Source de l'image : Max Maxfield)

En ce qui concerne les LED, le modèle NeoPixel WS2818 basé sur un circuit d'attaque LED à trois canaux d'Adafruit, comme un ruban 1376 avec 30 NeoPixels par mètre, est un excellent choix pour ce type de projet. Ce ruban de cinq mètres m'a permis d'avoir 150 pixels : 144 pour la matrice, un pour servir de convertisseur de niveau de tension et cinq comme roues de secours. J'ai coupé le ruban en morceaux d'un seul pixel et fixé un pixel au dos de chaque balle de ping-pong.

J'ai réalisé le câblage de mes pixels en serpentin (zigzag). J'ai commencé en partant d'un coin, puis j'ai traversé toute la matrice jusqu'en haut. En réalité, si vous décidez de fabriquer votre propre matrice, l'ordre dans lequel vous réalisez le câblage de vos propres pixels n'a pas vraiment d'importance, car il faut voir cette matrice comme un ensemble de 12 colonnes (axe X) et de 12 lignes (axe Y), toutes numérotées de 0 à 11, avec le pixel [0,0] en bas à gauche (en étant face à la matrice). Ainsi, lors de l'écriture d'un programme pour commander la matrice, il faut inclure une fonction du genre GetNeoNum() qui accepte des valeurs X et Y en tant qu'arguments et qui, à l'aide d'un algorithme qui dépend de la façon dont le câblage de la matrice a été réalisé, renvoie le numéro du pixel correspondant dans la chaîne.

En ce qui concerne la commande de cette matrice, j'avais besoin d'un microcontrôleur avec une quantité de mémoire raisonnable, une horloge relativement rapide et une capacité de traitement considérable, car je prévoyais d'implémenter des effets intéressants, notamment des dégradés multicolores. J'ai opté pour la carte 102010328 Seeeduino XIAO de Seeed Technology (Figure 2). La carte XIAO, qui est alimentée par un microcontrôleur ATSAMD21G18A-MUT SAMD21G18 d'Atmel, est aussi compacte qu'un timbre standard, ce qui en fait la plus petite carte de développement pour microcontrôleur compatible Arduino de la gamme Seeeduino. Le microcontrôleur intègre un cœur de processeur Arm Cortex-M0+ 32 bits fonctionnant à 48 mégahertz (MHz) et est doté d'une mémoire Flash de 256 kilo-octets (Ko) et d'une mémoire SRAM de 64 Ko.

Figure 2 : Actuellement la plus petite carte de développement de microcontrôleur compatible Arduino de la gamme Seeeduino, la carte Seeeduino XIAO, compatible avec les montages d'essai, fournit aux utilisateurs un puissant processeur Arm Cortex-M0+ 32 bits fonctionnant à 48 MHz. (Source de l'image : Seeed Studio)

Chacune des 11 broches de la carte XIAO peut être utilisée comme entrée analogique, entrée numérique ou sortie numérique. Dix des broches prennent en charge la modulation de largeur d'impulsion (PWM), et l'une d'entre elles est équipée d'un convertisseur numérique-analogique (CNA), ce qui lui permet de fournir une véritable fonctionnalité de sortie analogique. De plus, au besoin, les broches 4 et 5 peuvent être utilisées pour prendre en charge une interface I2C, les broches 6 et 7 peuvent être utilisées pour prendre en charge une interface UART, et les broches 8, 9 et 10 peuvent être utilisées pour prendre en charge une interface SPI.

Comme je l'ai dit plus tôt, je me suis récemment intéressé à l'ajout de la détection de mouvement et d'orientation à mes projets. En guise de test, j'ai décidé d'ajouter cette fonctionnalité à ma matrice de balles de ping-pong 12 x 12.

Je souhaitais avoir une petite carte Breakout (BOB) avec un capteur MEMS (microsystèmes électromécaniques), où ce capteur contenait un accéléromètre à 3 axes, un gyroscope à 3 axes et un magnétomètre à 3 axes. Il ne m'a pas fallu longtemps pour me rendre compte que la complexité associée aux manipulations et à la compréhension des données de capteur brutes allait me faire fondre le cerveau. En guise d'alternative, j'ai choisi d'utiliser la carte Breakout 2472 d'Adafruit, qui intègre un capteur BNO055 à 9 degrés de liberté (DoF) de Bosch.

Figure 3 : En plus d'un accéléromètre à 3 axes, d'un gyroscope à 3 axes et d'un magnétomètre à 3 axes, le capteur BNO055 de la carte Breakout 2472 d'Adafruit inclut un processeur Arm Cortex-M0 qui effectue la fusion des capteurs. (Source de l'image : Adafruit)

La carte Breakout communique avec le microcontrôleur XIAO à l'aide d'une interface I2C à deux fils. L'avantage du capteur BNO055 est qu'il contient également un processeur Arm Cortex-M0+ 32 bits qui récupère les données brutes des trois capteurs, effectue une fusion sophistiquée des capteurs et me fournit les données dont j'ai besoin sous forme exploitable. Comme nous pouvons le voir dans cette vidéo, mon premier test consistait à tenir ma matrice à l'horizontale, puis à faire en sorte qu'une « balle » (pixel) fasse tout le tour en « roulant » en inclinant la matrice.

Conclusion

Ce premier test s'est passé bien mieux que prévu, mais il est en réalité assez simpliste. Il suffit de détecter lorsque l'inclinaison de la matrice dépasse une certaine valeur (définie ici sur 10 degrés), puis de faire bouger la « balle » dans la direction correspondante à une vitesse constante. La prochaine étape consistera à modéliser de façon plus précise des éléments comme l'inertie et l'accélération, puis à utiliser ces capacités pour implémenter une série de jeux.

L'essentiel est que ces premières expériences concluantes m'ont encouragé à ajouter la détection de mouvement et d'orientation à d'autres projets, pour les rendre encore plus fabuleux qu'ils le sont déjà. Et vous ? Avez-vous des projets qui pourraient tirer parti de la possibilité de détecter le mouvement et l'orientation ?

À propos de l'auteur

Image of Max Maxfield

Clive "Max" Maxfield a obtenu sa licence en ingénierie de contrôle en 1980 à l'université de Sheffield Hallam, en Angleterre, et a commencé sa carrière en tant que concepteur de processeurs (CPU) pour ordinateurs centraux. Au fil des ans, Max a tout conçu, de puces en silicium aux cartes à circuit imprimé, en passant par les amplificateurs d'ondes cérébrales et les moteurs de prédiction steampunk (ne posez pas de questions !). Il a également été à la pointe de l'automatisation de la conception électronique (EDA) pendant plus de 30 ans.

Max est l'auteur et/ou le co-auteur d'un certain nombre d'ouvrages, dont Designus Maximus Unleashed (interdit en Alabama), Bebop to the Boolean Boogie (un guide non conventionnel de l'électronique), EDA: Where Electronics Begins, FPGAs: Instant Access, et How Computers Do Math. Consultez son blog « Max's Cool Beans ».

More posts by Clive "Max" Maxfield
 TechForum

Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.

Visit TechForum