- Materials necessaris:
- Esquema de connexions:
- Alimentació de la configuració:
- Programació del vostre Arduino:
- Preparació de l'aplicació d'Android mitjançant el processament:
- Funcionament de l'inclinòmetre Arduino:
El MPU6050 és un acceleròmetre IC de 3 eixos i un giroscopi de 3 eixos combinats en una sola unitat. També alberga un sensor de temperatura i un DCM per realitzar una tasca complexa. El MPU6050 s'utilitza habitualment en la construcció de drons i altres robots remots com un robot autoequilibrant. En aquest projecte aprendrem a utilitzar el MPU6050 que es construeix amb un inclinòmetre o Spirit Leveler. Com sabem, s’utilitza un inclinòmetre per comprovar si una superfície està perfectament anivellada o no, estan disponibles com a bombolles de sprit o com a comptadors digitals. En aquest projecte, construirem un inclinòmetre digital que es pot controlar mitjançant una aplicació per a Android. La raó per utilitzar una pantalla remota com un telèfon mòbil és que podem controlar els valors de MPU6050 sense haver de mirar el maquinari, això seria molt útil quan el MPU6050 es col·loca en un dron o en altres llocs inaccessibles.
Materials necessaris:
- Arduino Pro-mini (5V)
- Sensor de giroscopi MPU6050
- Mòdul Bluetooth HC-05 o HC-06
- Tauler FTDI
- Taula de pa
- Connexió de cables
- Telèfon intel·ligent

Esquema de connexions:

A continuació es mostra l’ esquema de circuits complet d’aquest projecte Arduino Tilt Sensor Project. Només té tres components i es pot construir fàcilment sobre la taula de treball.
El MPU6050 es comunica amb l'ajut d'I2C i, per tant, el pin SDA està connectat al pin A4 d'Arduino que és el pin SDA i el pin SCL està connectat al pin A5 d'Arduino. El mòdul Bluetooth HC-06 funciona amb l'ajut de la comunicació serial, per tant, el pin Rx de Bluetooth està connectat al pin D11 i el pin Tx de Bluetooth està connectat al pin D10 de l'Arduino. Aquests pins D10 i D11 es configuraran com a pin sèrie mitjançant la programació de l'Arduino. El mòdul HC-05 i el mòdul MSP6050 funcionen a + 5V i, per tant, són alimentats pel pin Vcc de l'Arduino, tal com es mostra més amunt.
Vaig utilitzar alguns cables de connexió de taulers de pa i vaig construir la configuració sobre una tauleta de pa petita. Un cop fetes les connexions, el meu tauler es veu a continuació.

Alimentació de la configuració:
Podeu alimentar el circuit a través de la placa de programació FTDI com he fet, o bé utilitzar una bateria de 9V o un adaptador de 12V i connectar-lo al pin Raw de l’Arduino pro mini. L'Arduino Pro-mini té un regulador de tensió integrat que convertiria aquesta tensió externa regulada + 5V.

Programació del vostre Arduino:
Un cop el maquinari estigui llest, podem començar a programar el nostre Arduino. Com sempre, el codi complet d’aquest projecte es troba a la part inferior d’aquesta pàgina. Però, per entendre millor el projecte, he trencat el codi en petits trossos i els he explicat com a passos següents.
El primer pas seria la interfície del MPU6050 amb Arduino. Per a aquest projecte utilitzarem la biblioteca desenvolupada per Korneliusz que es pot descarregar des de l'enllaç següent
MPU6050 Liberty - Korneliusz Jarzebski
Baixeu-vos el fitxer ZIP i afegiu-lo al vostre IDE Arduino. A continuació, aneu a Fitxer-> Exemples-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . S’obrirà l’exemple de programa que utilitza la biblioteca que acabem de descarregar. Per tant, feu clic a Puja i espereu que el programa es carregui al vostre Arduino Pro mini. Un cop fet això, obriu el monitor sèrie i configureu la velocitat en bauds a 115200 i comproveu si obteniu el següent.

Inicialment, els tres valors seran zero, però, a mesura que moveu la taula, podreu observar que aquests valors canvien. Si canvien, significa que la vostra connexió és correcta; en cas contrari, comproveu-ne les connexions. Preneu-vos una estona aquí, observeu com varien els tres valors Pitch Roll i Yaw segons la manera d’inclinar el sensor. Si us confoneu, premeu el botó de restabliment de l'Arduino i els valors es tornaran a inicialitzar a zero, inclineu el sensor en una direcció i comproveu quins valors varien. La imatge següent us ajudarà a entendre millor.

