Livraison rapide
Conditions de réduction pour les entreprises
Jusqu'à 10% de réduction pour les élèves, les étudiants et les établissements d'enseignement
Expédition dans toute l'Europe pour €4.90
Fermer le filtre
Filtre par :

Le module MPU-6050 : Gyroscope et accéléromètre

Il existe peu de modules sur le marché qui ont suscité autant d'engouement ces derniers mois que le module MPU-6050. Le circuit imprimé deux en un combine deux caractéristiques de capteur très appréciées : Le module peut être utilisé à la fois comme gyroscope et comme accéléromètre.

Comment faire ? Le capteur comprend un gyroscope à 3 axes et un capteur d'accélération à 3 axes sur une seule et même puce. Ainsi, peut récupérer toutes ( !) les valeurs du capteur en même temps. Ainsi, le bricoleur est toujours bien informé de la position actuelle du capteur. Cette caractéristique est particulièrement intéressante pour le modélisme, surtout pour les châssis équilibrés ou les drones.
De plus, il est possible d'accéder à des magnétomètres externes ou à d'autres capteurs via un autre bus I2C maître, de sorte que les données de ces capteurs peuvent également être entièrement collectées. 

Aperçu rapide des données de capteur du MPU-6050 (GY-521) :

  • Chipset : MPU-6050 (également connu sous le nom de GY-521)
  • Alimentation électrique : 3,3 - 5V DC
  • Droite de liberté : 6*
  • Interface : I2C
  • Espacement des broches : 2,54 mm

Passons maintenant à la partie la plus excitante : la pratique. Pour que tu puisses te faire une idée des fonctions utiles du module MPU-6050, nous avons développé pour toi un exemple de schéma électrique. Le module MPU-6050 est lu par un Funduino UNO R3 et les données recueillies sont analysées.

Nous nous intéressons principalement aux données des capteurs du gyroscope. Nous voulons lire les valeurs des axes X, Y et Z et déterminer si la position du capteur a été modifiée. Le changement de position doit être représenté par des LED de couleur.

Schéma de câblage MPU-6050 GY-521

Jusqu'ici, tout va bien : mais comment mettre cela en œuvre ?

Le code de programmation du module MPU-6050

Maintenant, on entre dans le vif du sujet : enfin, à moitié. Tout d'abord, nous devons télécharger la bibliothèque appropriée pour le module MPU6050 et l'intégrer dans notre IDE Arduino. La bibliothèque s'appelle "<MPU6050_tockn.h>" et peut être trouvée et installée directement via la gestion des bibliothèques de l'IDE Arduino.

Après cette première étape, nous commençons le code proprement dit. Tout d'abord, nous définissons les connexions pour nos LED, qui nous serviront d'indicateurs de la position de l'axe. Ensuite, nous définissons deux variables pour la position des trois axes. 

Tu te demandes certainement pourquoi nous avons besoin de deux variables par axe. Comme nous voulons savoir si la position de chaque axe a changé, nous devons d'abord savoir quelle valeur le capteur a enregistrée pour la position actuelle. La valeur du capteur du MPU-6050 est sauvegardée dans la première variable pendant une courte période.
La valeur de la position de l'axe est à nouveau sauvegardée dans la deuxième variable peu après. Nous pouvons maintenant comparer les deux valeurs de mesure saisies. Si une déviation de la position d'une valeur minimale définie au préalable a été enregistrée (dans notre exemple de code +-3), on peut supposer que le capteur a changé de position. Dans ce cas, nous allumons la LED correspondante. 

Particulièrement agréable : les données de mesure saisies s'affichent bien sur le traceur sériel de l'IDE Arduino.

// Ce sketch compare les angles des axes X/Y/Z avec les valeurs précédentes.
// S'ils sont différents de +/-3°, le sketch allume des LED. (jew.1 pour POS ou pour NEG)
// Attention : ce ne sont pas des valeurs absolues mais des valeurs RELATIVES par rapport à la mesure précédente
#include <MPU6050_tockn .h> // inclure les bibliothèques
#include <Wire .h> // <-
MPU6050 mpu6050(Wire, 0.1, 0.1) ; // Amortissement des valeurs. Plus elles sont petites (direction "0"), plus les valeurs sont nerveuses
                                // plus grande est la direction "1", plus les valeurs sont lentes
