Daftar Isi:

Robot Self-Balancing Dua Roda: 7 Langkah
Robot Self-Balancing Dua Roda: 7 Langkah

Video: Robot Self-Balancing Dua Roda: 7 Langkah

Video: Robot Self-Balancing Dua Roda: 7 Langkah
Video: How To Make Arduino Human Following Robot 2024, November
Anonim
Robot Self-Balancing Dua Roda
Robot Self-Balancing Dua Roda

Instruksi ini akan melalui proses desain dan pembuatan untuk robot self-balancing. Sebagai catatan, saya hanya ingin mengatakan bahwa robot self-balancing bukanlah konsep baru dan mereka telah dibuat dan didokumentasikan oleh orang lain. Saya ingin menggunakan kesempatan ini untuk berbagi dengan Anda interpretasi saya tentang robot ini.

Apa itu robot penyeimbang diri?

Robot self-balancing adalah sistem yang menggunakan data pengukuran inersia, dikumpulkan dari sensor onboard, untuk terus menyesuaikan posisinya agar tetap tegak.

Bagaimana cara kerjanya?

Sebuah analogi sederhana untuk dipertimbangkan adalah pendulum terbalik. Dimana pusat massa berada di atas titik pivot. Namun, dalam kasus kami, kami membatasi pendulum hingga 1 derajat kebebasan dengan memiliki satu sumbu rotasi, dalam kasus kami sumbu rotasi kedua roda. Karena gangguan apa pun akan menyebabkan robot jatuh, maka diperlukan metode untuk menjaga keseimbangan robot secara aktif. Di sinilah algoritma loop tertutup kami (pengontrol PID) berperan, mengetahui ke arah mana robot kami jatuh, kami dapat menyesuaikan arah putaran motor kami untuk menjaga sistem tetap seimbang.

Bagaimana cara kerja algoritma loop tertutup?

Prinsip dasar dalam menjaga keseimbangan robot adalah, jika robot jatuh ke depan maka akan mengimbangi dengan menggerakkan bagian bawah robot ke depan untuk menangkap dirinya sendiri dan karena itu tetap vertikal. Begitu juga jika robot jatuh ke belakang akan mengimbanginya dengan menggerakkan bagian bawah robot ke belakang untuk menangkap dirinya sendiri.

Jadi, kita perlu melakukan dua hal di sini, pertama, kita perlu menghitung sudut kemiringan (Roll) yang dialami robot dan sebagai hasilnya, kita perlu mengontrol arah putaran motor.

Bagaimana kita mengukur sudut kemiringan?

Untuk mengukur sudut kemiringan kita akan menggunakan Unit Pengukuran Inersia. Modul ini menggabungkan accelerometer dan giroskop.

  • Akselerometer adalah perangkat elektromagnetik yang mengukur akselerasi yang tepat, ini adalah akselerasi tubuh dalam kerangka istirahat sesaat.
  • Giroskop adalah perangkat elektromekanis yang mengukur kecepatan sudut dan digunakan untuk menentukan orientasi perangkat.

Namun, masalah dengan menggunakan sensor tersebut adalah bahwa:

  • Akselerometer sangat bising tetapi konsisten dari waktu ke waktu, sudutnya bervariasi dengan gerakan horizontal yang tiba-tiba
  • Nilai giroskop, di sisi lain, akan melayang seiring waktu, tetapi pada awalnya, itu cukup akurat

Untuk instruksi ini, saya tidak akan menerapkan filter melainkan menggunakan Digital Motion Processing (DMP) onboard. Yang lain telah menggunakan filter pelengkap untuk mendapatkan sinyal yang halus, Anda dapat memilih metode mana pun yang Anda suka. sebagai keseimbangan robot dengan salah satu implementasi.

Perlengkapan

Bagian:

  1. Arduino Pro Mini 3.3V 8 dengan ATMEGA328 8 Mhz
  2. FT232RL 3.3V 5.5V FTDI USB ke modul adaptor serial TTL
  3. Modul GY-521 dengan MPU-6050
  4. Sepasang motor gigi mikro N20 6V - 300rpm
  5. Pengemudi motor L298N
  6. Konverter uang DC ke DC LM2596S
  7. Baterai (Paket baterai Li-ion 9,7V yang dapat diisi ulang)
  8. Tali baterai
  9. Dua papan sirkuit PCB prototipe
  10. Kabel jumper pin header pria dan wanita

