Table des matières:

Contrôle du servo à l'aide du MPU6050 entre Arduino et ESP8266 avec HC-12 : 6 étapes
Contrôle du servo à l'aide du MPU6050 entre Arduino et ESP8266 avec HC-12 : 6 étapes

Vidéo: Contrôle du servo à l'aide du MPU6050 entre Arduino et ESP8266 avec HC-12 : 6 étapes

Vidéo: Contrôle du servo à l'aide du MPU6050 entre Arduino et ESP8266 avec HC-12 : 6 étapes
Vidéo: # 2 ESP32 & ARDUINO COMMUNICATION SERIE 2024, Novembre
Anonim
Contrôle du servo à l'aide de MPU6050 entre Arduino et ESP8266 avec HC-12
Contrôle du servo à l'aide de MPU6050 entre Arduino et ESP8266 avec HC-12

Dans ce projet, nous contrôlons la position d'un servomoteur à l'aide du mpu6050 et du HC-12 pour la communication entre Arduino UNO et ESP8266 NodeMCU.

Étape 1: À PROPOS DE CE PROJET

Il s'agit d'un autre projet IoT basé sur le module RF HC-12. Ici, les données imu (mpu6050) d'arduino sont utilisées pour contrôler le servomoteur (connecté à Nodemcu). Ici, la visualisation des données est également effectuée du côté arduino où les données de hauteur du mpu6050 (rotation autour de l'axe x) sont visualisées avec un croquis de traitement (discuté plus tard). Fondamentalement, ce projet est juste un petit échauffement pour se souvenir des différents aspects du contrôle Imu & Servo avec Arduino et ESP8266 nodemcu.

OBJECTIF

L'objectif de ce assez clair, nous contrôlons la position du servomoteur en utilisant la valeur de pas de l'IMU. Et tous ensemble, ce pas et la position du moteur synchronisé sont visualisés avec Processing.

Étape 2: Matériel requis

Module Wifi NodeMCU ESP8266 12E

Planche à pain sans soudure

Cavalier

MPU6050 accelo+gyroscope

Modules RF HC-12 (paire)

Servomoteur SG90

Étape 3: Circuit et connexions

Circuit et connexions
Circuit et connexions
Circuits et connexions
Circuits et connexions

Les connexions sont simples. Vous pouvez alimenter le servo avec 3.3V de votre Nodemcu. Vous pouvez également utiliser Vin pour alimenter le servo si votre nodemcu a autant de tension sur cette broche. Mais la plupart des cartes Lolin n'ont pas 5V à Vin (dépend du fabricant).

Ces schémas de circuits sont réalisés à l'aide d'EasyADA.

Étape 4: TRAVAILLER

TRAVAIL
TRAVAIL

Dès que le croquis arduino a commencé, il enverra l'angle de tangage (qui va de -45 à 45) au récepteur hc12 de Nodemcu qui est mappé avec la position du servo de 0 à 180 degrés. Ici, nous avons utilisé l'angle de pas de -45 à +45 degrés afin que nous puissions facilement mapper cela à la position du servo.

Maintenant, vous vous demandez pourquoi pouvons-nous simplement utiliser la méthode de la carte comme suit:

int pos = carte(val, -45, 45, 0, 180);

Parce que l'angle négatif envoyé par l'émetteur HC12 est reçu comme:

1ère mi-temps: (T)0 à 45 => 0 à 45(R)

2ème mi-temps: (T)-45 à -1 => 255 à 210(R)

Vous devez donc le mapper sur 0 à 180 car

if(val>=0 && val<=45) pos = (val*2)+90; sinon pos = (val-210)*2;

J'évite la méthode de la carte en raison d'une erreur non pertinente. Vous pouvez essayer cela et commenter cela fonctionne avec vous

if(val>=0 && val<=45) pos = map(val, 0, 45, 90, 180); sinon pos = map(val, 255, 210, 0, 90); // 4ème argument peut être 2 (vous pouvez vérifier)

Calcul de l'angle de pas du MPU6050

J'utilise la bibliothèque MPU6050_tockn qui est basée sur la diffusion de données brutes de l'IMU.

int pitchAngle = mpu6050.getAngleX()