D’aquests tres paràmetres només ens interessa Roll and Pitch. El valor de l'rotllo ens parlarà de la inclinació en l'eix X i el valor de to ens parlarà de la inclinació en l'eix I. Ara que ja hem entès els conceptes bàsics, podem començar a programar l'Arduino per llegir aquests valors i enviar-lo a Arduino mitjançant Bluetooth. Com sempre, incloem totes les biblioteques necessàries per a aquest projecte
#incloure
A continuació, inicialitzem la sèrie de programari del mòdul Bluetooth. Això és possible a causa de la biblioteca de programari de sèrie a Arduino, els pins IO es poden programar perquè funcionin com a pins de sèrie. Aquí fem servir els pins digitals D10 i D11, on D10 id Rx i D11 és Tx.
SoftwareSerial BT (10, 11); // RX, TX
Seguidament, inicialitzem les variables i els objectes necessaris per al programa i passem a la funció setup () on especifiquem la velocitat de transmissió per al monitor sèrie i el Bluetooth. Per a HC-05 i HC-06, la velocitat en bauds és de 9600, per la qual cosa és obligatori utilitzar-la. A continuació, comprovem si el bus IIC d’Arduino està connectat a MPU6050 si no, imprimim un missatge d’advertència i hi restem sempre que el dispositiu estigui connectat. Després d'això, calibrem el giroscopi i establim els seus valors llindars mitjançant les seves respectives funcions, tal com es mostra a continuació.
configuració nul·la () {Serial.begin (115200); BT.begin (9600); // Inicieu la comunicació Bluetooth a 9600 baudrate // Inicialitzeu MPU6050 mentre (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("No s'ha pogut trobar un sensor MPU6050 vàlid, comproveu el cablejat!"); retard (500); } mpu.calibrateGyro (); // Calibra el giroscopi durant l’inici mpu.setThreshold (3); // Controla la sensibilitat}
La línia " mpu.calibrateGyro ();" calibreu el MPU6050 per a la posició en què es troba actualment. Aquesta línia es pot anomenar diverses vegades dins del programa sempre que cal calibrar el MPU6050 i establir tots els valors a zero. "Mpu.setThreshold (3);" aquesta funció controla quant varia el valor del moviment del sensor; un valor massa baix augmentarà el soroll, així que aneu amb compte mentre es juga amb això.
Dins del bucle buit (), llegim repetidament els valors del giroscopi i el sensor de temperatura, calculem el valor de l’alçada, el rotllo i el desviament, i l’enviem al mòdul Bluetooth. Les dues línies següents llegiran els valors de giroscopi en brut i el valor de la temperatura
Norma vectorial = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
A continuació, calculem el to, el rodatge i el desviament multiplicant-lo per pas de temps i sumant-lo als valors anteriors. Un timeStep no és res més que l’interval entre lectures successives.
pitch = pitch + norma.YAxis * timeStep; roll = roll + norma.XAxis * timeStep; yaw = yaw + norma.ZAxis * timeStep;
Per entendre millor el pas del temps, fem una ullada a la línia següent. Aquesta línia es col·loca per llegir els valors de MPU6050 exactament a un interval de 10 mS o 0,01 segon. Per tant, declarem que el valor de timeStep és 0,01. I utilitzeu la línia següent per mantenir el programa si queda, si queda més temps. (millis () - timer ()) dóna el temps que ha trigat el programa a executar-se fins ara. Només el restem amb 0,01 segons i, durant el temps restant, mantenim el nostre programa allà mitjançant la funció de retard.
delay ((timeStep * 1000) - (millis () - temporitzador));
Un cop hàgim acabat de llegir i calcular els valors, els podem enviar al nostre telèfon mitjançant Bluetooth. Però aquí hi ha un problema. El mòdul Bluetooth que estem utilitzant només pot enviar 1 byte (8 bits), cosa que ens permet enviar números només de 0 a 255. Per tant, hem de dividir els nostres valors i assignar-los dins d’aquest rang. Això es fa mitjançant les línies següents
if (roll> -100 && roll <100) x = map (roll, -100, 100, 0, 100); if (pitch> -100 && pitch <100) y = mapa (pitch, -100, 100, 100, 200); if (temp> 0 && temp <50) t = 200 + int (temp);
Com ho podeu esbrinar, el valor del rotllo es mapea entre 0 i 100 a la variable x i el to es mapeja de 100 a 200 a la variable y i la temperatura es mapea a 200 i superior a la variable t. Podem utilitzar la mateixa informació per recuperar les dades del que hem enviat. Finalment, escrivim aquests valors mitjançant el Bluetooth mitjançant les línies següents.
BT.write (x); BT.write (y); BT.write (t);
Si heu entès el programa complet, desplaceu-vos cap avall per veure el programa i pengeu-lo a la placa Arduino.
Preparació de l'aplicació d'Android mitjançant el processament:
L’aplicació per a Android d’aquest inclinòmetre Arduino es va desenvolupar amb l’ IDE de processament. És molt similar a Arduino i es pot utilitzar per crear aplicacions del sistema, aplicacions d'Android, dissenys web i molt més. Ja hem utilitzat el processament per desenvolupar alguns dels nostres altres projectes interessants que es detallen a continuació
- Joc de Ping Pong amb Arduino
- Ràdio FM controlada per telèfon intel·ligent mitjançant el processament.
- Sistema de radar Arduino amb processador i sensor ultrasònic
Tot i això, no és possible explicar el codi complet sobre com crear aquesta aplicació. Per tant, teniu dues maneres d’explicar-ho. Podeu descarregar el fitxer APK des de l'enllaç següent i instal·lar l'aplicació d'Android directament al telèfon. O desplaceu-vos a continuació per trobar el codi de processament complet i aprendre per vosaltres mateixos com funciona
Dins del fitxer ZIP, podeu trobar una carpeta anomenada dades que consta de totes les imatges i altres fonts que es carreguen a l'aplicació per a Android. La línia següent decideix a quin nom s’ha de connectar automàticament el Bluetooth
bt.connectToDeviceByName ("HC-06");
Dins de la funció draw () , les coses s’executaran repetidament aquí dibuixem les imatges, mostrem el text i animem les barres en funció dels valors del mòdul Bluetooth. Podeu comprovar què passa dins de cada funció llegint el programa.
void draw () // El bucle infinit {background (0); imageMode (CENTRE); imatge (logotip, amplada / 2, alçada / 1,04, amplada, alçada / 12); load_images (); textfun (); getval (); }
Finalment, hi ha una cosa més important per explicar, recordeu que dividim el valor de pitch, roll i temp a 0 a 255. Així doncs, tornem a recuperar-lo als valors normals mapejant-lo als valors normals.
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 = mapa (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);
Hi ha maneres molt millors d’obtenir dades d’un mòdul Bluetooth al telèfon, però, com que només és un projecte d’afició, les hem ignorat, podeu aprofundir si us interessa.
Funcionament de l'inclinòmetre Arduino:
Després de preparar-vos amb el maquinari i l'aplicació, és hora de divertir-vos amb el que hem creat. Pengeu el codi Arduino al tauler, també podeu eliminar els comentaris de les línies Serial.println i comprovar si el maquinari funciona tal com s’espera mitjançant el monitor sèrie. De totes maneres, això és completament opcional.
Un cop carregat el codi, inicieu l'aplicació Android al vostre telèfon mòbil. L'aplicació s'ha de connectar automàticament al mòdul HC-06 i mostrarà "Connecta a: HC-06" a la part superior de l'aplicació, tal com es mostra a continuació.

Inicialment, tots els valors seran zero, tret del valor de temperatura. Això es deu al fet que Arduino ha calibrat el MPU-6050 per a aquesta posició com a referència, ara podeu inclinar el maquinari i comprovar que els valors de l'aplicació mòbil també canvien juntament amb l'animació. El funcionament complet de l'aplicació es pot trobar al vídeo que es mostra a continuació. De manera que ara podeu col·locar la tauleta de revisió en qualsevol lloc i comprovar si la superfície està perfectament anivellada.
Espero que hagueu entès el projecte i n'hagueu après alguna cosa útil. Si teniu cap dubte, utilitzeu la secció de comentaris a continuació o els fòrums per resoldre-ho.
