- Materiali richiesti:
- Schema elettrico:
- Alimentare la tua configurazione:
- Programmare il tuo Arduino:
- Preparazione dell'applicazione Android utilizzando Processing:
- Funzionamento dell'inclinometro Arduino:
L' MPU6050 è un accelerometro IC a 3 assi e un giroscopio a 3 assi combinati in un'unica unità. Ospita anche un sensore di temperatura e un DCM per eseguire un'attività complessa. L'MPU6050 è comunemente usato nella costruzione di Drone e altri robot remoti come un robot autobilanciante. In questo progetto impareremo come utilizzare l'MPU6050 è costruito un inclinometro o livellatore a spirito. Come sappiamo un inclinometro viene utilizzato per verificare se una superficie è perfettamente livellata o meno, sono disponibili sia come sprit bubble sia come misuratori digitali. In questo progetto, costruiremo un inclinometro digitale che può essere monitorato utilizzando un'applicazione Android. Il motivo per utilizzare un display remoto come un telefono cellulare è che possiamo monitorare i valori da MPU6050 senza dover guardare l'hardware, questo sarebbe molto utile quando l'MPU6050 è posizionato su un drone o in altri luoghi inaccessibili.
Materiali richiesti:
- Arduino Pro-mini (5V)
- Sensore giroscopico MPU6050
- Modulo Bluetooth HC-05 o HC-06
- Scheda FTDI
- Breadboard
- Cavi di collegamento
- Smart Phone
Schema elettrico:
Di seguito è mostrato lo schema circuitale completo per questo progetto del sensore di inclinazione Arduino. Ha solo tre componenti e può essere facilmente montato sulla breadboard.
L' MPU6050 comunica con l'aiuto di I2C e quindi il pin SDA è collegato al pin A4 di Arduino che è il pin SDA e il pin SCL è collegato al pin A5 di Arduino. Il modulo Bluetooth HC-06 funziona con l'aiuto della comunicazione seriale, quindi il pin Rx del Bluetooth è collegato al pin D11 e il pin Tx del Bluetooth è collegato al pin D10 di Arduino. Questi pin D10 e D11 verranno configurati come pin seriale programmando Arduino. Il modulo HC-05 e il modulo MSP6050 funzionano a + 5V e quindi sono alimentati dal pin Vcc di Arduino come mostrato sopra.
Ho usato alcuni cavi di collegamento della breadboard e ho costruito il set-up su una piccola breadboard. Una volta che le connessioni sono state fatte, la mia scheda appare così sotto.
Alimentare la tua configurazione:
Puoi alimentare il tuo circuito tramite la scheda di programmazione FTDI come ho fatto io, oppure utilizzare una batteria da 9 V o un adattatore da 12V e collegarlo al pin Raw di Arduino pro mini. Arduino Pro-mini ha un regolatore di tensione integrato che converte questa tensione esterna regolata a + 5V.
Programmare il tuo Arduino:
Una volta che l'hardware è pronto, possiamo iniziare a programmare il nostro Arduino. Come sempre il codice completo di questo progetto si trova in fondo a questa pagina. Ma per capire meglio il progetto ho suddiviso il codice in piccole fessure e le ho spiegate come passaggi seguenti.
Il primo passo sarebbe l' interfacciamento dell'MPU6050 con Arduino. Per questo progetto utilizzeremo la libreria sviluppata da Korneliusz che può essere scaricata dal link sottostante
MPU6050 Liberty - Korneliusz Jarzebski
Scarica il file ZIP e aggiungilo al tuo IDE Arduino. Quindi vai su File-> Esempi-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Questo aprirà il programma di esempio che usa la libreria che abbiamo appena scaricato. Quindi fai clic su Carica e attendi che il programma venga caricato sul tuo Arduino Pro mini. Una volta fatto ciò, apri il tuo monitor seriale e imposta la velocità di trasmissione su 115200 e controlla se stai ottenendo quanto segue.
Inizialmente, tutti e tre i valori saranno pari a zero, ma mentre sposti la breadboard puoi osservare questi valori che vengono modificati. Se cambiano significa che la tua connessione è corretta, altrimenti controlla le tue connessioni. Prenditi un po 'di tempo per notare come i tre valori Pitch Roll e Yaw variano a seconda del modo in cui inclini il sensore. Se ti senti confuso, premi il pulsante di ripristino su Arduino ei valori verranno nuovamente inizializzati a zero, quindi inclina il sensore in una direzione e controlla quali valori stanno variando. L'immagine sotto ti aiuterà a capire meglio.
Di questi tre parametri ci interessano solo Roll e Pitch. Il valore del rullo ci racconterà l'inclinazione in asse X e il valore Pitch ci racconterà l'inclinazione in asse Y. Ora che abbiamo compreso le basi, iniziamo effettivamente a programmare Arduino per leggere questi valori e inviarlo ad Arduino tramite Bluetooth. Come sempre iniziamo includendo tutte le librerie necessarie per questo progetto
#includere
Quindi inizializziamo il software seriale per il modulo Bluetooth. Ciò è possibile grazie alla libreria Software Serial in Arduino, i pin IO possono essere programmati per funzionare come pin seriali. Qui stiamo usando i pin digitali D10 e D11, dove D10 id Rx e D11 è Tx.
SoftwareSerial BT (10, 11); // RX, TX
Successivamente inizializziamo le variabili e gli oggetti necessari per il programma e passiamo alla funzione setup () dove specifichiamo la velocità di trasmissione per monitor seriale e Bluetooth. Per HC-05 e HC-06 il baud rate è 9600 quindi è obbligatorio utilizzare lo stesso. Quindi controlliamo se il bus IIC di Arduino è collegato a MPU6050 in caso contrario stampiamo un messaggio di avviso e rimaniamo lì finché il dispositivo è collegato. Successivamente, calibriamo il giroscopio e impostiamo i valori di soglia utilizzando le rispettive funzioni come mostrato di seguito.
void setup () {Serial.begin (115200); BT.begin (9600); // avvia la comunicazione Bluetooth a 9600 baudrate // Inizializza MPU6050 while (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Could not find a valid MPU6050 sensor, check wiring!"); ritardo (500); } mpu.calibrateGyro (); // Calibra il giroscopio durante l'avvio mpu.setThreshold (3); // Controlla la sensibilità}
La riga " mpu.calibrateGyro ();" calibrare l'MPU6050 per la posizione in cui si trova attualmente. Questa riga può essere richiamata più volte all'interno del programma ogni volta che l'MPU6050 deve essere calibrato e tutti i valori devono essere impostati a zero. "Mpu.setThreshold (3);" questa funzione controlla quanto varia il valore per il movimento sul sensore un valore troppo basso aumenterà il rumore quindi fai attenzione mentre giochi con questo.
All'interno del void loop (), leggiamo ripetutamente i valori del giroscopio e del sensore di temperatura calcoliamo il valore di beccheggio, rollio e imbardata, lo inviamo al modulo Bluetooth. Le due righe seguenti leggeranno i valori grezzi del giroscopio e il valore della temperatura
Norma vettoriale = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Successivamente, calcoliamo beccheggio, rollio e imbardata moltiplicando per il passo temporale e sommandolo ai valori precedenti. Un timeStep non è altro che l'intervallo tra letture successive.
passo = passo + norm.YAxis * timeStep; roll = roll + norm.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
Per capire meglio il passo temporale, diamo un'occhiata alla riga sottostante. Questa linea viene posizionata per leggere i valori da MPU6050 esattamente a un intervallo di 10 mS o 0,01 secondi. Quindi dichiariamo il valore di timeStep come 0,01. E usa la riga sotto per tenere il programma se c'è se c'è più tempo a disposizione. (millis () - timer ()) fornisce il tempo impiegato dal programma per essere eseguito finora. Lo sottraiamo solo con 0,01 secondi e per il tempo rimanente teniamo il nostro programma lì usando la funzione di ritardo.
ritardo ((timeStep * 1000) - (millis () - timer));
Una volta che abbiamo finito di leggere e calcolare i valori, possiamo inviarli al nostro telefono tramite Bluetooth. Ma qui c'è un problema. Il modulo Bluetooth che stiamo utilizzando può inviare solo 1 byte (8 bit) che ci permette di inviare solo numeri da 0 a 255. Quindi dobbiamo dividere i nostri valori e mapparli all'interno di questo intervallo. Questo viene fatto dalle seguenti righe
if (roll> -100 && roll <100) x = map (roll, -100, 100, 0, 100); if (passo> -100 && passo <100) y = map (passo, -100, 100, 100, 200); if (temp> 0 && temp <50) t = 200 + int (temp);
Come puoi capire, il valore di roll è mappato da 0 a 100 nella variabile x e il passo è mappato da 100 a 200 nella variabile y e temp è mappato in 200 e oltre nella variabile t. Possiamo utilizzare le stesse informazioni per recuperare i dati da ciò che abbiamo inviato. Infine scriviamo questi valori tramite Bluetooth utilizzando le seguenti righe.
BT.write (x); BT.write (y); BT.write (t);
Se hai capito il programma completo, scorri verso il basso per dare un'occhiata al programma e caricalo sulla scheda Arduino.
Preparazione dell'applicazione Android utilizzando Processing:
L'applicazione Android per questo inclinometro Arduino è stata sviluppata utilizzando l' IDE di elaborazione. Questo è molto simile ad Arduino e può essere utilizzato per creare applicazioni di sistema, applicazioni Android, progetti web e molto altro. Abbiamo già utilizzato l'elaborazione per sviluppare alcuni dei nostri altri fantastici progetti elencati di seguito
- Ping Pong Game utilizzando Arduino
- Radio FM controllata da smartphone utilizzando l'elaborazione.
- Sistema radar Arduino che utilizza l'elaborazione e il sensore a ultrasuoni
Tuttavia, non è possibile spiegare il codice completo su come creare questa applicazione. Quindi hai due modi per esaminarlo. O puoi scaricare il file APK dal link sottostante e installare l'applicazione Android direttamente sul tuo telefono. Oppure scorri qui sotto per trovare il codice di elaborazione completo e impara da solo come funziona
All'interno del file ZIP, puoi trovare una cartella chiamata dati che consiste di tutte le immagini e altre fonti che devono essere caricate nell'applicazione Android. La riga sottostante decide a quale nome deve connettersi automaticamente il Bluetooth
bt.connectToDeviceByName ("HC-06");
All'interno della funzione draw () , le cose verranno eseguite ripetutamente qui disegniamo le immagini, visualizziamo il testo e animiamo le barre in base ai valori del modulo Bluetooth. Puoi controllare cosa succede all'interno di ogni funzione leggendo il programma.
void draw () // Il ciclo infinito {background (0); imageMode (CENTER); immagine (logo, larghezza / 2, altezza / 1.04, larghezza, altezza / 12); load_images (); textfun (); getval (); }
Infine, c'è un'altra cosa importante da spiegare, ricorda che abbiamo diviso il valore di pitch, roll e temp da 0 a 255. Quindi qui lo riportiamo di nuovo ai valori normali mappandoli inversamente ai valori normali.
if (info <100 && info> 0) x = map (info, 0, 100, - (width / 1.5) / 3, + (width / 1.5) / 3); // x = info; altrimenti if (info <200 && info> 100) y = map (info, 100, 200, - (width / 4.5) /0.8, + (width / 4.5) /0.8); // y = info; altrimenti se (info> 200) temp = info -200; println (temp, x, y);
Esistono modi molto migliori per ottenere dati da un modulo Bluetooth al telefono, ma poiché questo è solo un progetto per hobby, li abbiamo ignorati, puoi scavare in profondità se interessati.
Funzionamento dell'inclinometro Arduino:
Dopo esserti preparato con l'hardware e l'applicazione, è tempo di divertirti con ciò che abbiamo costruito. Carica il codice Arduino sulla scheda, puoi anche rimuovere i commenti sulle righe Serial.println e controllare se l'hardware funziona come previsto utilizzando il monitor seriale. Comunque, questo è completamente opzionale.
Una volta caricato il codice, avvia l'applicazione Android sul tuo cellulare. L'applicazione dovrebbe connettersi automaticamente al modulo HC-06 e visualizzerà "Connect to: HC-06" nella parte superiore dell'applicazione come mostrato di seguito.
Inizialmente, tutti i valori saranno zero tranne il valore della temperatura. Questo perché Arduino ha calibrato l'MPU-6050 per questa posizione come riferimento, ora puoi inclinare l'hardware e verificare che anche i valori sull'applicazione mobile stiano cambiando insieme all'animazione. Il funzionamento completo dell'applicazione è disponibile nel video riportato di seguito. Quindi ora puoi posizionare la breadboard ovunque e controllare se la superficie è perfettamente livellata.
Spero che tu abbia capito il progetto e imparato qualcosa di utile da esso. In caso di dubbi, utilizzare la sezione commenti qui sotto o i forum per risolverli.