Sommario:
- Fase 1: INFORMAZIONI SU QUESTO PROGETTO
- Passaggio 2: hardware richiesto
- Passaggio 3: circuito e connessioni
- Fase 4: LAVORO
- Passaggio 5: CODICE
- Passaggio 6: DIMOSTRAZIONE VIDEO
Video: Controllo del servo tramite MPU6050 tra Arduino ed ESP8266 con HC-12: 6 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:02
In questo progetto, stiamo controllando la posizione di un servomotore utilizzando l'mpu6050 e l'HC-12 per la comunicazione tra Arduino UNO e ESP8266 NodeMCU.
Fase 1: INFORMAZIONI SU QUESTO PROGETTO
È un altro progetto IoT basato sul modulo RF HC-12. Qui, i dati imu(mpu6050) di arduino vengono utilizzati per controllare il servomotore (collegato a Nodemcu). Qui, la visualizzazione dei dati viene eseguita anche sul lato arduino dove i dati del passo mpu6050 (rotazione sull'asse x) vengono visualizzati con uno schizzo di elaborazione (discusso in seguito). Fondamentalmente questo progetto è solo un piccolo riscaldamento per ricordare diversi aspetti del controllo Imu e Servo con Arduino e nodemcu ESP8266.
OBBIETTIVO
L'obiettivo di questo è abbastanza chiaro, stiamo controllando la posizione del servomotore usando il valore del passo di IMU. E tutti insieme questo passo e la posizione del motore sincronizzato vengono visualizzati con Processing.
Passaggio 2: hardware richiesto
Modulo Wi-Fi NodeMCU ESP8266 12E
breadboard senza saldatura
Cavo del ponticello
MPU6050 accelo+giroscopio
Moduli HC-12 RF (coppia)
Servomotore SG90
Passaggio 3: circuito e connessioni
I collegamenti sono diretti. Puoi alimentare il servo con 3.3V del tuo Nodemcu. Puoi anche usare Vin per alimentare il servo se il tuo nodemcu ha così tanta tensione su quel pin. Ma la maggior parte delle schede Lolin non ha 5V su Vin (dipende dal produttore).
Questi schemi circuitali sono realizzati utilizzando EasyADA.
Fase 4: LAVORO
Non appena lo sketch di arduino è iniziato, invierà l'angolo di beccheggio (che va da -45 a 45) al ricevitore hc12 di Nodemcu che viene mappato con la posizione del servo da 0 a 180 gradi. Qui abbiamo usato l'angolo di beccheggio da -45 a +45 gradi in modo da poterlo facilmente mappare alla posizione Servo.
Ora, stai pensando perché possiamo semplicemente usare il metodo della mappa come segue: -
int pos = map(val, -45, 45, 0, 180);
Perché l'angolo negativo inviato dal trasmettitore hc12 viene ricevuto come:
1° tempo: (T) da 0 a 45 => da 0 a 45 (R)
2° tempo: (T) da -45 a -1 => da 255 a 210 (R)
Quindi devi mapparlo da 0 a 180 come
if(val>=0 && val<=45) pos = (val*2)+90; altrimenti pos = (val-210)*2;
Sto evitando il metodo map a causa di qualche errore irrilevante. Puoi provarlo e commentare che funziona con te
if(val>=0 && val<=45) pos = map(val, 0, 45, 90, 180); else pos = map(val, 255, 210, 0, 90); // Il quarto argomento può essere 2 (puoi controllare)
MPU6050 Calcolo dell'angolo di inclinazione
Sto usando la libreria MPU6050_tockn che si basa sulla distribuzione di dati grezzi dall'IMU.
int pitchAngle = mpu6050.getAngleX()
Questo ci darà l'angolo di rotazione attorno all'asse x. Come hai visto nella figura, il mio imu è posizionato verticalmente sulla breadboard, quindi non confonderlo con pitch and roll. In realtà dovresti sempre vedere gli assi stampati sulla breakout board.
Attraverso questa libreria, non devi preoccuparti dell'elettronica interna di lettura di registri specifici per operazioni specifiche. specifichi solo il lavoro e il gioco è fatto!
A proposito, se vuoi calcolare l'angolo da solo. Puoi farlo facilmente come segue:
#includere
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(false); 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 = map(AcX, minVal, maxVal, -90, 90); int yAng = map(AcY, minVal, maxVal, -90, 90); int zAng = map(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); }
Ma non è necessario scrivere così tanto codice per ottenere l'angolo. Dovresti conoscere i fatti dietro le quinte, ma usare la libreria di altre persone è molto efficace in molti progetti. Puoi leggere su questo imu e altri approcci per ottenere più dati filtrati dal seguente link: Explore-mpu6050.
Il mio codice arduino alla fine della trasmissione ha solo 30 righe con l'aiuto della libreria MPU6050_tockn, quindi l'utilizzo di una libreria è utile a meno che non siano necessarie alcune modifiche fondamentali alla funzionalità di IMU. Una libreria chiamata I2Cdev di Jeff Rowberg è molto utile se vuoi dei dati filtrati usando il DMP (Digital motion processor) dell'IMU.
Integrazione con Processing
Qui Processing viene utilizzato per visualizzare i dati di rotazione sull'asse x dell'IMU calcolati dai dati grezzi provenienti da MPU6050. Riceviamo i dati grezzi in arrivo in SerialEvent nel modo seguente:
void serialEvent(Serial myPort) {
inString = myPort.readString(); try { // Analizza i dati //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(stringhe di dati[i+1]); } } else { println(inString); } } } catch (Eccezione e) { println("Eccezione rilevata"); } }
Qui puoi vedere la visualizzazione nell'immagine allegata in questo passaggio. I dati di posizione ricevuti all'estremità di nodemcu vengono visualizzati anche sul monitor seriale come mostrato nell'immagine.
Passaggio 5: CODICE
Ho allegato il repository github. Puoi clonarlo e utilizzarlo nei tuoi progetti.
mio_codice
Il repository include 2 arduino sketch per trasmettitore (arduino+IMU) e ricevitore (Nodemcu+Servo).
E uno schizzo di elaborazione. Inizia il repository se questo aiuta nel tuo progetto.
In questo istruibile, R- Ricevitore e T- Trasmettitore
Passaggio 6: DIMOSTRAZIONE VIDEO
Domani allego il video. Seguimi per essere avvisato.
Grazie a tutti!
Consigliato:
Controllo guidato in tutto il mondo tramite Internet tramite Arduino: 4 passaggi
Controllo guidato in tutto il mondo tramite Internet tramite Arduino: Ciao, sono Rithik. Realizzeremo un led controllato da Internet usando il tuo telefono. Useremo software come Arduino IDE e Blynk. È semplice e se ci riesci puoi controllare tutti i componenti elettronici che desideri Cose di cui abbiamo bisogno: Hardware:
Controllo della luminosità Controllo LED basato su PWM tramite pulsanti, Raspberry Pi e Scratch: 8 passaggi (con immagini)
Controllo della luminosità Controllo LED basato su PWM tramite pulsanti, Raspberry Pi e Scratch: stavo cercando di trovare un modo per spiegare come funzionava il PWM ai miei studenti, quindi mi sono posto il compito di provare a controllare la luminosità di un LED utilizzando 2 pulsanti - un pulsante aumenta la luminosità di un LED e l'altro lo attenua. Per programmare
ESP8266 RGB LED STRIP Controllo WIFI - NODEMCU Come telecomando IR per strisce LED controllate tramite Wi-Fi - STRIP LED RGB Controllo smartphone: 4 passaggi
ESP8266 RGB LED STRIP Controllo WIFI | NODEMCU Come telecomando IR per strisce LED controllate tramite Wi-Fi | Controllo Smartphone STRIP LED RGB: Ciao ragazzi in questo tutorial impareremo come utilizzare nodemcu o esp8266 come telecomando IR per controllare una striscia LED RGB e Nodemcu sarà controllato dallo smartphone tramite wifi. Quindi in pratica puoi controllare la STRISCIA LED RGB con il tuo smartphone
Controllo del LED tramite potenziometro con Arduino Uno R3: 6 passaggi
Controllo del LED tramite potenziometro con Arduino Uno R3: In precedenza, abbiamo utilizzato Serial Monitor per inviare dati alla scheda di controllo, il che potrebbe essere illuminante per conoscere un nuovo software. In questa lezione vediamo come modificare la luminanza di un LED tramite un potenziometro, e ricevere i dati del potenziometro
Incapsulamento del servomotore passo-passo con controllo seriale tramite Arduino utilizzando una stampante 3D - Pt4: 8 passaggi
Incapsulamento del servomotore passo passo con controllo seriale tramite Arduino utilizzando una stampante 3D - Pt4: in questo quarto video della serie Motor Step, utilizzeremo ciò che abbiamo imparato in precedenza per costruire un servomotore passo passo con controllo tramite comunicazione seriale e reale feedback di posizione utilizzando un encoder resistivo monitorato da un Arduino. In