mox-0005-02-max-maxfield-with-12x12-ping-pong-ball-array_1540-800.jpg
Accueil » Actualités » Ajoutez facilement la détection de mouvement et d’orientation pour améliorer vos projets

Ajoutez facilement la détection de mouvement et d’orientation pour améliorer vos projets



Au moyen de capteurs MEMS et de cartes de dérivation peu coûteuses, il est facile d’ajouter la détection de mouvement et d’orientation à vos projets de loisirs et professionnels.

Dans une chronique précédente, j’ai présenté mon réseau de balles de ping-pong 12×12. Pour rappel, chacune des balles de ping-pong est équipée d’une LED tricolore en forme de WS2812B. Ceux-ci sont communément appelés NeoPixels car c’est le nom générique d’une collection de produits basés sur WS2812B d’Adafruit.

Dans le cas de ma matrice 12×12, j’ai découpé une longueur de bande NeoPixel de 30 pixels par mètre en segments individuels que j’ai attachés à l’arrière des balles de ping-pong. Cette approche a bien fonctionné pour ce projet et c’est beaucoup moins cher que d’acheter des appareils montés individuellement ou emballés. Adafruit propose des bandes de 60 et 144 pixels par mètre, mais vous vous retrouvez avec des tampons en cuivre beaucoup plus petits avec lesquels il est plus difficile de travailler lorsque vous coupez la bande en morceaux.

En fait, j’ai initialement créé un petit banc d’essai pour évaluer des implémentations alternatives. Dans le premier, j’ai simplement attaché le NeoPixel directement à l’arrière de la balle de ping-pong à l’aide de colle chaude. Dans le second, j’ai découpé un trou de 3/8″ de diamètre à l’arrière de la balle de ping-pong afin que le NeoPixel soit efficacement monté à l’intérieur de la balle.

En guise de conseil, n’essayez pas d’utiliser une perceuse électrique pour créer des trous dans les balles de ping-pong car cela finira en larmes. Une bien meilleure approche consiste à découper les trous à l’aide de petits ciseaux à ongles incurvés. De plus, comme je l’ai appris à mes dépens, vous ne devriez jamais appliquer de colle chaude sur les NeoPixels actuellement sous tension, car vous pourriez vous retrouver avec une petite larme qui coule sur votre joue lorsque vous les regardez « s’enflammer et mourir ». Lorsque cela m’est arrivé, j’ai d’abord pensé que la colle pouvait conduire à l’état liquide, provoquant ainsi un court-circuit. J’ai également considéré les décharges électrostatiques (ESD) comme un coupable potentiel. Cependant, après avoir brandi mon multimètre et consulté des collègues, nous avons décidé que le problème était un emballement thermique.

Adafruitmox-0005-01-neopixel-strip-from-adafruit.jpg

Bande NeoPixel de 30 pixels par mètre.

Dans le cas de ce projet particulier, j’ai choisi d’utiliser un tout petit microcontrôleur Seeeduino XIAO (voir Dites bonjour au XIAO), qui ne coûte que 4,90 $ environ et a à peu près la même taille qu’un timbre-poste ordinaire. Cette petite beauté, qui peut être programmée à l’aide de l’environnement de développement intégré (IDE) d’Arduino, dispose d’un processeur Arm Cortex-M0+ 32 bits cadencé à 48 MHz avec 256 Ko de mémoire flash et 32 ​​Ko de SRAM, fournissant ainsi toutes les ressources dont j’ai besoin. besoin de piloter ma baie. Il prend également en charge la bibliothèque NeoPixel d’Adafruit, qui est, après tout, l’objet de cet exercice particulier.

Max Maxfieldmox-0005-02-max-maxfield-with-12x12-ping-pong-ball-array_770.jpg

Max est raisonnablement confiant que la gamme de balles de ping-pong est la meilleure de sa rue.

En plus d’expérimenter divers effets d’éclairage, j’ai également utilisé mon tableau comme mécanisme d’affichage pour un certain nombre d’applications, telles que la mise en œuvre d’un automate cellulaire sous la forme de Conway’s Game of Life (GOL). De plus, j’ai utilisé la matrice comme outil de visualisation pour une variété d’expériences, y compris la détection de mouvement et d’orientation.

Quand vous étiez enfant, avez-vous déjà eu un de ces jouets qui impliquaient un labyrinthe en bois avec une bille de verre ou un roulement à billes en métal ? Le labyrinthe était monté dans une boîte en bois avec deux boutons sur les côtés. Un bouton inclinait le labyrinthe de gauche à droite, tandis que l’autre le penchait en avant ou en arrière. L’idée était d’utiliser les boutons pour guider la balle dans le labyrinthe sans la laisser tomber à travers les trous.

Eh bien, j’ai décidé de mettre en œuvre quelque chose comme ça en utilisant mon tableau de balles de ping-pong. L’idée est de maintenir le réseau horizontalement, puis d’utiliser un capteur de mouvement et d’orientation MEMS pour détecter le moment où le réseau est incliné et faire « rouler » une « boule » (pixel illuminé).

C’est là que les choses commencent à devenir un peu confuses parce que la terminologie est partout. Commençons par le fait que nous avons trois axes, que nous pouvons considérer comme X (gauche et droite), Y (haut et bas) et Z (avant et arrière). On peut aller et venir le long de ces axes, ce qui nous donne donc trois degrés de liberté (3-DOF). Nous pouvons également tourner autour de ces axes, fournissant ainsi un autre 3-DOF. L’essentiel est que nous n’avons que 6-DOF à notre disposition, alors pourquoi voyons-nous des publicités pour des capteurs qui prétendent prendre en charge 9-DOF ou plus ? Autant que je sache, c’est parce que cela facilite la vie de tout le monde.

Dans le but d’ajouter la détection de mouvement (dans quelle direction nous déplaçons) et d’orientation (dans quelle direction sommes-nous face) à nos projets, il existe trois principaux capteurs d’intérêt. Accéléromètres, qui détectent l’accélération linéaire ; les gyroscopes, qui détectent la rotation angulaire ; et les magnétomètres, qui détectent les champs magnétiques. Ces trois éléments sont disponibles en variantes à 1 axe, 2 axes et 3 axes. Ainsi, si vous avez une solution de capteur qui comprend un accéléromètre à 3 axes, un gyroscope à 3 axes et un magnétomètre à 3 axes, alors cela serait communément (si incorrect) appelé capteur 9-DOF.

Bien sûr, rien n’est simple. Par exemple, l’utilisation des données de ces capteurs sous leur forme brute peut présenter une tâche d’une telle complexité qu’elle donne envie à votre cerveau de sortir de vos oreilles. De plus, chaque type de capteur a ses propres « pièges », comme le fait que les accéléromètres sont soumis au bruit causé par les vibrations, tandis que les gyroscopes peuvent souffrir de dérive en raison du fait qu’ils effectuent constamment une intégration.

La solution consiste à utiliser la « fusion de capteurs », qui fait référence à l’acte de combiner des données sensorielles dérivées de sources disparates de sorte que les informations résultantes soient moins incertaines que ce qui serait possible si les données de ces sources étaient utilisées individuellement.

Bien sûr, la fusion de capteurs est elle-même horriblement compliquée et consomme une puissance de calcul considérable, c’est pourquoi c’est une bonne idée de demander à quelqu’un d’autre de le faire pour vous. Dans mon cas, j’ai choisi d’utiliser l’une des cartes de dérivation 9-DOF Fusion (BOB) d’Adafruit, qui comprend un capteur MEMS BNO055 de Bosch.

Adafruitmox-0005-03-9dof-sensor-breakout-board.jpg

Une carte de dérivation Fusion à 9 degrés de liberté.

En plus d’un accéléromètre à 3 axes, d’un gyroscope à 3 axes et d’un magnétomètre à 3 axes, le BNO055 contient également un processeur Arm Cortex-M0+ 32 bits qui effectue la fusion de capteurs et – au moyen d’un bus I2C – me fournit le mouvement et des données d’orientation sous une forme que je peux utiliser sans avoir à retourner à l’université pour obtenir un doctorat. Mieux encore, les gens d’Adafruit fournissent un exemple de code qui m’a littéralement permis de démarrer en quelques minutes.

Comme vous pouvez le voir sur cette vidéo, mes premiers tests étaient assez rudimentaires. Tout ce que je fais actuellement, c’est détecter une inclinaison supérieure à 10 degrés et faire « rouler » la « balle » dans la direction appropriée jusqu’à ce qu’elle heurte un côté ou un coin.

Bien sûr, maintenant que nous avons notre preuve de concept, le monde est notre homard (ou coquillage, crustacé ou mollusque de votre choix). Dans le cas du réseau de balles de ping-pong, ma prochaine étape sera de modéliser un peu mieux la physique, par exemple en donnant à la « balle » une sorte d' »inertie » et en faisant en sorte que l’augmentation de l’angle d’inclinaison provoque la « balle » pour accélérer plus vite.

Ensuite, je pourrais considérer mon pixel en mouvement comme une créature vivante comme la tête d’un serpent. Des pixels colorés représentant « la nourriture » ​​pourraient apparaître et disparaître de manière aléatoire. Incliner le réseau pour guider la tête du serpent dans une particule de nourriture pourrait faire augmenter le corps du serpent d’un pixel. De plus, ou alternativement, des pixels « trous » peuvent apparaître et disparaître de manière aléatoire. Frapper l’un d’eux pourrait faire tomber notre balle ou notre serpent dans le trou, auquel cas « Game Over ! »

En fait, plus j’y pense, plus je réalise que je peux utiliser la détection de mouvement et d’orientation pour améliorer nombre de mes projets. Par exemple, je travaille actuellement sur une bande de 10 caractères d’affichages à 21 segments. En utilisant mon capteur 9-DOF, en inclinant ma bande, je pouvais faire défiler le texte vers la gauche ou la droite sur l’écran. J’en parlerai davantage dans une prochaine chronique. En attendant, j’aimerais entendre vos réflexions sur la façon dont vous pourriez augmenter vos propres projets avec des capacités de détection de mouvement et d’orientation.

Publications similaires