Tentang proyek ini
Langkah 1:Teori
Dalam proyek ini, kami menggunakan sensor Jarak ultrasonik. Ini menghasilkan gelombang suara di luar jangkauan pendengaran manusia dan mengukur jarak dengan menghitung waktu yang dibutuhkan oleh gelombang ini untuk menabrak rintangan dan melakukan perjalanan kembali. Ini mirip dengan prinsip yang digunakan oleh kelelawar dan kapal pesiar.
Komponen lain yang akan kita gunakan adalah motor servo. Ini berbeda dari motor DC biasa karena dapat berputar dengan sangat tepat ke posisi sudut tertentu dan mempertahankan kondisinya di sana. Ketika motor servo diberikan pulsa dengan durasi tertentu, motor servo bergerak ke posisi sudut yang sesuai.
Kami akan menggunakan kedua komponen ini untuk mendapatkan bidang pandang 180 derajat untuk robot kami.
Langkah 2:Mengumpulkan Bahan
Proyek ini menggunakan perangkat keras berikut
- Arduino Uno/Yun (Harap diperhatikan bahwa papan tapak Arduino apa pun dapat digunakan sebagai pengganti Uno atau Yun)
- Perisai Pembuatan Prototipe Arduino
- Sensor Ultrasonik HC-04
- Motor servo (Saya menggunakan Tower Pro SG90 karena sangat ringkas)
- Di sisi perangkat lunak kami menggunakan program berikut
- Arduino IDE mengupload kode kontrol ke Arduino untuk memutar servo dan mendapatkan data jarak dari sensor ultrasonik dan juga mendorongnya ke port serial.
- Mathworks MatLab untuk menerima data dari serial line, memprosesnya dan memvisualisasikannya ke dalam grafik.
Langkah 3:Perakitan Mekanik
Menggunakan sepotong kecil PCB tujuan umum, buat header kecil untuk HC-04, dan tempelkan ke tanduk servo menggunakan selotip dua sisi.
Langkah ini opsional, tetapi untuk membuat sistem lebih ringkas, saya telah memasang servo ke bagian menonjol pelindung protoboard menggunakan selotip dua sisi juga.
Hasil akhirnya akan terlihat seperti perut Wall-E.
Langkah 4:Kode Arduino
Kode Arduino mengontrol gerakan motor servo, dan kapan pembacaan dari sensor ultrasonik ditangkap dan seberapa sering. Ini juga mendorong data sensor ke port serial.
- Impor perpustakaan
- Inisialisasi variabel dan pin.
- Inisialisasi objek servo
- Inisialisasi komunikasi serial
- Tunggu 3 detik
- Inisialisasi penghitung ke 0
- Memutar servo sebesar 1 derajat
- Dapatkan data sensor ultrasonik 10 kali (diatur secara default)
- Data rata-rata
- Kirim rata-rata ke port serial
- Kembali ke langkah 7
Langkah 5:Kode MatLab
Kode MatLab lebih banyak berurusan dengan data daripada kontrol papan yang sebenarnya, sehingga semua data sensor didorong melalui serial ke PC, di mana ia dibaca oleh MatLab.
Sekarang, data yang kami terima dari Arduino memberi tahu kami dua hal. Derajat rotasi servo dan jarak rintangan ke arah itu. Oleh karena itu, data yang kita miliki saat ini berada dalam sistem koordinat Kutub. Agar masuk akal bagi mata manusia saat divisualisasikan, itu harus dikonversi ke sistem koordinat Cartesian atau XY.
Jadi kode MatLab melakukan hal ini. Ia mendapatkan data secara serial dari port COM, menyimpannya ke dalam matriks dengan sudut rotasi, dan kemudian mengubahnya menjadi koordinat Cartesian dengan rumus yang diberikan di atas.
Setelah selesai, itu memberikan output dengan memplot titik-titik pada grafik. Saya menempatkan papan di dalam kotak, dan saya mendapatkan hasil sebagai berikut.
Langkah 6:Kesimpulan
Meskipun sistemnya tidak sempurna, itu menyelesaikan pekerjaan. Itu bisa mendapatkan perkiraan kasar lebar dan panjang kotak dan mengirimkan data secara akurat.
Satu-satunya kesalahan yang dapat saya lihat saat ini adalah karena getaran sensor saat servo bergerak dan kesalahan pembacaan dari sensor itu sendiri.
Selain itu, sistem ini berfungsi dengan baik dan dapat digunakan untuk eksperimen persepsi kedalaman serta proyek visi komputer dasar.
Kode
- matlab_code_to_run_on_pc.m
- Kode Arduino
matlab_code_to_run_on_pc.mMATLAB
Kode MatLab untuk dikompilasi dan dieksekusi di PCtheta =0:(pi/180):pi;s =serial('COM10');s.BaudRate=9600fopen(s)i =0;inc =1;sementara i<180 A =fget(s); angka(i+1) =str2angka(A); i =i+1;endfclose(s)j =1sementara j<181 tab(j,1) =(j-1)*inc tab(j,2) =num(j) tab(j,3) =num( j)*cosd((j-1)*inc) tab(j,4) =num(j)*sind((j-1)*inc) j =j+1end%figur%polar(theta,num)plot (tab(:,3),tab(:,4))
Kode ArduinoArduino
Kode Arduino untuk diunggah ke Arduino Yun#include #include #define TRIGGER_PIN 12 #define ECHO_PIN 11 #define MAX_DISTANCE 200 NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); Servo myservo; int pos =0; int itu =10;void setup() { myservo.attach(9); Serial.begin(9600); delay(3000);}void loop() { int i =0; int t =0; int a =0; for (i =0; i <180; i ++) { unsigned int uS =sonar.ping(); myservo.write(i); penundaan (20); for (t =0; t Skema
File fritzing untuk koneksi sensor servo dan ultrasonik YunConfig.fzz