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

Membangun Sistem LIDAR Arduino dengan VL6180X dan Servo Motor

Komponen dan Perlengkapan

Membangun Sistem LIDAR Arduino dengan VL6180X dan Servo Motor
Arduino UNO
×1
Membangun Sistem LIDAR Arduino dengan VL6180X dan Servo Motor
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

Membangun Sistem LIDAR Arduino dengan VL6180X dan Servo Motor
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 Rangkaian

Membangun Sistem LIDAR Arduino dengan VL6180X dan Servo Motor

Pasang perpustakaan Adafruit

Membangun Sistem LIDAR Arduino dengan VL6180X dan Servo Motor

Kode Arduino

#include <Wire.h> #include "Adafruit_VL6180X.h" #include <Servo.h> Adafruit_VL6180X vl = Adafruit_VL6180X(); Servo myservo; float pos = 0; const float Pi = 3.14159; void setup() { myservo.attach(9); Serial.begin(115200); while (!Serial) { delay(1); } if (! vl.begin()) { while (1); } } void loop() { for (pos = 0; pos <= 180; pos += .5) { myservo.write(pos); uint8_t range = vl.readRange(); Serial.println(String(range)+"p"+String(pos*Pi/180)+"p"+String(pos)); delay(10); } /*for (pos = 180; pos >= 0; pos -= .5) { myservo.write(pos); uint8_t range = vl.readRange(); { Serial.println(String(range)+"p"+String(pos*Pi/180)+"p"+String(pos)); delay(10); } }*/ myservo.write(0); delay(1000); } 

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))); } 

Membangun Sistem LIDAR Arduino dengan VL6180X dan Servo Motor

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).

Pertanyaan, saran sangat diterima!

Kode

Kode ArduinoArduino
#include <Wire.h> #include "Adafruit_VL6180X.h" #include <Servo.h> Adafruit_VL6180X vl = Adafruit_VL6180X(); Servo myservo; float pos = 0; const float Pi = 3.14159; void setup() { myservo.attach(9); Serial.begin(115200); while (!Serial) { delay(1); } if (! vl.begin()) { while (1); } } void loop() { for (pos = 0; pos <= 180; pos += .5) { myservo.write(pos); uint8_t range = vl.readRange(); Serial.println(String(range)+"p"+String(pos*Pi/180)+"p"+String(pos)); delay(10); } /*for (pos = 180; pos >= 0; pos -= .5) { myservo.write(pos); uint8_t range = vl.readRange(); { Serial.println(String(range)+"p"+String(pos*Pi/180)+"p"+String(pos)); delay(10); } }*/ myservo.write(0); delay(1000); } 
kode processingProcessing
import processing.serial.*; Serial myPort; String val; int range,i=0;float pos; void setup(){ size(550,500); frameRate(36); 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))); } 

Proses manufaktur

  1. Lenter Gas: Evolusi, Desain, dan Manufaktur Modern
  2. Penunjuk Laser: Desain, Manufaktur, dan Tinjauan Keselamatan
  3. Pelita Tangan: Dari Awal Muncul hingga Inovasi Modern
  4. Kaleidoskop: Dari Ilmu Brewster hingga Desain Modern
  5. Laser Semikonductor: Pembentukan Cahaya Presisi untuk Teknologi Modern
  6. Seni dan Ilmu Proses Fotografis: Dari Daguerreotype hingga Film Modern
  7. Lampu Lalu Lintas: Rekayasa, Sejarah, dan Inovasi Masa Depan
  8. Dari Api hingga Filamen: Evolusi dan Produksi Lampu Pijar Modern
  9. Serat Optik: Teknologi, Produksi, dan Masa Depan
  10. Kodiak 3D LiDAR: Pengukuran Jarak Antariksa Tepat untuk Misi Orbit Tinggi