Mise en oeuvre du module GY-521 pour Arduino

Arduino

Le module GY-521

[Le MPU6050]

Sommaire :

 

Présentation générale   

Arduino

MPU6050

Le module GY-521

Code et configuration du module GY-521   

Les variables

Le Setup

La fonction setupMPU()

 

Le void loop

 

Présentation générale

Arduino

Arduino est une marque qui produit des cartes électroniques qui possèdent un microcontrôleur. Un microcontrôleur est un circuit qui contient les principaux éléments d’un ordinateur, c’est à dire, par exemple, processeur, mémoires et entrées-sorties. Les cartes peuvent donc être utilisées pour construire des objets interactifs (par exemple un thermomètre ou un capteur d’humidité) mais la carte peut aussi être connectée à un ordinateur pour communiquer avec les logiciels. Le logiciel de programmation des cartes Arduino est un logiciel Java libre qui permets aussi bien de programmer que de compiler. Cependant, on peut se passer de ce logiciel et simplement donner les “instructions” avec l’interface (en ligne de commande). Le firmware et les commandes sont envoyés via le câble branché à la carte Arduino (USB par exemple) ou par Bluetooth si la carte possède la composition pour. Il faut aussi savoir que le langage de programmation pour l’Arduino est le langage C++ qui est lié à une bibliothèque de programmation Arduino ce qui permets d’utiliser la carte et de gérer les autres périphériques (entrée/sorties). Il existe actuellement différentes cartes et différents matériaux qui permettent d’effectuer différents objets. Plusieurs logiciels sont aussi en ligne pour faciliter la programmation des cartes Arduino.

 

Exemple d’une carte Arduino avec port USB

 

MPU6050

La MPU6050 est une carte Arduino. Etant donné qu’elle est couplée avec le module GY-521 je me dois de la présenter et expliquer ce qu’elle est réellement. Cette carte contient en fait deux microsystèmes électromécaniques, c’est à dire deux microsystèmes composés d’un ou de plusieurs éléments mécaniques qui vont utiliser de l’électricité. Ce sont, en général, des microsystèmes qui permettent de réaliser des capteurs ou des actionneurs. La MPU6050 contient donc deux de ces microsystèmes : un gyroscope (le GY-521) et un accéléromètre. L’accéléromètre permet de retourner une force ou une accélération. Ce qui par exemple, peut être très utile si l’on veut créer un objet qui se déplace ou qui doit aller à une certaine vitesse. C’est aussi une carte qui permets de récupérer les valeurs des microsystèmes assez facilement. Les autres avantages de cette carte sont : que l’on peut faire de nombreuses choses (on peut aussi contrôler un magnétomètre par exemple) et son prix est avantageux.

 

 

Le module GY-521

Comme dit ci-dessus, le module GY-521 est le gyroscope du MPU6050. C’est plutôt sur ce module que l’on va se pencher. Celui-ci nous permets de retourner une vitesse angulaire de rotation sur trois axes en degrés par seconde. Un objet qui aura l’effet gyroscopique sera donc équilibré et tournera sur un axe mais, cependant, il résistera au changement de direction (petit rappel, c’est ce que vit une roue de véhicule !). Le capteur de cette carte nous donne pas directement l’angle mais on peut l’obtenir avec le temps. Si l’on veut regarder d’un peu plus près les spécificités, le GY-521 utilise 4 échelles de ±250, ±500, ±1000, et ±2000 degrés/sec. Concrètement, qu’est-ce que l’on peut faire avec cela ? Des stabilisateurs, la rotation d’objets en 3D, des commandes en mouvement ou encore un détecteur. Cette carte permets de programmer différents angles tel que le yaw , pitch, roll ou tout simplement les, plus connus, quaternions (w,x,y et z).

Schéma du MPU6050 (GY-521) avec ses 6 axes

 

Code et configuration du module GY-521

Pour coder et utiliser ce module, il faut bien évidemment télécharger l’application Arduino. Elle est disponible sur le site officiel. La version actuelle est la 1.8.5 et pour Windows 10 il suffit tout simplement de l’installer sur le Windows Store. Comme je l’ai dis plus haut, nous allons utiliser du C++. Pour montrer ce que l’on peut faire avec le module, j’ai décidé de prendre un exemple plutôt simple mais qui nous montre réellement ce que l’on peut réaliser. Il est donc temps de voir comment programmer et récupérer les data de ce gyroscope !

 

 

