Daftar Isi:

Kontrol Gerak Gimbal: 12 Langkah
Kontrol Gerak Gimbal: 12 Langkah

Video: Kontrol Gerak Gimbal: 12 Langkah

Video: Kontrol Gerak Gimbal: 12 Langkah
Video: Full Tutorial Cara Memakai Gimbal Stabilizer HP Smartphone Brica B Steady Pro Versi 2023 2024, Juli
Anonim
Image
Image

Halo Semuanya, Nama saya Harji Nagi. Saya saat ini adalah mahasiswa tahun kedua yang belajar teknik elektronik dan komunikasi dari Institut Teknologi Pranveer Singh, Kanpur (UP). Saya memiliki minat yang besar dalam robotika, arduino, Kecerdasan Buatan, dan elektronik Analog.

Kata "gimbal" didefinisikan sebagai dukungan berporos yang memungkinkan rotasi objek apa pun dalam satu sumbu. Jadi gimbal tiga sumbu memungkinkan objek apa pun yang dipasang di gimbal menjadi independen dari gerakan orang yang memegang gimbal. Gimbal menentukan pergerakan objek, bukan orang yang membawanya.

Ini terdiri dari 3 motor servo MG996R untuk kontrol 3-sumbu, dan basis di mana sensor MPU6050, Arduino dan baterai akan ditempatkan. Ini digunakan untuk menjaga kamera tetap stabil tanpa getaran. Gimbal 3-sumbu memastikan bahwa gerakan kamera stabil meskipun yang memegangnya naik dan turun, kiri dan kanan, depan dan belakang. Inilah yang kami sebut sebagai stabilisasi yaw, pitch, dan roll.

Langkah 1: Daftar Komponen

Daftar komponennya adalah:

1) Arduino Uno

2) Baterai 8V, 1,5 Amp untuk menyalakan Arduino Uno

3) 7805 Voltage regulator Ic atau Anda dapat menggunakan buck conveter

4) MPU 6050

5)3*(MG995 SERVO Motors)

6) Kabel Jumper

Peralatan lainnya:

1) Besi Solder

2) Pistol Lem

3) mesin bor

4) Makanan Bisa

Alih-alih menggunakan breadborad, saya telah menggunakan papan perf coustom kecil untuk koneksi bus positif dan negatif

Langkah 2: Perakitan

Perakitan
Perakitan
Perakitan
Perakitan

Foamcore, foam board, atau paper-faced foam board adalah bahan yang ringan dan mudah dipotong yang digunakan untuk memasang motor Servo dan untuk membuat model skala.

Pertama saya membuat braket bentuk L DIY untuk memasang motor servo dengan bantuan papan busa.

Langkah 3:

Gambar
Gambar

Merakit gimbal itu cukup mudah. Saya mulai dengan memasang servo Yaw, sensor MPU 6050, dan sakelar ON-OFF. Menggunakan baut dan mur saya mengamankannya ke pangkalan

Langkah 4: Selanjutnya, Menggunakan Metode yang Sama Saya Mengamankan Roll Servo. Suku Cadang Secara Khusus Dirancang agar Mudah Menyesuaikan Servo MG995

Selanjutnya, Menggunakan Metode yang Sama Saya Mengamankan Roll Servo. Suku Cadang Secara Khusus Dirancang agar Mudah Menyesuaikan Servo MG995
Selanjutnya, Menggunakan Metode yang Sama Saya Mengamankan Roll Servo. Suku Cadang Secara Khusus Dirancang agar Mudah Menyesuaikan Servo MG995

Langkah 5: Selanjutnya, Menggunakan Metode yang Sama Saya Mengamankan Roll Servo. Suku Cadang Dirancang Secara Khusus agar Mudah Menyesuaikan Servo MG995

Selanjutnya, Menggunakan Metode yang Sama Saya Mengamankan Roll Servo. Suku Cadang Secara Khusus Dirancang agar Mudah Menyesuaikan Servo MG995
Selanjutnya, Menggunakan Metode yang Sama Saya Mengamankan Roll Servo. Suku Cadang Secara Khusus Dirancang agar Mudah Menyesuaikan Servo MG995

Langkah 6: Koneksi

Koneksi
Koneksi

Dalam diagram rangkaian Anda dapat menggunakan konverter buck atau IC regulator Tegangan 7805 untuk mengubah 8V menjadi 5 V. Mikrokontroler yang diberikan diagram rangkaian adalah Arduino Nano Anda juga dapat menggunakan Arduino Uno, Arduino Mega.

Pin SCL dan SDA dari MPU 6050 terhubung ke pin Analog Arduino A5 dan A4. (pin SCL dan SDA dapat bervariasi jadi periksa lembar data untuk pin SCl dan SDA untuk mikrokontroler lainnya)

Langkah 7: Koneksi Dengan IC Regulator Tegangan 7805

Koneksi Dengan IC Regulator Tegangan 7805
Koneksi Dengan IC Regulator Tegangan 7805

Diagram rangkaian ini untuk koneksi ic regulator tegangan 7805, sambungkan baterai 8v di Vin dan Anda akan mendapatkan tegangan output 5v.

Langkah 8: Pengkodean

Anda harus menyertakan pustaka berikut:

1)#includeKlik Di Siniuntuk mengunduh file zip

2)#includeKlik Di Sini untuk mengunduh file zip

Setelah mengunduh file zip, tambahkan perpustakaan zip di sketsa arduino

Untuk Kode

/*

DIY Gimbal - Kode Tutorial Arduino MPU6050 berdasarkan contoh MPU6050_DMP6 dari perpustakaan i2cdevlib oleh Jeff Rowberg: https://github.com/jrowberg/i2cdevlib */ // I2Cdev dan MPU6050 harus diinstal sebagai perpustakaan, atau.cpp/ file.h // untuk kedua kelas harus berada di jalur include proyek Anda #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" //#include "MPU6050.h" // tidak perlu jika menggunakan MotionApps include file / / Perpustakaan Kawat Arduino diperlukan jika implementasi I2Cdev I2CDEV_ARDUINO_WIRE // digunakan di I2Cdev.h #jika I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif #include // alamat I2C default kelas adalah 0x68 // alamat I2C tertentu mungkin diteruskan sebagai parameter di sini // AD0 rendah = 0x68 (default untuk breakout SparkFun dan papan evaluasi InvenSense) // AD0 tinggi = 0x69 MPU6050 mpu; //MPU6050 mpu(0x69); // <-- gunakan untuk AD0 tinggi // Tentukan 3 motor servo Servo servo0; Servo servo1; Servo servo2; mengapung benar; int j = 0; #define OUTPUT_READABLE_YAWPITCHROLL #define INTERRUPT_PIN 2 // gunakan pin 2 di Arduino Uno & kebanyakan papan bool blinkState = false; // Kontrol/status MPU vars bool dmpReady = false; // set true jika DMP init berhasil uint8_t mpuIntStatus; // menyimpan byte status interupsi aktual dari MPU uint8_t devStatus; // mengembalikan status setelah setiap operasi perangkat (0 = sukses, !0 = error) uint16_t packetSize; // ukuran paket DMP yang diharapkan (default adalah 42 byte) uint16_t fifoCount; // jumlah semua byte saat ini di FIFO uint8_t fifoBuffer[64]; // buffer penyimpanan FIFO // orientasi/gerakan vars Quaternion q; // [w, x, y, z] quaternion container VectorInt16 aa; // [x, y, z] pengukuran sensor accel VectorInt16 aaReal; // [x, y, z] pengukuran sensor accel bebas gravitasi VectorInt16 aaWorld; // [x, y, z] pengukuran sensor accel bingkai dunia gravitasi VectorFloat; // [x, y, z] vektor gravitasi float euler[3]; // [psi, theta, phi] Euler angle container float ypr[3]; // [yaw, pitch, roll] yaw/pitch/roll container dan vektor gravitasi // struktur paket untuk demo teko InvenSense uint8_t teapotPacket[14] = { '$', 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x00, '\r', '\n' }; // ================================================ ================ // === RUTIN DETEKSI GANGGUAN === // ===================== ========================================= volatile bool mpuInterrupt = false; // menunjukkan apakah pin interupsi MPU telah menjadi tinggi void dmpDataReady() { mpuInterrupt = true; } // =============================================== ================= // === SETUP AWAL === // ===================== =========================================== void setup() { // bergabung dengan bus I2C (library I2Cdev tidak melakukan ini secara otomatis) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); Kawat.setJam(400000); // 400kHz I2C jam. Beri komentar pada baris ini jika mengalami kesulitan kompilasi #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif // inisialisasi komunikasi serial // (115200 dipilih karena diperlukan untuk output Teapot Demo, tapi itu // terserah Anda tergantung pada proyek Anda) Serial.begin(38400); while (!Serial); // tunggu penghitungan Leonardo, yang lain segera melanjutkan // menginisialisasi perangkat //Serial.println(F("Menginisialisasi perangkat I2C…")); mpu.initialize(); pinMode(INTERRUPT_PIN, INPUT); devStatus = mpu.dmpInitialize(); // berikan offset gyro Anda sendiri di sini, diskalakan untuk sensitivitas min mpu.setXGyroOffset(17); mpu.setYGyroOffset(-69); mpu.setZGyroOffset(27); mpu.setZAccelOffset(1551); // 1688 default pabrik untuk chip uji saya // pastikan itu berfungsi (mengembalikan 0 jika demikian) if (devStatus == 0) { // nyalakan DMP, sekarang sudah siap // Serial.println(F("Mengaktifkan DMP…")); mpu.setDMPEnabled(benar); attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); // setel flag DMP Ready kita sehingga fungsi loop() utama tahu bahwa tidak apa-apa untuk menggunakannya //Serial.println(F("DMP ready! Waiting for first interrupt…")); dmpSiap = benar; // dapatkan ukuran paket DMP yang diharapkan untuk perbandingan nanti packetSize = mpu.dmpGetFIFOPacketSize(); } lain { // GALAT! // 1 = beban memori awal gagal // 2 = Pembaruan konfigurasi DMP gagal // (jika akan rusak, biasanya kodenya adalah 1) // Serial.print(F("Inisialisasi DMP gagal (kode ")); //Serial.print(devStatus); //Serial.println(F(")")); } // Tentukan pin yang menghubungkan 3 motor servo servo0.attach(10); servo1.attach (9); servo2.attach(8); } // =============================================== ================= // === LOOP PROGRAM UTAMA === // ==================== ============================================ void loop() { / / jika pemrograman gagal, jangan mencoba melakukan apapun jika (!dmpReady) kembali; // menunggu interupsi MPU atau paket tambahan tersedia while (!mpuInterrupt && fifoCount < packetSize) { if (mpuInterrupt && fifoCount

= 1024) {

// reset agar kita dapat melanjutkan dengan bersih mpu.resetFIFO(); fifoCount = mpu.getFIFOCount(); Serial.println(F("FIFO melimpah!")); // jika tidak, periksa interupsi siap data DMP (ini harus sering terjadi) } else if (mpuIntStatus & _BV(MPU6050_INTERRUPT_DMP_INT_BIT)) { // tunggu panjang data yang tersedia benar, harus SANGAT menunggu sebentar (fifoCount 1 paket tersedia / / (ini memungkinkan kita segera membaca lebih banyak tanpa menunggu interupsi) fifoCount -= packetSize; // Dapatkan nilai Yaw, Pitch and Roll #ifdef OUTPUT_READABLE_YAWPITCHROLL mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); // Nilai Yaw, Pitch, Roll - Radian ke derajat ypr[0] = ypr[0] * 180 / M_PI; ypr[1] = ypr[1] * 180 / M_PI; ypr[2] = ypr[2] * 180 / M_PI; // Lewati 300 pembacaan (proses kalibrasi sendiri) if (j <= 300) { benar = ypr[0]; // Yaw dimulai pada nilai acak, jadi kita menangkap nilai terakhir setelah 300 pembacaan j++; } // Setelah 300 pembacaan lagi { ypr[0] = ypr[0] - benar; // Atur Yaw ke 0 derajat - kurangi nilai Yaw acak terakhir dari nilai saat ini untuk membuat Yaw 0 derajat es // Memetakan nilai sensor MPU6050 dari -90 hingga 90 ke nilai yang sesuai untuk kontrol servo dari 0 hingga 180 int servo0Value = map(ypr[0], -90, 90, 0, 180); int servo1Nilai = peta(ypr[1], -90, 90, 0, 180); int servo2Value = peta(ypr[2], -90, 90, 180, 0); // Kontrol servo sesuai dengan orientasi MPU6050 servo0.write(servo0Value); servo1.write(servo1Value); servo2.write(servo2Value); } #berakhir jika } }

Akhirnya menggunakan fungsi tulis, kami mengirim nilai-nilai ini ke servos sebagai sinyal kontrol. Tentu saja, Anda dapat menonaktifkan servo Yaw jika Anda hanya ingin stabilisasi untuk sumbu X dan Y, dan menggunakan platform ini sebagai gimbal kamera

Langkah 9: Ketika Semua Komponen Terhubung, Tampilannya Mirip dengan Gambar Ini

Ketika Semua Komponen Terhubung, Tampilannya Mirip dengan Gambar Ini
Ketika Semua Komponen Terhubung, Tampilannya Mirip dengan Gambar Ini

Langkah 10: Sekarang Masukkan Semua Bahan Dasar ke Dalam Makanan Can

Sekarang Masukkan Semua Bahan Dasar ke Dalam Kaleng Makanan
Sekarang Masukkan Semua Bahan Dasar ke Dalam Kaleng Makanan

Langkah 11: Ketika Semua Kabel dan Komponen Ditempatkan Di Dalam Makanan Kemudian Dapat Diterapkan Lem Pistol di Dasar Papan Busa

Ketika Semua Kabel dan Komponen Ditempatkan Di Dalam Makanan Kemudian Dapat Diterapkan Pistol Lem di Dasar Papan Busa
Ketika Semua Kabel dan Komponen Ditempatkan Di Dalam Makanan Kemudian Dapat Diterapkan Pistol Lem di Dasar Papan Busa

Langkah 12: Kesimpulan

Harap dicatat ini jauh dari gimbal kamera yang bagus. Gerakannya tidak mulus karena servos ini tidak dimaksudkan untuk tujuan seperti itu. Gimbal kamera asli menggunakan tipe khusus motor BLDC untuk mendapatkan gerakan yang halus. Jadi, anggap proyek ini hanya untuk tujuan pendidikan.

Itu saja untuk tutorial ini, saya harap Anda menikmatinya dan belajar sesuatu yang baru. Jangan ragu untuk mengajukan pertanyaan apa pun di bagian komentar di bawah dan jangan lupa untuk memeriksa koleksi proyek saya

Direkomendasikan: