Përmbajtje:

Kontrollimi i servo duke përdorur MPU6050 midis Arduino dhe ESP8266 me HC-12: 6 hapa
Kontrollimi i servo duke përdorur MPU6050 midis Arduino dhe ESP8266 me HC-12: 6 hapa

Video: Kontrollimi i servo duke përdorur MPU6050 midis Arduino dhe ESP8266 me HC-12: 6 hapa

Video: Kontrollimi i servo duke përdorur MPU6050 midis Arduino dhe ESP8266 me HC-12: 6 hapa
Video: Как использовать акселерометр и гироскоп MPU-6050 с кодом Arduino 2024, Nëntor
Anonim
Kontrollimi i servo duke përdorur MPU6050 midis Arduino dhe ESP8266 Me HC-12
Kontrollimi i servo duke përdorur MPU6050 midis Arduino dhe ESP8266 Me HC-12

Në këtë projekt, ne po kontrollojmë pozicionin e një servo motori duke përdorur mpu6050 dhe HC-12 për komunikim midis Arduino UNO dhe ESP8266 NodeMCU.

Hapi 1: P THR KIST PROJEKT

Shtë një projekt tjetër IoT i bazuar në modulin HF-12 RF. Këtu, të dhënat imu (mpu6050) nga arduino përdoren për të kontrolluar servo motorin (i lidhur me Nodemcu). Këtu, vizualizimi i të dhënave kryhet gjithashtu në anën arduino ku të dhënat e katranit mpu6050 (rrotullimi rreth boshtit x) vizualizohen me një skicë përpunimi (diskutuar më vonë). Në thelb ky projekt është vetëm pak i ngrohtë për të kujtuar aspekte të ndryshme të kontrollit të Imu & Servo me Arduino dhe ESP8266 nodemcu.

OBJEKTIV

Objektivi i kësaj mjaft të qartë, Ne jemi duke kontrolluar pozicionin e motorit Servo duke përdorur vlerën e katranit të IMU. Dhe të gjitha së bashku ky hap dhe pozicioni i sinkronizuar i motorit vizualizohet me Përpunimin.

Hapi 2: Kërkohet harduer

Moduli NodeMCU ESP8266 12E Wifi

Dërrasë buke pa saldim

Tela bluzë

MPU6050 accelo+xhiro

Modulet HC-12 RF (palë)

Servo motor SG90

Hapi 3: Qarku & Lidhjet

Qarku & Lidhjet
Qarku & Lidhjet
Qarku & Lidhjet
Qarku & Lidhjet

Lidhjet janë drejtpërdrejt përpara. Ju mund ta fuqizoni servo -në me 3.3V të Nodemcu tuaj. Ju gjithashtu mund të përdorni Vin për të fuqizuar servo nëse nodemcu juaj ka aq shumë tension në atë kunj. Por shumica e bordeve Lolin nuk kanë 5V në Vin (varet nga prodhuesi).

Këto diagrame qark janë bërë duke përdorur EasyADA.

Hapi 4: PUNA

PUNA
PUNA

Sapo të fillojë skica arduino, ai do të dërgojë këndin e katranit (i cili varion nga -45 në 45) në marrësin hc12 të Nodemcu që hartëzohen me pozicionin Servo nga 0 në 180 gradë. Këtu kemi përdorur këndin e katranit nga -45 në +45 gradë, në mënyrë që të mund ta gjejmë me lehtësi atë në pozicionin Servo.

Tani, ju po mendoni pse mund ta përdorim thjesht metodën e hartës si më poshtë:-

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

Për shkak se këndi negativ i dërguar nga transmetuesi hc12 merret si:

Gjysma e parë: (T) 0 në 45 => 0 në 45 (R)

Gjysma e dytë: (T) -45 në -1 => 255 në 210 (R)

Kështu që ju duhet ta hartoni atë në 0 deri në 180 si

nëse (val> = 0 && val <= 45) pos = (val*2) +90; tjetër pos = (val-210)*2;

Unë jam duke shmangur metodën e hartës për shkak të një gabimi të parëndësishëm. Mund ta provoni dhe komentoni se funksionon me ju

nëse (val> = 0 && val <= 45) pos = hartë (val, 0, 45, 90, 180); tjetër pos = hartë (val, 255, 210, 0, 90); // Argumenti i katërt mund të jetë 2 (mund të kontrolloni)

MPU6050 Llogaritja e këndit të katranit

Unë jam duke përdorur bibliotekën MPU6050_tockn e cila bazohet në dhënien e të dhënave të papërpunuara nga IMU.

int pitchAngle = mpu6050.getAngleX ()

Kjo do të na japë këndin e rrotullimit rreth boshtit x. Siç e shihni në figurë, imu im është vendosur vertikalisht në tryezën e bukës, kështu që mos e ngatërroni me katran dhe rrotull. Në fakt ju gjithmonë duhet të shihni boshtin të shtypur në tabelën e shpërthimit.

Përmes kësaj biblioteke, nuk keni pse të shqetësoheni për elektronikën e brendshme të leximit të regjistrave specifikë për funksionim specifik. ju specifikoni vetëm punën dhe keni mbaruar!

Btw nëse doni të llogaritni këndin vetë. Ju lehtë mund ta bëni atë si më poshtë:

#përfshi

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.endTransmetimi (i vërtetë); Serial.filloj (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmetimi (i rremë); Tela. Kërkohet Nga (MPU6050_addr, 14, e vërtetë); 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 = hartë (AcX, minVal, maxVal, -90, 90); int yAng = hartë (AcY, minVal, maxVal, -90, 90); int zAng = hartë (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 ="); // Seriali i katranit.println (x); Serial.print ("AngleY ="); // Roll Serial.println (y); Serial.print ("AngleZ ="); // Yaw Serial.println (z); }

Por, nuk është e nevojshme që të shkruani kaq shumë kod për të marrë këndin. Duhet të dini faktet prapa skenës, por përdorimi i bibliotekës së njerëzve të tjerë është shumë efektiv në shumë projekte. Ju mund të lexoni në lidhje me këtë imu dhe përafrime të tjera për të marrë më shumë të dhëna të filtruara nga lidhja e mëposhtme: Explore-mpu6050.

Kodi im arduino në fundin e transmetimit ka vetëm 30 rreshta me ndihmën e bibliotekës MPU6050_tockn kështu që përdorimi i një biblioteke është i mirë nëse nuk keni nevojë për disa ndryshime thelbësore në funksionalitetin e IMU. Një bibliotekë e quajtur I2Cdev nga Jeff Rowberg është shumë e dobishme nëse doni disa të dhëna të filtruara duke përdorur DMP (procesori i lëvizjes dixhitale) të IMU.

Integrimi me Përpunimin

Këtu Përpunimi përdoret për të vizualizuar të dhënat rrotulluese rreth boshtit x të IMU të llogaritura nga të dhënat e papërpunuara që vijnë nga MPU6050. Ne i marrim të dhënat e papërpunuara në SerialEvent në mënyrën e mëposhtme:

void serialEvent (Seriali myPort) {

inString = myPort.readString (); provoni {// Analizoni të dhënat // 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 (vargjet e të dhënave [i+1]); }} else {println (inString); }}} kap (Përjashtim e) {println ("Përjashtim i kapur"); }}

Këtu mund të shihni vizualizimin në imazhin e bashkangjitur në këtë hap. Të dhënat e pozicionit të marra në fund të nodemcu shihen gjithashtu në monitorin serik siç tregohet në imazh.

Hapi 5: KODI

Unë kam bashkangjitur depo github. Mund ta klononi dhe ta përdorni për ta përdorur në projektet tuaja.

kodi im_

Repoja përfshin 2 skica arduino për transmetuesin (arduino+IMU) dhe marrësin (Nodemcu+Servo).

Dhe një skicë përpunimi. Shënoni repon nëse kjo ju ndihmon në projektin tuaj.

Në këtë udhëzues, R- Marrës & T- Transmetues

Hapi 6: Demonstrim VIDEO

Nesër do ta bashkangjis videon. Më ndiqni për t'u njoftuar.

Ju faleminderit të gjithëve!

Recommended: