Sommario:
- Passaggio 1: elenco dei componenti
- Passaggio 2: assemblaggio
- Passaggio 3:
- Passaggio 4: quindi, utilizzando lo stesso metodo, ho fissato il servo del rullo. le parti sono specificamente progettate per adattarsi facilmente ai servi MG995
- Passaggio 5: quindi, utilizzando lo stesso metodo, ho fissato il servo del rullo. le parti sono specificamente progettate per adattarsi facilmente ai servi MG995
- Passaggio 6: connessioni
- Passaggio 7: collegamento con il regolatore di tensione 7805 IC
- Passaggio 8: codifica
- Passaggio 9: quando tutti i componenti sono collegati, il suo aspetto è simile a questa immagine
- Passaggio 10: ora inserisci tutto il materiale base all'interno della lattina per alimenti
- Passaggio 11: quando tutti i fili e i componenti sono posizionati all'interno di una lattina per alimenti, applicare la pistola per colla alla base del pannello di schiuma
- Passaggio 12: Conclusione
![Gimbal per il controllo del movimento: 12 passaggi Gimbal per il controllo del movimento: 12 passaggi](https://i.howwhatproduce.com/images/001/image-1928-19-j.webp)
Video: Gimbal per il controllo del movimento: 12 passaggi
![Video: Gimbal per il controllo del movimento: 12 passaggi Video: Gimbal per il controllo del movimento: 12 passaggi](https://i.ytimg.com/vi/qMtAF3c2H3c/hqdefault.jpg)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:00
![Image Image](https://i.howwhatproduce.com/images/001/image-1928-21-j.webp)
![](https://i.ytimg.com/vi/aeVnyle7KME/hqdefault.jpg)
Ciao a tutti, mi chiamo Harji Nagi. Attualmente sono uno studente del secondo anno che studia elettronica e ingegneria della comunicazione presso il Pranveer Singh Institute Of Technology, Kanpur (UP). Ho un vivo interesse per la robotica, arduino, l'intelligenza artificiale e l'elettronica analogica.
La parola "gimbal" è definita come un supporto imperniato che consente la rotazione di qualsiasi oggetto in un unico asse. Quindi un gimbal a tre assi consente a qualsiasi oggetto montato sul gimbal di essere indipendente dal movimento di chi tiene il gimbal. Il gimbal detta il movimento dell'oggetto, non quello che lo trasporta.
Si compone di 3 servomotori MG996R per il controllo a 3 assi, e una base su cui verranno posizionati il sensore MPU6050, l'Arduino e la batteria. Serve per mantenere la telecamera stabilizzata senza vibrazioni. Un gimbal a 3 assi assicura che il movimento della fotocamera sia stabilizzato anche se chi la tiene sta andando su e giù, sinistra e destra, davanti e dietro. Questo è ciò che chiamiamo stabilizzazione di imbardata, beccheggio e rollio.
Passaggio 1: elenco dei componenti
L'elenco dei componenti sono:
1) Arduino Uno
2) Batteria 8V, 1,5 Amp per alimentare Arduino Uno
3) 7805 Regolatore di tensione Ic oppure puoi usare buck conveter
4)MPU 6050
5)3*(Motori SERVO MG995)
6) Cavi per ponticelli
Altre attrezzature:
1) Saldatore
2) Pistola per colla
3) Trapano
4)Il cibo può
Invece di usare breadborad, ho usato una piccola scheda perf coustom per la connessione bus positiva e negativa
Passaggio 2: assemblaggio
![Assemblaggio Assemblaggio](https://i.howwhatproduce.com/images/001/image-1928-22-j.webp)
![Assemblaggio Assemblaggio](https://i.howwhatproduce.com/images/001/image-1928-23-j.webp)
Foamcore, pannello in schiuma o pannello in schiuma con rivestimento in carta è un materiale leggero e facilmente tagliabile utilizzato per il montaggio del servomotore e per la realizzazione di modelli in scala.
Per prima cosa ho realizzato una staffa a forma di L fai-da-te per montare il servomotore con l'aiuto di un pannello di gommapiuma.
Passaggio 3:
![Immagine Immagine](https://i.howwhatproduce.com/images/001/image-1928-24-j.webp)
Il montaggio del gimbal è stato abbastanza semplice. Ho iniziato con l'installazione del servo Yaw, del sensore MPU 6050 e dell'interruttore ON-OFF. Usando bulloni e dadi l'ho fissato alla base
Passaggio 4: quindi, utilizzando lo stesso metodo, ho fissato il servo del rullo. le parti sono specificamente progettate per adattarsi facilmente ai servi MG995
![Successivamente, utilizzando lo stesso metodo, ho fissato il servo del rullo. le parti sono specificamente progettate per adattarsi facilmente ai servi MG995 Successivamente, utilizzando lo stesso metodo, ho fissato il servo del rullo. le parti sono specificamente progettate per adattarsi facilmente ai servi MG995](https://i.howwhatproduce.com/images/001/image-1928-25-j.webp)
Passaggio 5: quindi, utilizzando lo stesso metodo, ho fissato il servo del rullo. le parti sono specificamente progettate per adattarsi facilmente ai servi MG995
![Successivamente, utilizzando lo stesso metodo, ho fissato il servo del rullo. le parti sono specificamente progettate per adattarsi facilmente ai servi MG995 Successivamente, utilizzando lo stesso metodo, ho fissato il servo del rullo. le parti sono specificamente progettate per adattarsi facilmente ai servi MG995](https://i.howwhatproduce.com/images/001/image-1928-26-j.webp)
Passaggio 6: connessioni
![Connessioni Connessioni](https://i.howwhatproduce.com/images/001/image-1928-27-j.webp)
Nello schema del circuito è possibile utilizzare il convertitore buck o il regolatore di tensione 7805 IC per convertire da 8 V a 5 V. Il microcontrollore a cui viene fornito lo schema del circuito è Arduino Nano, è inoltre possibile utilizzare Arduino Uno, Arduino Mega.
I pin SCL e SDA dell'MPU 6050 sono collegati al pin analogico Arduino A5 e A4. (I pin SCL e SDA possono variare, quindi controlla la scheda tecnica per i pin SCl e SDA per altri microcontrollori)
Passaggio 7: collegamento con il regolatore di tensione 7805 IC
![Collegamento con 7805 regolatore di tensione IC Collegamento con 7805 regolatore di tensione IC](https://i.howwhatproduce.com/images/001/image-1928-28-j.webp)
Questo schema elettrico è per il collegamento del regolatore di tensione 7805 ic, collega la batteria da 8v a Vin e otterrai una tensione di uscita di 5v.
Passaggio 8: codifica
È necessario includere le seguenti librerie:
1)#includeClicca qui per scaricare il file zip
2)#includeClicca qui per scaricare il file zip
Dopo aver scaricato il file zip, aggiungi la libreria zip in arduino sketch
Per il codice
/*
Gimbal fai da te - MPU6050 Arduino Tutorial Codice basato sull'esempio MPU6050_DMP6 dalla libreria i2cdevlib di Jeff Rowberg: https://github.com/jrowberg/i2cdevlib */ // I2Cdev e MPU6050 devono essere installati come librerie, altrimenti il .cpp/ I file.h // per entrambe le classi devono trovarsi nel percorso di inclusione del progetto #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" //#include "MPU6050.h" // non necessario se si utilizza il file di inclusione di MotionApps / / La libreria Arduino Wire è necessaria se l'implementazione I2Cdev I2CDEV_ARDUINO_WIRE // è utilizzata in I2Cdev.h #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif #include // L'indirizzo I2C predefinito della classe è 0x68 // possono essere specifici indirizzi I2C passato come parametro qui // AD0 basso = 0x68 (predefinito per breakout SparkFun e scheda di valutazione InvenSense) // AD0 alto = 0x69 MPU6050 mpu; //MPU6050 mpu(0x69); // <-- use for AD0 high // Definisce i 3 servomotori Servo servo0; Servo servo1; Servo servo2; galleggiante corretto; intj = 0; #define OUTPUT_READABLE_YAWPITCHROLL #define INTERRUPT_PIN 2 // usa il pin 2 su Arduino Uno e sulla maggior parte delle schede bool blinkState = false; // Controllo/stato MPU vars bool dmpReady = false; // imposta true se DMP init ha avuto successo uint8_t mpuIntStatus; // mantiene il byte di stato dell'interrupt effettivo dalla MPU uint8_t devStatus; // restituisce lo stato dopo ogni operazione del dispositivo (0 = successo, !0 = errore) uint16_t packetSize; // dimensione prevista del pacchetto DMP (il valore predefinito è 42 byte) uint16_t fifoCount; // conteggio di tutti i byte attualmente in FIFO uint8_t fifoBuffer[64]; // Buffer di memorizzazione FIFO // vars di orientamento/movimento Quaternion q; // [w, x, y, z] contenitore di quaternioni VectorInt16 aa; // [x, y, z] misurazioni del sensore di accelerazione VectorInt16 aaReal; // [x, y, z] misurazioni del sensore di accelerazione senza gravità VectorInt16 aaWorld; // [x, y, z] misurazioni del sensore di accelerazione world-frame VectorFloat gravità; // [x, y, z] vettore gravità float eulero[3]; // [psi, theta, phi] contenitore dell'angolo di Eulero float ypr[3]; // [yaw, pitch, roll] contenitore di imbardata/beccheggio/rotazione e vettore di gravità // struttura del pacchetto per la demo della teiera InvenSense uint8_t teapotPacket[14] = { '$', 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x00, '\r', '\n' }; // =============================================== ================ // === ROUTINE DI RILEVAMENTO INTERRUZIONI === // ===================== =========================================== volatile bool mpuInterrupt = false; // indica se il pin di interruzione MPU è andato alto void dmpDataReady() { mpuInterrupt = true; } // ============================================== ================= // === IMPOSTAZIONE INIZIALE === // ===================== =========================================== void setup() { // unisciti al bus I2C (la libreria I2Cdev non lo fa automaticamente) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); Wire.setClock(400000); // Orologio I2C a 400kHz. Commenta questa riga se hai difficoltà di compilazione #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif // inizializza la comunicazione seriale // (115200 scelto perché è richiesto per l'output di Teapot Demo, ma dipende // davvero da te a seconda del tuo progetto) Serial.begin(38400); mentre (!Seriale); // attendi l'enumerazione di Leonardo, gli altri continuano immediatamente // inizializza dispositivo //Serial.println(F("Inizializzazione dispositivi I2C…")); mpu.initialize(); pinMode(INTERRUPT_PIN, INPUT); devStatus = mpu.dmpInitialize(); // fornisci qui i tuoi offset giroscopici, scalati per la sensibilità minima mpu.setXGyroOffset(17); mpu.setYGyroOffset(-69); mpu.setZGyroOffset(27); mpu.setZAccelOffset(1551); // 1688 default di fabbrica per il mio chip di prova // assicurati che funzioni (restituisce 0 in caso affermativo) if (devStatus == 0) { // attiva il DMP, ora che è pronto // Serial.println(F("Abilitazione DMP…")); mpu.setDMPEnabled(true); attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); // imposta il nostro flag DMP Ready in modo che la funzione main loop() sappia che va bene usarla //Serial.println(F("DMP ready! Waiting for first interrupt…")); dmpReady = vero; // ottiene la dimensione del pacchetto DMP prevista per un confronto successivo packetSize = mpu.dmpGetFIFOPacketSize(); } else { // ERRORE! // 1 = caricamento della memoria iniziale non riuscito // 2 = aggiornamenti della configurazione DMP non riusciti // (se si interrompe, di solito il codice sarà 1) // Serial.print(F("Inizializzazione DMP non riuscita (codice ")); //Serial.print(devStatus); //Serial.println(F(")")); } // Definisce i pin a cui sono collegati i 3 servomotori servo0.attach(10); servo1.attach(9); servo2.attach(8); } // ============================================== ================= // === CICLO DEL PROGRAMMA PRINCIPALE === // ==================== ============================================ loop vuoto() { / / se la programmazione fallisce, non provare a fare nulla se (!dmpReady) ritorna; // attende l'interruzione MPU oi pacchetti aggiuntivi disponibili while (!mpuInterrupt && fifoCount < packetSize) { if (mpuInterrupt && fifoCount
= 1024) {
// resetta così possiamo continuare in modo pulito mpu.resetFIFO(); fifoCount = mpu.getFIFOCount(); Serial.println(F("Fifo overflow!")); // altrimenti, controlla l'interruzione di DMP data ready (questo dovrebbe accadere frequentemente) } else if (mpuIntStatus & _BV(MPU6050_INTERRUPT_DMP_INT_BIT)) { // attendi la corretta lunghezza dei dati disponibili, dovrebbe essere un'attesa MOLTO breve mentre (pacchetto fifoCount 1 disponibile / / (questo ci permette di leggere immediatamente di più senza aspettare un'interruzione) fifoCount -= packetSize; // Ottieni i valori di imbardata, beccheggio e rollio #ifdef OUTPUT_READABLE_YAWPITCHROLL mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); // Valori di imbardata, beccheggio, rollio - Radianti in gradi ypr[0] = ypr[0] * 180 / M_PI;ypr[1] = ypr[1] * 180 / M_PI; ypr[2] = ypr[2] * 180 / M_PI; // Salta 300 letture (processo di autocalibrazione) if (j <= 300) { corretto = ypr[0]; // L'imbardata inizia con un valore casuale, quindi cattura l'ultimo valore dopo 300 letture j++; } // Dopo 300 letture else { ypr[0] = ypr[0] - corretto; // Imposta l'imbardata a 0 gradi - sottrai l'ultimo valore casuale di imbardata dal valore corrente per rendere il Imbardata 0 gradi es // Mappa i valori del sensore MPU6050 da -90 a 90 a valori adatti al servocomando da 0 a 180 int servo0Value = map(ypr[0], -90, 90, 0, 180); int servo1Value = map(ypr[1], -90, 90, 0, 180); int servo2Value = map(ypr[2], -90, 90, 180, 0); // Controlla i servi secondo l'orientamento dell'MPU6050 servo0.write(servo0Value); servo1.write(servo1Value); servo2.write(servo2Value); } #finisci se } }
Infine, utilizzando la funzione di scrittura, inviamo questi valori ai servi come segnali di controllo. Ovviamente, puoi disabilitare il servo Yaw se vuoi solo la stabilizzazione per gli assi X e Y e utilizzare questa piattaforma come gimbal della fotocamera
Passaggio 9: quando tutti i componenti sono collegati, il suo aspetto è simile a questa immagine
![Quando tutti i componenti sono collegati, il suo aspetto è simile a questa immagine Quando tutti i componenti sono collegati, il suo aspetto è simile a questa immagine](https://i.howwhatproduce.com/images/001/image-1928-29-j.webp)
Passaggio 10: ora inserisci tutto il materiale base all'interno della lattina per alimenti
![Ora inserisci tutte le cose di base all'interno della lattina per alimenti Ora inserisci tutte le cose di base all'interno della lattina per alimenti](https://i.howwhatproduce.com/images/001/image-1928-30-j.webp)
Passaggio 11: quando tutti i fili e i componenti sono posizionati all'interno di una lattina per alimenti, applicare la pistola per colla alla base del pannello di schiuma
![Quando tutti i fili e i componenti sono posizionati all'interno di una lattina per alimenti, applicare la pistola per colla alla base del pannello di schiuma Quando tutti i fili e i componenti sono posizionati all'interno di una lattina per alimenti, applicare la pistola per colla alla base del pannello di schiuma](https://i.howwhatproduce.com/images/001/image-1928-31-j.webp)
Passaggio 12: Conclusione
Si prega di notare che questo è tutt'altro che un buon gimbal della fotocamera. I movimenti non sono fluidi perché questi servi non sono pensati per tale scopo. I gimbal per fotocamere reali utilizzano un tipo speciale di motore BLDC per ottenere movimenti fluidi. Quindi, considera questo progetto solo a scopo educativo.
Questo sarebbe tutto per questo tutorial, spero che ti sia piaciuto e che abbia imparato qualcosa di nuovo. Sentiti libero di fare qualsiasi domanda nella sezione commenti qui sotto e non dimenticare di controllare le mie raccolte di progetti
Consigliato:
Controllo gestuale semplice - Controlla i tuoi giocattoli RC con il movimento del tuo braccio: 4 passaggi (con immagini)
![Controllo gestuale semplice - Controlla i tuoi giocattoli RC con il movimento del tuo braccio: 4 passaggi (con immagini) Controllo gestuale semplice - Controlla i tuoi giocattoli RC con il movimento del tuo braccio: 4 passaggi (con immagini)](https://i.howwhatproduce.com/images/002/image-3464-25-j.webp)
Semplice controllo dei gesti - Controlla i tuoi giocattoli RC con il movimento del tuo braccio: benvenuto nel mio 'ible' #45. Qualche tempo fa ho realizzato una versione RC completamente funzionante di BB8 usando parti di Lego Star Wars… https://www.instructables.com/id/Whats-Inside-My-R…Quando ho visto quanto fosse bello la Force Band realizzata da Sphero, ho pensato: "Ok, io c
Cursore di controllo del movimento per la guida Time Lapse: 10 passaggi (con immagini)
![Cursore di controllo del movimento per la guida Time Lapse: 10 passaggi (con immagini) Cursore di controllo del movimento per la guida Time Lapse: 10 passaggi (con immagini)](https://i.howwhatproduce.com/images/005/image-14945-20-j.webp)
Motion Control Slider per Time Lapse Rail: questo istruibile spiega come motorizzare un binario time lapse usando un motore passo-passo guidato da un Arduino. Ci concentreremo principalmente sul controller di movimento che aziona il motore passo-passo supponendo che tu abbia già un binario che desideri motorizzare. Ad esempio quando dis
Aggiunta del controllo del movimento a un orologio di proiezione: 7 passaggi
![Aggiunta del controllo del movimento a un orologio di proiezione: 7 passaggi Aggiunta del controllo del movimento a un orologio di proiezione: 7 passaggi](https://i.howwhatproduce.com/images/002/image-4181-104-j.webp)
Aggiunta del controllo del movimento a un orologio di proiezione: Obiettivo: aggiungere un sensore di movimento che illumini l'orologio di notte quando rileva un movimento e renda la luminosità della retroilluminazione regolabile manualmente. Perché: ho solo alcuni requisiti per un buon orologio da comodino. Deve essere facilmente visibile, ma non leggero
Interessante guida alla programmazione per il progettista - Controllo del processo del programma - Dichiarazione del ciclo: 8 passaggi
![Interessante guida alla programmazione per il progettista - Controllo del processo del programma - Dichiarazione del ciclo: 8 passaggi Interessante guida alla programmazione per il progettista - Controllo del processo del programma - Dichiarazione del ciclo: 8 passaggi](https://i.howwhatproduce.com/images/004/image-11774-25-j.webp)
Interessante guida alla programmazione per il progettista - Controllo del processo del programma - Dichiarazione del ciclo: Controllo del processo del programma - Dichiarazione del ciclo Da questo capitolo, entrerai in contatto con un importante e potente punto di conoscenza - Dichiarazione del ciclo. Prima di leggere questo capitolo, se vuoi disegnare 10.000 cerchi nel programma, puoi farlo solo con un ter
Presa controllata dal movimento - Da una luce di rilevamento del movimento: 6 passaggi
![Presa controllata dal movimento - Da una luce di rilevamento del movimento: 6 passaggi Presa controllata dal movimento - Da una luce di rilevamento del movimento: 6 passaggi](https://i.howwhatproduce.com/preview/how-and-what-to-produce/11125349-motion-controlled-outlet-from-a-motion-sensing-light-6-steps-j.webp)
Presa controllata dal movimento - Da una luce di rilevamento del movimento: Immagina di essere un dolcetto o scherzetto che va nella casa più spaventosa del quartiere. Dopo aver superato tutti i ghoul, i fantasmi e i cimiteri, arrivi finalmente all'ultimo percorso. Puoi vedere le caramelle in una ciotola davanti a te! Ma poi improvvisamente un gho