Cela nous donnera l'angle de rotation autour de l'axe des x. Comme vous le voyez sur la figure, mon imu est placé verticalement sur la planche à pain, donc ne confondez pas avec le tangage et le roulis. En fait, vous devriez toujours voir l'axe imprimé sur la carte de dérivation.

Grâce à cette bibliothèque, vous n'avez pas à vous soucier de l'électronique interne de lecture de registres spécifiques pour une opération spécifique. vous ne spécifiez que le travail et vous avez terminé!

Btw si vous voulez calculer l'angle par vous-même. Vous pouvez facilement le faire comme suit:

#comprendre

const int MPU6050_addr=0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; void setup(){ Wire.begin(); Wire.beginTransmission(MPU6050_addr); Wire.write(0x6B); Wire.write(0); Wire.endTransmission(true); Serial.begin(9600); } boucle vide(){ Wire.beginTransmission(MPU6050_addr); Wire.write(0x3B); Wire.endTransmission(false); Wire.requestFrom(MPU6050_addr, 14, true); AcX=Wire.read()<<8|Wire.read(); AcY=Wire.read()<<8|Wire.read(); AcZ=Wire.read()<<8|Wire.read(); Temp=Wire.read()<<8|Wire.read(); GyroX=Wire.read()<<8|Wire.read(); GyroY=Wire.read()<<8|Wire.read(); GyroZ=Wire.read()<<8|Wire.read();

int xAng = map(AcX, minVal, maxVal, -90, 90); int yAng = map(AcY, minVal, maxVal, -90, 90); int zAng = map(AcZ, minVal, maxVal, -90, 90); x= RAD_TO_DEG * (atan2(-yAng, -zAng)+PI); y= RAD_TO_DEG * (atan2(-xAng, -zAng)+PI); z= RAD_TO_DEG * (atan2(-yAng, -xAng)+PI); Serial.print("AngleX= "); // Pitch Serial.println(x); Serial.print("AngleY= "); //Roll Serial.println(y); Serial.print("AngleZ= "); //Yaw Serial.println(z); }

Mais, il n'est pas nécessaire que vous écriviez autant de code pour obtenir l'angle. Vous devez connaître les faits derrière la scène, mais l'utilisation de la bibliothèque d'autres personnes est très efficace dans de nombreux projets. Vous pouvez lire à propos de cet imu et d'autres approches pour obtenir plus de données filtrées à partir du lien suivant: Explore-mpu6050.

Mon code arduino à l'extrémité de transmission n'a que 30 lignes avec l'aide de la bibliothèque MPU6050_tockn, donc l'utilisation d'une bibliothèque est bonne, sauf si vous n'avez pas besoin de modifications fondamentales des fonctionnalités d'IMU. Une bibliothèque nommée I2Cdev par Jeff Rowberg est très utile si vous souhaitez des données filtrées à l'aide du DMP (Digital motion processor) de l'IMU.

Intégration avec le traitement

Ici, le traitement est utilisé pour visualiser les données de rotation autour de l'axe x de l'IMU telles que calculées par les données brutes provenant du MPU6050. Nous recevons les données brutes entrantes dans SerialEvent de la manière suivante:

void serialEvent(Serial myPort) {

inString = monPort.readString(); try { // Analyse les données //println(inString); String dataStrings = split(inString, ':'); if (dataStrings.length == 2) { if (dataStrings[0].equals("RAW")) { for (int i = 0; i < dataStrings.length - 1; i++) { raw = float(dataStrings[i+1]); } } else { println(inString); } } } catch (Exception e) { println("Exception interceptée"); } }

Ici, vous pouvez voir la visualisation dans l'image jointe à cette étape. Les données de position reçues à l'extrémité nodemcu sont également visibles sur le moniteur série, comme indiqué dans l'image.

Étape 5: CODE

J'ai joint le dépôt github. Vous pouvez le cloner et le fork pour l'utiliser dans vos projets.

mon_code

Le repo comprend 2 croquis arduino pour l'émetteur (arduino + IMU) et le récepteur (Nodemcu + Servo).

Et un croquis de traitement. Mettez le repo en vedette si cela vous aide dans votre projet.

Dans ce instructable, R-Récepteur & T-Émetteur

Étape 6: DÉMONSTRATION VIDÉO

Je joins la vidéo demain. Suivez-moi pour être notifié.

Merci à tous!

Conseillé: