Satura rādītājs:
- 1. darbība: komponentu saraksts
- 2. solis: salikšana
- 3. darbība:
- 4. solis. Tālāk, izmantojot to pašu metodi, es nostiprināju ruļļa servo. detaļas ir īpaši izstrādātas, lai viegli uzstādītu MG995 servos
- 5. solis. Tālāk, izmantojot to pašu metodi, es nostiprināju ruļļa servo. detaļas ir īpaši izstrādātas, lai viegli uzstādītu MG995 servos
- 6. darbība. Savienojumi
- 7. darbība. Savienojums ar 7805 sprieguma regulatoru IC
- 8. darbība: kodēšana
- 9. darbība. Kad visi komponenti ir savienoti, tā izskats ir līdzīgs šim attēlam
- 10. solis: Tagad ievietojiet visas pamatnes pārtikas kārbas iekšpusē
- 11. solis: Kad visi vadi un sastāvdaļas ir ievietoti ēdiena iekšpusē, putu plātnes pamatnē var uzklāt līmes pistoli
- 12. solis. Secinājums
Video: Kustības vadības kardāns: 12 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:51
Labdien, mani sauc Harji Nagi. Pašlaik esmu otrā kursa students, kurš studē elektroniku un komunikāciju inženieriju Pranveer Singh Tehnoloģiju institūtā Kanpūrā (UP). Mani ļoti interesē robotika, arduino, mākslīgais intelekts un analogā elektronika.
Vārds “kardāns” ir definēts kā šarnīrsavienojums, kas ļauj pagriezt jebkuru objektu vienā asī. Tātad trīs asu kardāns ļauj jebkuram kardānam uzstādītam objektam būt neatkarīgam no tā, kas tur kardānu. Gimba diktē objekta kustību, nevis to, kas to nes.
Tas sastāv no 3 servomotoriem MG996R 3 asu vadībai un pamatnes, uz kuras tiks ievietots MPU6050 sensors, Arduino un akumulators. To izmanto, lai saglabātu kameru stabilizētu bez vibrācijas. Trīs asu kardāns nodrošina, ka kameras kustība tiek stabilizēta pat tad, ja turētāja virzās uz augšu un uz leju, pa kreisi un pa labi, priekšā un aizmugurē. Tas ir tas, ko mēs saucam par pagriezienu, slīpuma un rites stabilizāciju.
1. darbība: komponentu saraksts
Komponentu saraksts ir šāds:
1) Arduino Uno
2) 8V, 1,5 ampēru akumulators Arduino Uno barošanai
3) 7805 Sprieguma regulators Ic vai arī varat izmantot buck conveter
4) MPU 6050
5) 3*(MG995 SERVO Motors)
6) Jumper vadi
Citas iekārtas:
1) lodāmurs
2) Līmes pistole
3) urbjmašīna
4) Pārtikas var
Tā vietā, lai izmantotu breadborad, pozitīvam un negatīvam autobusu savienojumam esmu izmantojis nelielu pielāgotu perf dēli
2. solis: salikšana
Foamcore, putuplasta plāksne vai putuplasta plāksne ir viegls un viegli sagriežams materiāls, ko izmanto Servo motora montāžai un mēroga modeļu izgatavošanai.
Vispirms es izveidoju DIY L formas kronšteinus, lai uzstādītu servomotoru ar putuplasta plāksnes palīdzību.
3. darbība:
Kardāna salikšana bija diezgan vienkārša. Es sāku ar Yaw servo, MPU 6050 sensora un ON-OFF slēdža uzstādīšanu. Izmantojot skrūves un uzgriežņus, es to nostiprināju pie pamatnes
4. solis. Tālāk, izmantojot to pašu metodi, es nostiprināju ruļļa servo. detaļas ir īpaši izstrādātas, lai viegli uzstādītu MG995 servos
5. solis. Tālāk, izmantojot to pašu metodi, es nostiprināju ruļļa servo. detaļas ir īpaši izstrādātas, lai viegli uzstādītu MG995 servos
6. darbība. Savienojumi
Shēmas shēmā varat izmantot vai nu buck pārveidotāju, vai 7805 sprieguma regulatoru IC, lai pārveidotu 8V uz 5 V. Mikrokontrolleris, kuram dota shēmas shēma, ir Arduino Nano, varat izmantot arī Arduino Uno, Arduino Mega.
MPU 6050 SCL un SDA tapas ir savienotas ar Arduino analogo tapu A5 un A4. (SCL un SDA tapa var atšķirties, tāpēc pārbaudiet citu mikrokontrolleru SCl un SDA tapu datu lapu)
7. darbība. Savienojums ar 7805 sprieguma regulatoru IC
Šī shēma ir paredzēta 7805 sprieguma regulatora ic savienošanai, pievienojiet 8 voltu akumulatoru pie Vin un jūs saņemsiet 5 v izejas spriegumu.
8. darbība: kodēšana
Jums jāiekļauj šādas bibliotēkas:
1) #includeNoklikšķiniet šeit, lai lejupielādētu zip failu
2) #includeNoklikšķiniet šeit, lai lejupielādētu zip failu
Pēc zip faila lejupielādes pievienojiet ZIP bibliotēku arduino skicē
Par kodu
/*
DIY Gimbal - MPU6050 Arduino apmācības kods, pamatojoties uz Džefa Rouberga i2cdevlib bibliotēkas MPU6050_DMP6 piemēru: https://github.com/jrowberg/i2cdevlib */// I2Cdev un MPU6050 ir jāinstalē kā bibliotēkas, pretējā gadījumā.cpp/.h failiem // abām klasēm jābūt jūsu projekta iekļaušanas ceļā #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" // #include "MPU6050.h" // nav nepieciešams, ja izmantojat MotionApps include file / / Arduino Wire bibliotēka ir nepieciešama, ja I2Cdev I2CDEV_ARDUINO_WIRE ieviešana // tiek izmantota I2Cdev.h #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif #include // klases noklusējuma I2C adrese ir 0x68 // var būt I2C adreses šeit nodots kā parametrs // AD0 zems = 0x68 (noklusējums SparkFun pārtraukumam un InvenSense novērtēšanas padomei) // AD0 augsts = 0x69 MPU6050 mpu; // MPU6050 mpu (0x69); // <- izmantot AD0 augstajam // Definēt 3 servomotorus Servo servo0; Servo servo1; Servo servo2; pludiņš pareizi; int j = 0; #define OUTPUT_READABLE_YAWPITCHROLL #define INTERRUPT_PIN 2 // izmantojiet 2. tapu Arduino Uno un lielākā daļa dēļu bool blinkState = false; // MPU kontrole/statuss vars bool dmpReady = false; // iestatīt patiesu, ja DMP init bija veiksmīgs uint8_t mpuIntStatus; // satur faktisko pārtraukšanas statusa baitu no MPU uint8_t devStatus; // atgriešanās statuss pēc katras ierīces darbības (0 = veiksme,! 0 = kļūda) uint16_t packetSize; // paredzamais DMP paketes izmērs (noklusējums ir 42 baiti) uint16_t fifoCount; // visu baitu skaits, kas pašlaik atrodas FIFO uint8_t fifoBuffer [64]; // FIFO krātuves buferis // orientācija/kustība vars Quaternion q; // [w, x, y, z] kvaterniona konteiners VectorInt16 aa; // [x, y, z] accel sensora mērījumi VectorInt16 aaReal; // [x, y, z] accel sensoru mērījumi bez gravitācijas VectorInt16 aaWorld; // [x, y, z] pasaules kadra akselera sensora mērījumi VectorFloat gravity; // [x, y, z] gravitācijas vektora pludiņš eulers [3]; // [psi, teta, phi] Eulera leņķa konteinera pludiņš ypr [3]; // [pagrieziens, slīpums, rullis] satricinājums/slīpuma/ruļļa konteiners un gravitācijas vektors // pakešu struktūra InvenSense tējkannas demonstrācijai uint8_t teapotPacket [14] = {'$', 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x00, '\ r', '\ n'}; // ================================================ ================ // === PĀRTRAUKŠANAS NOTEIKŠANAS KĀRTĪBA === // ======================== ============================================ gaistošs bool mpuInterrupt = nepatiess; // norāda, vai MPU pārtraukšanas pin ir kļuvis liels void dmpDataReady () {mpuInterrupt = true; } // ================================================== ================= // === Sākotnējā iestatīšana === // ===================== =========================================== void setup () {// pievienoties I2C kopnei (I2Cdev bibliotēka to nedara automātiski) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // 400 kHz I2C pulkstenis. Komentējiet šo rindiņu, ja rodas apkopošanas grūtības #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif // inicializēt seriālo komunikāciju // (115200 izvēlēts, jo tas ir nepieciešams tējkannas demonstrācijas izvadei, bet tas ir // patiešām atkarīgs no jūsu projekta) Serial.begin (38400); kamēr (! Seriāls); // gaidiet Leonardo uzskaitījumu, citi tūlīt turpina // inicializēt ierīci //Serial.println(F("I2C ierīču inicializēšana … ")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); devStatus = mpu.dmpInitialize (); // šeit ievadiet savus žiroskopu nobīdes, pielāgojot minimālajai jutībai mpu.setXGyroOffset (17); mpu.setYGyroOffset (-69); mpu.setZGyroOffset (27); mpu.setZAccelOffset (1551); // 1688 rūpnīcas noklusējuma iestatījums manai testa mikroshēmai // pārliecinieties, vai tā darbojās (ja tā atgriež 0), ja (devStatus == 0) {// ieslēdziet DMP tagad, kad tas ir gatavs // Serial.println (F ("Iespējo DMP … ")); mpu.setDMPEnabled (true); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // iestatiet mūsu DMP Ready karodziņu, lai galvenā cilpa () funkcija zinātu, ka ir pareizi to izmantot //Serial.println(F("DMP gatavs! Gaida pirmo pārtraukumu … ")); dmpReady = true; // iegūt paredzamo DMP paketes izmēru vēlākai salīdzināšanai packetSize = mpu.dmpGetFIFOPacketSize (); } cits {// KĻŪDA! // 1 = neizdevās sākotnējā atmiņas ielāde // 2 = neizdevās DMP konfigurācijas atjauninājumi // (ja tas pārtrauksies, parasti kods būs 1) // Serial.print (F ("DMP inicializācija neizdevās (kods")); //Serial.print(devStatus); //Serial.println (F (")")); } // Definējiet tapas, kurām ir pievienoti 3 servomotori servo0.attach (10); servo1.pielikums (9); servo2.pielikums (8); } // ================================================== ================= // === GALVENĀS PROGRAMMAS LOOP === // ==================== ============================================ void loop () { / / ja programmēšana neizdevās, nemēģiniet neko darīt, ja (! dmpReady) atgriežas; // gaidiet MPU pārtraukumu vai papildu paketi (-es), kamēr (! mpuInterrupt && fifoCount <packetSize) {if (mpuInterrupt && fifoCount
= 1024) {
// atiestatīt, lai mēs varētu turpināt tīri mpu.resetFIFO (); fifoCount = mpu.getFIFOCount (); Serial.println (F ("FIFO pārpilde!")); // pretējā gadījumā pārbaudiet, vai DMP dati ir gatavi pārtraukt (tam vajadzētu notikt bieži)} else if (mpuIntStatus & _BV (MPU6050_INTERRUPT_DMP_INT_BIT)) {// jāgaida pareizais pieejamais datu garums, jāgaida ĻOTI īsi, kamēr ir pieejama (fifoCount 1 pakete /) / (tas ļauj mums nekavējoties lasīt vairāk, negaidot pārtraukumu) fifoCount -= packetSize; // Iegūstiet pagriešanās, nolaišanās un ripināšanas vērtības #ifdef OUTPUT_READABLE_YAWPITCHROLL mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& grav).dmpGetYawPitchRoll (ypr, & q, & gravity); // Pagriešanās, augstums, rullīšu vērtības - radiāni līdz ypr [0] = ypr [0] * 180 / M_PI; ypr [1] = ypr [1] * 180 / M_PI; ypr [2] = ypr [2] * 180 / M_PI; // Izlaist 300 rādījumus (paškalibrēšanas process), ja (j <= 300) {correct = ypr [0]; // Pagrieziens sākas pēc nejaušas vērtības, tāpēc mēs uzņemt pēdējo vērtību pēc 300 nolasījumiem j ++;} // Pēc 300 rādījumiem cits {ypr [0] = ypr [0] - pareizi; // Iestatiet pagriezienu uz 0 grādiem - atņemiet pēdējo nejaušo pagrieziena vērtību no pašreizējās vērtības, lai iegūtu Pagriešanās 0 grādi es // Kartējiet MPU6050 sensora vērtības no -90 līdz 90 līdz vērtībām, kas piemērotas servo vadībai no 0 līdz 180 int servo0Value = map (ypr [0], -90, 90, 0, 180); int servo1Value = karte (ypr [1], -90, 90, 0, 180); int servo2Value = karte (ypr [2], -90, 90, 180, 0); // Vadīt servos atbilstoši MPU6050 orientācijai servo0.write (servo0Value); servo1.write (servo1Value); servo2.write (servo2Value); } #endif}}
Visbeidzot, izmantojot rakstīšanas funkciju, mēs nosūta šīs vērtības servos kā vadības signālus. Protams, jūs varat atspējot Yaw servo, ja vēlaties tikai X un Y ass stabilizāciju, un izmantot šo platformu kā kameras kardānu
9. darbība. Kad visi komponenti ir savienoti, tā izskats ir līdzīgs šim attēlam
10. solis: Tagad ievietojiet visas pamatnes pārtikas kārbas iekšpusē
11. solis: Kad visi vadi un sastāvdaļas ir ievietoti ēdiena iekšpusē, putu plātnes pamatnē var uzklāt līmes pistoli
12. solis. Secinājums
Lūdzu, ņemiet vērā, ka tas ir tālu no labas kameras kardāna. Kustības nav gludas, jo šie servo nav paredzēti šādam mērķim. Īstās kameras kardānos tiek izmantots īpašs BLDC motora veids, lai panāktu vienmērīgas kustības. Tāpēc apsveriet šo projektu tikai izglītības nolūkos.
Tas būtu viss šai apmācībai, es ceru, ka jums patika un uzzinājāt kaut ko jaunu. Jūtieties brīvi uzdot jebkuru jautājumu zemāk esošajā komentāru sadaļā un neaizmirstiet pārbaudīt manas projekta kolekcijas
Ieteicams:
Žiroskopa platforma/ kameras kardāns: 5 soļi (ar attēliem)
Žiroskopa platforma/ kamera Gimbal: šī pamācība tika izveidota, izpildot Dienvidfloridas Universitātes Makecourse projekta prasības (www.makecourse.com)
Vienkāršs kardāns ar Micro: bit un 2 servos: 4 soļi
Vienkāršs kardāns ar Micro: bit un 2 servos: Sveiki! Šodien es jums parādīšu, kā izveidot vienkāršu kardāna stabilizatoru. Šeit varat redzēt YouTube videoklipu. Tajā būs viegla kamera. Bet, ja jūs ievietojat jaudīgāku servo un struktūru, tas var turēt jūsu viedtālruni vai pat atbilstošu kameru. Nākamajās darbībās
Kustības vadības slīdnis laika intervālam: 10 soļi (ar attēliem)
Kustības vadības slīdnis laika nobīdes sliedei: šajā pamācībā ir paskaidrots, kā motorizēt laika nobīdes sliedi, izmantojot pakāpju motoru, ko vada Arduino. Mēs galvenokārt koncentrēsimies uz kustību kontrolieri, kas vada pakāpju motoru, pieņemot, ka jums jau ir sliede, kuru vēlaties motorizēt. Piemēram, ja tiek
Kustības vadības pievienošana projekcijas pulkstenim: 7 soļi
Kustības vadības pievienošana projekcijas pulkstenim: Mērķis: pievienojiet kustības sensoru, kas naktī iedegs pulksteni, kad tas nosaka kustību, un manuāli regulējiet fona apgaismojuma spilgtumu. Kāpēc: man ir tikai dažas prasības, lai iegūtu labu gultas sānu pulksteni. Tam jābūt viegli pamanāmam, bet ne gaismam
Kustības kontrolēta izeja - no kustības sensora gaismas: 6 soļi
Kustības kontrolēta izeja - no kustības uztveršanas gaismas: Iedomājieties, ka esat viltīgs cilvēks, kas dodas uz visbriesmīgāko kvartāla māju. Pēc tam, kad esat izgājis garām visiem spokiem, spokiem un kapsētām, jūs beidzot nokļūstat pēdējā ceļā. Jūs varat redzēt konfektes bļodā priekšā! Bet tad pēkšņi gho