Peralatan:

  1. Besi solder dan solder
  2. Kebuntuan spacer hex nilon
  3. Set obeng presisi
  4. pencetak 3D

Langkah 1: Konstruksi

Karena saya memiliki akses ke printer 3D, saya memutuskan untuk mencetak 3D sasis dan menggunakan standoff untuk menghubungkan semuanya bersama-sama.

Robot terdiri dari 4 lapisan

  1. Lapisan bawah menghubungkan motor dan memiliki titik pemasangan untuk modul driver motor L298N
  2. Lapisan berikutnya menampung papan prototipe dengan Arduino pro mini dan header yang disolder ke sana
  3. Lapisan ketiga memasang IMU
  4. Lapisan atas, yang saya sebut "lapisan bumper" menampung baterai, konverter uang, dan sakelar moneter

Prinsip desain utama saya adalah menjaga semuanya tetap modular. Alasannya adalah jika ada yang salah dengan salah satu komponen, saya dapat dengan mudah menggantinya atau jika saya membutuhkan komponen untuk proyek lain, saya dapat dengan mudah mengambilnya tanpa khawatir tidak dapat menggunakan sistem lagi.

Langkah 2: Pengkabelan

Pengkabelan
Pengkabelan

Saya menyolder beberapa pint header perempuan ke papan perf agar sesuai dengan pin header mini Arduino pro. Setelah ini, saya menyolder pin header laki-laki pada papan untuk memungkinkan akses ke I/O. Komponen lainnya dipasang ke bingkai cetak 3D dan dihubungkan menggunakan kabel jumper.

Langkah 3: Teori Kontrol

Sekarang kita beralih ke inti proyek. Untuk menjaga keseimbangan robot, kita perlu menghasilkan sinyal kontrol yang tepat untuk menggerakkan motor ke arah yang benar dan pada kecepatan yang benar untuk menjaga keseimbangan dan kestabilan robot. Untuk melakukan ini, kita akan menggunakan algoritma loop kontrol populer yang dikenal sebagai pengontrol PID. Seperti yang ditunjukkan oleh akronim ada tiga istilah untuk pengontrol ini, ini adalah istilah proporsional, integral, dan turunan. Masing-masing disertai dengan koefisien yang menentukan pengaruhnya terhadap sistem. Seringkali bagian yang paling memakan waktu dari implementasi pengontrol adalah penyetelan keuntungan untuk setiap sistem unik untuk mendapatkan respons paling optimal.

  • Istilah proporsional secara langsung mengalikan kesalahan untuk memberikan output, jadi semakin besar kesalahan semakin besar responsnya
  • Istilah integral menghasilkan respons berdasarkan akumulasi kesalahan untuk mengurangi kesalahan kondisi tunak. Semakin lama sistem tidak seimbang, semakin cepat motor akan merespons
  • Suku turunan adalah turunan dari kesalahan yang digunakan untuk memprediksi respons masa depan dan dengan demikian mengurangi osilasi karena melampaui kondisi tunak.

Prinsip dasar dari algoritma ini adalah menghitung secara terus menerus sudut kemiringan yang merupakan selisih antara posisi yang diinginkan dengan posisi saat ini, hal ini dikenal sebagai error. Kemudian menggunakan nilai kesalahan ini dan menghitung jumlah respons proporsional, integral, dan turunan untuk mendapatkan output, yang merupakan sinyal kontrol yang dikirim ke motor. Akibatnya, jika kesalahannya besar, sinyal kontrol yang dikirim ke motor akan memutar motor dengan kecepatan tinggi untuk mencapai keadaan seimbang. Demikian juga, jika kesalahannya kecil, sinyal kontrol akan memutar motor dengan kecepatan rendah untuk menjaga keseimbangan robot.

Langkah 4: Menggunakan MPU 6050

Perpustakaan MPU6050

github.com/jrowberg/i2cdevlib/tree/master/…

Mengkalibrasi offsetTidak semua sensor merupakan replika yang tepat satu sama lain. Akibatnya, jika Anda menguji dua MPU 6050, Anda mungkin mendapatkan nilai yang berbeda untuk akselerometer dan giroskop saat diletakkan di permukaan yang sama. Untuk mengatasi offset sudut konstan ini kita perlu merayakan setiap sensor yang kita gunakan. Menjalankan skrip ini:

www.i2cdevlib.com/forums/topic/96-arduino-…

ditulis oleh Luis Rodenas, kita akan mendapatkan offset. Kesalahan offset dapat dihilangkan dengan mendefinisikan nilai offset dalam rutin setup().

Menggunakan Prosesor Gerak Digital

MPU6050 berisi DMP (Digital Motion Processor).

Apa itu DMP? Anda dapat menganggap DMP sebagai mikrokontroler onboard yang memproses gerakan kompleks dari giroskop 3-sumbu dan akselerometer 3-sumbu di papan mpu6050, menggunakan algoritme fusi geraknya sendiri. Membongkar pemrosesan yang seharusnya dilakukan oleh Arduino

Bagaimana cara menggunakannya? Untuk mengetahui cara menggunakan DMP, lihat contoh sketsa MPU6050_DMP6 yang disertakan dengan pustaka MPU6050 (di Arduino IDE: File->Contoh->MPU6050->MPU6050_DMP6). Ini juga merupakan kesempatan yang baik untuk memeriksa sensor Anda benar-benar berfungsi dan kabelnya sudah benar

Langkah 5: Pengkodean

Saya menggunakan Arduino IDE dan antarmuka FTDI untuk memprogram Arduino pro mini.

Menggunakan contoh sketsa(MPU6050_DMP6) yang disertakan dengan perpustakaan MPU6050 sebagai kode dasar saya, saya menambahkan fungsi PID() dan MotorDriver().

Tambahkan perpustakaan

  • MPU6050: Untuk menggunakan sensor MPU6050 kita perlu mengunduh perpustakaan pengembang I2C dari Jeff Rowberg dan menambahkannya ke folder "perpustakaan" Arduino yang ada di file program di komputer Anda.
  • Wire: Kami juga membutuhkan perpustakaan Wire untuk memungkinkan kami berkomunikasi dengan perangkat I2C.

Kode Semu

Sertakan Perpustakaan:

  • Wire.h
  • MPU6050
  • I2Cdev.h

Inisialisasi variabel, konstanta, dan objek

Mempersiapkan ()

  • Atur mode pin untuk mengendalikan motor
  • Atur mode pin untuk LED status
  • Inisialisasi MPU6050 dan atur nilai offset

ID ()

Hitung nilai PID

MotorDriver (tanggapan PID)

Gunakan nilai PID untuk mengontrol kecepatan dan arah motor

Lingkaran ()

  • Dapatkan data dari DMP
  • Panggil PID() a MotorDriver() fungsi

Langkah 6: Prosedur Penyetelan PID

Ini adalah bagian proyek yang paling membosankan dan membutuhkan sedikit kesabaran kecuali jika Anda sangat beruntung. Berikut langkah-langkahnya:

  1. Tetapkan suku I dan D ke 0
  2. Memegang robot, sesuaikan P sehingga robot mulai berosilasi tentang posisi keseimbangan
  3. Dengan set P, naikkan I agar robot berakselerasi lebih cepat saat tidak seimbang. Dengan P dan I disetel dengan benar, robot harus dapat menyeimbangkan diri setidaknya selama beberapa detik, dengan beberapa osilasi
  4. Akhirnya, meningkatkan D mengurangi osilasi

Jika upaya pertama tidak memberikan hasil yang memuaskan, ulangi langkah-langkah dengan nilai P yang berbeda. Perlu diketahui juga bahwa Anda dapat menyempurnakan nilai PID sesudahnya, untuk lebih meningkatkan kinerja. Nilai di sini tergantung pada perangkat keras, jangan heran jika Anda mendapatkan nilai PID yang sangat besar atau sangat kecil.

Langkah 7: Kesimpulan

Motor roda gigi mikro yang digunakan lambat untuk bereaksi terhadap gangguan besar dan mengingat sistemnya terlalu ringan, tidak ada cukup inersia untuk mendapatkan efek pendulum yang diinginkan, jadi jika robot condong ke depan, ia hanya akan bersandar pada sudut dan berlari ke depan. Akhirnya, roda cetak 3D adalah pilihan yang buruk karena terus tergelincir.

Saran untuk peningkatan:

  • Motor yang lebih cepat dengan torsi yang lebih tinggi, yaitu untuk motor DC, semakin tinggi peringkat tegangan, semakin tinggi torsi
  • dapatkan baterai yang lebih berat atau cukup pindahkan massa sedikit lebih tinggi
  • Ganti roda cetak 3D dengan roda karet untuk mendapatkan lebih banyak traksi

Direkomendasikan: