Mundarija:
- 1 -qadam: Komponentlar ro'yxati
- 2 -qadam: yig'ish
- 3 -qadam:
- 4 -qadam: Keyin, xuddi shu usuldan foydalanib, men rul servosini ta'minladim. ehtiyot qismlar MG995 servosini osongina o'rnatish uchun maxsus mo'ljallangan
- 5 -qadam: Keyin, xuddi shu usuldan foydalanib, men rul servosini ta'minladim. ehtiyot qismlar MG995 servosini osongina o'rnatish uchun maxsus mo'ljallangan
- 6 -qadam: ulanishlar
- 7 -qadam: 7805 kuchlanish regulyatori IC bilan ulanish
- 8 -qadam: kodlash
- 9 -qadam: Barcha komponentlar ulanganda, bu rasmga o'xshaydi
- 10 -qadam: Endi barcha asosiy narsalarni oziq -ovqat idishiga soling
- 11 -qadam: Barcha simlar va komponentlar oziq -ovqat ichiga joylashtirilganda, ko'pik taxtasi tagiga yopishtiruvchi tabancani qo'llash mumkin
- 12 -qadam: Xulosa
Video: Gimbal harakatini boshqarish: 12 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:23
Hammaga salom, mening ismim Xarji Nagi, men hozirda Kanpur (UP) Pranveer Singh Texnologiya Institutining elektronika va aloqa muhandisligi bo'yicha ikkinchi kurs talabasiman. Robototexnika, arduino, sun'iy intellekt va analog elektronikaga katta qiziqishim bor.
"Gimbal" so'zi har qanday ob'ektni bitta o'qda aylantirish imkonini beradigan aylanadigan tayanch sifatida tavsiflanadi. Shunday qilib, uch o'qli gimbal gimbalga o'rnatilgan har qanday narsaning gimbalni ushlab turuvchi harakatidan mustaqil bo'lishiga imkon beradi. Gimbal ob'ektning harakatini belgilaydi, uni olib yuruvchi emas.
U 3 o'qli boshqaruv uchun 3 MG996R servo dvigatelidan va MPU6050 sensori, Arduino va akkumulyator joylashadigan tayanchdan iborat. 3 o'qli gimbal kameraning harakatini barqarorlashtirishni ta'minlaydi, garchi uni ushlab turgan kishi yuqoriga va pastga, chapga va o'ngga, old va orqa tomonga ko'tarilsa ham. Buni biz yaw, pitch va roll stabilizatsiyasi deb ataymiz.
1 -qadam: Komponentlar ro'yxati
Komponentlar ro'yxati:
1) Arduino Uno
2) Arduino Uno -ni quvvatlantirish uchun 8V, 1,5 Amperli batareya
3) 7805 Ic voltaj regulyatori yoki siz konvektordan foydalanishingiz mumkin
4) MPU 6050
5) 3*(MG995 SERVO Motors)
6) o'tish simlari
Boshqa uskunalar:
1) payvandlash temir
2) yopishtiruvchi qurol
3) burg'ulash mashinasi
4) Oziq -ovqat
Breadborad -ni ishlatish o'rniga, avtobusning ijobiy va salbiy ulanishi uchun men kichkina maxsus taxtadan foydalanaman
2 -qadam: yig'ish
Ko'pikli, ko'pikli taxta yoki qog'ozli ko'pikli plastinka Servo dvigatelini o'rnatish va shkalali modellarni tayyorlash uchun ishlatiladigan engil va oson kesiladigan materialdir.
Birinchidan, ko'pikli plastinka yordamida servo dvigatelni o'rnatish uchun o'z qo'llarim bilan L shaklidagi qavslar yasadim.
3 -qadam:
Gimbalni yig'ish juda oson edi. Men Yaw servo, MPU 6050 sensori va ON-OFF kalitini o'rnatishdan boshladim. Bolt va yong'oqdan foydalanib, uni taglikka mahkamladim
4 -qadam: Keyin, xuddi shu usuldan foydalanib, men rul servosini ta'minladim. ehtiyot qismlar MG995 servosini osongina o'rnatish uchun maxsus mo'ljallangan
5 -qadam: Keyin, xuddi shu usuldan foydalanib, men rul servosini ta'minladim. ehtiyot qismlar MG995 servosini osongina o'rnatish uchun maxsus mo'ljallangan
6 -qadam: ulanishlar
O'chirish sxemasida siz 8Vni 5V ga 5 V ga aylantirish uchun buck konverteri yoki 7805 voltaj regulyatori IC dan foydalanishingiz mumkin. O'chirish diagrammasi berilgan mikrokontroller Arduino Nano, siz Arduino Uno, Arduino Mega -dan ham foydalanishingiz mumkin.
MPU 6050 ning SCL va SDA pinlari Arduino analog pinli A5 va A4 ga ulangan. (SCL va SDA pinlari farq qilishi mumkin, shuning uchun boshqa mikrokontrollerlar uchun SCl va SDA pinlari uchun ma'lumotlar jadvalini ko'rib chiqing)
7 -qadam: 7805 kuchlanish regulyatori IC bilan ulanish
Ushbu sxema 7805 voltaj regulyatorining ic -ni ulash uchun mo'ljallangan, 8V batareyani Vin -ga ulang va siz 5V chiqish kuchlanishiga ega bo'lasiz.
8 -qadam: kodlash
Siz quyidagi kutubxonalarni kiritishingiz kerak:
1) zip faylini yuklab olish uchun #includeClick ni bosing
2) #includeZip faylini yuklab olish uchun shu erni bosing
Zip faylini yuklab olgandan so'ng, arduino eskiziga zip kutubxonasini qo'shing
Kod uchun
/*
DIY Gimbal - Jeff Rowberg i2cdevlib kutubxonasidagi MPU6050_DMP6 misoliga asoslangan MPU6050 Arduino o'quv qo'llanma kodi: https://github.com/jrowberg/i2cdevlib */// kutubxona sifatida I2Cdev va MPU6050 o'rnatilishi kerak, aks holda.cpp/.h fayllari // har ikkala sinf uchun ham loyihangizning qo'shilish yo'lida bo'lishi kerak #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" // #"MPU6050.h" ni o'z ichiga oladi // agar MotionApps -dan fayl qo'shilsa /kerak emas / / Arduino Wire kutubxonasi kerak, agar I2Cdev I2CDEV_ARDUINO_WIRE ilovasi // I2Cdev.h da ishlatilsa #= I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif #include // sinfning standart I2C manzili 0C68 bo'lishi mumkin // bu erda parametr sifatida qabul qilingan // AD0 past = 0x68 (SparkFun uzilishi va InvenSense baholash paneli uchun standart) // AD0 yuqori = 0x69 MPU6050 mpu; // MPU6050 MPa (0x69); // <- AD0 yuqori uchun ishlatish // 3 servo dvigatelni belgilang Servo servo0; Servo servo1; Servo servo2; to'g'ri suzish; int j = 0; #define OUTPUT_READABLE_YAWPITCHROLL #INTERRUPT_PIN 2 ni aniqlang // Arduino Uno -dagi 2 -pinni ishlating va ko'pchilik bool blinkState = false; // MPU boshqaruvi/holati bool dmpReady = false; // agar DMP boshlang'ichi muvaffaqiyatli bo'lsa, rostni belgilang uint8_t mpuIntStatus; // MPU uint8_t devStatus -dan haqiqiy uzilish holati baytiga ega; // har bir qurilma ishidan keyin holatni qaytarish (0 = muvaffaqiyat,! 0 = xato) uint16_t packetSize; // kutilgan DMP paket hajmi (standart 42 bayt) uint16_t fifoCount; // hozirda FIFOda mavjud bo'lgan barcha baytlar soni uint8_t fifoBuffer [64]; // FIFO saqlash buferi // yo'nalish/harakat variantlari Quaternion q; // [w, x, y, z] quaternionli konteyner VectorInt16 aa; // [x, y, z] aksel sensori o'lchovlari VectorInt16 aaReal; // [x, y, z] tortishishsiz aksel sensori o'lchovlari VectorInt16 aaWorld; // [x, y, z] butun dunyo bo'ylab aksel sensori o'lchovlari VectorFloat gravitatsiyasi; // [x, y, z] tortishish vektori suzuvchi euler [3]; // [psi, teta, phi] Eyler burchakli konteyner float ypr [3]; // [yaw, pitch, roll] yaw/pitch/roll konteyner va tortish vektori // InvenSense choynak demo uchun paket tuzilishi uint8_t teapotPacket [14] = {'$', 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x00, '\ r', '\ n'}; // =============================================== ================ // === O'ZGARISH DETEKTION RUTINE === // ==================== =========================================== uchuvchi bool mpuInterrupt = false; // MPU uzilish pimi yuqori bo'shliqqa aylanganligini ko'rsatadi dmpDataReady () {mpuInterrupt = true; } // ============================================== ================= // === Boshlang'ich o'rnatish === // ==================== =========================================== Void setup () {// I2C avtobusiga qo'shilish (I2Cdev kutubxonasi buni avtomatik ravishda qilmaydi) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // 400 kHz chastotali I2C. Kompilyatsiya qilishda qiyinchiliklar bo'lsa, bu qatorga izoh bering #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif // ketma -ket aloqani ishga tushirish // (115200 tanlangan, chunki u Choynak Demo chiqishi uchun kerak, lekin bu sizning loyihangizga qarab // sizga bog'liq) Serial.begin (38400); while (! Seriyali); // Leonardo ro'yxatini kuting, boshqalar darhol davom ettiradilar // qurilmani ishga tushirish //Serial.println(F("I2C qurilmalarini ishga tushirish … ")); mpu.initialize (); pinMod (INTERRUPT_PIN, INPUT); devStatus = mpu.dmpInitialize (); // bu erda o'z sezgirligi minimallashtirilgan mpu.setXGyroOffset (17) uchun o'z gyro ofsetlarini etkazib bering; mpu.setYGyroOffset (-69); mpu.setZGyroOffset (27); mpu.setZAccelOffset (1551); // sinov chipi uchun 1688 zavod standarti // uning ishlaganligiga ishonch hosil qiling (agar shunday bo'lsa 0 qaytariladi) agar (devStatus == 0) {// DMP yoqilsa, hozir u tayyor // Serial.println (F ("Enable DMP … ")); mpu.setDMPEnabled (haqiqiy); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // DMP Ready bayrog'ini o'rnating, shunda asosiy loop () funktsiyasi uni ishlatishning to'g'riligini biladi //Serial.println(F("DMP tayyor! Birinchi uzilish kutilmoqda … ")); dmpReady = rost; // keyinchalik taqqoslash uchun kutilgan DMP paket hajmini oling packetSize = mpu.dmpGetFIFOPacketSize (); } boshqa {// XATO! // 1 = xotira yuklamadi // 2 = DMP konfiguratsiyasini yangilab bo'lmadi // (agar u buzilsa, odatda kod 1 bo'ladi) // Serial.print (F ("DMP ishga tushirilmadi (kod")); //Serial.print(devStatus); //Serial.println (F (")"))); } // 3 ta servo dvigatel ulangan pinlarni aniqlang servo0.attach (10); servo1. qo'shish (9); servo2.attach (8); } // ============================================== ================= // === ASOSI PROGRAM LOOP === // ================== ============================================ void loop () { / / agar dasturlash muvaffaqiyatsiz bo'lsa, (! dmpReady) qaytsa, hech narsa qilishga urinmang; // MPU uzilishi yoki qo'shimcha paketlar mavjud bo'lishini kuting (! mpuInterrupt && fifoCount <packetSize) {if (mpuInterrupt && fifoCount)
= 1024) {
// qayta tiklash, shuning uchun biz mpu.resetFIFO () ni toza davom ettirishimiz mumkin; fifoCount = mpu.getFIFOCount (); Serial.println (F ("FIFO to'lishi!")); // aks holda, DMP ma'lumotlarining tayyor uzilishini tekshiring (bu tez -tez sodir bo'lishi kerak)} aks holda (mpuIntStatus & _BV (MPU6050_INTERRUPT_DMP_INT_BIT)) {// mavjud ma'lumotlarning to'g'ri uzunligini kuting, juda qisqa kutish kerak (fifoCount 1 to'plami mavjud / / (bu bizga uzilishni kutmasdan darhol ko'proq o'qish imkonini beradi) fifoCount -= packetSize; // Yaw, Pitch and Roll qiymatlarini oling #ifdef OUTPUT_READABLE_YAWPITCHROLL mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmp & gretGrGrity;.dmpGetYawPitchRoll (ypr, & q, & gravity); // Yaw, Pitch, Roll qiymatlari - radian darajalariga ypr [0] = ypr [0] * 180 / M_PI; ypr [1] = ypr [1] * 180 / M_PI; ypr [2] = ypr [2] * 180 / M_PI; // 300 o'qishni o'tkazib yuboring (o'z-o'zini kalibrlash jarayoni), agar (j <= 300) {to'g'ri = ypr [0]; // Yaw tasodifiy qiymatdan boshlanadi, shuning uchun biz 300 o'qishdan keyin oxirgi qiymatni olish j ++;} // 300 o'qishdan keyin {ypr [0] = ypr [0] - to'g'ri; // Yawni 0 gradusga qo'ying - oxirgi tasodifiy Yaw qiymatini joriy qiymatdan chiqarib oling. Yaw 0 daraja es // MPU6050 sensori qiymatlarini -90 dan 90 gacha servo boshqaruvi uchun mos keladigan qiymatlarga xaritasini 0 dan 180 int servo0Value = map (ypr [0], -90, 90, 0, 180); int servo1Value = xarita (ypr [1], -90, 90, 0, 180); int servo2Value = xarita (ypr [2], -90, 90, 180, 0); // servolarni MPU6050 yo'nalishi servo0.write (servo0Value) bo'yicha boshqaring; servo1.write (servo1Value); servo2.write (servo2Value); } #endif}}
Nihoyat, yozish funktsiyasidan foydalanib, biz bu qiymatlarni servolarga nazorat signallari sifatida yuboramiz. Albatta, agar siz X va Y o'qlari uchun stabilizatsiyani xohlasangiz, Yaw servosini o'chirib qo'yishingiz va ushbu platformani gimbal sifatida ishlatishingiz mumkin
9 -qadam: Barcha komponentlar ulanganda, bu rasmga o'xshaydi
10 -qadam: Endi barcha asosiy narsalarni oziq -ovqat idishiga soling
11 -qadam: Barcha simlar va komponentlar oziq -ovqat ichiga joylashtirilganda, ko'pik taxtasi tagiga yopishtiruvchi tabancani qo'llash mumkin
12 -qadam: Xulosa
Iltimos, buni yaxshi kamera gimbalidan uzoqroq deb biling. Harakatlar silliq emas, chunki bu servolar bunday maqsad uchun mo'ljallanmagan. Haqiqiy kamera gimballari silliq harakatlarni olish uchun maxsus BLDC dvigatelidan foydalanadi. Shunday qilib, ushbu loyihani faqat ta'lim maqsadida ko'rib chiqing.
Bu darslik uchun hamma narsa bo'lardi, umid qilamanki, sizga yoqdi va yangi narsalarni o'rgandingiz. Quyidagi izohlar bo'limida har qanday savol berishingiz mumkin va loyiha to'plamlarini tekshirishni unutmang
Tavsiya:
VR uchun bosh harakatini kuzatish tizimi: 8 qadam
VR uchun bosh harakatini kuzatish tizimi: Mening ismim Sam KODO, bu darsda men sizga Arduino IMU sensorlaridan VR uchun bosh kuzatuv tizimini yaratish uchun qanday qadamma -qadam o'rgataman. Bu loyihada sizga kerak bo'ladi: - HDMI LCD displey. : https: //www.amazon.com/Elecrow-Capacitive-interfac … … va
Inson ko'zining harakatini kuzatish: 6 qadam
Inson ko'zining harakatini kuzatish: Ushbu loyiha inson ko'zining harakatini tasvirga olishga qaratilgan bo'lib, uning harakatini ko'z shaklida joylashtirilgan LED chiroqlar majmuasida aks ettiradi. Ushbu turdagi loyihalar robototexnika sohasida, xususan, huma sohasida juda ko'p qo'llanilishi mumkin
SMS -signalli DIY harakatini aniqlash tizimi: 5 qadam (rasmlar bilan)
DIY harakatini aniqlash SMS signalizatsiya tizimi: Ushbu loyihada men arzon PIR harakat sensori bilan TC35 GSM modulini birlashtirib, sizga "INTROUDER ALERT" ni yuboradigan signal tizimini quraman. Kimdir sizning narsalaringizni o'g'irlamoqchi bo'lsa, SMS yuboring. Qani boshladik
Qo'l harakatini aniqlash vositasi: 5 qadam
Qo'llarning harakatini aniqlash vositasi: Umumiy nuqtai nazar, ushbu loyihada biz MicroBit va bir nechta datchiklar yordamida qo'llarning asosiy harakatlarini taniy oladigan qo'lqop tayyorlaymiz. Biz Android ilovasi va veb -server bilan birgalikda MicroBit -dagi Bluetooth imkoniyatlaridan foydalanamiz
SMART MAKE HATC - 4x RTL -SDR (50 $) bilan uy qurilishi havo harakatini boshqarish: 7 qadam
SMART MAKE HATC - 4x RTL -SDR (50 $) bilan uy qurilishi havo harakatini boshqarish: past narxli HATC kontseptsiyasining isboti - Uyda havo harakatini nazorat qilish Quyida - havo qatnovini qabul qilish haqidagi ma'lumotlarning oddiy to'plami, ba'zi dasturiy ta'minot havolasi va apparat tizimining kontseptsiyasini isbotlash bo'yicha taklif