Orodha ya maudhui:

Udhibiti wa Mwendo Gimbal: Hatua 12
Udhibiti wa Mwendo Gimbal: Hatua 12

Video: Udhibiti wa Mwendo Gimbal: Hatua 12

Video: Udhibiti wa Mwendo Gimbal: Hatua 12
Video: 28 панфиловцев. Самая полная версия. Panfilov's 28 Men (English subtitles) 2024, Novemba
Anonim
Image
Image

Halo kila mtu, Jina langu ni Harji Nagi. Hivi sasa ni mwanafunzi wa mwaka wa pili kusoma uhandisi wa elektroniki na mawasiliano kutoka Taasisi ya Teknolojia ya Pranveer Singh, Kanpur (UP). Ninapenda sana roboti, arduino, Akili ya bandia na elektroniki za Analog.

Neno "gimbal" linafafanuliwa kama msaada uliopitishwa ambao unaruhusu kuzunguka kwa kitu chochote katika mhimili mmoja. Kwa hivyo gimbal ya mhimili tatu inaruhusu kitu chochote kilichowekwa kwenye gimbal kuwa huru na harakati ya yule anayeshikilia gimbal. Gimbal inaamuru harakati ya kitu, sio yule aliyebeba.

Inayo motors 3 MG996R servo kwa udhibiti wa axis 3, na msingi ambao sensor ya MPU6050, Arduino na betri itawekwa. Inatumika kuweka kamera imetulia bila vibration. Gimbal ya mhimili 3 inahakikisha kuwa mwendo wa kamera umetulia hata ikiwa anayeshikilia anakwenda juu na chini, kushoto na kulia, mbele na nyuma. Hii ndio tunayoita kama miayo, lami, na utulivu wa roll.

Hatua ya 1: Orodha ya Vipengele

Orodha ya vifaa ni:

1) Arduino Uno

2) 8V, 1.5 Amp Battery ya kuwezesha Arduino Uno

3) Mdhibiti wa Voltage 7805 Ic au unaweza kutumia conveter ya bibi

4) MPU 6050

5) 3 * (MG995 SERVO Motors)

6) waya za jumper

Vifaa Vingine:

1) chuma cha chuma

2) Bunduki ya Gundi

3) Mashine ya kuchimba

4) Chakula Je

Badala ya kutumia mkate wa mkate nimetumia bodi ndogo ya mafuta ya coustom kwa unganisho la basi nzuri na hasi

Hatua ya 2: Kukusanyika

Kukusanyika
Kukusanyika
Kukusanyika
Kukusanyika

Povu, bodi ya povu, au bodi ya povu inayokabiliwa na karatasi ni nyenzo nyepesi na iliyokatwa kwa urahisi inayotumiwa kwa kupandisha gari la Servo na kutengeneza mifano ya kiwango.

Kwanza nilifanya mabano ya umbo la L ya DIY kupandisha servo motor kwa msaada wa bodi ya povu.

Hatua ya 3:

Picha
Picha

Kukusanya gimbal ilikuwa rahisi sana. Nilianza na kusanikisha Yaw servo, sensor ya MPU 6050 na swichi ya ON-OFF. Kutumia bolts na karanga niliihifadhi kwa msingi

Hatua ya 4: Ifuatayo, Kwa Kutumia Njia Ile Ile Nilipata Roll Servo. Sehemu Hizi Zimeundwa Ili Kufaa kwa urahisi MG995 Servos

Ifuatayo, Kutumia Njia Ile Ile Nilipata Roll Servo. Sehemu Hizi Zimeundwa Ili Kufaa kwa urahisi MG995 Servos
Ifuatayo, Kutumia Njia Ile Ile Nilipata Roll Servo. Sehemu Hizi Zimeundwa Ili Kufaa kwa urahisi MG995 Servos

Hatua ya 5: Ifuatayo, Kwa Kutumia Njia Ile Ile Nilipata Roll Servo. Sehemu Hizi Zimeundwa Ili Kufaa kwa urahisi MG995 Servos