const int ledXpos =2; //***
const int ledXneg =3; // *
const int ledYpos =4; // * Définir les connexions des LED
const int ledYneg =5; // *
const int ledZpos =6; // *
const int ledZneg =7; //***
int xMaintenantPos ; // variable X-Pos ACTUELLE
int yMaintenantPos ; // variable Y-Pos ACTUELLE
int zMaintenantPos ; // variable Z-Pos ACTUELLE
int xPourPos ; // variable X-Pos PRÉCÉDENTES
int yVorPos ; // variable Y-Pos PRÉCÉDENTES
int zVorPos ; // variable Z-Pos PRÉCÉDENTES
int différence = 3;
void setup() {                  // Beginn Setup-Funktion
Serial.begin(115200);         // Öffne serielle Übertragung (115200Baud) !!! Am Monitor ebenfalls einstellen !!!
pinMode(ledXpos, OUTPUT);     //***
pinMode(ledXneg, OUTPUT);     //  *
pinMode(ledYpos, OUTPUT);     //  * Festlegen dass LED-Anschlüsse Ausgänge sind
pinMode(ledYneg, OUTPUT);     //  *
pinMode(ledZpos, OUTPUT);     //  *
pinMode(ledZneg, OUTPUT);     //***
Wire.begin();                 // Beginn I2C Protokoll
mpu6050.begin();              // Start des Gyros
mpu6050.calcGyroOffsets();    // Gyro kalkuliert seine Offsets !!! Währenddessen ruhig liegen lassen !!!
// Benutze mpu6050.calcGyroOffsets(true), um es im seriellen Monitor zu verfolgen.
delay(1000);                    // Darauf warten wir...
}
void loop() { // Début de la boucle
mpu6050.update() ; // créer un nouvel ensemble de données dans le gyroscope
xMaintenantPos=(mpu6050.getGyroAngleX()) ; // Demande un nouveau jeu de données au gyroscope, écris dans la variable X
yMaintenantPos=(mpu6050.getGyroAngleY()) ; // Demande un nouveau jeu de données au gyroscope, écris dans la variable Y
zMaintenantPos=(mpu6050.getGyroAngleZ()) ; // Demande un nouveau jeu de données au gyroscope, écris dans la variable Z
if (xMaintenantPos < xVorPos-(différence)) // Compare l'ancien jeu de données avec le nouveau. Différence < -3 ?
{digitalWrite(ledXpos, LOW); digitalWrite(ledXneg, HIGH);} // Ensuite, commute les LED en conséquence
else if (xMaintenantPos > xVorPos+(différence)) // Compare l'ancien jeu de données avec le nouveau. Différence < +3 ?
{digitalWrite(ledXpos, HIGH); digitalWrite(ledXneg, LOW);} // Alors, allume les LED en conséquence
else // Ou alors, éteindre toutes les X LEDs...
{digitalWrite(ledXpos, LOW); digitalWrite(ledXneg, LOW);} // Alors allume les LED en conséquence
if (yMaintenantPos < yVorPos-(différence)) // Compare l'ancien jeu de données avec le nouveau. Différence < -3 ?
{digitalWrite(ledYpos, LOW); digitalWrite(ledYneg, HIGH);} // Ensuite, allume les LED en conséquence
else if (yMaintenantPos > yVorPos+(différence)) // Compare l'ancien ensemble de données avec le nouveau. Différence < +3 ?
{digitalWrite(ledYpos, HIGH); digitalWrite(ledYneg, LOW);} // Alors, allume les LED en conséquence
else // Ou bien toutes les Y LEDs sont éteintes...
{digitalWrite(ledYpos, LOW); digitalWrite(ledYneg, LOW);} // Alors allume les LED en conséquence
if (zJetztPos < zVorPos-(différence)) // Compare l'ancien jeu de données avec le nouveau. Différence < -3 ?
{digitalWrite(ledZpos, LOW); digitalWrite(ledZneg, HIGH);} // Ensuite, allume les LED en conséquence
else if (zMaintenantPos > zVorPos+(différence)) // Compare l'ancien ensemble de données avec le nouveau. Différence < +3 ?
{digitalWrite(ledZpos, HIGH); digitalWrite(ledZneg, LOW);} // Alors, allume les LED en conséquence
else // Ou bien toutes les Z LEDs sont éteintes...
{digitalWrite(ledZpos, LOW); digitalWrite(ledZneg, LOW);} // Alors allume les LED en conséquence
xVorPos=xMaintenantPos ; // Mettre à jour l'ancien jeu de données (jusqu'à présent)
yVorPos=yMaintenantPos ; // actualise l'ancien jeu de données (jusqu'à présent)
zVorPos=zMaintenantPos ; // Mettre à jour l'ancien jeu de données (jusqu'à présent)
// Ensuite, lors du prochain passage, on peut à nouveau comparer avec "avant"
Serial.print(xMaintenantPos) ; // >> traceur sériel<< écriture juste [donner X]
Serial.print(" ");Serial.print(yMaintenantPos) ; // (" ") = (\t) = nouvelle couleur [donner Y]
Serial.print(" ");Serial.println(zMaintenantPos) ; // (" ") = (\t) = Nouvelle couleur [donner Z]
delay(15) ; // (un délai minimal calme la sortie série)
} // Fin de la boucle
// Expérimente un peu avec l'atténuation dans la troisième ligne de programme
//-> MPU6050 mpu6050(Wire, 0.3, 0.3) ;
// ou avec le delay() à la fin. Observe ensuite les valeurs dans >>le PLOTTER sériel <<.
Sujets: #arduino, #wissen
Saisis la chaîne de caractères dans le champ de texte ci-dessous.

Les champs marqués d'un * sont obligatoires.

Articles correspondants
Microcontrôleur Funduino UNO R3 - compatible avec Arduino Microcontrôleur Funduino UNO R3 - compatible...
Contenu 1 Stück
13,90 € *
Numéro d'article : F23107480
Ajouter
Module MPU-6050 - accéléromètre triaxial, gyroscope Module MPU-6050 - accéléromètre triaxial,...
Contenu 1 Stück
3,62 € *
Numéro d'article : F23107397
Ajouter
100 pièces - diodes lumineuses de 5mm de diamètre (5 couleurs) 100 pièces - diodes lumineuses de 5mm de...
Contenu 1 Stück
1,97 € *
Numéro d'article : F23107316
Ajouter
100 résistances - 20x 100 ohms, 200 ohms, 330 ohms, 1K ohms, 10K ohms chacune 100 résistances - 20x 100 ohms, 200 ohms, 330...
Contenu 1 Stück
1,72 € *
Numéro d'article : F23107216
Ajouter