Talaan ng mga Nilalaman:

Motion Control Gimbal: 12 Mga Hakbang
Motion Control Gimbal: 12 Mga Hakbang

Video: Motion Control Gimbal: 12 Mga Hakbang

Video: Motion Control Gimbal: 12 Mga Hakbang
Video: DJI OSMO pocket 2021 3-axis self stabilized 4k handheld camera gimbal complete video & installation 2024, Nobyembre
Anonim
Image
Image

Kamusta Lahat, Ang pangalan ko ay Harji Nagi. Ako ay kasalukuyang isang mag-aaral na pangalawang taon na nag-aaral ng electronics at engineering sa pag-uusap mula sa Pranveer Singh Institute Of Technology, Kanpur (UP). Masigasig akong interes sa robotics, arduino, Artipisyal na Intelihensiya at Analog electronics.

Ang salitang "gimbal" ay tinukoy bilang isang pivoted na suporta na nagbibigay-daan sa pag-ikot ng anumang bagay sa isang solong axis. Kaya't ang isang three-axis gimbal ay nagbibigay-daan sa anumang bagay na naka-mount sa gimbal na maging malaya sa paggalaw ng isang may hawak ng gimbal. Ang gimbal ang nagdidikta ng paggalaw ng bagay, hindi ang nagdadala nito.

Binubuo ito ng 3 MG996R servo motors para sa 3-axis control, at isang batayan kung saan mailalagay ang sensor ng MPU6050, ang Arduino at ang baterya. Ginagamit ito upang mapanatili ang kamera na nagpapatatag nang walang panginginig ng boses. Tinitiyak ng isang 3-axis gimbal na ang paggalaw ng camera ay nagpapatatag kahit na ang nakahawak dito ay paakyat at baba, kaliwa at kanan, harap at likod. Ito ang tinukoy namin bilang yaw, pitch, at roll stabilization.

Hakbang 1: Listahan ng Mga Bahagi

Ang listahan ng sangkap ay:

1) Arduino Uno

2) 8V, 1.5 Amp Baterya para sa pag-power ng Arduino Uno

3) 7805 Boltahe regulator Ic o maaari mong gamitin ang buck conveter

4) MPU 6050

5) 3 * (MG995 SERVO Motors)

6) Mga Jumper Wires

Iba Pang Mga Equipment:

1) Panghinang na Bakal

2) Pandikit Baril

3) Drill machine

4) Can ng Pagkain

Sa halip na gumamit ng breadborad ay gumamit ako ng maliit na coustom perf board para sa positibo at negatibong koneksyon sa bus

Hakbang 2: Pagtitipon

Pagtitipon
Pagtitipon
Pagtitipon
Pagtitipon

Ang foam foam, foam board, o foam board na nakaharap sa papel ay isang magaan at madaling i-cut ang materyal na ginamit para sa pag-mount ng Servo motor at para sa paggawa ng mga modelo ng scale.

Una gumawa ako ng isang bracket na hugis-DIY upang mai-mount ang servo motor sa tulong ng foam board.

Hakbang 3:

Larawan
Larawan

Ang pagtitipon sa gimbal ay medyo madali. Nagsimula ako sa pag-install ng Yaw servo, MPU 6050 sensor at ON-OFF switch. Gamit ang mga bolt at mani ay na-secure ko ito sa base

Hakbang 4: Susunod, Gamit ang Parehong Pamamaraan Na-secure ko ang Roll Servo. ang Mga Bahagi ay Partikular na Dinisenyo upang Madaling Pagkasyahin ang MG995 Servos

Susunod, Gamit ang Parehong Pamamaraan Na-secure Ko ang Roll Servo. ang Mga Bahagi ay Partikular na Dinisenyo upang Madaling magkasya ang MG995 Servos
Susunod, Gamit ang Parehong Pamamaraan Na-secure Ko ang Roll Servo. ang Mga Bahagi ay Partikular na Dinisenyo upang Madaling magkasya ang MG995 Servos

Hakbang 5: Susunod, Gamit ang Parehong Pamamaraan Na-secure ko ang Roll Servo. ang Mga Bahagi ay Partikular na Dinisenyo upang Madaling magkasya ang MG995 Servos

