Sadržaj:
- Korak 1: Popis komponenti
- Korak 2: Sklapanje
- 3. korak:
- Korak 4: Zatim, koristeći istu metodu, osigurao sam Roll Servo. dijelovi su posebno dizajnirani za jednostavno postavljanje servomotora MG995
- Korak 5: Zatim, koristeći istu metodu, osigurao sam Roll Servo. dijelovi su posebno dizajnirani za jednostavno postavljanje servomotora MG995
- Korak 6: Veze
- Korak 7: Povezivanje s IC regulatorom napona 7805
- Korak 8: Kodiranje
- Korak 9: Kad su sve komponente povezane, izgleda slično ovoj slici
- Korak 10: Sada umetnite sve osnovne stvari u posudu za hranu
- Korak 11: Kad se sve žice i komponente postave unutar hrane, tada se na podlogu od pjene može nanijeti pištolj za ljepilo
- Korak 12: Zaključak
Video: Gimbal za upravljanje kretanjem: 12 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:32
Pozdrav svima, moje ime je Harji Nagi. Trenutno sam student druge godine studija elektronike i komunikacijskog inženjerstva na Tehnološkom institutu Pranveer Singh, Kanpur (UP). Imam veliki interes za robotiku, arduino, umjetnu inteligenciju i analognu elektroniku.
Riječ "gimbal" definirana je kao okretni oslonac koji omogućuje rotaciju bilo kojeg objekta u jednoj osi. Dakle, troosni gimbal omogućuje da svaki objekt montiran na gambalu bude neovisan o kretanju onog koji drži gimbal. Gimbal diktira kretanje predmeta, a ne onoga koji ga nosi.
Sastoji se od 3 servo motora MG996R za troosno upravljanje i baze na koju će biti postavljeni senzor MPU6050, Arduino i baterija. Koristi se za stabilizaciju kamere bez vibracija. 3-osni gimbal osigurava stabilizaciju kretanja fotoaparata čak i ako se onaj koji ga drži kreće gore-dolje, lijevo i desno, sprijeda i straga. To je ono što nazivamo stabilizacijom zakretanja, koraka i okretanja.
Korak 1: Popis komponenti
Popis komponenti je:
1) Arduino Uno
2) 8V, 1.5 Amp baterija za napajanje Arduino Uno
3) 7805 Regulator napona Ic ili možete koristiti Buck konvektor
4) MPU 6050
5) 3*(MG995 SERVO motori)
6) Žice kratkospojnika
Ostala oprema:
1) Lemilica
2) Pištolj za ljepilo
3) Stroj za bušenje
4) Limenka za hranu
Umjesto hljeba, koristio sam malu coustom perf ploču za pozitivnu i negativnu autobusnu vezu
Korak 2: Sklapanje
Foamcore, pjenasta ploča ili pjenasta ploča od papira lagani su i lako rezani materijali koji se koriste za montažu servo motora i izradu maketa.
Prvo sam napravio držače u obliku slova L za montažu servo motora uz pomoć pjenaste ploče.
3. korak:
Sklapanje gimbala bilo je prilično jednostavno. Počeo sam s instaliranjem Yaw servo, MPU 6050 senzora i prekidača za uključivanje-isključivanje. Vijcima i maticama pričvrstio sam ga za bazu
Korak 4: Zatim, koristeći istu metodu, osigurao sam Roll Servo. dijelovi su posebno dizajnirani za jednostavno postavljanje servomotora MG995
Korak 5: Zatim, koristeći istu metodu, osigurao sam Roll Servo. dijelovi su posebno dizajnirani za jednostavno postavljanje servomotora MG995
Korak 6: Veze
U dijagramu kruga možete upotrijebiti pretvarač dolara ili 7805 regulator napona IC za pretvaranje 8V u 5 V. Mikrokontroler koji ima shemu sklopa je Arduino Nano, možete koristiti i Arduino Uno, Arduino Mega.
SCL i SDA pinovi MPU 6050 spojeni su na Arduino analogni pin A5 i A4. (SCL i SDA pin mogu se razlikovati pa provjerite podatkovnu tablicu za SCl i SDA pinove za drugi mikrokontroler)
Korak 7: Povezivanje s IC regulatorom napona 7805
Ovaj dijagram kola služi za spajanje regulatora napona 7805 ic, spojite 8v bateriju na Vin i dobit ćete izlazni napon od 5v.
Korak 8: Kodiranje
Morate uključiti sljedeće knjižnice:
1) #includeKliknite ovdje za preuzimanje zip datoteke
2) #includeKliknite ovdje za preuzimanje zip datoteke
Nakon preuzimanja zip datoteke, dodajte zip biblioteku u arduino skicu
Za kod
/*
DIY Gimbal - MPU6050 Arduino Tutorial Code temeljen na primjeru MPU6050_DMP6 iz biblioteke i2cdevlib Jeffa Rowberga: https://github.com/jrowberg/i2cdevlib */// I2Cdev i MPU6050 moraju biti instalirani kao biblioteke ili.cpp/.h datoteke // za obje klase moraju biti na uključenoj stazi vašeg projekta #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" // #include "MPU6050.h" // nije potrebno ako koristite MotionApps include file / / Arduino Wire knjižnica potrebna je ako se implementacija I2Cdev I2CDEV_ARDUINO_WIRE // koristi u I2Cdev.h #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif #include // zadana klasa I2C adresa je 0x68 // specifičan I ovdje je proslijeđen kao parametar // AD0 nisko = 0x68 (zadano za SparkFun proboj i InvenSense evaluacionu ploču) // AD0 visoko = 0x69 MPU6050 mpu; // MPU6050 mpu (0x69); // <- koristi za AD0 high // Definiraj 3 servo motora Servo servo0; Servo servo1; Servo servo2; float ispravan; int j = 0; #define OUTPUT_READABLE_YAWPITCHROLL #define INTERRUPT_PIN 2 // koristite pin 2 na Arduino Uno & većina ploča bool blinkState = false; // MPU kontrola/status vars bool dmpReady = false; // postavljanje true ako je DMP init bio uspješan uint8_t mpuIntStatus; // sadrži stvarni bajt statusa prekida iz MPU -a uint8_t devStatus; // vraća status nakon svake operacije uređaja (0 = uspjeh,! 0 = pogreška) uint16_t packetSize; // očekivana veličina paketa DMP (zadana vrijednost je 42 bajta) uint16_t fifoCount; // broj svih bajtova trenutno u FIFO uint8_t fifoBuffer [64]; // FIFO memorijski međuspremnik // orijentacija/kretanje promjenjivo Quaternion q; // [w, x, y, z] kvaterionski spremnik VectorInt16 aa; // [x, y, z] mjerenja osjetnika ubrzanja VectorInt16 aaReal; // [x, y, z] mjerenja senzora ubrzanja bez gravitacije VectorInt16 aaWorld; // [x, y, z] mjerenja senzora ubrzanja u svjetskom okviru VectorFloat gravitacija; // [x, y, z] gravitacijski vektor float euler [3]; // [psi, theta, phi] Euler kutni kontejner plovak ypr [3]; // [skretanje, nagib, kotrljanje] spremnik za skretanje/nagib/kotrljanje i gravitacijski vektor // struktura paketa za demonstraciju InvenSense čajnika uint8_t teapotPacket [14] = {'$', 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x00, '\ r', '\ n'}; // ================================================ ================ // === RUTINA OTKRIVANJA PREKIDA === // ========================== ============================================ isparljivo bool mpuInterrupt = false; // označava je li pin za prekid MPU -a otišao visoko void dmpDataReady () {mpuInterrupt = true; } // ================================================= ================= // === POČETNE POSTAVKE === // ===================== ============================================ void setup () {// pridruži se sabirnici I2C (knjižnica I2Cdev to ne radi automatski) #ako I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // 400 kHz I2C sat. Komentirajte ovaj redak ako imate poteškoća s sastavljanjem #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, istina); #endif // inicijalizirati serijsku komunikaciju // (115200 odabrano jer je potrebno za demo izlaz Teapot -a, ali // stvarno ovisi o vama, ovisno o vašem projektu) Serial.begin (38400); while (! Serijski); // čekamo Leonardovo nabrajanje, drugi nastavljaju odmah // inicijaliziraju uređaj //Serial.println(F("Inicijaliziranje I2C uređaja … ")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); devStatus = mpu.dmpInitialize (); // ovdje unosite vlastite pomake žiroa, prilagođene za minimalnu osjetljivost mpu.setXGyroOffset (17); mpu.setYGyroOffset (-69); mpu.setZGyroOffset (27); mpu.setZAccelOffset (1551); // 1688 tvornički zadani za moj testni čip // provjerite radi li (vraća 0 ako je tako) if (devStatus == 0) {// uključite DMP, sada kada je spreman // Serial.println (F ("Omogućavanje DMP … ")); mpu.setDMPEnabled (true); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // postavljamo zastavu DMP Ready tako da funkcija main loop () zna da je u redu koristiti je //Serial.println(F("DMP spreman! Čeka se prvi prekid … ")); dmpReady = istina; // dobiti očekivanu veličinu paketa DMP za kasniju usporedbu packetSize = mpu.dmpGetFIFOPacketSize (); } else {// GREŠKA! // 1 = početno učitavanje memorije nije uspjelo // 2 = ažuriranja DMP konfiguracije nisu uspjela // (ako će se prekinuti, obično će kôd biti 1) // Serial.print (F ("DMP Initialization failed (code"))); //Serial.print(devStatus); //Serial.println (F (")")); } // Definirajte pinove na koje su spojena 3 servo motora servo0.attach (10); servo1.priključak (9); servo2.priključak (8); } // ================================================= ================= // === KLUK GLAVNOG PROGRAMA === // ==================== ============================================ void loop () { / / ako programiranje nije uspjelo, ne pokušavajte ništa učiniti ako se (! dmpReady) vrati; // čekamo na prekid MPU -a ili dodatne pakete koji su dostupni dok (! mpuInterrupt && fifoCount <packetSize) {if (mpuInterrupt && fifoCount
= 1024) {
// resetiranje kako bismo mogli nastaviti čisto mpu.resetFIFO (); fifoCount = mpu.getFIFOCount (); Serial.println (F ("FIFO prelijevanje!")); // u protivnom, provjerite ima li prekida za spremanje DMP podataka (to bi se trebalo događati često)} inače ako (mpuIntStatus & _BV (MPU6050_INTERRUPT_DMP_INT_BIT)) {// pričeka ispravnu raspoloživu duljinu podataka, trebalo bi biti VRLO kratko čekanje (paket fifoCount 1 dostupan / / (ovo nam omogućuje da odmah pročitamo više bez čekanja na prekid) fifoCount -= packetSize; // Dobijte vrijednosti Yaw, Pitch and Roll #ifdef OUTPUT_READABLE_YAWPITCHROLL mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& gravitacija, & gravitacija, & gravity,.dmpGetYawPitchRoll (ypr, & q, & gravity); // Vrijednosti skretanja, nagiba, nagiba - Radijani na stupnjeve ypr [0] = ypr [0] * 180 / M_PI; ypr [1] = ypr [1] * 180 / M_PI; ypr [2] = ypr [2] * 180 / M_PI; // Preskočite 300 očitanja (postupak samokalibracije) ako (j <= 300) {ispravno = ypr [0]; // Zakretanje počinje slučajnom vrijednošću, pa hvatanje posljednje vrijednosti nakon 300 očitanja j ++;} // Nakon 300 očitanja ostalo {ypr [0] = ypr [0] - ispravno; // Postavite Yaw na 0 stupnjeva - oduzmite posljednju slučajnu vrijednost Yaw od trenutne vrijednosti kako biste dobili Odstupanje 0 stupnjeva es // Preslikajte vrijednosti senzora MPU6050 od -90 do 90 na vrijednosti prikladne za servo kontrolu od 0 do 180 int servo0Value = map (ypr [0], -90, 90, 0, 180); int servo1Value = karta (ypr [1], -90, 90, 0, 180); int servo2Value = karta (ypr [2], -90, 90, 180, 0); // Upravljajte servo pogonima prema orijentaciji MPU6050 servo0.write (servo0Value); servo1.write (servo1Value); servo2.write (servo2Value); } #završi ako } }
Konačno, koristeći funkciju pisanja, te vrijednosti šaljemo servo upravljačima kao upravljačke signale. Naravno, možete onemogućiti Yaw servo ako želite samo stabilizaciju za osi X i Y te ovu platformu koristiti kao gimbal kamere
Korak 9: Kad su sve komponente povezane, izgleda slično ovoj slici
Korak 10: Sada umetnite sve osnovne stvari u posudu za hranu
Korak 11: Kad se sve žice i komponente postave unutar hrane, tada se na podlogu od pjene može nanijeti pištolj za ljepilo
Korak 12: Zaključak
Imajte na umu da je ovo daleko od dobrog fotoaparata. Pokreti nisu glatki jer ti servomotori nisu namijenjeni za tu svrhu. Pravi gimbali za fotoaparate koriste posebnu vrstu BLDC motora za glatko kretanje. Dakle, razmislite o ovom projektu samo u obrazovne svrhe.
To bi bilo sve za ovaj vodič, nadam se da ste uživali i naučili nešto novo. Slobodno postavite bilo koje pitanje u donjem odjeljku komentara i ne zaboravite provjeriti moje zbirke projekata
Preporučeni:
Robot za daljinsko pretraživanje i odlaganje s kontroliranim kretanjem: 5 koraka
Robot za daljinsko pretraživanje i uklanjanje s Leap Motion -om i daljinskim upravljanjem: Kao dio moje prijave za Leap Motion #3D Jam, bio sam uzbuđen što sam izgradio ovog bežičnog robota za pretraživanje/spašavanje pokretom temeljenog na Raspberry Pi. Ovaj projekt prikazuje i pruža minimalistički primjer kako bežični 3D pokreti rukama mogu
Upravljanje kretanjem s Raspberry Pi i LIS3DHTR, troosnim akcelerometrom, pomoću Pythona: 6 koraka
Upravljanje kretanjem pomoću Raspberry Pi i LIS3DHTR, troosnog mjernog mjerača brzine, pomoću Pythona: Ljepota nas okružuje, ali obično moramo hodati po vrtu da bismo to spoznali. - RumiKao što smo mi obrazovana skupina, veliku većinu svoje energije ulažemo radeći prije računala i mobitela. Stoga često dopuštamo svom zdravlju
Arduino robot s udaljenošću, smjerom i stupnjem rotacije (istok, zapad, sjever, jug) kontroliran glasom pomoću Bluetooth modula i autonomnim kretanjem robota .: 6 koraka
Arduino robot s udaljenošću, smjerom i stupnjem rotacije (istok, zapad, sjever, jug) kontroliran glasom pomoću Bluetooth modula i autonomnim kretanjem robota .: Ova uputa objašnjava kako napraviti Arduino robota koji se može pomicati u željenom smjeru (naprijed, natrag , Lijevo, desno, istok, zapad, sjever, jug) potrebna udaljenost u centimetrima pomoću glasovne naredbe. Robot se također može samostalno pomicati
Klizač za upravljanje kretanjem za Time Lapse Rail: 10 koraka (sa slikama)
Klizač za upravljanje kretanjem za Time Lapse Rail: Ova instrukcija objašnjava kako motorizirati time lapse šinu pomoću koračnog motora koji pokreće Arduino. Uglavnom ćemo se usredotočiti na upravljački sklop pokreta koji pokreće koračni motor pod pretpostavkom da već imate tračnicu koju želite motorizirati. Na primjer, kad ne
UPRAVLJANJE I UPRAVLJANJE BRZINOM DC MOTORA KORIŠĆENJEM LABVIEW (PWM) I ARDUINA: 5 koraka
UPUTSTVO I UPRAVLJANJE BRZINOM DC MOTORA KORIŠĆENJEM LABVIEW (PWM) I ARDUINO: Pozdrav momci, prije svega žao mi je zbog mog smiješnog engleskog jezika. U ovom uputstvu pokazat ću vam kako kontrolirati brzinu istosmjernog motora pomoću laboratorijskog pregleda Počnimo