Daftar Isi:
- Langkah 1: Daftar Komponen
- Langkah 2: Perakitan
- Langkah 3:
- Langkah 4: 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
- Langkah 6: Koneksi
- Langkah 7: Koneksi Dengan IC Regulator Tegangan 7805
- Langkah 8: Pengkodean
- Langkah 9: Ketika Semua Komponen Terhubung, Tampilannya Mirip dengan Gambar Ini
- Langkah 10: Sekarang Masukkan Semua Bahan Dasar ke Dalam Makanan Can
- Langkah 11: Ketika Semua Kabel dan Komponen Ditempatkan Di Dalam Makanan Kemudian Dapat Diterapkan Lem Pistol di Dasar Papan Busa
- Langkah 12: Kesimpulan
Video: Kontrol Gerak Gimbal: 12 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:54
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
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:
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
Langkah 5: Selanjutnya, Menggunakan Metode yang Sama Saya Mengamankan Roll Servo. Suku Cadang Dirancang Secara Khusus agar Mudah Menyesuaikan Servo MG995
Langkah 6: 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
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
Langkah 10: Sekarang Masukkan Semua Bahan Dasar ke Dalam Makanan Can
Langkah 11: Ketika Semua Kabel dan Komponen Ditempatkan Di Dalam Makanan Kemudian Dapat Diterapkan Lem Pistol 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:
ITTT Rolando Ritzen - Sarung Tangan Arcade Kontrol Gerak: 5 Langkah
ITTT Rolando Ritzen - Sarung Tangan Arkade Kontrol Gerak: Pengendali gerak untuk penembak di rel. De gimmick van dit project adalah semua kontrol gerak, termasuk het schieten. (Je schiet door te "finger bangen")
Tensegrity atau Robot Paralel 5R Ganda, 5 Sumbu (DOF) Murah, Tangguh, Kontrol Gerak: 3 Langkah (dengan Gambar)
Tensegrity atau Double 5R Parallel Robot, 5 Axis (DOF) Murah, Tangguh, Kontrol Gerakan: Saya harap Anda akan berpikir ini adalah ide BESAR untuk hari Anda! Ini adalah entri dalam kompetisi Instructables Robotics yang ditutup pada 2 Des 2019. Proyek ini telah mencapai babak final penjurian, dan saya belum punya waktu untuk melakukan pembaruan yang saya inginkan! saya sudah
Slider Kontrol Gerak untuk Rel Selang Waktu: 10 Langkah (dengan Gambar)
Penggeser Kontrol Gerak untuk Rel Selang Waktu: Instruksi ini menjelaskan cara menggerakkan rel selang waktu menggunakan motor langkah yang digerakkan oleh Arduino. Kami terutama akan fokus pada Pengontrol Gerak yang menggerakkan motor langkah dengan asumsi Anda sudah memiliki rel yang ingin Anda kendarai. Misalnya saat
Kontrol Exhaust Fan DC Berbasis Sensor Gerak Tanpa Arduino: 4 Langkah
Kontrol Exhaust Fan DC Berbasis Sensor Gerak Tanpa Arduino: Halo saudara-saudara di dunia, saya telah membuat proyek kecil untuk mengendalikan kipas angin DC Anda (Jika Anda menambahkan satu relai ini, Anda juga dapat mengontrol Kipas buang AC). Ini dapat digunakan saat istirahat ruang untuk mengeringkan tangan yang basah.dan juga menggunakan aplikasi lain
Stopkontak Terkendali Gerak - Dari Lampu Penginderaan Gerak: 6 Langkah
Stopkontak Terkendali Gerakan - Dari Lampu Penginderaan Gerakan: Bayangkan Anda adalah seorang penipu yang pergi ke rumah paling menakutkan di blok itu. Setelah melewati semua hantu, hantu dan kuburan Anda akhirnya sampai ke jalan terakhir. Anda dapat melihat permen dalam mangkuk di depan Anda! Tapi kemudian tiba-tiba ada gho