Taula de continguts:

Control del servidor mitjançant MPU6050 entre Arduino i ESP8266 amb HC-12: 6 passos
Control del servidor mitjançant MPU6050 entre Arduino i ESP8266 amb HC-12: 6 passos

Vídeo: Control del servidor mitjançant MPU6050 entre Arduino i ESP8266 amb HC-12: 6 passos

Vídeo: Control del servidor mitjançant MPU6050 entre Arduino i ESP8266 amb HC-12: 6 passos
Vídeo: What is a Server? Servers vs Desktops Explained 2024, Juliol
Anonim
Control de Servo mitjançant MPU6050 entre Arduino i ESP8266 amb HC-12
Control de Servo mitjançant MPU6050 entre Arduino i ESP8266 amb HC-12

En aquest projecte, estem controlant la posició d’un servomotor mitjançant el mpu6050 i l’HC-12 per a la comunicació entre Arduino UNO i ESP8266 NodeMCU.

Pas 1: SOBRE AQUEST PROJECTE

És un altre projecte IoT basat en el mòdul RF HC-12. Aquí, les dades imu (mpu6050) d'arduino s'utilitzen per controlar el servomotor (connectat amb Nodemcu). Aquí, la visualització de dades també es realitza al costat d’arduino, on es visualitzen les dades de tonalitat mpu6050 (rotació sobre l’eix x) amb un esbós de processament (que es parlarà més endavant). Bàsicament, aquest projecte és una mica de calor per recordar diferents aspectes del control Imu & Servo amb Arduino i ESP8266 nodemcu.

OBJECTIU

L'objectiu d'això és clar: controlem la posició del servomotor mitjançant el valor de pas de l'IMU. I, junts, aquesta posició del motor sincronitzada i de pas es visualitza amb Processament.

Pas 2: es requereix maquinari

Mòdul Wifi NodeMCU ESP8266 12E

Taula de pa sense soldar

Filferro de pont

MPU6050 accelo + giroscopi

Mòduls RF HC-12 (parell)

Servomotor SG90

Pas 3: Circuit i connexions

Circuit i connexions
Circuit i connexions
Circuit i connexions
Circuit i connexions

Les connexions són directes. Podeu alimentar el servo amb 3,3 V del vostre Nodemcu. També podeu utilitzar Vin per alimentar el servo si el vostre nodemcu té tanta tensió en aquest pin. Però la majoria de taules Lolin no tenen 5V a Vin (depèn del fabricant).

Aquests diagrames de circuits es fan mitjançant EasyADA.

Pas 4: TREBALLAR

TREBALL
TREBALL

Tan bon punt comenci l'esbós arduino, enviarà l'angle de to (que oscil·la entre -45 i 45) al receptor hc12 de Nodemcu que es mapeja amb una posició de servo de 0 a 180 graus. Aquí hem utilitzat l’angle de pas de -45 a +45 graus per poder mapar-lo fàcilment a la posició Servo.

Ara, esteu pensant per què podem utilitzar el mètode del mapa de la manera següent: -

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

Com que l'angle negatiu enviat pel transmissor hc12 es rep com:

1a meitat: (T) 0 a 45 => 0 a 45 (R)

2a meitat: (T) -45 a -1 => 255 a 210 (R)

Per tant, haureu de mapear-lo de 0 a 180 com

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

Evito el mètode del mapa a causa d'un error irrellevant. Podeu provar-ho i comentar que funciona amb vosaltres

if (val> = 0 && val <= 45) pos = map (val, 0, 45, 90, 180); else pos = mapa (val, 255, 210, 0, 90); // El quart argument pot ser 2 (podeu comprovar-ho)

MPU6050 Càlcul de l’angle de pas

Estic fent servir la biblioteca MPU6050_tockn, que es basa en donar dades brutes de l’IMU.

int pitchAngle = mpu6050.getAngleX ()

Això ens obtindrà l’angle de rotació al voltant de l’eix x. Com heu vist a la figura, el meu imu es col·loca verticalment a la taula de treball, de manera que no us confongueu amb el pitch and roll. De fet, sempre heu de veure l'eix imprès al tauler de ruptura.

Mitjançant aquesta biblioteca, no us heu de preocupar de l'electrònica interna de lectura de registres específics per a un funcionament específic. només especifiqueu la feina i heu acabat.

Per contra, si voleu calcular l'angle per vosaltres mateixos. Podeu fer-ho fàcilment de la següent manera:

#incloure

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); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (fals); 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 = mapa (AcX, minVal, maxVal, -90, 90); int yAng = mapa (AcY, minVal, maxVal, -90, 90); int zAng = mapa (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); }

Però no és necessari que escriviu tant codi per obtenir l'angle. Hauríeu de conèixer els fets que hi ha darrere de l'escena, però l'ús de la biblioteca d'altres persones és molt eficaç en molts projectes. Podeu llegir sobre aquest imu i altres aplicacions per obtenir més dades filtrades al següent enllaç: Explore-mpu6050.

El meu codi arduino a l'extrem transmissor només té 30 línies amb l'ajuda de la biblioteca MPU6050_tockn, de manera que utilitzar una biblioteca és bo tret que no necessiteu alguns canvis bàsics a la funcionalitat de l'IMU. Una biblioteca anomenada I2Cdev de Jeff Rowberg és molt útil si voleu filtrar dades mitjançant el DMP (processador de moviment digital) de l’IMU.

Integració amb el processament

Aquí el processament s’utilitza per visualitzar les dades de rotació sobre l’eix x de l’IMU tal com es calculen amb les dades brutes procedents de MPU6050. Rebem les dades brutes entrants a SerialEvent de la manera següent:

void serialEvent (Serial myPort) {

inString = myPort.readString (); prova {// Analitza les dades // 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 (Excepció e) {println ("Excepció capturada"); }}

Aquí podeu veure la visualització a la imatge adjunta en aquest pas. Les dades de posició rebudes a l'extrem nodemcu també es poden veure al monitor sèrie tal com es mostra a la imatge.

Pas 5: CODI

He adjuntat el repositori de github. Podeu clonar-lo i bifurcar-lo per utilitzar-lo als vostres projectes.

el meu_codi

El repo inclou 2 croquis arduino per a transmissor (arduino + IMU) i receptor (Nodemcu + Servo).

I un esbós de processament. Destaca la reposició si això ajuda al teu projecte.

En aquest instructiu, R- Receptor i transmissor T-

Pas 6: DEMOSTRACIÓ DE VÍDEO

Adjuntaré el vídeo demà. Segueix-me per rebre notificacions.

Gràcies a tots!

Recomanat: