Dalam tutorial ini kita akan mengembangkan rangkaian menggunakan sensor FLEX, Arduino Uno dan motor Servo. Proyek ini adalah sistem kendali servo dimana posisi poros servo ditentukan oleh kelenturan atau bengkok atau deviasi dari sensor FLEX.
Mari kita bicara sedikit tentang motor servo. Motor Servo digunakan jika diperlukan gerakan atau posisi poros yang akurat. Ini tidak diusulkan untuk aplikasi kecepatan tinggi. Ini diusulkan untuk kecepatan rendah, torsi sedang dan aplikasi posisi yang akurat. Motor ini digunakan dalam mesin lengan robotik, kontrol penerbangan, dan sistem kontrol. Motor servo digunakan dalam sistem tertanam seperti mesin penjual otomatis dll.
Motor servo tersedia dalam berbagai bentuk dan ukuran. Motor servo akan memiliki kabel terutama di sana, satu untuk tegangan positif yang lain untuk ground dan yang terakhir untuk pengaturan posisi. Kabel MERAH terhubung ke daya, kabel Hitam terhubung ke ground dan kabel KUNING terhubung ke sinyal.
Motor servo adalah kombinasi motor DC, sistem kendali posisi, roda gigi. Posisi poros motor DC diatur oleh kontrol elektronik di servo, berdasarkan rasio tugas dari sinyal PWM pin SIGNAL.
Cukup berbicara elektronik kontrol menyesuaikan posisi poros dengan mengendalikan motor DC. Data mengenai posisi poros ini dikirim melalui pin SIGNAL. Data posisi ke kontrol harus dikirim dalam bentuk sinyal PWM melalui pin sinyal motor servo.
Frekuensi sinyal PWM (Pulse Width Modulated) dapat berbeda-beda berdasarkan jenis motor servo. Yang penting di sini adalah RASIO TUGAS dari sinyal PWM. Berdasarkan DUTY RATION ini, elektronik kontrol menyesuaikan poros. Untuk poros yang akan dipindahkan ke jam 9o, TASIAL PENGHIDUPAN harus 1/18. Yaitu. 1 mili detik 'waktu ON' dan 17 mili detik 'waktu OFF' dalam sinyal 18 ms.
Untuk poros yang akan dipindahkan ke clock 12o, waktu sinyal ON harus 1.5ms dan waktu OFF harus 16.5ms. Rasio ini diterjemahkan oleh sistem kontrol in servo dan menyesuaikan posisi berdasarkan itu.
PWM ini di sini dibuat dengan menggunakan ARDUINO UNO. Jadi untuk saat ini kita mengetahui bahwa, kita dapat mengontrol poros motor servo dengan memvariasikan duty ratio dari sinyal PWM yang dihasilkan oleh Arduino Uno. UNO memiliki fungsi khusus yang memungkinkan kami untuk menyediakan posisi SERVO tanpa mengganggu sinyal PWM. Namun penting untuk mengetahui rasio tugas PWM - hubungan posisi servo. Kami akan membicarakannya lebih lanjut dalam deskripsi.
Sekarang mari kita bicara tentang SENSOR FLEX. Untuk menghubungkan sensor FLEX ke ARDUINO UNO, kita akan menggunakan fitur 8 bit ADC (Analog to Digital Conversion) untuk melakukan pekerjaan itu. Sensor FLEX adalah transduser yang resistensinya berubah saat bentuknya berubah. Sensor FLEX memiliki panjang 2,2 inci atau panjang jari. Itu ditunjukkan pada gambar.
Sensor fleksibel adalah transduser yang mengubah resistansinya saat permukaan linier ditekuk. Karenanya disebut sensor fleksibel. Secara sederhana, resistansi terminal sensor meningkat saat ditekuk. Ini ditunjukkan pada gambar di bawah ini.
Perubahan penolakan ini tidak ada gunanya kecuali kita dapat membacanya. Pengontrol di tangan hanya dapat membaca peluang dalam tegangan dan tidak kurang, untuk ini kita akan menggunakan rangkaian pembagi tegangan, dengan itu kita dapat memperoleh perubahan resistansi sebagai perubahan tegangan.
Pembagi tegangan adalah rangkaian resistif dan ditunjukkan pada gambar. Dalam jaringan resistif ini kami memiliki satu resistansi konstan dan resistansi variabel lainnya. Seperti yang ditunjukkan pada gambar, R1 di sini adalah resistansi konstan dan R2 adalah sensor FLEX yang bertindak sebagai resistansi.
Titik tengah cabang digunakan untuk pengukuran. Dengan perubahan R2, kami memiliki perubahan di Vout. Jadi dengan ini kami memiliki tegangan yang berubah dengan berat.
Sekarang hal penting untuk dicatat di sini adalah, input yang diambil oleh pengontrol untuk konversi ADC serendah 50µAmp. Efek pembebanan pembagi tegangan berbasis resistansi ini penting karena arus yang ditarik dari Vout pembagi tegangan meningkatkan persentase kesalahan yang meningkat, untuk saat ini kita tidak perlu khawatir tentang efek pembebanan.
FLEX SENSOR saat bengkok resistensinya berubah. Dengan transduser ini terhubung ke rangkaian pembagi tegangan, kita akan mengalami perubahan tegangan dengan FLEX pada transduser. Tegangan variabel ini FED ke salah satu saluran ADC, kami akan memiliki nilai digital yang berkaitan dengan FLEX.
Kami akan mencocokkan nilai digital ini dengan posisi servo, dengan ini kami akan memiliki kontrol servo dengan flex.
Komponen
Perangkat Keras: Arduino Uno , Power supply (5v), kapasitor 1000 uF, kapasitor 100nF (3 buah), resistor 100KΩ, SERVO MOTOR (SG 90), resistor 220Ω, sensor FLEX.
Software: Atmel studio 6.2 atau Aurdino nightly.
Diagram Sirkuit dan Penjelasannya
The diagram rangkaian untuk servo kontrol motor dengan sensor FLEX ditunjukkan pada gambar di bawah.
Tegangan di sensor tidak sepenuhnya linier; itu akan menjadi yang berisik. Untuk menyaring kebisingan, kapasitor ditempatkan di setiap resistor di sirkuit pembagi seperti yang ditunjukkan pada gambar.
Di sini kita akan mengambil tegangan yang disediakan oleh pembagi (tegangan yang mewakili berat secara linier) dan memasukkannya ke salah satu Saluran ADC Arduino UNO. Kami akan menggunakan A0 untuk ini. Setelah ADC inisialisasi, kita akan mendapatkan nilai digital yang mewakili bengkokan pada sensor. Kami akan mengambil nilai ini dan mencocokkannya dengan posisi servo.
Agar ini terjadi, kami perlu menetapkan beberapa instruksi dalam program dan kami akan membicarakannya secara rinci di bawah.
ARDUINO memiliki enam saluran ADC, seperti yang ditunjukkan pada gambar. Dalam salah satu atau semuanya dapat digunakan sebagai input untuk tegangan analog. UNO ADC memiliki resolusi 10 bit (jadi nilai integer dari (0- (2 ^ 10) 1023)). Ini berarti akan memetakan tegangan input antara 0 dan 5 volt menjadi nilai integer antara 0 dan 1023. Jadi untuk setiap (5/1024 = 4.9mV) per unit.
Di sini kita akan menggunakan A0 dari UNO.
Kami perlu mengetahui beberapa hal.
|
Pertama-tama saluran ADC UNO memiliki nilai referensi default 5V. Ini berarti kita dapat memberikan tegangan input maksimum 5V untuk konversi ADC di saluran input mana pun. Karena beberapa sensor memberikan tegangan dari 0-2.5V, dengan referensi 5V kami mendapatkan akurasi yang lebih rendah, jadi kami memiliki instruksi yang memungkinkan kami untuk mengubah nilai referensi ini. Jadi untuk mengubah nilai referensi yang kita miliki ("analogReference ();") Untuk saat ini kita biarkan sebagai.
Sebagai default kami mendapatkan resolusi ADC papan maksimum yaitu 10 bit, resolusi ini dapat diubah dengan menggunakan instruksi (“analogReadResolution (bits);”). Perubahan resolusi ini dapat berguna untuk beberapa kasus. Untuk saat ini kami membiarkannya sebagai.
Nah jika kondisi di atas diset ke default, kita bisa membaca nilai dari ADC channel '0' dengan langsung memanggil function “analogRead (pin);”, disini “pin” mewakili pin tempat kita menghubungkan sinyal analog, dalam hal ini akan menjadi "A0".
Nilai dari ADC dapat diambil menjadi integer sebagai "int SENSORVALUE = analogRead (A0); ", Dengan instruksi ini nilai setelah ADC disimpan dalam integer" SENSORVALUE ".
Sekarang mari kita bicara tentang SERVO, UNO memiliki fitur yang memungkinkan kita untuk mengontrol posisi servo hanya dengan memberikan nilai derajat. Katakanlah jika kita ingin servo berada di 30, kita bisa langsung mewakili nilai dalam program. File header SERVO menangani semua perhitungan rasio tugas secara internal.
#include
Servo servo; servo.attach (3); servo.write (derajat); |
Pernyataan pertama mewakili file header untuk mengontrol SERVO MOTOR.
Pernyataan kedua adalah penamaan servo; kami membiarkannya sebagai servo itu sendiri.
Pernyataan ketiga menyatakan di mana pin sinyal servo terhubung; ini pasti pin PWM. Di sini kami menggunakan PIN3.
Pernyataan keempat memberikan perintah untuk memposisikan motor servo dan dalam derajat. Jika diberikan 30, motor servo berputar 30 derajat.
Sekarang sg90 bisa bergerak dari 0-180 derajat, kita punya hasil ADC 0-1024
Jadi ADC kira-kira enam kali SERVO POSITION. Jadi dengan membagi hasil ADC dengan 6 kita akan mendapatkan perkiraan posisi tangan SERVO.
Dengan ini kita akan memiliki nilai posisi servo yang diumpankan ke motor servo, yang sebanding dengan lentur atau bengkok. Saat sensor fleksibel ini dipasang pada sarung tangan, kita dapat mengontrol posisi servo dengan gerakan tangan.