Susunod, Gamit ang Parehong Pamamaraan Na-secure Ko ang Roll Servo. ang Mga Bahagi ay Partikular na Dinisenyo upang Madaling Pagkasyahin ang MG995 Servos
Susunod, Gamit ang Parehong Pamamaraan Na-secure Ko ang Roll Servo. ang Mga Bahagi ay Partikular na Dinisenyo upang Madaling Pagkasyahin ang MG995 Servos

Hakbang 6: Mga Koneksyon

Mga koneksyon
Mga koneksyon

Sa circuit diagram maaari mong gamitin ang alinman sa buck converter o 7805 Voltage regulator IC upang i-convert ang 8V hanggang 5 V. Ang microcontroller na binibigyan ng circuit diagram ay Arduino Nano maaari mo ring gamitin ang Arduino Uno, Arduino Mega.

Ang SCL at SDA pin ng MPU 6050 ay konektado sa Arduino Analog pin A5 at A4. (Ang SCL at SDA pin ay maaaring magkakaiba kaya suriin ang datasheet para sa SCl at SDA pin para sa iba pang microcontroller)

Hakbang 7: Koneksyon Sa 7805 Boltahe Regulator IC

Koneksyon Sa 7805 Voltage Regulator IC
Koneksyon Sa 7805 Voltage Regulator IC

Ang circuit diagram na ito ay para sa koneksyon ng 7805 voltage regulator ic, ikonekta ang 8v na baterya sa Vin at makakakuha ka ng isang output boltahe na 5v.

Hakbang 8: Coding

Dapat mong isama ang mga sumusunod na aklatan:

1) #includeClick Hereto download zip file

2) #includeMag-click Dito upang mag-download ng zip file

Pagkatapos i-download ang zip file, magdagdag ng zip library sa arduino sketch

Para sa Code

/*

DIY Gimbal - Ang MPU6050 Arduino Tutorial Code batay sa halimbawa ng MPU6050_DMP6 mula sa i2cdevlib library ni Jeff Rowberg: https://github.com/jrowberg/i2cdevlib * / // I2Cdev at MPU6050 ay dapat na mai-install bilang mga aklatan, o kung hindi.cpp /.h file // para sa parehong klase ay dapat na kasama ang path ng iyong proyekto # isama ang "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" // # isama ang "MPU6050.h" // hindi kinakailangan kung ang paggamit ng MotionApps isama ang file / / Arduino Wire library ay kinakailangan kung ang I2Cdev I2CDEV_ARDUINO_WIRE pagpapatupad // ay ginamit sa I2Cdev.h #kung I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #kasama ang "Wire.h" #endif #include // class default I2C address is 0C68 // be naipasa bilang isang parameter dito // AD0 low = 0x68 (default for SparkFun breakout and InvenSense evaluation board) // AD0 high = 0x69 MPU6050 mpu; // MPU6050 mpu (0x69); // <- gamitin para sa AD0 mataas // Tukuyin ang 3 servo motors Servo servo0; Servo servo1; Servo servo2; float tama; int j = 0; #define OUTPUT_READABLE_YAWPITCHROLL #define INTERRUPT_PIN 2 // use pin 2 on Arduino Uno & most boards bool blinkState = false; // MPU control / status vars bool dmpReady = false; // set true kung matagumpay ang DMP init uint8_t mpuIntStatus; // humahawak ng aktwal na byte ng pagkaantala ng katayuan mula sa MPU uint8_t devStatus; // status ng pagbabalik pagkatapos ng bawat pagpapatakbo ng aparato (0 = tagumpay,! 0 = error) uint16_t packetSize; // inaasahang laki ng packet ng DMP (ang default ay 42 bytes) uint16_t fifoCount; // count ng lahat ng byte na kasalukuyang nasa FIFO uint8_t fifoBuffer [64]; // FIFO storage buffer // orientation / motion vars Quaternion q; // [w, x, y, z] lalagyan ng quaternion na VectorInt16 aa; // [x, y, z] pagsukat ng accel sensor VectorInt16 aaReal; // [x, y, z] walang sukat na gravity na pagsukat ng accel sensor VectorInt16 aaWorld; // [x, y, z] mga sukat ng sensor ng accel sensor ng mundo na sukat ng VectorFloat gravity; // [x, y, z] gravity vector float euler [3]; // [psi, theta, phi] Euler anggulo lalagyan lumutang ypr [3]; // [yaw, pitch, roll] container ng yaw / pitch / roll at gravity vector // na istraktura ng packet para sa InvenSense teapot demo uint8_t teapotPacket [14] = {'$', 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x00, '\ r', '\ n'}; // =_ ==== // === INTERRUPT DETECTION ROUTINE === // ==== =_ pabagu-bago ng loob bool mpuInterrupt = false; // nagpapahiwatig kung MPU makagambala pin ay naging mataas na walang bisa dmpDataReady () {mpuInterrupt = true; } // =_ ================= // === INITIAL SETUP === // ==== =_ void setup () {// sumali sa I2C bus (hindi awtomatiko itong ginagawa ng I2Cdev library) #kung I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // 400kHz I2C na orasan. Komento sa linyang ito kung nagkakaroon ng mga paghihirap sa pagtitipon #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif // ipasimuno serial serial // (115200 napili dahil kinakailangan ito para sa Teapot Demo output, ngunit ito ay // talagang nasa iyo depende sa iyong proyekto) Serial.begin (38400); habang (! Serial); // hintayin ang bilang ng Leonardo, magpatuloy kaagad ang iba // ipasimuno ang aparato //Serial.println(F("Initializing ang mga I2C device … ")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); devStatus = mpu.dmpInitialize (); // supply your own gyro offset here, scaled for min sensitivity mpu.setXGyroOffset (17); mpu.setYGyroOffset (-69); mpu.setZGyroOffset (27); mpu.setZAccelOffset (1551); // 1688 factory default para sa aking test chip // tiyaking gumana ito (ibabalik ang 0 kung gayon) kung (devStatus == 0) {// i-on ang DMP, ngayong handa na ito // Serial.println (F ("Enabling DMP … ")); mpu.setDMPEn pinagana (totoo); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // itakda ang aming DMP Ready flag kaya alam ng pangunahing pag-andar ng loop na) okay na gamitin ito //Serial.println(F("Handa na ang DMP! Naghihintay para sa unang makagambala … ")); dmpReady = totoo; // makakuha ng inaasahang laki ng packet ng DMP para sa paglaon sa paghahambing packetSize = mpu.dmpGetFIFOPacketSize (); } iba pa {// ERROR! // 1 = Nabigo ang paunang pag-load ng memorya // 2 = Nabigo ang mga pag-update ng pagsasaayos ng DMP // (kung masisira ito, karaniwang ang code ay magiging 1) // Serial.print (F ("Nabigo ang Initialization ng DMP (code")); //Serial.print(devStatus); //Serial.println (F (")")); } // Tukuyin ang mga pin kung saan ang 3 servo motor ay konektado sa servo0.attach (10); servo1.attach (9); servo2.attach (8); } // =_ ================= // === PANGUNAHING PROGRAM LOOP === // ==================== =_ void loop () {/ / kung nabigo ang programa, huwag subukang gumawa ng anumang bagay kung bumalik ((dmpReady); // hintayin ang MPU makagambala o labis na (mga) packet na magagamit habang (! mpuInterrupt && fifoCount <packetSize) {kung (mpuInterrupt && fifoCount

= 1024) {

// reset upang makapagpatuloy kaming malinis mpu.resetFIFO (); fifoCount = mpu.getFIFOCount (); Serial.println (F ("FIFO overflow!")); // kung hindi man, suriin ang data ng DMP na handa nang magambala (dapat itong mangyari nang madalas)} kung iba pa (mpuIntStatus & _BV (MPU6050_INTERRUPT_DMP_INT_BIT)) {// maghintay para sa tamang magagamit na haba ng data, dapat ay isang napaka-maikling paghihintay habang (magagamit ang fifoCount na 1 packet / / (pinapayagan kaagad itong magbasa nang higit pa nang hindi naghihintay para sa isang makagambala) fifoCount - = packetSize; // Kumuha ng mga halagang Yaw, Pitch at Roll #ifdef OUTPUT_READABLE_YAWPITCHROLL mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& mp gravity, & q);.dmpGetYawPitchRoll (ypr, & q, & gravity); // Yaw, Pitch, Roll halaga - Radians hanggang degree ypr [0] = ypr [0] * 180 / M_PI; ypr [1] = ypr [1] * 180 / M_PI; ypr [2] = ypr [2] * 180 / M_PI; // Laktawan ang mga pagbasa ng 300 (proseso sa pag-calibrate sa sarili) kung (j <= 300) {tama = ypr [0]; // Nagsisimula ang Yaw nang sapalarang halaga, kaya't makuha ang huling halaga pagkatapos ng 300 na pagbasa j ++;} // Pagkatapos ng 300 na pagbabasa pa {ypr [0] = ypr [0] - tama; // Itakda ang Yaw sa 0 deg - ibawas ang huling random na halaga ng Yaw mula sa halaga ng currrent upang gawin ang Yaw 0 degree es // Mapa ang mga halaga ng sensor ng MPU6050 mula -90 hanggang 90 hanggang sa mga halagang angkop para sa kontrol ng servo mula 0 hanggang 180 int servo0Value = mapa (ypr [0], -90, 90, 0, 180); int servo1Value = mapa (ypr [1], -90, 90, 0, 180); int servo2Value = mapa (ypr [2], -90, 90, 180, 0); // Kontrolin ang mga servos ayon sa MPU6050 orientation servo0.write (servo0Value); servo1.write (servo1Value); servo2.write (servo2Value); } #tapusin kung } }

Panghuli gamit ang function ng pagsulat, ipinapadala namin ang mga halagang ito sa mga servos bilang mga signal control. Siyempre, maaari mong huwag paganahin ang Yaw servo kung nais mo lamang ang pagpapatibay para sa X at Y axis, at gamitin ang platform na ito bilang camera gimbal

Hakbang 9: Kapag Nakakonekta ang Lahat ng Mga Component, Magkatulad ang Mukha sa Larawan na Ito

Kapag Nakakonekta ang Lahat ng Mga Komponente, Ang Kamukha Niyon sa Larawan na Ito
Kapag Nakakonekta ang Lahat ng Mga Komponente, Ang Kamukha Niyon sa Larawan na Ito

Hakbang 10: Ipasok Ngayon ang Lahat ng Base Stuff sa loob ng Can ng Pagkain

Ipasok Ngayon ang Lahat ng Base Stuff sa Loob ng Can ng Pagkain
Ipasok Ngayon ang Lahat ng Base Stuff sa Loob ng Can ng Pagkain

Hakbang 11: Kapag Ang Lahat ng mga Wires at Mga Sangkap ay Inilagay sa Loob ng isang Pagkain Maaari Pagkatapos Mag-apply ng Pandikit na Pandikit sa Base ng Foam Board

Kapag Ang Lahat ng Mga Wires at Mga Sangkap ay Inilalagay sa Loob ng isang Pagkain na Maaaring Mag-apply ng Pandikit sa Pandikit sa Base ng Foam Board
Kapag Ang Lahat ng Mga Wires at Mga Sangkap ay Inilalagay sa Loob ng isang Pagkain na Maaaring Mag-apply ng Pandikit sa Pandikit sa Base ng Foam Board

Hakbang 12: Konklusyon

Mangyaring tandaan ito malayo mula sa magandang camera gimbal. Ang mga paggalaw ay hindi makinis sapagkat ang mga servos na ito ay hindi inilaan para sa gayong layunin. Ang mga tunay na camera gimbal ay gumagamit ng isang espesyal na uri ng BLDC motor para sa pagkuha ng makinis na paggalaw. Kaya, isaalang-alang lamang ang proyektong ito para sa hangaring pang-edukasyon.

Iyon lang ang magiging para sa tutorial na ito, inaasahan kong nasiyahan ka dito at may natutunan ng bago. Huwag mag-atubiling magtanong ng anumang katanungan sa seksyon ng mga komento sa ibaba at huwag kalimutang suriin ang mga koleksyon ng proyekto

Inirerekumendang: