Dalam tutorial ini kita akan mengembangkan rangkaian menggunakan sensor FLEX, Arduino Uno dan motor Servo. Projek ini adalah sistem kawalan servo di mana kedudukan poros servo ditentukan oleh lenturan atau bengkok atau penyimpangan sensor FLEX.
Mari kita bercakap sedikit mengenai motor servo. Servo Motors digunakan di mana terdapat keperluan pergerakan poros atau kedudukan yang tepat. Ini tidak dicadangkan untuk aplikasi berkelajuan tinggi. Ini dicadangkan untuk kelajuan rendah, tork sederhana dan aplikasi kedudukan tepat. Motor ini digunakan dalam mesin lengan robot, kawalan penerbangan dan sistem kawalan. Motor servo digunakan dalam sistem tertanam seperti mesin layan diri dll.
Motor servo boleh didapati dalam pelbagai bentuk dan saiz. Motor servo mempunyai wayar terutamanya, satu untuk voltan positif yang lain untuk tanah dan yang terakhir adalah untuk penetapan kedudukan. Kawat MERAH disambungkan ke kuasa, Kawat hitam disambungkan ke tanah dan wayar KUNING dihubungkan ke isyarat.
Motor servo adalah gabungan motor DC, sistem kawalan kedudukan, gear. Kedudukan poros motor DC diselaraskan oleh elektronik kawalan dalam servo, berdasarkan nisbah tugas PWM memberi isyarat pada pin SIGNAL.
Cukup elektronik kawalan menyesuaikan kedudukan poros dengan mengawal motor DC. Data mengenai kedudukan poros ini dihantar melalui pin SIGNAL. Data kedudukan ke kawalan harus dihantar dalam bentuk isyarat PWM melalui pin isyarat motor servo.
Frekuensi isyarat PWM (Pulse Width Modulated) boleh berbeza-beza berdasarkan jenis motor servo. Yang penting di sini ialah DUTY RATIO isyarat PWM. Berdasarkan DATY RATION ini elektronik kawalan menyesuaikan poros. Agar poros digerakkan ke jam 9o, JALAN TURN ON mesti 1 / 18.ie 1 mili 'masa ON' dan 17 mili kedua 'masa OFF' dalam isyarat 18 ms.
Untuk poros digerakkan ke jam 12o, waktu isyarat ON mestilah 1.5ms dan masa OFF hendaklah 16.5ms. Nisbah ini disahkod oleh sistem kawalan dalam servo dan menyesuaikan kedudukan berdasarkannya.
PWM ini di sini dihasilkan dengan menggunakan ARDUINO UNO. Jadi buat masa ini kita tahu, kita dapat mengawal poros motor servo dengan mengubah nisbah tugas isyarat PWM yang dihasilkan oleh Arduino Uno. UNO mempunyai fungsi khas yang membolehkan kita memberikan kedudukan SERVO tanpa mengganggu isyarat PWM. Walau bagaimanapun, adalah penting untuk mengetahui hubungan tugas PWM - kedudukan servo. Kami akan membincangkannya dengan lebih terperinci.
Sekarang mari kita bincangkan mengenai FLEX SENSOR. Untuk menyambungkan sensor FLEX ke ARDUINO UNO, kami akan menggunakan fitur ADC 8 bit (Analog ke Penukaran Digital) untuk melakukan tugas. Sensor FLEX adalah transduser yang mengubah ketahanannya apabila bentuknya berubah. Sensor FLEX berukuran 2.2 inci atau panjang jari. Ia ditunjukkan dalam rajah.
Sensor Flex adalah transduser yang mengubah rintangannya apabila permukaan linear dibengkokkan. Oleh itu nama flex sensor. Secara sederhana rintangan terminal sensor meningkat apabila dibengkokkan. Ini ditunjukkan dalam rajah di bawah.
Perubahan rintangan ini tidak ada gunanya kecuali kita dapat membacanya. Pengawal di tangan hanya dapat membaca kemungkinan voltan dan tidak kurang, untuk ini kita akan menggunakan litar pembahagi voltan, dengan itu kita dapat memperoleh perubahan rintangan sebagai perubahan voltan.
Pembahagi voltan adalah litar resistif dan ditunjukkan dalam rajah. Dalam rangkaian resistif ini kita mempunyai satu rintangan tetap dan rintangan pemboleh ubah yang lain. Seperti yang ditunjukkan dalam gambar, R1 di sini adalah rintangan tetap dan R2 adalah sensor FLEX yang bertindak sebagai rintangan.
Titik tengah cabang dibawa ke pengukuran. Dengan perubahan R2, kita mempunyai perubahan di Vout. Jadi dengan ini kita mempunyai voltan yang berubah dengan berat.
Perkara penting yang perlu diberi perhatian di sini ialah, input yang diambil oleh pengawal untuk penukaran ADC serendah 50µAmp. Kesan pemuatan pembahagi voltan berdasarkan rintangan ini penting kerana arus yang diambil dari Vout pembahagi voltan meningkatkan peratusan ralat meningkat, buat masa ini kita tidak perlu bimbang tentang kesan pemuatan.
FLEX SENSOR ketika membengkokkan rintangannya berubah. Dengan transduser ini disambungkan ke litar pembahagi voltan, kita akan mempunyai voltan yang berubah dengan FLEX pada transduser. Voltan berubah ini adalah FED ke salah satu saluran ADC, kita akan mempunyai nilai digital yang berkaitan dengan FLEX.
Kami akan memadankan nilai digital ini dengan kedudukan servo, dengan ini kami akan mempunyai kawalan servo secara flex.
Komponen
Perkakasan: Arduino Uno , Bekalan kuasa (5v), kapasitor 1000 uF, kapasitor 100nF (3 keping), perintang 100KΩ, SERVO MOTOR (SG 90), perintang 220Ω, sensor FLEX.
Perisian: Atmel studio 6.2 atau Aurdino setiap malam.
Rajah dan Penjelasan Litar
The gambarajah litar untuk servo kawalan motor dengan sensor FLEX ditunjukkan dalam di bawah rajah.
Voltan merentasi sensor tidak linear sepenuhnya; ia akan menjadi bising. Untuk menyaring kebisingan, kapasitor ditempatkan di setiap perintang di litar pembahagi seperti yang ditunjukkan dalam gambar.
Di sini kita akan mengambil voltan yang diberikan oleh pembahagi (voltan yang mewakili berat secara linear) dan memasukkannya ke salah satu Saluran ADC Arduino UNO. Kami akan menggunakan A0 untuk ini. Selepas inisialisasi ADC, kita akan mempunyai nilai digital yang mewakili sensor bengkok. Kami akan mengambil nilai ini dan memadankannya dengan kedudukan servo.
Untuk ini berlaku, kita perlu menetapkan beberapa arahan dalam program dan kita akan membincangkannya secara terperinci di bawah.
ARDUINO mempunyai enam saluran ADC, seperti yang ditunjukkan dalam gambar. Di mana satu atau semua itu boleh digunakan sebagai input voltan analog. UNO ADC mempunyai resolusi 10 bit (jadi nilai integer dari (0- (2 ^ 10) 1023)). Ini bermaksud bahawa ia akan memetakan voltan input antara 0 dan 5 volt menjadi nilai integer antara 0 dan 1023. Jadi untuk setiap (5/1024 = 4.9mV) seunit.
Di sini kita akan menggunakan A0 UNO.
Kita perlu mengetahui beberapa perkara.
|
Pertama sekali saluran UNO ADC mempunyai nilai rujukan lalai 5V. Ini bermakna kita dapat memberikan voltan input maksimum 5V untuk penukaran ADC di mana-mana saluran input. Oleh kerana beberapa sensor memberikan voltan dari 0-2.5V, dengan rujukan 5V, kita mendapat ketepatan yang lebih rendah, jadi kita mempunyai petunjuk yang memungkinkan kita mengubah nilai rujukan ini. Jadi untuk mengubah nilai rujukan yang kita miliki (“analogReference ();”) Buat masa ini kita membiarkannya sebagai.
Sebagai lalai, kami mendapat resolusi ADC papan maksimum iaitu 10 bit, resolusi ini dapat diubah dengan menggunakan instruksi ("analogReadResolution (bit);"). Perubahan resolusi ini sangat berguna untuk beberapa kes. Buat masa ini kami membiarkannya.
Sekarang jika syarat di atas ditetapkan ke lalai, kita dapat membaca nilai dari ADC saluran '0' dengan memanggil fungsi langsung "analogRead (pin);", di sini "pin" mewakili pin di mana kita menghubungkan isyarat analog, dalam hal ini akan menjadi "A0".
Nilai dari ADC dapat dimasukkan ke dalam bilangan bulat sebagai “int SENSORVALUE = analogRead (A0); ", Dengan arahan ini nilai setelah ADC disimpan dalam bilangan bulat" SENSORVALUE ".
Sekarang mari kita bincangkan mengenai SERVO, UNO mempunyai ciri yang membolehkan kita mengawal kedudukan servo dengan hanya memberikan nilai darjah. Katakanlah jika kita mahu servo berada pada 30, kita secara langsung dapat mewakili nilai dalam program. Fail header SERVO mengurus semua pengiraan nisbah tugas secara dalaman.
#sertakan
Servo servo; servo.attach (3); servo.write (darjah); |
Pernyataan pertama mewakili fail tajuk untuk mengawal SERVO MOTOR.
Pernyataan kedua adalah menamakan servo; kami meninggalkannya sebagai servo itu sendiri.
Pernyataan ketiga menyatakan di mana pin isyarat servo disambungkan; ini mestilah pin PWM. Di sini kita menggunakan PIN3.
Pernyataan keempat memberikan arahan untuk meletakkan motor servo dan berada dalam darjah. Sekiranya diberi 30, motor servo berputar 30 darjah.
Sekarang sg90 boleh bergerak dari 0-180 darjah, kami mempunyai hasil ADC 0-1024
Oleh itu, ADC adalah kira-kira enam kali POSISI SERVO. Oleh itu, dengan membagi hasil ADC dengan 6, kita akan mendapat kedudukan tangan SERVO anggaran.
Dengan ini kita akan mempunyai nilai kedudukan servo yang disalurkan ke motor servo, yang setara dengan lenturan atau bengkok. Apabila sensor flex ini dipasang pada sarung tangan, kita dapat mengawal posisi servo dengan pergerakan tangan.