- Matériaux nécessaires:
- Schéma:
- Alimenter votre configuration:
- Programmation de votre Arduino:
- Préparation de l'application Android à l'aide du traitement:
- Fonctionnement de l'inclinomètre Arduino:
Le MPU6050 est un accéléromètre IC 3 axes et un gyroscope 3 axes combinés en une seule unité. Il abrite également un capteur de température et un DCM pour effectuer une tâche complexe. Le MPU6050 est couramment utilisé dans la construction de drones et d'autres robots distants comme un robot auto-équilibré. Dans ce projet, nous allons apprendre à utiliser le MPU6050 est construit un inclinomètre ou un niveleur à bulle. Comme nous le savons, un inclinomètre est utilisé pour vérifier si une surface est parfaitement nivelée ou non, ils sont disponibles sous forme de bulles à bulles ou de compteurs numériques. Dans ce projet, nous allons construire un inclinomètre numérique qui peut être surveillé à l'aide d'une application Android. La raison de l'utilisation d'un écran distant comme un téléphone mobile est que nous pouvons surveiller les valeurs du MPU6050 sans avoir à regarder le matériel, cela serait très pratique lorsque le MPU6050 est placé sur un drone ou d'autres endroits inaccessibles.
Matériaux nécessaires:
- Arduino Pro-mini (5 V)
- Capteur gyroscopique MPU6050
- Module Bluetooth HC-05 ou HC-06
- Carte FTDI
- Planche à pain
- Fils de connexion
- Téléphone intelligent
Schéma:
Le schéma de circuit complet de ce projet de capteur d'inclinaison Arduino est illustré ci-dessous. Il n'a que trois composants et peut être facilement construit sur la maquette.
Le MPU6050 communique à l'aide d'I2C et par conséquent, la broche SDA est connectée à la broche A4 d'Arduino qui est la broche SDA et la broche SCL est connectée à la broche A5 d'Arduino. Le module Bluetooth HC-06 fonctionne à l'aide de la communication série, la broche Rx de Bluetooth est donc connectée à la broche D11 et la broche Tx de Bluetooth est connectée à la broche D10 de l'Arduino. Ces broches D10 et D11 seront configurées comme broche série en programmant l'Arduino. Le module HC-05 et le module MSP6050 fonctionnent sur + 5V et sont donc alimentés par la broche Vcc de l'Arduino comme indiqué ci-dessus.
J'ai utilisé des fils de connexion de planche à pain et construit la configuration sur une petite planche à pain. Une fois les connexions effectuées, ma carte ressemble à ceci ci-dessous.
Alimenter votre configuration:
Vous pouvez soit alimenter votre circuit via la carte de programmation FTDI comme je l'ai fait, soit utiliser une batterie 9V ou un adaptateur 12V et le connecter à la broche Raw de l'Arduino pro mini. L'Arduino Pro-mini dispose d'un régulateur de tension intégré qui convertirait cette tension externe régulée + 5V.
Programmation de votre Arduino:
Une fois le matériel prêt, nous pouvons commencer à programmer notre Arduino. Comme toujours, le code complet de ce projet se trouve au bas de cette page. Mais pour mieux comprendre le projet, j'ai cassé le code en petites lacunes et je les ai expliqué ci-dessous.
La première étape consisterait à interfacer le MPU6050 avec Arduino. Pour ce projet, nous allons utiliser la bibliothèque développée par Korneliusz qui peut être téléchargée à partir du lien ci-dessous
MPU6050 Liberty - Korneliusz Jarzebski
Téléchargez le fichier ZIP et ajoutez-le à votre IDE Arduino. Ensuite, dirigez-vous vers Fichier-> Exemples-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Cela ouvrira l'exemple de programme qui utilise la bibliothèque que nous venons de télécharger. Cliquez donc sur télécharger et attendez que le programme soit téléchargé sur votre Arduino Pro mini. Une fois que cela est fait, ouvrez votre moniteur série et réglez votre vitesse de transmission sur 115200 et vérifiez si vous obtenez ce qui suit.
Au départ, les trois valeurs seront égales à zéro, mais lorsque vous déplacez votre maquette, vous pouvez observer ces valeurs changer. S'ils changent, cela signifie que votre connexion est correcte, sinon vérifiez vos connexions. Prenez le temps de remarquer comment les trois valeurs Pitch Roll et Yaw varient en fonction de la façon dont vous inclinez votre capteur. Si vous êtes confus, appuyez sur le bouton de réinitialisation de l'Arduino et les valeurs seront réinitialisées à nouveau à zéro, puis inclinez le capteur dans une direction et vérifiez quelles valeurs varient. L'image ci-dessous vous aidera à mieux comprendre.
Sur ces trois paramètres, nous ne sommes intéressés que par Roll et Pitch. La valeur du rouleau va nous parler de l'inclinaison dans l' axe X et la valeur Pitch nous parler de l'inclinaison de l' axe Y. Maintenant que nous avons compris les bases, commençons réellement à programmer l'Arduino pour lire ces valeurs, envoyez-le à Arduino via Bluetooth. Comme toujours, commençons par inclure toutes les bibliothèques nécessaires à ce projet
#comprendre
Ensuite, nous initialisons la série du logiciel pour le module Bluetooth. Cela est possible grâce à la bibliothèque de logiciels série dans Arduino, les broches IO peuvent être programmées pour fonctionner comme des broches série. Ici, nous utilisons les broches numériques D10 et D11, où D10 id Rx et D11 est Tx.
Logiciel Série BT (10, 11); // RX, TX
Ensuite, nous initialisons les variables et les objets nécessaires au programme et passons à la fonction setup () où nous spécifions le débit en bauds pour le moniteur série et Bluetooth. Pour HC-05 et HC-06, le débit en bauds est de 9600, il est donc obligatoire de l'utiliser. Ensuite, nous vérifions si le bus IIC d'Arduino est connecté au MPU6050 sinon nous imprimons un message d'avertissement et y restons tant que l'appareil est connecté. Après cela, nous calibrons le gyroscope et définissons ses valeurs de seuil en utilisant ses fonctions respectives comme indiqué ci-dessous.
void setup () {Serial.begin (115200); BT.begin (9600); // démarrer la communication Bluetooth à 9600 baudrate // Initialiser MPU6050 while (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Impossible de trouver un capteur MPU6050 valide, vérifiez le câblage!"); retard (500); } mpu.calibrateGyro (); // Calibrer le gyroscope au démarrage mpu.setThreshold (3); // Contrôle la sensibilité}
La ligne « mpu.calibrateGyro ();» calibrez le MPU6050 pour la position dans laquelle il est actuellement placé. Cette ligne peut être appelée plusieurs fois dans le programme chaque fois que le MPU6050 doit être calibré et que toutes les valeurs doivent être mises à zéro. "Mpu.setThreshold (3);" cette fonction contrôle à quel point la valeur varie pour le mouvement sur le capteur, une valeur trop faible augmentera le bruit, alors soyez prudent lorsque vous manipulez cela.
À l'intérieur de la boucle vide (), nous lisons à plusieurs reprises les valeurs du gyroscope et du capteur de température, calculons la valeur du tangage, du roulis et du lacet, envoyons-la au module Bluetooth. Les deux lignes suivantes liront les valeurs brutes du gyroscope et la valeur de température
Norme vectorielle = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Ensuite, nous calculons le tangage, le roulis et le lacet en multipliant par le pas de temps et en l'additionnant aux valeurs précédentes. Un timeStep n'est rien d'autre que l'intervalle entre des lectures successives.
pitch = pitch + norm.YAxis * timeStep; roll = roll + norm.XAxis * timeStep; lacet = lacet + norme.ZAxis * timeStep;
Pour mieux comprendre le pas de temps, jetons un coup d'œil à la ligne ci-dessous. Cette ligne est placée pour lire les valeurs du MPU6050 exactement à un intervalle de 10 ms ou 0,01 seconde. Nous déclarons donc la valeur de timeStep comme 0,01. Et utilisez la ligne ci-dessous pour tenir le programme s'il y a plus de temps. (millis () - timer ()) donne le temps nécessaire à l'exécution du programme jusqu'à présent. Nous le soustrayons simplement avec 0,01 seconde et pendant le temps restant, nous maintenons simplement notre programme là en utilisant la fonction de retard.
delay ((timeStep * 1000) - (millis () - timer));
Une fois que nous avons fini de lire et de calculer les valeurs, nous pouvons les envoyer sur notre téléphone via Bluetooth. Mais il y a un hic ici. Le module Bluetooth que nous utilisons ne peut envoyer qu'un octet (8 bits), ce qui nous permet d'envoyer uniquement des nombres de 0 à 255. Nous devons donc diviser nos valeurs et les mapper dans cette plage. Ceci est fait par les lignes suivantes
if (roll> -100 && roll <100) x = map (roll, -100, 100, 0, 100); if (pitch> -100 && pitch <100) y = map (pitch, -100, 100, 100, 200); if (temp> 0 && temp <50) t = 200 + int (temp);
Comme vous pouvez le comprendre, la valeur de roulis est mappée de 0 à 100 dans la variable x et le pas est mappé de 100 à 200 dans la variable y et la température est mappée sur 200 et plus dans la variable t. Nous pouvons utiliser les mêmes informations pour récupérer les données de ce que nous avons envoyé. Enfin, nous écrivons ces valeurs via Bluetooth en utilisant les lignes suivantes.
BT.write (x); BT.write (y); BT.écriture (t);
Si vous avez compris le programme complet, faites défiler vers le bas pour voir le programme et téléchargez-le sur la carte Arduino.
Préparation de l'application Android à l'aide du traitement:
L'application Android pour cet inclinomètre Arduino a été développée à l'aide de l' IDE de traitement. Ceci est très similaire à Arduino et peut être utilisé pour créer une application système, une application Android, des conceptions Web et bien plus encore. Nous avons déjà utilisé le traitement pour développer certains de nos autres projets sympas énumérés ci-dessous
- Jeu de ping-pong utilisant Arduino
- Radio FM contrôlée par téléphone intelligent utilisant le traitement.
- Système radar Arduino utilisant le traitement et le capteur à ultrasons
Cependant, il n'est pas possible d'expliquer le code complet sur la façon de créer cette application. Vous avez donc deux façons de traiter cela. Soit vous pouvez télécharger le fichier APK à partir du lien ci-dessous et installer l'application Android directement sur votre téléphone. Ou faites défiler ci-dessous pour trouver le code de traitement complet et découvrez par vous-même comment cela fonctionne
À l'intérieur du fichier ZIP, vous pouvez trouver un dossier appelé data qui se compose de toutes les images et autres sources qui doivent être chargées dans l'application Android. La ligne ci-dessous décide à quel nom le Bluetooth doit se connecter automatiquement
bt.connectToDeviceByName ("HC-06");
Dans la fonction draw () , les choses seront exécutées à plusieurs reprises ici nous dessinons les images, affichons le texte et animons les barres en fonction des valeurs du module Bluetooth. Vous pouvez vérifier ce qui se passe dans chaque fonction en lisant le programme.
void draw () // La boucle infinie {background (0); imageMode (CENTRE); image (logo, largeur / 2, hauteur / 1,04, largeur, hauteur / 12); Chargement des images(); textfun (); getval (); }
Enfin, il y a une autre chose importante à expliquer, rappelez-vous que nous avons divisé la valeur de pitch, roll et temp entre 0 et 255. Donc, ici, nous la ramènerons à nouveau aux valeurs normales en la mappant inversement aux valeurs normales.
if (info <100 && info> 0) x = carte (info, 0, 100, - (largeur / 1,5) / 3, + (largeur / 1,5) / 3); // x = info; else if (info <200 && info> 100) y = carte (info, 100, 200, - (largeur / 4,5) /0,8, + (largeur / 4,5) /0,8); // y = info; sinon si (info> 200) temp = info -200; println (temp, x, y);
Il existe de bien meilleurs moyens d'obtenir des données d'un module Bluetooth vers un téléphone, mais comme il ne s'agit que d'un projet de loisir, nous les avons ignorés, vous pouvez creuser profondément si vous êtes intéressé.
Fonctionnement de l'inclinomètre Arduino:
Une fois que vous êtes prêt avec le matériel et l'application, il est temps de vous amuser avec ce que nous avons construit. Téléchargez le code Arduino sur la carte, vous pouvez également supprimer les commentaires sur les lignes Serial.println et vérifier si le matériel fonctionne comme prévu à l'aide du moniteur série. Quoi qu'il en soit, c'est complètement facultatif.
Une fois le code téléchargé, lancez l'application Android sur votre téléphone mobile. L'application devrait se connecter automatiquement à votre module HC-06 et affichera «Connecter à: HC-06» en haut de l'application, comme illustré ci-dessous.
Au départ, toutes les valeurs seront nulles à l'exception de la valeur de température. En effet, l'Arduino a calibré le MPU-6050 pour cette position comme référence, vous pouvez maintenant incliner le matériel et vérifier que les valeurs sur l'application mobile changent également avec l'animation. Le fonctionnement complet de l'application peut être trouvé à la vidéo ci-dessous. Vous pouvez maintenant placer la planche à pain n'importe où et vérifier si la surface est parfaitement nivelée.
J'espère que vous avez compris le projet et en avez appris quelque chose d'utile. En cas de doute, veuillez utiliser la section commentaires ci-dessous ou les forums pour le résoudre.