Sisällysluettelo:
- Vaihe 1: Komponenttiluettelo
- Vaihe 2: Kokoaminen
- Vaihe 3:
- Vaihe 4: Seuraavaksi, käyttäen samaa menetelmää, varmistin rullaservon. osat on suunniteltu erityisesti sovittamaan helposti MG995 -servot
- Vaihe 5: Seuraavaksi, käyttäen samaa menetelmää, varmistin rullaservon. osat on suunniteltu erityisesti sovittamaan helposti MG995 -servot
- Vaihe 6: Liitännät
- Vaihe 7: Liitäntä 7805 -jännitesäätimellä
- Vaihe 8: Koodaus
- Vaihe 9: Kun kaikki komponentit on kytketty, se näyttää samanlaiselta kuin tämä kuva
- Vaihe 10: Aseta nyt kaikki pohjatavarat elintarvikepurkin sisään
- Vaihe 11: Kun kaikki johdot ja komponentit on sijoitettu elintarvikkeen sisälle, voidaan sitten levittää liimapistooli vaahtomuovilevyn pohjaan
- Vaihe 12: Johtopäätös
Video: Liikeohjauskimbaali: 12 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 08:59
Hei kaikki, nimeni on Harji Nagi. Olen tällä hetkellä toisen vuoden opiskelija, joka opiskelen elektroniikkaa ja viestintätekniikkaa Pranveer Singhin teknillisestä instituutista, Kanpurista (UP).
Sana "gimbal" on määritelty kääntyväksi tueksi, joka mahdollistaa minkä tahansa esineen pyörimisen yhdellä akselilla. Kolmen akselin kardaanin ansiosta kaikki kardaaniin asennetut esineet voivat olla riippumattomia kardaania pitävän kohteen liikkeistä. Gimbaali sanelee kohteen liikkeen, ei sen kantavan.
Se koostuu kolmesta MG996R-servomoottorista 3-akselista ohjausta varten ja alustasta, johon MPU6050-anturi, Arduino ja akku sijoitetaan. Sitä käytetään pitämään kamera vakaana ilman tärinää. 3-akselinen kardaani varmistaa, että kameran liike on vakaa, vaikka sitä pitävä liikkuu ylös ja alas, vasemmalle ja oikealle, eteen ja taakse. Tätä me kutsumme kääntymisen, nousun ja vierintävakautukseksi.
Vaihe 1: Komponenttiluettelo
Komponenttiluettelo ovat:
1) Arduino Uno
2) 8 V, 1,5 ampeerin akku Arduino Unon virransyöttöön
3) 7805 Jännitesäädin Ic tai voit käyttää buck conveteria
4) MPU 6050
5) 3*(MG995 SERVO -moottorit)
6) Jännitejohdot
Muut varusteet:
1) Juotosrauta
2) Liimapistooli
3) porakone
4) Ruoka voi
Leipäboradin käyttämisen sijaan olen käyttänyt pientä coustom -peruskorttia positiiviseen ja negatiiviseen väyläyhteyteen
Vaihe 2: Kokoaminen
Foamcore, vaahtolevy tai paperipinnoitettu vaahtolevy on kevyt ja helposti leikattava materiaali, jota käytetään servomoottorin asentamiseen ja pienoismallien valmistukseen.
Ensinnäkin tein DIY L-muotoiset kiinnikkeet servomoottorin asentamiseksi vaahtolevyn avulla.
Vaihe 3:
Gimbalin kokoaminen oli melko helppoa. Aloitin asentamalla Yaw-servon, MPU 6050 -anturin ja ON-OFF-kytkimen. Kiinnitin sen pohjaan ruuveilla ja muttereilla
Vaihe 4: Seuraavaksi, käyttäen samaa menetelmää, varmistin rullaservon. osat on suunniteltu erityisesti sovittamaan helposti MG995 -servot
Vaihe 5: Seuraavaksi, käyttäen samaa menetelmää, varmistin rullaservon. osat on suunniteltu erityisesti sovittamaan helposti MG995 -servot
Vaihe 6: Liitännät
Kytkentäkaaviossa voit käyttää joko buck -muunninta tai 7805 -jännitesäädintä IC 8V: n muuntamiseksi 5 V: ksi. Piirikaavion antama mikrokontrolleri on Arduino Nano, voit käyttää myös Arduino Unoa, Arduino Megaa.
MPU 6050: n SCL- ja SDA -nastat on kytketty Arduinon analogisiin nastoihin A5 ja A4. (SCL- ja SDA -nastat voivat vaihdella, joten tarkista muiden mikro -ohjaimien SCl- ja SDA -nastojen tietolomake)
Vaihe 7: Liitäntä 7805 -jännitesäätimellä
Tämä kytkentäkaavio on tarkoitettu 7805 -jännitesäätimen ic liittämiseen, kytke 8 voltin akku Viniin ja saat 5 voltin lähtöjännitteen.
Vaihe 8: Koodaus
Sinun on sisällytettävä seuraavat kirjastot:
1) #includeLataa zip -tiedosto napsauttamalla tätä
2) #includeLataa zip -tiedosto napsauttamalla tätä
Kun olet ladannut zip -tiedoston, lisää zip -kirjasto arduino -luonnokseen
Koodille
/*
DIY Gimbal - MPU6050 Arduino -opetuskoodi, joka perustuu Jeff Rowbergin i2cdevlib -kirjaston MPU6050_DMP6 -esimerkkiin: https://github.com/jrowberg/i2cdevlib */// I2Cdev ja MPU6050 on asennettava kirjastoina, tai muuten.cpp/.h -tiedostojen // molempien luokkien on oltava projektisi sisällytyspolussa #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" // #include "MPU6050.h" // ei välttämätön, jos käytetään MotionApps include file / / Arduino Wire -kirjasto vaaditaan, jos I2Cdev I2CDEV_ARDUINO_WIRE -toteutusta // käytetään I2Cdev.h #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif #include // luokan oletus I2C -osoite on 0x68 // voi olla I2C -osoite hyväksytty tässä parametrina // AD0 low = 0x68 (oletusarvo SparkFun -katkaisulle ja InvenSense -arviointikortille) // AD0 korkea = 0x69 MPU6050 mpu; // MPU6050 mpu (0x69); // <- käytä AD0 high // Määritä 3 servomoottoria Servo servo0; Servoservo1; Servoservo2; kellua oikein; int j = 0; #define OUTPUT_READABLE_YAWPITCHROLL #define INTERRUPT_PIN 2 // käytä nasta 2 Arduino Unossa ja useimmat levyt bool blinkState = false; // MPU -ohjaus/tila vars bool dmpReady = false; // aseta tosi, jos DMP -aloitus onnistui uint8_t mpuIntStatus; // omistaa todellisen keskeytystilan tavun MPU: sta uint8_t devStatus; // palautustila jokaisen laitteen käytön jälkeen (0 = onnistunut,! 0 = virhe) uint16_t packetSize; // odotettu DMP -paketin koko (oletus on 42 tavua) uint16_t fifoCount; // kaikkien tällä hetkellä FIFO: ssa olevien tavujen määrä uint8_t fifoBuffer [64]; // FIFO -tallennuspuskuri // suunta/liike vars Quaternion q; // [w, x, y, z] kvaternionisäiliö VectorInt16 aa; // [x, y, z] accel -anturin mittaukset VectorInt16 aaReal; // [x, y, z] painovoimattomat akselimittaukset VectorInt16 aaWorld; // [x, y, z] maailmankehyksen accel-anturin mittaukset VectorFloat gravity; // [x, y, z] painovoimavektori float euler [3]; // [psi, teeta, phi] Euler -kulmasäiliön uimuri ypr [3]; // [yaw, pitch, roll] yaw/pitch/roll säiliö ja painovoimavektori // pakettirakenne InvenSense -teekannun demolle uint8_t teapotPacket [14] = {'$', 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x00, '\ r', '\ n'}; // ================================================ ================ // === KESKEYTYKSEN TUNNISTUSRUTIINI === // ===================== =========================================== haihtuva bool mpuInterrupt = false; // osoittaa, onko MPU -keskeytysnasta mennyt korkeaksi void dmpDataReady () {mpuInterrupt = true; } // ================================================== ================= // === ALKUPERÄINEN ASETUS === // ===================== =========================================== tyhjä asennus () {// liittyä I2C -väylään (I2Cdev -kirjasto ei tee tätä automaattisesti) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // 400 kHz I2C -kello. Kommentoi tätä riviä, jos sinulla on kokoamisvaikeuksia #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif // sarjaliikenteen alustaminen // (115200 on valittu, koska se vaaditaan teekannujen demolähtöön, mutta se on // todella sinun tehtäväsi mukaan) Serial.begin (38400); while (! Sarja); // odota Leonardo -luetteloa, muut jatkavat heti // alustavat laitteen //Serial.println(F("I2C -laitteiden alustus… ")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); devStatus = mpu.dmpInitialize (); // anna omat gyroskooppisiirrot täällä, skaalattuna min. herkkyyden mukaan mpu.setXGyroOffset (17); mpu.setYGyroOffset (-69); mpu.setZGyroOffset (27); mpu.setZAccelOffset (1551); // testisiruni tehdasasetus 1688 // varmista, että se toimi (palauttaa 0, jos on) jos (devStatus == 0) {// kytke DMP päälle nyt, kun se on valmis // Serial.println (F ("Käytössä DMP … ")); mpu.setDMPEnabled (tosi); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // aseta DMP Ready -lippumme niin, että pääsilmukka () -toiminto tietää, että sen käyttö on ok //Serial.println(F("DMP valmis! Odotetaan ensimmäistä keskeytystä … ")); dmpReady = totta; // saat odotetun DMP -paketin koon myöhempää vertailua varten packetSize = mpu.dmpGetFIFOPacketSize (); } muu {// VIRHE! // 1 = alustava muistin lataus epäonnistui // 2 = DMP -määrityspäivitykset epäonnistui // (jos se katkeaa, koodi on yleensä 1) // Serial.print (F ("DMP -alustus epäonnistui (koodi")); //Serial.print(devStatus); //Serial.println (F (")")); } // Määritä nastat, joihin 3 servomoottoria on kytketty servo0.attach (10); servo1.kiinnitys (9); servo2.liitin (8); } // ================================================ ================= // === PÄÄOHJELMAN LOOP === // ==================== ============================================ void loop () { / / jos ohjelmointi epäonnistui, älä yritä tehdä mitään, jos (! dmpReady) palaa; // odota MPU -keskeytystä tai lisäpaketteja, kun (! mpuInterrupt && fifoCount <packetSize) {if (mpuInterrupt && fifoCount
= 1024) {
// nollaa, jotta voimme jatkaa puhtaasti mpu.resetFIFO (); fifoCount = mpu.getFIFOCount (); Serial.println (F ("FIFO -ylivuoto!")); // muussa tapauksessa tarkista, onko DMP -tiedot valmiina keskeytetty (tämän pitäisi tapahtua usein)} else if (mpuIntStatus & _BV (MPU6050_INTERRUPT_DMP_INT_BIT)) {// odota oikeaa käytettävissä olevaa datapituutta, odotetaan ERITTÄIN lyhyesti, kun (fifoCount 1 -paketti saatavilla / / (tämän avulla voimme lukea lisää heti odottamatta keskeytystä) fifoCount -= packetSize; // Hanki kääntymis-, piki ja rulla -arvot #ifdef OUTPUT_READABLE_YAWPITCHROLL mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& gravity).dmpGetYawPitchRoll (ypr, & q, & gravity); // Yaw, Pitch, Roll arvot - Radiaanit asteisiin ypr [0] = ypr [0] * 180 / M_PI; ypr [1] = ypr [1] * 180 / M_PI; ypr [2] = ypr [2] * 180 / M_PI; // Ohita 300 lukemaa (itsekalibrointiprosessi), jos (j <= 300) {correct = ypr [0]; // Kääntyminen alkaa satunnaisarvosta, joten kaapata viimeinen arvo 300 lukeman jälkeen j ++;} // 300 lukemisen jälkeen muut {ypr [0] = ypr [0] - oikein; // Aseta kääntö 0 astetta - vähennä viimeinen satunnainen kääntymisarvo nykyisestä arvosta Kallistus 0 astetta es // Yhdistä MPU6050 -anturin arvot välillä -90 -90 servo -ohjaukseen sopiviin arvoihin 0-180 int servo0Value = map (ypr [0], -90, 90, 0, 180); int servo1Value = kartta (ypr [1], -90, 90, 0, 180); int servo2Value = kartta (ypr [2], -90, 90, 180, 0); // Hallitse servoja MPU6050 -suunnan mukaan servo0.write (servo0Value); servo1.write (servo1Value); servo2.write (servo2Value); } #loppu Jos } }
Lopuksi käyttämällä kirjoitustoimintoa, lähetämme nämä arvot servoille ohjaussignaaleina. Voit tietysti poistaa Yaw -servon käytöstä, jos haluat vain vakautta X- ja Y -akselille, ja käyttää tätä alustaa kameran gimbalina
Vaihe 9: Kun kaikki komponentit on kytketty, se näyttää samanlaiselta kuin tämä kuva
Vaihe 10: Aseta nyt kaikki pohjatavarat elintarvikepurkin sisään
Vaihe 11: Kun kaikki johdot ja komponentit on sijoitettu elintarvikkeen sisälle, voidaan sitten levittää liimapistooli vaahtomuovilevyn pohjaan
Vaihe 12: Johtopäätös
Huomaa tämä kaukana hyvästä kameran gimbalista. Liikkeet eivät ole sujuvia, koska näitä servoja ei ole tarkoitettu tällaiseen tarkoitukseen. Todelliset kameran gimbaalit käyttävät erityistä BLDC -moottoria tasaisten liikkeiden saamiseksi. Joten harkitse tätä projektia vain opetustarkoituksessa.
Siinä kaikki tässä opetusohjelmassa, toivottavasti pidit siitä ja opit jotain uutta. Voit vapaasti esittää kysymyksiä alla olevissa kommenttiosioissa ja älä unohda tarkistaa projektikokoelmiani
Suositeltava:
DIY Raspberry Pi Downloadbox: 4 vaihetta
DIY Raspberry Pi Downloadbox: Löydätkö usein itsesi lataamasta suuria tiedostoja, kuten elokuvia, torrentteja, kursseja, TV -sarjoja jne., Niin tulet oikeaan paikkaan. Tässä Instructable -ohjelmassa muuttaisimme Raspberry Pi zero -laitteemme latauskoneeksi. Joka voi ladata minkä tahansa
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): 8 vaihetta
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): ultraäänikaiuttimet L298N DC-naarasadapterin virtalähde urospuolisella dc-nastalla ja analogiset portit koodin muuntamiseksi (C ++)
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: 3 vaihetta
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: Seuraava opas auttaa sinua saamaan live-HD-videovirtoja lähes mistä tahansa DJI-dronesta. FlytOS -mobiilisovelluksen ja FlytNow -verkkosovelluksen avulla voit aloittaa videon suoratoiston droonilta
Pultti - DIY -langaton latauskello (6 vaihetta): 6 vaihetta (kuvilla)
Pultti - DIY -langaton latausyökello (6 vaihetta): Induktiiviset lataukset (tunnetaan myös nimellä langaton lataus tai langaton lataus) on langattoman voimansiirron tyyppi. Se käyttää sähkömagneettista induktiota sähkön tuottamiseen kannettaville laitteille. Yleisin sovellus on langaton Qi -latauslaite
4 vaihetta akun sisäisen vastuksen mittaamiseksi: 4 vaihetta
4 vaihetta akun sisäisen vastuksen mittaamiseksi: Tässä on 4 yksinkertaista vaihetta, joiden avulla voit mitata taikinan sisäisen vastuksen