| Acquista da OSOYOO | Acquista negli USA |
Indice
Questo tutorial si concentra sul miglioramento delle capacità autonome della macchina robot OSOYOO V3 utilizzando il modulo MPU6050 (IMU) per mantenere la direzione desiderata. Il MPU6050, un sensore di movimento a 3 assi, fornisce dati di velocità angolare (giroscopio) e accelerazione lineare (accelerometro), consentendo al robot di correggere attivamente la propria rotta. Questa lezione tratta le tecniche di fusione dei sensori e gli algoritmi di controllo PID per una marcia in linea retta stabile.
Per questa lezione, hai bisogno del seguente componente. Assicurati di averlo a disposizione prima di iniziare.
| N. | Immagine | Dispositivo | Qtà | Accessori | Link |
| 1 | ![]() |
Giroscopio MPU6050 a 3 assi | 1 | Clicca qui per acquistare |
Il MPU6050 integra un giroscopio a 3 assi e un accelerometro a 3 assi. Il giroscopio misura la velocità angolare, fornendo informazioni sulla velocità di rotazione del robot attorno ai suoi assi X, Y e Z. L’integrazione di questi dati nel tempo fornisce lo spostamento angolare (ad esempio, l’angolo di imbardata). Tuttavia, i dati grezzi del giroscopio sono soggetti a deriva, accumulando piccoli errori nel tempo. L’accelerometro misura l’accelerazione lineare, utile per determinare l’orientamento del dispositivo rispetto alla forza di gravità. Sebbene stabili sul lungo periodo, gli accelerometri sono molto sensibili alle vibrazioni e ai bruschi movimenti, rendendo i loro dati di orientamento grezzi rumorosi.

Passo 1: Esegui il montaggio hardware di base come descritto nella lezione 1 della macchina robot. Se hai già completato la lezione 1, lascia tutto com’è.

Passo 2: Fissa saldamente il modulo MPU6050 sul telaio del robot come mostrato di seguito. (Il MPU6050 comunica con Arduino tramite il protocollo I2C, che richiede solo due linee dati: SDA (Serial Data) e SCL (Serial Clock), oltre all’alimentazione (VCC) e alla massa (GND).)

| Software Arduino open-source (IDE) |
![]() |
Scarica il software qui: https://www.arduino.cc/en/Main/Software?setlang=en |
| 7-Zip è un programma gratuito per estrarre file ZIP |
![]() |
Scarica 7-Zip gratuitamente: https://www.7-zip.org/ |
1. Configurazione dell’Arduino IDE: Scarica e installa l’ultima versione dell’Arduino IDE da https://www.arduino.cc/en/Main/Software?setlang=en.

2. Download del codice di esempio: Scarica il codice di esempio per la lezione 2 da qui. Estrai il contenuto e troverai un file chiamato v3car-lesson2.ino nella cartella v3car-lesson2. Apri v3car-lesson2.ino nell’Arduino IDE.

3. Installazione delle librerie
Prima di tutto, scarica i file ZIP delle librerie dai link seguenti:
https://osoyoo.com/driver/2wd/MPU6050_light.zip
https://osoyoo.com/driver/2wd/PID.zip
Non estrarre i file ZIP. Apri l’Arduino IDE -> Sketch -> Includi libreria -> Aggiungi libreria .ZIP. Aggiungi i file ZIP all’Arduino IDE uno alla volta.

4. Selezione della scheda e della porta: Collega la OSOYOO Basic Board (compatibile con Arduino UNO) al computer tramite un cavo USB (Importante: assicurati che l’interruttore della macchina robot sia spento e la batteria sia scollegata prima di collegare la scheda al PC). Avvia l’Arduino IDE. Vai su Strumenti > Scheda e seleziona Arduino Uno. Poi vai su Strumenti > Porta e seleziona la porta seriale corretta. Se non sei sicuro, controlla il Gestione dispositivi del tuo sistema operativo.

5. Caricamento del codice: Fai clic sul pulsante “Carica” (icona freccia verso destra) per compilare e caricare lo sketch sulla OSOYOO Basic Board.

6. Verificare se Arduino rileva il MPU6050
Apri il Monitor seriale (in alto a destra nell’Arduino IDE), imposta la velocità di trasmissione su 9600 e dovresti vedere MPU6050 Found! come mostrato di seguito. Congratulazioni! Arduino sta rilevando il MPU6050 — sei pronto per testare la macchina.

Nota: Se vedi “Failed to find MPU6050 chip“, c’è un problema di cablaggio. Assicurati che:
1) I pin VCC/GND/SDA/SCL del MPU6050 siano correttamente collegati allo shield OSOLINK Wi-Fi/BLE I/O come indicato nelle nostre istruzioni
2) I pin A4/A5 e i pin SDA/SCL di Arduino non abbiano altri cavi collegati (nei progetti di line tracking, A4/A5 potrebbero essere già occupati dal sensore di tracking)
1) Come la funzione Move() controlla il movimento e la direzione della macchina?
La macchina robot OSOYOO utilizza lo sterzo differenziale. La funzione move(speedL, speedR) accetta due parametri, speedL e speedR, che rappresentano rispettivamente la velocità di rotazione delle ruote sinistra e destra. Il valore di velocità va da -255 a +255, dove un valore positivo indica rotazione in avanti e un valore negativo rotazione all’indietro. Ad esempio, move(-50, 100) significa che la ruota sinistra ruota all’indietro a velocità 50 mentre la ruota destra ruota in avanti a velocità 100, producendo una svolta netta a sinistra.
2) Introduzione alla programmazione del MPU6050
Dopo l’inizializzazione, il giroscopio MPU6050 traccia costantemente l’orientamento del robot rispetto alla direzione di partenza. Quando la macchina robot devia da questa direzione iniziale, il MPU6050 segnala la deviazione ad Arduino.
Nel nostro codice, la variabile Direction rappresenta l’orientamento della macchina nel momento in cui viene posizionata sul pavimento (si assume che sia rivolta in avanti, quindi si imposta Direction a 0).
Dopo i calcoli nelle prime righe della funzione loop(), otteniamo l’orientamento attuale della macchina nella variabile currentAngle alla riga 129.
Combinando le risposte a queste tre domande, il controllore PID effettua una correzione di traiettoria fluida ed efficiente.
PID_v1.h e al tuo codice.setup()):// We tell the PID controller what to watch and what to control.
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
Direction = 0; // Our TARGET is to have an angle of 0 degrees.
myPID.SetMode(AUTOMATIC); // Turn on the controller.
loop()):// 1. We get the sensor reading and put it into the Input variable.
Input = currentAngle;
// 2. We call the compute function. This is where the PID magic happens!
myPID.Compute();
// 3. We use the result to control the motors.
int speedL = baseSpeed - Output;
int speedR = baseSpeed + Output;
move(speedL, speedR);
myPID.Compute() svolge tutto il lavoro internamente. Ogni volta che viene chiamata (la libreria gestisce il timing in base a SetSampleTime), esegue le seguenti operazioni:Output è +15, significa che il robot ha bisogno di una correzione di 15 unità. La applichiamo rallentando un motore (baseSpeed - 15) e accelerando l’altro (baseSpeed + 15), facendo girare il robot e riducendo il suo errore. Se il robot va perfettamente dritto, Input sarà 0, l’errore sarà 0 e Output sarà 0, quindi entrambi i motori girano a baseSpeed.4) Come regolare Kp, Ki e Kd per un movimento stabile
Ki = 0.0 e Kd = 0.0 nel tuo codice.Kp stabile che non oscilli (o quasi). Sarà probabilmente inferiore a 1,5.banda morta di circa 0,5 gradi al tuo loop per ignorare il rumore del sensore.Kp è stabile, aumenta lentamente Kd per ridurre qualsiasi sovraelongazione residua.Ki per eliminare la deriva a lungo termine.Seguendo queste linee guida e comprendendo i principi sottostanti, puoi trasformare la macchina robot OSOYOO V3 in una piattaforma capace di navigazione autonoma, gettando le basi per progetti robotici più avanzati.
DownLoad Url osoyoo.com