Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Mengkalibrasi Servo Saya

Komponen dan persediaan

Arduino UNO
× 1
Adafruit PWM Servo Driver Shield
× 1
baut M3
× 8
Pencuci M3
× 8
LM2596 Konverter tegangan turun DC-DC
× 1
PLA Merah
× 1
PLA Putih
× 1
Protractor matematika yang jelas 180 derajat
× 1
Potensiometer putar (generik)
× 1
motor servo 9g
× 1

Alat dan mesin yang diperlukan

Printer 3D (generik)

Aplikasi dan layanan online

Arduino IDE
Autodesk Fusion 360

Tentang proyek ini

Dalam posting sebelumnya di Hackster, saya menulis tentang bagaimana saya membuat rig untuk membandingkan bagaimana servos yang berbeda dari batch yang sama berputar, dan menunjukkan bahwa mengirim sinyal PWM yang sama ke servos yang berbeda menghasilkan beberapa perbedaan yang signifikan - gambar di bawah menunjukkan servos yang semuanya dimulai pada posisi berlawanan arah jarum jam terjauh dan dikirimi sinyal PWM yang sama - semuanya memiliki perilaku yang sedikit berbeda.

Mengapa tidak menggunakan perpustakaan servo yang ada untuk Arduino?

Saya menggunakan Driver Servo PWM Adafruit untuk menggerakkan sekelompok servo, dan ini memungkinkan saya untuk mengirim sinyal PWM yang berbeda ke setiap servo. Saya dapat menggunakan perpustakaan Servo yang ada di dalam instalasi Arduino saya - tetapi saya memiliki beberapa alasan untuk tidak melakukan ini:

  • Dengan Driver Servo PWM Adafruit, saya dapat mengontrol servo saya hanya menggunakan dua pin melalui I2C, daripada harus mendedikasikan pin pada Arduino untuk setiap servo.
  • Terkadang saya menemukan dengan perpustakaan Arduino Servo bahwa ketika saya memasang ke servo dan mengirim sinyal untuk memutar ke posisi nol derajat yang berputar ke batas perjalanan dan menggiling roda gigi di dalam servo.

Tentu saja servos 9g yang saya gunakan murah dan tidak dirancang untuk akurasi - tetapi saya pikir saya dapat memeras beberapa nilai lebih dari mereka. Saya ingin menggunakannya untuk robot berjalan, dan membutuhkan perilaku mereka agar sedikit lebih tepat dan dapat diprediksi.

Bagaimana cara mengontrol servo hobi saya dengan lebih akurat?

Mengonfirmasi bahwa semua servos saya berperilaku sedikit berbeda membuat saya ingin membuat perangkat yang memungkinkan saya untuk mengkalibrasi servo - nilai PWM apa yang saya perlukan untuk mengirim servo untuk pindah ke posisi 0 derajat? Atau titik tengah 90 derajat? Bagaimana cara menghindari pengiriman nilai PWM yang mengunci servo ke posisi ekstrem dengan banyak gesekan dan penggilingan gigi?

Saya memutuskan untuk menggabungkan beberapa konsep sederhana.

  • Sejajarkan servo saya dengan pusat busur derajat sederhana, sehingga saat wiper servo berputar, saya dapat mengukur posisinya.
  • Hubungkan potensiometer ke input analog Arduino, sehingga saya dapat mengontrol posisi wiper servo dengan menyesuaikan nilai PWM saat saya menyesuaikan posisi poros potensiometer.

Untuk versi ini, saya senang menggunakan Serial Monitor Arduino IDE saya untuk memberi tahu saya nilai sinyal PWM, yang dapat saya rekam secara manual.

Saya menggunakan Autodesk 123D untuk merancang rig sederhana yang akan menampung potensiometer, busur derajat, satu servo, Arduino saya, dan driver servo Adafruit PWM bersama dengan catu daya.

Saya ingin tetap menggunakan driver servo Adafruit PWM untuk kalibrasi saya karena kemungkinan itulah yang akan saya gunakan dalam tugas akhir saya. Jika saya akan mengontrol servo langsung dari pin di Arduino, saya akan mereplikasinya di perangkat dan mengkalibrasi servo terhadap PWM dari Arduino.

Membangun perangkat

Saya mencetak setiap bagian, dan menempelkannya bersama-sama menggunakan baut dan ring M3.

Lubang pemasangan di desain perangkat saya disesuaikan agar sesuai dengan komponen saya - komponen yang berbeda mungkin memiliki perbedaan dalam diameter dan posisi lubang.

Untuk elektronik, saya memasang pin tengah potensiometer ke pin A0 Arduino, dan pin lainnya ke 0v dan 5v di Arduino. Saya memasang driver motor servo PWM ke Arduino, dan kemudian saya menghubungkan konverter buck DC-DC (saya menyetel untuk mengubah input catu daya 9v menjadi output 5v). Saya menghubungkan servo 9g ke slot pertama pada pelindung driver motor servo, dan kemudian mengunggah sketsa saya ke Arduino.

Hasil akhirnya ditunjukkan pada foto-foto di bawah ini. Dengan memutar kenop di kiri atas perangkat, saya dapat mengontrol posisi servo, dan menggunakan Serial Monitor di Arduino IDE, saya dapat membaca sinyal PWM yang dikirim ke motor servo untuk sudut tertentu.

Jadi apa yang dikatakan perangkat itu kepada saya?

Untuk servo saya, saya memutarnya ke batas terjauh searah jarum jam, dan menempatkan penghapus pada servo sehingga posisinya tepat di luar tanda 180 derajat pada busur derajat perangkat kalibrasi saya.

Saya menghubungkan daya ke perangkat, dan kemudian saya memutar kenop potensiometer sampai jarum servo sejajar dengan tanda 0 derajat pada busur derajat, dan mencatat nilai PWM yang tertulis pada Output Serial Arduino IDE saya. Kemudian saya memutar potensiometer sampai jarum servo menunjuk 10 derajat, dan mencatat nilai PWM lagi. Saya melanjutkan proses ini setiap 10 derajat hingga mencapai 180 derajat, dan saya telah membagikan hasilnya pada tabel di bawah.

Saya membuat grafik hasil (ditunjukkan di bawah), dan seperti yang Anda harapkan, jelas ada hubungan yang sangat linier antara PWM dan sudut servo.

Sekarang saya memiliki beberapa nilai PWM dan sudut yang merupakan karakteristik dari servo khusus ini - servo lain mungkin memiliki karakteristik yang serupa, tetapi tidak akan identik.

Saya memiliki beberapa opsi sekarang untuk performa servo yang lebih akurat:

  • Rekam pasangan nilai ini dan simpan dalam array di sketsa Arduino saya, dan ketika saya ingin memindahkan wiper servo ke 90 derajat (misalnya), lihat saja nilai PWM yang terkait dengan sudut ini dan kirimkan nilai PWM tersebut ke servonya. Ini memiliki kelemahan bahwa saya hanya bisa memutar ke sudut yang merupakan kelipatan 10.
  • Atau jika saya ingin kontrol penuh dari sudut mana saya mengirim, saya dapat menggunakan regresi linier pada kumpulan data untuk mencari tahu rumus apa yang berhubungan dengan sudut dan nilai PWM (untuk servo ini, PWM =2.35 * Sudut + 159.4). Dengan cara ini saya dapat melewatkan sudut yang ingin saya ubah sebagai parameter, dan secara terprogram menghitung PWM yang diperlukan untuk memutar servo khusus ini ke posisi itu.

Either way, saya dapat mengontrol servo ini dengan lebih akurat dan percaya diri dari sebelumnya. Perlu sedikit lebih banyak upaya untuk mengkalibrasi setiap servo dengan tepat, tetapi untuk proyek saya, ini sepadan dengan akurasi tambahannya.

Tentu saja, ketika saya melepas servo dari perangkat, saya tetap memasang wiper servo, karena pengukuran terkait dengan cara pemasangan wiper saat dikalibrasi.

Perbaikan untuk versi berikutnya

Setelah mengkalibrasi beberapa servo, saya memikirkan beberapa peningkatan yang akan saya buat ke versi berikutnya.

  • Servo harus memiliki mekanisme pelepasan cepat - mungkin mengamankan servo di tempatnya menggunakan klip dengan magnet neodymium, daripada mengamankannya dengan baut M3.
  • Saya ingin membuatnya lebih kecil - mungkin saya bisa mengarahkan ulang Arduino dan catu daya untuk mencapainya.
  • Saya memerlukan sakelar daya antara baterai 9v dan konverter buck, jadi saya tidak perlu mencabut baterai sepenuhnya setiap kali saya ingin mematikan mesin.
  • Saya ingin bisa mencetak rig lebih sedikit.
  • Daripada membaca nilai secara manual dari busur derajat, akan lebih baik jika sensor dapat mendeteksi saat servo berada pada posisi sudut tertentu dan mengirimkannya kembali ke Arduino - ini dapat menghilangkan beberapa kesalahan paralaks.
  • Akhirnya, layar LCD untuk menampilkan hasil apa pun akan sangat membantu, karena saya tidak perlu menghubungkan komputer ke perangkat.

Penutup

Jadi begitu - servos hobi saya murah dan tidak dirancang untuk akurasi - dan untuk banyak aplikasi, mereka baik-baik saja. Namun, saya ingin mendapatkan sedikit lebih banyak akurasi dan kinerja yang dapat diulang dari milik saya, dan rig dalam posting ini membantu saya mencapainya.

Kode

  • Sketsa untuk perangkat kalibrator servo
Sketsa untuk perangkat kalibrator servoC/C++
#include #define analogIn A0Adafruit_PWMServoDriver pwm =Adafruit_PWMServoDriver();int inputValue =0;int tmpPwmValue =0;void setup() { Serial.begin(9600); pwm.mulai(); pwm.setPWMFreq(60);}void loop() { inputValue =analogRead(analogIn); // inputValue akan berada di antara 0 dan 1024 // Dengan pengamatan, nilai PWM servo min dan max biasanya antara 100 dan 612 // Rumus di bawah ini memungkinkan kita untuk mengubah input analog menjadi PWM int pwmValue =(int)(100 + ( inputNilai / 2)); pwm.setPWM(0, 0, pwmValue); // Periksa untuk memastikan kita tidak perlu menampilkan data duplikat if (pwmValue !=tmpPwmValue) { Serial.print("Potentiometer Input ="); Serial.print(Nilai masukan); Serial.print(", PWM ="); Serial.println(pwmValue); } tmpPwmValue =pwmValue; delay(15);}

Suku cadang dan penutup khusus

Repo untuk suku cadang Kalibrator Servo
https://github.com/jeremylindsayni/ServoCalibrator

Proses manufaktur

  1. PLA 3D Printing:Semua yang Perlu Anda Ketahui
  2. Pan / Miringkan pelacakan wajah dengan raspberry pi
  3. PLA vs ABS vs Nylon
  4. Walbi, the Walking Biped
  5. Arduino IoT Robotic Arm
  6. Pencetakan 3D dengan PLA vs. ABS:Apa bedanya?
  7. Drive DC sebagai Pengganti Servo AC
  8. Apakah PLA Dapat Didaur Ulang atau bahkan dapat terurai secara hayati?
  9. Apakah PLA akan larut dalam Air dan akan terurai?
  10. Apakah Filamen PLA Konduktif (Apakah ada filamen konduktif)?