Tartalomjegyzék:

Mozgásvezérlő kardán: 12 lépés
Mozgásvezérlő kardán: 12 lépés

Videó: Mozgásvezérlő kardán: 12 lépés

Videó: Mozgásvezérlő kardán: 12 lépés
Videó: UC300-5441M CNC mozgásvezérlő első teszt 2024, Július
Anonim
Image
Image

Üdvözlök mindenkit, a nevem Harji Nagi. Jelenleg másodéves hallgató vagyok, elektronikát és kommunikációs mérnököt tanulok a kanpuri Pranveer Singh Institute of Technology -tól (UP). Nagyon érdekel a robotika, az arduino, a mesterséges intelligencia és az analóg elektronika.

A „gimbal” szó elforgatható támaszként van definiálva, amely lehetővé teszi bármely tárgy elforgatását egyetlen tengelyen. A háromtengelyes kardántengely tehát lehetővé teszi, hogy a kardántengelyre szerelt bármely tárgy független legyen a kardántengelyt tartó mozgásától. A kardántengely diktálja a tárgy mozgását, nem a hordozóé.

3 MG996R szervomotorból áll a 3 tengelyes vezérléshez, és egy bázisból, amelyre az MPU6050 érzékelőt, az Arduino-t és az akkumulátort helyezik. Arra szolgál, hogy a fényképezőgép rezgés nélkül stabilizálódjon. A 3 tengelyes kardántengely biztosítja, hogy a kamera mozgása akkor is stabilizálódjon, ha a tartó tartja felfelé és lefelé, balra és jobbra, elöl és hátul. Ezt nevezzük elfordulásnak, dőlésszögnek és görgetésnek.

1. lépés: Alkatrészek listája

Az összetevők listája a következő:

1) Arduino Uno

2) 8V, 1,5 Amp akkumulátor az Arduino Uno tápellátásához

3) 7805 Feszültségszabályozó Ic, vagy használhat bakkonvektorot

4) MPU 6050

5) 3*(MG995 SERVO Motors)

6) Jumper vezetékek

Egyéb felszerelések:

1) Forrasztópáka

2) Ragasztópisztoly

3) Fúrógép

4) Élelmiszer doboz

A breadborad használata helyett kisméretű, testre szabott kártyát használok a pozitív és negatív buszkapcsolatokhoz

2. lépés: Összeszerelés

Összeszerelés
Összeszerelés
Összeszerelés
Összeszerelés

A habszivacs, hablap vagy papírlapú hablap egy könnyű és könnyen vágható anyag, amelyet a szervomotor felszerelésére és a méretarányos modellek készítésére használnak.

Először DIY L alakú konzolokat készítettem a szervomotor habosított lemez segítségével történő felszereléséhez.

3. lépés:

Kép
Kép

A kardántengely összeszerelése meglehetősen egyszerű volt. A Yaw szervó, az MPU 6050 érzékelő és az ON-OFF kapcsoló telepítésével kezdtem. Csavarokkal és anyákkal rögzítettem az alaphoz

4. lépés: Ezután ugyanazzal a módszerrel rögzítettem a tekercs szervót. az alkatrészeket kifejezetten úgy tervezték, hogy könnyen illeszkedjenek az MG995 szervókhoz

Ezután ugyanazzal a módszerrel rögzítettem a tekercs szervót. az alkatrészeket kifejezetten úgy tervezték, hogy könnyen illeszkedjenek az MG995 szervókhoz
Ezután ugyanazzal a módszerrel rögzítettem a tekercs szervót. az alkatrészeket kifejezetten úgy tervezték, hogy könnyen illeszkedjenek az MG995 szervókhoz

5. lépés: Ezután ugyanazzal a módszerrel rögzítettem a tekercs szervót. az alkatrészeket kifejezetten úgy tervezték, hogy könnyen illeszkedjenek az MG995 szervókhoz

Ezután ugyanazzal a módszerrel rögzítettem a tekercs szervót. az alkatrészeket kifejezetten úgy tervezték, hogy könnyen illeszkedjenek az MG995 szervókhoz
Ezután ugyanazzal a módszerrel rögzítettem a tekercs szervót. az alkatrészeket kifejezetten úgy tervezték, hogy könnyen illeszkedjenek az MG995 szervókhoz

6. lépés: Csatlakozások

Kapcsolatok
Kapcsolatok

A kapcsolási rajzon akár buck konvertert, akár 7805 feszültségszabályozót használhat, hogy 8V -ot 5 V -ra alakítson át. Az áramköri diagramon szereplő mikrokontroller az Arduino Nano, és az Arduino Uno, Arduino Mega is használható.

Az MPU 6050 SCL és SDA csapjai Arduino analóg A5 és A4 tűhöz vannak csatlakoztatva. (Az SCL és SDA érintkezők eltérőek lehetnek, ezért nézze meg az egyéb mikrokontroller SCl és SDA csapjainak adatlapját)

7. lépés: Csatlakozás 7805 feszültségszabályozó IC -vel

Csatlakozás 7805 feszültségszabályozó IC -vel
Csatlakozás 7805 feszültségszabályozó IC -vel

Ez a kapcsolási rajz 7805 ic feszültségszabályozó csatlakoztatására szolgál, csatlakoztassa a 8 V -os elemet a Vin -hez, és 5 V kimeneti feszültséget kap.

8. lépés: Kódolás

A következő könyvtárakat kell tartalmaznia:

1) #includeKattintson ide a zip fájl letöltéséhez

2) #includeKattintson ide a zip fájl letöltéséhez

A zip fájl letöltése után adja hozzá a zip könyvtárat az arduino vázlatához

A Code számára

/*

DIY Gimbal - MPU6050 Arduino oktató kód Jeff Rowberg i2cdevlib könyvtárának MPU6050_DMP6 példáján alapulva: https://github.com/jrowberg/i2cdevlib */// Az I2Cdev és az MPU6050 programokat könyvtárként kell telepíteni, különben a.cpp/.h fájloknak // mindkét osztálynak szerepelnie kell a projekt befoglalási útvonalában #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" // #include "MPU6050.h" // nem szükséges, ha a MotionApps include file / / Arduino Wire könyvtár szükséges, ha az I2Cdev I2CDEV_ARDUINO_WIRE implementációját // az I2Cdev.h -ban használják. paraméterként itt átadva // AD0 low = 0x68 (alapértelmezett a SparkFun breakout és az InvenSense kiértékelő táblánál) // AD0 high = 0x69 MPU6050 mpu; // MPU6050 mpu (0x69); // <- használja az AD0 magashoz // Határozza meg a 3 szervomotor Servo servo0; Szervo szervo1; Szervo szervo2; lebegés helyes; int j = 0; #define OUTPUT_READABLE_YAWPITCHROLL #define INTERRUPT_PIN 2 // használja a 2 -es tűt az Arduino Uno -n & a legtöbb táblán bool blinkState = false; // MPU vezérlés/állapot vars bool dmpReady = false; // igazítsa be, ha a DMP init sikeres volt uint8_t mpuIntStatus; // tényleges megszakítási állapot bájtot tartalmaz az MPU -ból uint8_t devStatus; // visszatérési állapot minden eszközművelet után (0 = siker,! 0 = hiba) uint16_t packetSize; // várható DMP csomagméret (alapértelmezett 42 bájt) uint16_t fifoCount; // az összes bájt száma a FIFO -ban uint8_t fifoBuffer [64]; // FIFO tárolópuffer // orientáció/mozgás vars Quaternion q; // [w, x, y, z] kvaternion konténer VectorInt16 aa; // [x, y, z] accel szenzor mérések VectorInt16 aaReal; // [x, y, z] gravitációmentes accel szenzor mérések VectorInt16 aaWorld; // [x, y, z] világkeretes accel szenzor mérések VectorFloat gravity; // [x, y, z] gravitációs vektor float euler [3]; // [psi, théta, phi] Euler szögtartály úszó ypr [3]; // [lenyúlás, dőlésszög, tekerés] rázkódás/dőlés/tekercstartály és gravitációs vektor // csomagszerkezet az InvenSense teáskanna demójához uint8_t teapotPacket [14] = {'$', 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x00, '\ r', '\ n'}; // ================================================ ================ // === VÉGZETT ÉRTÉKELÉSI Rutin === // ===================== =========================================== illékony bool mpuInterrupt = hamis; // azt jelzi, hogy az MPU megszakítási gombja elérte -e void dmpDataReady () {mpuInterrupt = true; } // ================================================ ================= // === KEZDETI BEÁLLÍTÁS === // ===================== =========================================== void setup () {// csatlakozzon az I2C buszhoz (az I2Cdev könyvtár ezt nem teszi meg automatikusan) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // 400 kHz -es I2C órajel. Kommentelje ezt a sort, ha fordítási nehézségei vannak #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, igaz); #endif // inicializálja a soros kommunikációt // (115200 azért választva, mert ez szükséges a Teapot Demo kimenethez, de ez // tényleg rajtad múlik, a projekttől függően) Serial.begin (38400); while (! Sorozat); // várja meg a Leonardo felsorolását, mások azonnal folytatják // eszköz inicializálása //Serial.println(F("I2C eszközök inicializálása … ")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); devStatus = mpu.dmpInitialize (); // itt adja meg saját giroszkóp korrekcióit, minimális érzékenységre méretezve mpu.setXGyroOffset (17); mpu.setYGyroOffset (-69); mpu.setZGyroOffset (27); mpu.setZAccelOffset (1551); // 1688 gyári alapértelmezés a tesztcsipemhez // győződjön meg róla, hogy működött (ha 0, akkor visszaadja), ha (devStatus == 0) {// kapcsolja be a DMP -t, most, hogy kész // Serial.println (F ("Engedélyezés DMP … ")); mpu.setDMPEnabled (igaz); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // állítsa be a DMP Ready jelzőt, hogy a fő hurok () függvény tudja, hogy rendben van használni //Serial.println(F("DMP kész! Várakozás az első megszakításra … ")); dmpReady = igaz; // a várható DMP csomagméret beszerzése a későbbi összehasonlításhoz packetSize = mpu.dmpGetFIFOPacketSize (); } else {// HIBA! // 1 = a kezdeti memória betöltése sikertelen // 2 = a DMP konfiguráció frissítése sikertelen // (ha megszakad, általában a kód 1 lesz) // Serial.print (F ("A DMP inicializálása nem sikerült (kód")); //Serial.print(devStatus); //Serial.println (F (")")); } // Határozza meg a csapokat, amelyekhez a 3 szervomotor csatlakozik servo0.attach (10); szervo1.csatlakozás (9); szervo2.csatlakozás (8); } // ================================================ ================= // === FŐPROGRAM LOOP === // ==================== ============================================ void loop () { / / ha a programozás nem sikerült, ne próbáljon semmit tenni, ha (! dmpReady) visszatér; // várjon az MPU megszakításra vagy további csomagokra, amíg (! mpuInterrupt && fifoCount <packetSize) {if (mpuInterrupt && fifoCount

= 1024) {

// reset, hogy tisztán tudjuk folytatni mpu.resetFIFO (); fifoCount = mpu.getFIFOCount (); Serial.println (F ("FIFO túlcsordulás!")); // különben ellenőrizze, hogy nincs -e a DMP -re kész adatmegszakítás (ennek gyakran meg kell történnie)} else if (mpuIntStatus & _BV (MPU6050_INTERRUPT_DMP_INT_BIT)) {// várja meg a megfelelő rendelkezésre álló adathosszot, NAGYON rövid várakozási idő kell, amíg (fifoCount 1 csomag elérhető / / (ez lehetővé teszi, hogy azonnal olvassunk tovább, anélkül, hogy megszakításra várnánk) fifoCount -= packetSize; // Get Yaw, Pitch and Roll értékek #ifdef OUTPUT_READABLE_YAWPITCHROLL mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& gravity).dmpGetYawPitchRoll (ypr, & q, & gravity); // Yaw, Pitch, Roll értékek - Radiánok ypr fokban [0] = ypr [0] * 180 / M_PI; ypr [1] = ypr [1] * 180 / M_PI; ypr [2] = ypr [2] * 180 / M_PI; // A 300 leolvasás kihagyása (önkalibrálási folyamat), ha (j <= 300) {correct = ypr [0]; // Az elfordulás véletlenszerű értéken kezdődik, ezért rögzítse az utolsó értéket 300 leolvasás után j ++;} // 300 leolvasás után else {ypr [0] = ypr [0] - helyes; // Állítsa az elfordulást 0 fokra - vonja ki az utolsó véletlenszerű Yaw értéket az aktuális értékből, hogy Kanyarodás 0 fok es // Térképezze le az MPU6050 érzékelő értékeit -90 és 90 között a szervóvezérléshez megfelelő értékekhez 0 és 180 között int servo0Value = map (ypr [0], -90, 90, 0, 180); int servo1Value = térkép (ypr [1], -90, 90, 0, 180); int servo2Value = térkép (ypr [2], -90, 90, 180, 0); // A szervók vezérlése az MPU6050 tájolás szerint servo0.write (servo0Value); servo1.write (servo1Value); servo2.write (servo2Value); } #endif}}

Végül az írás funkció használatával ezeket az értékeket vezérlőjelekként elküldjük a szervóknak. Természetesen letilthatja a Yaw szervót, ha csak stabilizációt szeretne az X és Y tengelyre, és ezt a platformot használja kamera kardánként

9. lépés: Ha az összes alkatrész csatlakoztatva van, a megjelenés hasonló ehhez a képhez

Ha az összes alkatrészt csatlakoztatja, a megjelenés hasonló a képhez
Ha az összes alkatrészt csatlakoztatja, a megjelenés hasonló a képhez

10. lépés: Most helyezzen be minden alapanyagot az edénybe

Most helyezzen be minden alapanyagot az edénybe
Most helyezzen be minden alapanyagot az edénybe

11. lépés: Ha az összes vezetéket és összetevőt egy élelmiszer belsejébe helyezi, akkor ragasztópisztolyt vihet fel a hablap alapjára

Ha az összes vezetéket és összetevőt egy élelmiszer belsejébe helyezi, akkor ragasztópisztolyt vihet fel a hablapra
Ha az összes vezetéket és összetevőt egy élelmiszer belsejébe helyezi, akkor ragasztópisztolyt vihet fel a hablapra

12. lépés: Következtetés

Kérjük, vegye figyelembe, hogy ez messze nem jó kamera gimbal. A mozdulatok nem simák, mert ezeket a szervókat nem ilyen célra szánták. A valódi kamera kardánszalagok speciális típusú BLDC motort használnak a sima mozgások érdekében. Tehát ezt a projektet csak oktatási célból vegye figyelembe.

Ennyi lenne ehhez az oktatóanyaghoz, remélem tetszett és megtanultál valami újat. Nyugodtan tegyen fel bármilyen kérdést az alábbi megjegyzések részben, és ne felejtse el ellenőrizni a projektgyűjteményeimet

Ajánlott: