Wirobgr's blog | BIKIN SENDIRI GYRO CAMERA Copyright Acu Wirasongko
[email protected] http://wirobgr.staff.ipb.ac.id/2013/04/12/bikin-sendiri-gyro-camera/
BIKIN SENDIRI GYRO CAMERA Kita bisa membuat sendiri Gyro Camera tersebut dengan menggunakan bantuan modul GYRO dan modul ACCELEROMETER. Awalnya dua modul tersebut adalah modul yang terpisah, sehingga kita harus menggunakan dua unit modul bersamaan. Kemudian dibuatlah Chip Gyro dan Chip Accelerometer dalam satu modul (ada dua chip dalam satu modul). Hingga akhirnya versi terbaru keduanya dibuat dalam satu chip saja, sehingga memperkecil distorsi perhitungan gerakan.
Modul yang digunakan di artikel ini adalah Triple Axis Accelerometer & Gyro Breakout – MPU-6050, dimana dalam modul ini terdapat 3-axis gyroscope dan 3-axis accelerometer dalam satu chip. Bekerja dengan catu daya 3.3volt.
Selain modul MPU6050 ini, bisa juga digunakan modul sejenis seperti:
- IMU Fusion Board – ADXL345 & IMU3000 - IMU Digital Combo Board – 6 Degrees of Freedom ITG3200/ADXL345
Wujud MPU6050 adalah seperti ini. Ukuran sangat kecil, hanya 20mm x 15mm dan tebal 1.6mm.
page 1 / 11
Wirobgr's blog | BIKIN SENDIRI GYRO CAMERA Copyright Acu Wirasongko
[email protected] http://wirobgr.staff.ipb.ac.id/2013/04/12/bikin-sendiri-gyro-camera/
Komponen yang digunakan antara lain:
-
Triple Axis Accelerometer & Gyro Breakout – MPU-6050 Arduino UNO R3 ( beli) Digital Servo (gunakan servo yang bagus dan kuat) ( beli) Breadboard Mini Baterai 9v + Saklar Box dan Kelengkapan lainnya.
Komponen dapat dibeli di Lapantech.com
page 2 / 11
Wirobgr's blog | BIKIN SENDIRI GYRO CAMERA Copyright Acu Wirasongko
[email protected] http://wirobgr.staff.ipb.ac.id/2013/04/12/bikin-sendiri-gyro-camera/
Skema pemasangan komponennya adalah sebagai berikut:
– www.saft7.com – automotive tips and sharing
Jika menggunakan Board selain Arduino Uno R3, pin SCL dan SDA dari MPU berbeda-beda:
VDD : +3.3V VIO : +3.3V GND : GND SDA : Pin A4 (Arduino Uno, ethernet) / Pin 20 (Mega2560, Due) / Pin 2 (Leonardo) SCL : Pin A5 (Arduino Uno, ethernet) / Pin 21 (Mega2560, Due) / Pin 3 (Leonardo)
page 3 / 11
Wirobgr's blog | BIKIN SENDIRI GYRO CAMERA Copyright Acu Wirasongko
[email protected] http://wirobgr.staff.ipb.ac.id/2013/04/12/bikin-sendiri-gyro-camera/
Rangkaian sudah selesai terpasang seluruhnya.
PROGRAMMING Setelah semua selesai dirangkai, saatnya untuk melakukan upload program ke Arduino.
Rangkaian proyek ini hanya untuk menggerakkan servo dalam satu axis-X saja. Namun tetap diperlukan data-data dari Axis Y dan Z untuk masing-masing Gyroscope dan Accelerometer. Juga saya coba gabungkan dengan perhitungan Kalman Filter agar dapat meredam ‘noise’ output dari Gyroscope+Accelerometer sehingga gerakan servo menjadi halus tidak terjadi gerakan yang tidak diinginkan. /* GYRO CAMERA - saft7.com
Demonstrates auto-leveling Camera Video by
page 4 / 11
Wirobgr's blog | BIKIN SENDIRI GYRO CAMERA Copyright Acu Wirasongko
[email protected] http://wirobgr.staff.ipb.ac.id/2013/04/12/bikin-sendiri-gyro-camera/
using Gyro & Accelerometer with Arduino The circuit: Servo controlled by Arduino, using Gyro and Accelerometer as reference of movement. Created March 12, 2013 by Firmansyah Saftari www.saft7.com This code and complete article can be found at: http://www.saft7.com/ Programming Language: C++ */ #include <Servo.h> Servo xservo; #include <Wire.h> #include "Kalman.h" Kalman kalmanX; Kalman kalmanY; uint8_t IMUAddress = 0x68; // MPU6050 Address /* IMU Data */ int16_t accX; int16_t accY; int16_t accZ; int16_t tempRaw; int16_t gyroX; int16_t gyroY; int16_t gyroZ; int moveX; int mapX; int correctionX; double accXangle; double accYangle; double gyroXangle = 9; double gyroYangle = 180; double compAngleX = 90; double compAngleY = 90; double kalAngleX; double kalAngleY; uint32_t timer; // ---------- VOID SETUP START -------------- / void setup() { Serial.begin(115200); xservo.attach(10); Wire.begin(); i2cWrite(0x6B,0x00); // Disable sleep mode if(i2cRead(0x75,1)[0] != 0x68) { // Read "WHO_AM_I" register Serial.print(F("MPU-6050 with address 0x")); Serial.print(IMUAddress,HEX); Serial.println(F(" is not connected")); while(1); } kalmanX.setAngle(90); // Set starting angle kalmanY.setAngle(90); timer = micros(); } // ---------- VOID SETUP END -------------- / // ---------------------- VOID LOOP START -------------- / void loop() { /* Update all the values */ uint8_t* data = i2cRead(0x3B,14); accX = ((data[0] << 8) | data[1]); accY = ((data[2] << 8) | data[3]); accZ = ((data[4] << 8) | data[5]); tempRaw = ((data[6] << 8) | data[7]); gyroX = ((data[8] << 8) | data[9]); gyroY = ((data[10] << 8) | data[11]); gyroZ = ((data[12] << 8) | data[13]); /* Calculate the angls based on the different sensors and algorithm */ accYangle = (atan2(accX,accZ)+PI)*RAD_TO_DEG; accXangle = (atan2(accY,accZ)+PI)*RAD_TO_DEG; double gyroXrate = (double)gyroX/131.0; double gyroYrate = -((double)gyroY/131.0); gyroXangle += gyroXrate*((double)(micros()-timer)/1000000); // Calculate gyro angle without any filter gyroXangle += kalmanX.getRate()*((double)(micros()-timer)/1000000); // Calculate gyro angle using the unbiased rate compAngleX = (0.93*(compAngleX+(gyroXrate*(double)(micros()-timer)/1000000)))+(0.07*accXan gle); // Calculate the angle using a Complimentary filter kalAngleX = kalmanX.getAngle(accXangle, gyroXrate, (double)(micros()-timer)/1000000); // Calculate the angle using a Kalman filter timer = micros(); mapX = map(kalAngleX, 0, 200, 0, 179); //calculate limitation of servo mechanical // ///////////////////////////// correctionX = 27; // EDIT THIS VALUE FOR SERVO CORRECTION ANGLE // //////////////////////////// moveX = 270 - (kalAngleX) + correctionX; // ------- SEND TO SERIAL PRINT START ----- / Serial.print("saft7.com X Pos: "); Serial.print(moveX);Serial.print("\t"); Serial.print("\n"); // ------- SEND TO SERIAL PRINT END ----- / // ------- SEND TO SERVO START ----- / xservo.write(moveX); // Send signal to servo delay(15); // delay to allow servos to move (ms) // ------- SEND TO SERVO END ----- / delay(1); // The accelerometer's maximum samples rate is 1kHz } // ---------------------- VOID LOOP END -------------- / // -- FUNCTIONS START -- void i2cWrite(uint8_t registerAddress, uint8_t data){ Wire.beginTransmission(IMUAddress); Wire.write(registerAddress); Wire.write(data); Wire.endTransmission(); // Send stop } uint8_t* i2cRead(uint8_t registerAddress, uint8_t nbytes) { uint8_t data[nbytes]; Wire.beginTransmission(IMUAddress); Wire.write(registerAddress);
page 5 / 11
Wirobgr's blog | BIKIN SENDIRI GYRO CAMERA Copyright Acu Wirasongko
[email protected] http://wirobgr.staff.ipb.ac.id/2013/04/12/bikin-sendiri-gyro-camera/
Wire.endTransmission(false); // Don't release the bus Wire.requestFrom(IMUAddress, nbytes); // Send a repeated start and then release the bus after reading for(uint8_t i = 0; i < nbytes; i++) data[i] = Wire.read(); return data; } // -- FUNCTIONS END -- // GYROCAM BY SAFT7.COM // // END
– www.saft7.com – automotive tips and sharing
Membuat dudukan kamera Saya menggunakan Acrylic setebal 2mm yang ditekuk dengan cara dipanaskan. Kemudian dibuat lubang-lubang yang diperlukan untuk pemasangan servo dan lubang baut ke kamera.
Baut kamera didapat dari tripod kecil yang sudah tidak terpakai, memudahkan pemasangan kamera.
page 6 / 11
Wirobgr's blog | BIKIN SENDIRI GYRO CAMERA Copyright Acu Wirasongko
[email protected] http://wirobgr.staff.ipb.ac.id/2013/04/12/bikin-sendiri-gyro-camera/
Board Arduino dipasang ke alas box.
– www.saft7.com – automotive tips and sharing
page 7 / 11
Wirobgr's blog | BIKIN SENDIRI GYRO CAMERA Copyright Acu Wirasongko
[email protected] http://wirobgr.staff.ipb.ac.id/2013/04/12/bikin-sendiri-gyro-camera/
Unit Arduino, Servo dan MPU6050 sudah terpasang pada box.
Video Pengujian Servo pada box
Dudukan kamera sudah dipasang pada servo.
page 8 / 11
Wirobgr's blog | BIKIN SENDIRI GYRO CAMERA Copyright Acu Wirasongko
[email protected] http://wirobgr.staff.ipb.ac.id/2013/04/12/bikin-sendiri-gyro-camera/
– www.saft7.com – automotive tips and sharing
Kamera dipasang ke unit
page 9 / 11
Wirobgr's blog | BIKIN SENDIRI GYRO CAMERA Copyright Acu Wirasongko
[email protected] http://wirobgr.staff.ipb.ac.id/2013/04/12/bikin-sendiri-gyro-camera/
Video pengujian saat kamera terpasang
SAATNYA MENCOBA
Kamera dipasang pada motor.
page 10 / 11
Wirobgr's blog | BIKIN SENDIRI GYRO CAMERA Copyright Acu Wirasongko
[email protected] http://wirobgr.staff.ipb.ac.id/2013/04/12/bikin-sendiri-gyro-camera/
Coba jalan-jalan yuuuk…
Lessons Learned:
-
Modul Gyro+accelerometer harus terpasang dengan baik. Pengaturan kalibrasi level horisontal dilakukan di bidang yang datar Gunakan servo yang kuat. Gunakan baterai yang berdaya besar agar servo mendapatkan catudaya yang baik.
Semoga bermanfaat.
– www.saft7.com – automotive tips and sharing
page 11 / 11