Ifuatayo, Kutumia Njia Ile Ile Nilipata Roll Servo. Sehemu Hizi Zimeundwa Ili Kufaa kwa urahisi MG995 Servos
Ifuatayo, Kutumia Njia Ile Ile Nilipata Roll Servo. Sehemu Hizi Zimeundwa Ili Kufaa kwa urahisi MG995 Servos

Hatua ya 6: Uunganisho

Miunganisho
Miunganisho

Katika mchoro wa mzunguko unaweza kutumia kibadilishaji cha buck au 7805 Voltage mdhibiti IC kubadilisha 8V kuwa 5 V. Mdhibiti mdogo ambaye amepewa mchoro wa mzunguko ni Arduino Nano unaweza pia kutumia Arduino Uno, Arduino Mega.

Pini za SCL na SDA za MPU 6050 zimeunganishwa na pini ya Arduino Analog A5 na A4. (Pini ya SCL na SDA inaweza kutofautiana kwa hivyo angalia hati ya data kwa pini za SCl na SDA kwa microcontroller nyingine)

Hatua ya 7: Uunganisho na Mdhibiti wa Voltage 7805 IC

Uunganisho na Mdhibiti wa Voltage 7805 IC
Uunganisho na Mdhibiti wa Voltage 7805 IC

Mchoro huu wa mzunguko ni wa unganisho la 7805 ya mdhibiti wa voltage ic, unganisha betri ya 8v huko Vin na utapata voltage ya 5v.

Hatua ya 8: Usimbuaji

Lazima ujumuishe maktaba zifuatazo:

1) # pamoja naBofya Hapa pakua faili ya zip

2) # pamoja naBofya Hapa kupakua faili ya zip

Baada ya kupakua faili ya zip, ongeza maktaba ya zip kwenye mchoro wa arduino

Kwa Kanuni

/*

DIY Gimbal - MPU6050 Arduino Mafunzo ya Msimbo kulingana na mfano wa MPU6050_DMP6 kutoka kwa maktaba ya i2cdevlib na Jeff Rowberg: Faili //h kwa madarasa yote mawili lazima iwe katika njia ya mradi wako # pamoja na "I2Cdev.h" # pamoja na "MPU6050_6Axis_MotionApps20.h" // # ni pamoja na "MPU6050.h" // sio lazima ikiwa unatumia MotionApps ni pamoja na faili / / Maktaba ya waya ya Arduino inahitajika ikiwa utekelezaji wa I2Cdev I2CDEV_ARDUINO_WIRE // unatumika katika I2Cdev.h # kama I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" # endif #include // darasa default anwani ya I2C ni 0x68 // maalum I2 imepitishwa kama kigezo hapa // AD0 low = 0x68 (chaguo-msingi kwa kuzuka kwa SparkFun na bodi ya tathmini ya InvenSense) // AD0 high = 0x69 MPU6050 mpu; // MPU6050 mpu (0x69); // <- tumia kwa AD0 juu // Fafanua motors 3 za servo Servo servo0; Servo servo1; Servo servo2; kuelea sahihi; int j = 0; #fafanua OUTPUT_READABLE_YAWPITCHROLL #fasili INTERRUPT_PIN 2 // tumia pini 2 kwenye Arduino Uno & bodi nyingi bool blinkState = uongo; // Udhibiti wa MPU / vars za hadhi bool dmpReady = uwongo; // weka kweli ikiwa init ya DMP ilifanikiwa uint8_t mpuIntStatus; // inashikilia hali halisi ya usumbufu kutoka kwa MPU uint8_t devStatus; // hali ya kurudi baada ya kila operesheni ya kifaa (0 = mafanikio,! 0 = kosa) uint16_t packetSize; // ukubwa wa pakiti ya DMP inayotarajiwa (chaguo-msingi ni ka 42) uint16_t fifoCount; // hesabu ya ka zote zilizo katika FIFO uint8_t fifoBuffer [64]; // bafa ya kuhifadhi FIFO // mwelekeo / vars za mwendo Quaternion q; // [w, x, y, z] chombo cha quaternion VectorInt16 aa; // [x, y, z] vipimo vya sensorer vya accel VectorInt16 aaReal; // [x, y, z] vipimo visivyo na mvuto vya sensorer VectorInt16 aaWorld; // [x, y, z] vipimo vya sensorer vya sura ya ulimwengu VectorFloat mvuto; // [x, y, z] vector ya mvuto kuelea euler [3]; // [psi, theta, phi] Euler angle chombo kuelea ypr [3]; // [yaw, lami, roll] yaw / lami / roll chombo na mvuto vector // muundo wa pakiti ya onyesho la boti la InvenSense uint8_t teapotPacket [14] = {'$', 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x00, '\ r', '\ n'}; // ============================================== ========== =========================================== bool tete mpuInterrupt = uongo; // inaonyesha ikiwa pini ya kukatiza ya MPU imepita batili dmpDataReady () {mpuInterrupt = kweli; } // ============================================= =========== =============================== jiunge na basi ya I2C (maktaba ya I2Cdev haifanyi hivi kiotomatiki) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // saa ya I2C ya 400kHz. Toa maoni kwenye mstari huu ikiwa na shida ya mkusanyiko #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: kuanzisha (400, kweli);. wakati (! Serial); // subiri hesabu ya Leonardo, wengine wanaendelea mara moja // kuanzisha kifaa //Serial.println(F ("Kuanzisha vifaa vya I2C…")); mpu kuanzisha (); pinMode (INTERRUPT_PIN, INPUT); devStatus = mpu.dmp Anzisha (); // usambazaji wa gyro yako mwenyewe hapa, iliyopunguzwa kwa unyeti wa dakika mpu.setXGyroOffset (17); mpu.setYGyroOffset (-69); mpu.setZGyroOffset (27); mpu.setZAccelOffset (1551); // Chaguo-msingi cha kiwanda cha 1688 kwa chip yangu ya majaribio // hakikisha imefanya kazi (inarudi 0 ikiwa ni hivyo) ikiwa (devStatus == 0) {// washa DMP, sasa ikiwa iko tayari // Serial.println (F ("Inawasha) DMP … ")); mpu.setDMPEnabled (kweli); ambatishaKukatiza (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // weka bendera yetu iliyo tayari ya DMP kwa hivyo kitanzi kuu () kazi inajua ni sawa kuitumia //Serial.println(F ("DMP tayari! Inangojea usumbufu wa kwanza…")); dmpReady = kweli; // pata ukubwa wa pakiti ya DMP inayotarajiwa kwa pakiti ya kulinganisha baadayeSize = mpu.dmpGetFIFOPacketSize (); } mwingine {// KOSA! // 1 = mzigo wa kumbukumbu ya awali umeshindwa // 2 = sasisho za usanidi wa DMP zimeshindwa // (ikiwa itaenda kuvunjika, kawaida nambari itakuwa 1) // Serial.print (F ("Uanzishaji wa DMP umeshindwa (nambari")); //Serial.print(devStatus); //Serial.println (F (")")); } // Fafanua pini ambazo motors 3 za servo zimeunganishwa servo0. ambatisha (10); kiambatisho cha servo1 (9); kiambatisho cha servo2 (8); } // ============================================= ================= // === MKUU WA PROGRAMU == = = ======================================== kitanzi batili () {/ / ikiwa programu imeshindwa, usijaribu kufanya chochote ikiwa (! dmpReady) inarudi; // subiri usumbufu wa MPU au pakiti (za) zaidi zinapatikana wakati (! mpuInterrupt && fifoCount <packetSize) {if (mpuInterrupt && fifoCount

= 1024) {

// kuweka upya ili tuweze kuendelea safi mpu.resetFIFO (); fifoCount = mpu.getFIFOCount (); Serial.println (F ("FIFO kufurika!")); // vinginevyo, angalia kukatizwa kwa data ya DMP tayari (hii inapaswa kutokea mara kwa mara)} mwingine ikiwa (mpuIntStatus & _BV (MPU6050_INTERRUPT_DMP_INT_BIT)) {// subiri urefu sahihi wa data, inapaswa kuwa subira fupi SANA wakati (pakiti ya fifoCount 1 inapatikana / / (hii inatuwezesha kusoma mara moja zaidi bila kusubiri usumbufu) fifoCount - = pakitiSize;.dmpGetYawPitchRoll (ypr, & q, & gravity); // Yaw, Pitch, Roll values - Radians to degrees ypr [0] = ypr [0] * 180 / M_PI; ypr [1] = ypr [1] * 180 / M_PI; ypr [2] = ypr [2] * 180 / M_PI; // Ruka masomo 300 (mchakato wa kujipima) ikiwa (j <= 300) {correct = ypr [0]; // Yaw huanza kwa thamani ya nasibu, kwa hivyo sisi nasa thamani ya mwisho baada ya usomaji 300 j ++;} // Baada ya usomaji mwingine 300 {ypr [0] = ypr [0] - sahihi; Yaw 0 digrii es // Ramani maadili ya sensa ya MPU6050 kutoka -90 hadi 90 hadi maadili yanayofaa kwa udhibiti wa servo kutoka 0 hadi 180 int servo0Value = ramani (ypr [0], -90, 90, 0, 180); int servo1Value = ramani (ypr [1], -90, 90, 0, 180); int servo2Value = ramani (ypr [2], -90, 90, 180, 0); // Dhibiti servos kulingana na mwelekeo wa MPU6050 servo0. Andika (servo0Value); andika (servo1Value); andika (servo2Value); } # mwisho}}

Mwishowe kutumia kazi ya kuandika, tunatuma maadili haya kwa servos kama ishara za kudhibiti. Kwa kweli, unaweza kuzima servo ya Yaw ikiwa unataka utulivu tu kwa mhimili wa X na Y, na utumie jukwaa hili kama gimbal ya kamera

Hatua ya 9: Wakati Vipengele vyote vimeunganishwa, muonekano wake unafanana na Picha hii

Wakati Vipengele vyote vimeunganishwa, muonekano wake unafanana na Picha hii
Wakati Vipengele vyote vimeunganishwa, muonekano wake unafanana na Picha hii

Hatua ya 10: Sasa Ingiza Vitu vyote vya Msingi Ndani ya Chombo cha Chakula

Sasa Ingiza Vitu Vya Msingi Vyote Ndani ya Kifurushi cha Chakula
Sasa Ingiza Vitu Vya Msingi Vyote Ndani ya Kifurushi cha Chakula

Hatua ya 11: Wakati waya zote na Vipengele vimewekwa ndani ya Chakula Na Kisha Kutumika Bunduki ya Gundi kwenye Msingi wa Bodi ya Povu

Wakati waya na Vipengele Vyote Vimewekwa Ndani ya Chakula Na Kisha Kutumika Bunduki ya Gundi kwenye Msingi wa Bodi ya Povu
Wakati waya na Vipengele Vyote Vimewekwa Ndani ya Chakula Na Kisha Kutumika Bunduki ya Gundi kwenye Msingi wa Bodi ya Povu

Hatua ya 12: Hitimisho

Tafadhali kumbuka hii mbali na gimbal nzuri ya kamera. Harakati sio laini kwa sababu servos hizi hazikusudiwa kusudi kama hilo. Gimbals halisi ya kamera hutumia aina maalum ya motor BLDC kupata harakati laini. Kwa hivyo, fikiria mradi huu tu kwa madhumuni ya kielimu.

Hiyo itakuwa yote kwa mafunzo haya, natumaini umeifurahia na kujifunza kitu kipya. Jisikie huru kuuliza swali lolote katika sehemu ya maoni hapa chini na usisahau kuangalia makusanyo yangu ya mradi

Ilipendekeza: