- Materiale necesare:
- Diagrama circuitului:
- Alimentarea configurării:
- Programarea Arduino:
- Pregătirea aplicației Android folosind Procesare:
- Funcționarea inclinometrului Arduino:
MPU6050 este un IC 3 axe accelerometru și un giroscop cu 3 axe combinate într - o singură unitate. De asemenea, găzduiește un senzor de temperatură și un DCM pentru a efectua o sarcină complexă. MPU6050 este utilizat în mod obișnuit în construcția de drone și alți roboți la distanță, cum ar fi un robot de auto-echilibrare. În acest proiect vom învăța cum să folosim MPU6050 este construit un Inclinometru sau Spirit Leveler. După cum știm, un inclinometru este utilizat pentru a verifica dacă o suprafață este perfect nivelată sau nu, acestea sunt disponibile fie ca sprit bubble, fie ca contoare digitale. În acest proiect, vom construi un inclinometru digital care poate fi monitorizat folosind o aplicație Android. Motivul utilizării unui afișaj la distanță ca un telefon mobil este că putem monitoriza valorile de la MPU6050 fără a fi nevoie să ne uităm la hardware, acest lucru ar fi foarte util atunci când MPU6050 este plasat pe o dronă sau în alte locații inaccesibile.
Materiale necesare:
- Arduino Pro-mini (5V)
- Senzor giroscopic MPU6050
- Modul Bluetooth HC-05 sau HC-06
- Placa FTDI
- Breadboard
- Conectarea firelor
- Telefon inteligent
Diagrama circuitului:
Schema completă a circuitului pentru acest proiect Arduino Tilt Sensor Project este prezentată mai jos. Are doar trei componente și poate fi construit cu ușurință peste panou.
De MPU6050 comunică cu ajutorul I2C și, prin urmare, PIN - ul SDA este conectat la pinul A4 al Arduino, care este PIN - ul SDA și SCL PIN - ul este conectat la pinul A5 al Arduino. Modulul HC-06 Bluetooth funcționează cu ajutorul comunicării seriale, prin urmare pinul Rx al Bluetooth este conectat la pinul D11 și pinul Bluetooth al Bluetooth este conectat la pinul D10 al Arduino. Acești pin D10 și D11 vor fi configurați ca pin serial prin programarea Arduino. Modulul HC-05 și modulul MSP6050 funcționează pe + 5V și, prin urmare, sunt alimentate de pinul Vcc al Arduino așa cum se arată mai sus.
Am folosit niște fire de conectare a panourilor și am construit setul peste o panou mic. Odată ce conexiunile sunt terminate, tabloul meu arată așa mai jos.
Alimentarea configurării:
Puteți să vă alimentați circuitul prin placa de programare FTDI așa cum am făcut-o, sau să folosiți o baterie de 9V sau un adaptor de 12V și să îl conectați la pinul Raw al Arduino pro mini. Arduino Pro-mini are un regulator de tensiune încorporat care ar converti această tensiune externă reglată + 5V.
Programarea Arduino:
Odată ce hardware-ul este gata, putem începe să ne programăm Arduino. Ca întotdeauna, codul complet pentru acest proiect poate fi găsit în partea de jos a acestei pagini. Dar, pentru a înțelege mai bine proiectul, am rupt codul în mici bucăți și le-am explicat ca pașii de mai jos.
Primul pas ar fi interfațarea MPU6050 cu Arduino. Pentru acest proiect vom folosi biblioteca dezvoltată de Korneliusz care poate fi descărcată de pe linkul de mai jos
MPU6050 Liberty - Korneliusz Jarzebski
Descărcați fișierul ZIP și adăugați-l la ID-ul dvs. Arduino. Apoi accesați Fișier-> Exemple-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Aceasta va deschide exemplul de program care folosește biblioteca pe care tocmai am descărcat-o. Deci, faceți clic pe Încărcare și așteptați ca programul să fie încărcat pe Arduino Pro mini. Odată ce ați terminat, deschideți monitorul serial și setați rata de transmisie la 115200 și verificați dacă primiți următoarele.
Inițial, toate cele trei valori vor fi la fel de zero, dar pe măsură ce vă deplasați panoul de verificare, puteți observa schimbarea acestor valori. Dacă se schimbă, înseamnă că conexiunea dvs. este corectă, altfel verificați conexiunile. Luați ceva timp aici observați cum variază cele trei valori Pitch Roll și Yaw în funcție de modul în care vă înclinați senzorul. Dacă vă confundați, apăsați butonul de resetare de pe Arduino și valorile vor fi inițializate din nou la zero, apoi înclinați senzorul într-o direcție și verificați ce valori variază. Imaginea de mai jos vă va ajuta să înțelegeți mai bine.
Dintre acești trei parametri ne interesează doar Roll and Pitch. Valoarea de tip rolă ne va spune despre înclinarea în axa X și valoarea Pitch ne va spune despre înclinarea în Axa Y. Acum, că am înțeles elementele de bază, permitem să începem programarea Arduino pentru a citi aceste valori, trimitându-l la Arduino prin Bluetooth. Ca întotdeauna, să începem prin a include toate bibliotecile necesare acestui proiect
#include
Apoi inițializăm seria software pentru modulul Bluetooth. Acest lucru este posibil datorită bibliotecii software Serial din Arduino, pinii IO pot fi programați pentru a funcționa ca pin serial. Aici folosim pinii digitali D10 și D11, unde D10 id Rx și D11 este Tx.
Software Serial BT (10, 11); // RX, TX
Urmat de aceasta, inițializăm variabilele și obiectele necesare pentru program și trecem la funcția setup () unde specificăm rata de transmisie pentru monitorul serial și Bluetooth. Pentru HC-05 și HC-06 rata de transmisie este de 9600, deci este obligatoriu să folosiți același lucru. Apoi verificăm dacă magistrala IIC a Arduino este conectată la MPU6050 dacă nu, imprimăm un mesaj de avertizare și rămânem acolo atât timp cât dispozitivul este conectat. După aceea, calibrăm Gyro și setăm valorile sale prag folosind funcțiile sale respective, așa cum se arată mai jos.
void setup () {Serial.begin (115200); BT.begin (9600); // porniți comunicația Bluetooth la 9600 baudrate // Inițializați MPU6050 în timp ce!! (Serial.println („Nu s-a putut găsi un senzor MPU6050 valid, verificați cablarea!”); întârziere (500); } mpu.calibrateGyro (); // Calibrați giroscopul în timpul pornirii mpu.setThreshold (3); // Controlează sensibilitatea}
Linia „ mpu.calibrateGyro ();” calibrați MPU6050 pentru poziția în care este plasat în prezent. Această linie poate fi apelată de mai multe ori în interiorul programului ori de câte ori MPU6050 trebuie calibrat și toate valorile trebuie setate la zero. „Mpu.setThreshold (3);” această funcție controlează cât de mult variază valoarea pentru mișcarea senzorului, o valoare prea mică va crește zgomotul, așa că fii atent în timp ce te joci cu asta.
În interiorul buclei de gol (), citim în mod repetat valorile giroscopului și senzorului de temperatură, calculăm valoarea pitch, roll și yaw, o trimitem la modulul Bluetooth. Următoarele două rânduri vor citi valorile brute ale giroscopului și valoarea temperaturii
Vector norm = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Apoi, calculăm înălțimea, rularea și ghemul înmulțind cu pasul de timp și adăugându-l la valorile anterioare. Un timeStep nu este altceva decât intervalul dintre citirile succesive.
pitch = pitch + norm.YAxis * timeStep; roll = roll + norm.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
Pentru a înțelege mai bine timpul, să aruncăm o privire la linia de mai jos. Această linie este plasată pentru a citi valorile din MPU6050 exact la un interval de 10mS sau 0,01 Secunde. Deci declarăm valoarea timeStep ca 0,01. Și utilizați linia de mai jos pentru a ține programul dacă există, dacă mai rămâne mai mult timp. (millis () - timer ()) oferă timpul necesar pentru executarea programului până acum. Îl scădem doar cu 0,01 secunde și pentru timpul rămas ținem programul acolo folosind funcția de întârziere.
delay ((timeStep * 1000) - (millis () - timer));
Odată ce am terminat de citit și calculat valorile, le putem trimite pe telefonul nostru prin Bluetooth. Dar există o captură aici. Modulul Bluetooth pe care îl folosim poate trimite doar 1 octet (8 biți), ceea ce ne permite să trimitem numere numai de la 0 la 255. Deci, trebuie să ne împărțim valorile și să le mapăm în acest interval. Acest lucru se face prin următoarele rânduri
if (roll> -100 && roll <100) x = hartă (roll, -100, 100, 0, 100); if (pitch> -100 && pitch <100) y = hartă (pitch, -100, 100, 100, 200); if (temp> 0 && temp <50) t = 200 + int (temp);
După cum vă puteți da seama, valoarea rolei este mapată în 0 la 100 în variabila x, iar pitch-ul este mapat în 100 la 200 în variabila y, iar temperatura este mapată în 200 și mai sus în variabila t. Putem folosi aceleași informații pentru a prelua datele din ceea ce am trimis. În cele din urmă, scriem aceste valori prin Bluetooth folosind următoarele linii.
BT.write (x); BT.write (y); BT.write (t);
Dacă ați înțeles programul complet, derulați în jos pentru a arunca o privire la program și încărcați-l pe placa Arduino.
Pregătirea aplicației Android folosind Procesare:
Aplicația Android pentru acest Inclinometru Arduino a fost dezvoltată folosind IDE de procesare. Acest lucru este foarte asemănător cu Arduino și poate fi utilizat pentru a crea aplicații de sistem, aplicații Android, designuri web și multe altele. Am folosit deja procesarea pentru a dezvolta unele dintre celelalte proiecte interesante care sunt enumerate mai jos
- Joc de Ping Pong folosind Arduino
- Radio FM controlat prin telefon inteligent folosind Procesare.
- Sistem de radar Arduino folosind procesare și senzor cu ultrasunete
Cu toate acestea, nu este posibil să se explice codul complet cu privire la modul de creare a acestei aplicații. Deci, aveți două modalități de a trece peste acest lucru. Fie puteți descărca fișierul APK de pe linkul de mai jos și instalați aplicația Android direct pe telefon. Sau derulați mai jos pentru a găsi codul complet de procesare și pentru a afla singur cum funcționează
În fișierul ZIP, puteți găsi un folder numit date care constă din toate imaginile și alte surse care urmează să fie încărcate în aplicația Android. Linia de mai jos decide la ce nume trebuie să se conecteze automat Bluetooth
bt.connectToDeviceByName ("HC-06");
În interiorul funcției draw () , lucrurile vor fi executate în mod repetat aici desenăm imaginile, afișăm textul și animăm barele pe baza valorilor din modulul Bluetooth. Puteți verifica ce se întâmplă în fiecare funcție citind programul.
void draw () // Bucla infinită {background (0); imageMode (CENTER); imagine (siglă, lățime / 2, înălțime / 1,04, lățime, înălțime / 12); load_images (); textfun (); getval (); }
În cele din urmă, mai este un lucru important de explicat, amintiți-vă că împărțim valoarea pitch, roll și temp la 0 la 255. Deci, aici o aducem din nou la valorile normale prin inversarea mapării la valori normale.
if (info <100 && info> 0) x = map (info, 0, 100, - (width / 1.5) / 3, + (width / 1.5) / 3); // x = info; else if (info <200 && info> 100) y = hartă (info, 100, 200, - (width / 4.5) /0.8, + (width / 4.5) /0.8); // y = info; else if (info> 200) temp = info -200; println (temp, x, y);
Există modalități mult mai bune de a obține date de la un modul Bluetooth la telefon, dar, deoarece acesta este doar un proiect de hobby, le-am ignorat, puteți să profundați dacă sunteți interesat.
Funcționarea inclinometrului Arduino:
După ce te pregătești cu Hardware și aplicație, este timpul să te distrezi cu ceea ce am construit. Încărcați codul Arduino pe placă, puteți, de asemenea, să eliminați comentariile de pe liniile Serial.println și să verificați dacă hardware-ul funcționează conform așteptărilor folosind monitorul serial. Oricum, este complet opțional.
Odată ce codul este încărcat, lansați aplicația Android pe telefonul mobil. Aplicația trebuie să se conecteze automat la modulul dvs. HC-06 și va afișa „Conectare la: HC-06” în partea de sus a aplicației, așa cum se arată mai jos.
Inițial, toate valorile vor fi zero, cu excepția valorii temperaturii. Acest lucru se datorează faptului că Arduino a calibrat MPU-6050 pentru această poziție ca referință, acum puteți înclina hardware-ul și puteți verifica dacă valorile aplicației mobile se schimbă, de asemenea, împreună cu animația. Funcționarea completă a aplicației poate fi găsită la videoclipul prezentat mai jos. Așadar, acum puteți plasa panoul oriunde și puteți verifica dacă suprafața este perfect nivelată.
Sper că ai înțeles proiectul și ai învățat ceva util din el. Dacă aveți vreo îndoială, vă rugăm să folosiți secțiunea de comentarii de mai jos sau forumurile pentru a rezolva problema.