Membangun Sistem LIDAR Arduino dengan VL6180X dan Servo Motor
Komponen dan Perlengkapan
Arduino UNO
×
1
Sensor Jarak SparkFun ToF - VL6180
VL53L0X untuk jarak jauh dan VL6180X untuk jarak dekat. di sini saya menggunakan VL6180X
×
1
Servo motor
×
1
Aplikasi dan Layanan Online
Arduino IDE
Processing
Tentang Proyek Ini
Beberapa hal tentang LiDAR
LIDAR (Light Detection and Ranging) adalah sistem penginderaan jarak jauh optik yang dapat mengukur jarak target dengan memancarkan cahaya padanya. Teknologi LIDAR digunakan di Robotika untuk persepsi lingkungan serta klasifikasi objek. Kemampuan teknologi LIDAR untuk menyediakan peta elevasi 2D dari medan, jarak presisi tinggi ke tanah, dan kecepatan pendekatan dapat memungkinkan pendaratan yang aman kendaraan robotik dan bertenaga dengan tingkat presisi tinggi.
LIDAR terdiri dari transmiter yang memancarkan target dengan sinar laser, dan penerima yang mampu mendeteksi komponen cahaya yang pada dasarnya seaksen dengan sinar yang ditransmisikan. Sensor penerima menghitung jarak, berdasarkan waktu yang dibutuhkan cahaya untuk mencapai target dan kembali. Mekanisme mekanis dengan cermin memindai sinar cahaya untuk menutupi adegan yang diperlukan di bidang atau bahkan di tiga dimensi, menggunakan cermin berputar mengangguk.
Salah satu cara untuk mengukur waktu penerbangan sinar cahaya adalah menggunakan laser berdenyut dan kemudian mengukur waktu yang berlalu secara langsung. Elektronik yang mampu menyelesaikan pikodetik diperlukan dalam perangkat tersebut dan oleh karena itu sangat mahal. Metode lain adalah mengukur pergeseran fase cahaya yang dipantulkan.
Sinar laser inframerah kolimat digunakan untuk pengukuran pergeseran fase. Untuk permukaan yang memiliki kekasaran lebih besar dari panjang gelombang cahaya insiden, pantulan difusi akan terjadi. Komponen cahaya inframerah akan kembali hampir sejajar dengan sinar yang ditransmisikan untuk objek.
Sensor mengukur pergeseran fase antara sinyal yang ditransmisikan dan dipantulkan. Gambar menunjukkan bagaimana teknik ini dapat digunakan untuk mengukur jarak. Panjang gelombang sinyal modulasi mematuhi persamaan:
c = f ∙ τ
di mana c adalah kecepatan cahaya dan f adalah frekuensi modulasi dan τ adalah panjang gelombang modulasi yang diketahui.
Jarak total D' yang ditempuh oleh cahaya yang dipancarkan adalah:
D' = B + 2A = B + (θ * τ) / 2π
di mana A adalah jarak yang diukur. B adalah jarak dari satuan pengukuran fase. Jarak yang diperlukan D, antara beam splitter dan target, oleh karena itu diberikan oleh
D = τ * θ / 4π
di mana θ adalah perbedaan fase yang diukur secara elektronik antara sinar cahaya yang ditransmisikan dan dipantulkan.
Dapat ditunjukkan bahwa jangkauan berbanding terbalik dengan kuadrat amplitudo sinyal yang diterima, yang langsung mempengaruhi akurasi sensor.
(disalin dari https://home.roboticlab.eu/en/examples/sensor/lidar).
Sebagai bagian dari proyek akhir saya saya membutuhkan peta 2D lingkungan sekitar untuk kendaraan otonom saya, jadi saya memilih LiDAR karena sangat cepat dan akurat. Berbeda dengan sonar yang memantulkan gelombang ultrasonik, 'kerucut' penginderaannya sangat sempit.
VL6180x atau Vl53l0x adalah sensor optik dari STMicroelectronics .VL53L0x jauh lebih presisi dan tidak memiliki masalah linearitas atau 'citra ganda' di mana Anda tidak bisa tahu apakah objek sangat jauh atau sangat dekat.
Sensor waktu penerbangan ini sebenarnya digunakan di ponsel kita untuk menyesuaikan fokus kamera.
Diagram RangkaianPasang perpustakaan Adafruit Kode Arduino
Kode Processing (rujuk proyek radar lain jika Anda memerlukan antarmuka radar yang bagus) ubah nomor port Arduino (misal "COM 3") sebelum dijalankan.
import processing.serial.*; Serial myPort; String val; int range,i=0;float pos; void setup(){ size(550,500); String portName = "COMx";//x=nomor port arduino Anda myPort = new Serial(this, portName, 115200); background(255); } void draw(){ if ( myPort.available() > 0) { val = myPort.readStringUntil('\n'); if(val!=null) { String[] nums=split(val,"p");//memisahkan data yang diterima dipisah dengan 'p' if(nums.length==3) { range=int(nums[0]); //konversi string ke integer pos=float(nums[1]); i=int(nums[2]); if(i==180){ background(255); } } } } translate(25,-50); line(250,500,250-2*(range*cos(pos)),500-2*(range*sin(pos))); }
Kecepatan sensor terbatas pada 10Hz dan respons servo buruk pada kecepatan lebih tinggi. Jika ada yang berencana membuat LIDAR berkecepatan tinggi gunakan motor stepper atau motor DC dengan sistem umpan balik. gunakan cincin geser untuk rotasi berkelanjutan (https://www.adafruit.com/product/736).