Ce que l’on va devoir faire pour programmer cette carte, c’est ajouté sa librairie (en .zip). Il faut donc télécharger la librairie de la carte à partir La librairie qui se nomme FreelMU est disponible sur le site Arduino et nous donne un lien vers les pages qui contiennent celle-ci.Les étapes pour installer la librairie sont plutôt simples. Tout d’abord il faut aller dans ‘Croquis’ puis cliquer sur ‘Ajouter la bibliothèque .Zip’. Vous n’avez plus qu’à aller dans l’emplacement de votre téléchargement.

 

Ajouter la librairie de la carte Arduino nous permettra de la programmer.

Maintenant vous pouvez aller vérifier dans votre liste de bibliothèques que celle de la MPU6050 s’est bien ajoutée. Si ce n’est pas le cas il faut réessayer ou prendre un autre fichier.

 

 

La bibliothèque est bien en place, nous pouvons maintenant l’utiliser.

 

Les variables

Nous allons maintenant passer au code et pour cela, nous allons tout d’abord devoir créer les accélérations (dans 3 directions) puisque pour avoir une force gyroscopique nous avons besoin d’accélérations. Nous allons utiliser des long. Petit rappel sur les types de données en C++, les long sont des entiers qui vont être longs. Je vais nommer mes trois variables : speedA, speedB et speedC. Pour l’instant nous nous contentons de déclarer ce dont l’on a besoin.

La première ligne de code nécessaire.

Ensuite, nous allons avoir bien évidemment besoin de déclarer la force gyroscopique. Il faut savoir que cela est nécessaire pour créer la rotation de notre objet en 3D. Pour ces valeurs, nous allons utiliser un float (réel). Personnellement je les ai nommé forceD, forceE et forceF pour ne pas me perdre dans mes variables.

Les variables d’accélération et de force.

 

Il nous reste plus qu’à ajouter six autres variables pour pouvoir commencer à programmer notre carte. Cette fois-ci les trois suivantes seront en fait les données de notre gyroscope. Ce n’est peut être pas très clair, dit comme ça mais vous verrez plus tard que ce n’est pas aussi compliqué que ça en a l’air. Cette fois-ci nous utilisons un long.

Ajout des variables du gyroscope.

Les dernières variables dont nous avons besoin sont celles des rotations puisqu’il va falloir que notre objet 3D puisse tourner sur plusieurs axes. Pour celle-ci nous allons de nouveau effectuer un float.

Toutes les variables pour utiliser notre objet.

 

Le Setup

Dans la fonction setup() nous allons commencer par quelque chose de simple. Avant de commencer, je vais ajouter une petite ligne de code avec une valeur par défaut. Cette petite ligne va tout simplement faire en sorte d’initialiser la connexion à 9600 bits par seconde (la valeur par défaut de Arduino). Si je fais ça dès le début c’est tout simplement pour maintenir une vitesse de connexion stable pour ne pas avoir de mauvaises données.

Serial.begin() nous permets d’avoir une vitesse de connexion stable. Ici, la valeur est celle par défaut.

Bien évidemment vous pouvez changer cette valeur et mettre celle que vous préférez mais dans ce cas la, cette valeur par défaut correspond très bien. Nous allons ensuite devoir faire appel à une librairie en utilisant une fonction simple. C’est la seule fois où nous l'appelerons. Cette librairie est la librairie Wire. Le but de cette librairie est que l’on puisse communiquer avec le 12c/TWI qui est en fait une pièce qui va nous permettre d’accéder à d’autres cartes ou objets extérieurs. La ligne de code est simple et cela ne prends que quelques secondes à appeler.

A présent pour finir cette partie, il ne nous reste plus qu’à appeler une fonction que je vais expliquer juste après. C’est encore une fois la partie la plus simple du code.  Voici ce que vous devez obtenir à la fin de ces étapes :

La fonction setupMPU()

Dans le code précédent j’utilise la fonction setupMPU(), il est temps de la créer et d’expliquer à quoi elle va nous servir. Cette partie va être un peu plus technique puisqu’elle va configurer certaines pièces de la carte et les transmissions. Cependant c’est nécessaire, c’est pourquoi je montre cette partie. Tout d’abord nous allons commencer la transmission avec le 12c avec en utilisant son adresse. Pour cela nous allons utiliser Wire.beginTransmission(), entre parenthèse il y aura donc l’adresse.

 

Vous pouvez maintenant voir pourquoi la librairie Wire est nécessaire. Ensuite nous allons utiliser une autre fonction qui est souvent avec celle que l’on a utilisé précédemment. Wire.write() va nous permettre d’écrire des données à partir d’un périphérique (ici le 12c toujours). Entre parenthèses, la valeur sera exprimé en bits. Ici on va y accéder puis le modifier à 0 pour pouvoir obtenir un mode Sleep.

Ce que vous obtenez pour l’instant.

Comme vous avez pu le voir ci-dessus nous avons commencé la transmission en utilisant Wire.beginTransmission() , il faut maintenant l’arrêter puisque l’on ne veut pas qu’elle soit infinie.

Nous déclarons le début de la transmission, ce que l’on veut écrire au périphérique et nous finissons par arrêter la transmission.

 

Nous devons de nouveau commencer une transmission pour programmer ce que l’on veut dire au gyroscope. La ligne de commande a déjà été fait au dessus et reste la même.

Cette fois nous allons accéder au registre 1B alors que plus haut c’était le 6B. Pourquoi y accéder ? Pour configurer le gyroscope et indiquer que l’on veut que le gyroscope soit à son degrés minimal c’est à dire ±250 degrés/s (voir la présentation du gyroscope). Il ne faut surtout pas oublier après ça de fermer la transmission. Voila donc ce que l’on doit faire pour obtenir ce changement :

Nous allons devoir refaire la même chose mais pour configurer électroniquement l’accéléromètre. Maintenant cela doit vous sembler plus familier. Nous allons ouvrit la transmission, écrire dans le registre 1C, nous configurons l’accéléromètre à ±2g qui est sa valeur minimale aussi (il possède 3 axes). Je ne vais pas en parler plus mais montrer ce que l’on obtient de nouveau.

Le void loop

Cette fonction sera plus courte puisqu’elle appelle d’autres fonctions. Elle va faire appel à des fonctions spéciales que l’on appelle des Record Registers. Ces fonctions vont nous permettre de récupérer les data du gyroscope et de l’accéléromètre que l’on va mettre dans cette  boucle. Voici le contenu du loop que je vais expliquer.

Ici, nous appelons nos deux Registers et nous affichons leur data. delay() sert à mettre une pause (100 secondes), un délai avant que la fonction ne soit relancée.

Les fonctions Registers

Ces fonctions ressemblent assez à la fonction setupMPU(). Regardons la première fonction qui est la recordAccRegisters().

Le début, nous l’avons déjà vu, sert à ouvrir la transmission avec l’adresse du MPU. Nous démarrons le registre 0x3B de l’accéléromètre puis nous arrêtons la transmission. Mais que ce passe t-il ensuite ? Wire.requestFrom() est donc la requête du 3B, le while après nous permets d’indiquer qu’il est disponible tant qu’il est plus petit que 6. Nous indiquons après que, speedA sera égal à 2bits, speedB et speedC aussi. A la fin nous appelons de nouveau une nouvelle fonction. Cette fonction va appeler les valeurs gyroM, gyroN et gyroO ce que l’on verra juste après avoir fait la fonction recordGyroRegisters() que voici :

Le seul changement notable est que l’on va écrire le registre 0x43 (pour sa signification il faut regarder dans les documents de la carte). Cette fonction va faire exactement ce que celle d’au dessus à fait mais pour mes autres variables.

 

La fonction processAccData()

Voici cette fonction courte, qui indique la valeur de nos variables.

La fonction processGyroData()

Voici nos valeurs pour cette fonction :

Le printData

Voici notre dernière fonction ! Nous pouvons la voir dans le loop. Mais à quoi va t-elle nous servir ? Elle va tout simplement comme son nom l’indique nous servir à afficher les data de notre carte. Ce code est long mais peu complexe, nous affichons toutes nos données avec les variables :

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *