Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

LIDAR Arduino

Composants et fournitures

Arduino UNO
× 1
Capteur de télémètre SparkFun ToF - VL6180
VL53L0X pour une longue portée et VL6180X pour une courte portée. ici j'ai utilisé VL6180X
× 1
servomoteur
× 1

Applications et services en ligne

Arduino IDE
Traitement

À propos de ce projet

Quelques informations sur LiDAR

Le LIDAR (Light Detection and Ranging) est un système de télédétection optique qui permet de mesurer la distance d'une cible en l'éclairant avec de la lumière. La technologie LIDAR est utilisée en robotique pour la perception de l'environnement ainsi que la classification des objets. La capacité de la technologie LIDAR à fournir des cartes d'élévation 2D du terrain, une distance au sol de haute précision et une vitesse d'approche peut permettre un atterrissage en toute sécurité de véhicules robotisés et habités avec un degré élevé de précision.

Le LIDAR se compose d'un émetteur qui éclaire une cible avec un faisceau laser, et d'un récepteur capable de détecter la composante de lumière qui est essentiellement coaxiale au faisceau transmis. Les capteurs du récepteur calculent une distance en fonction du temps nécessaire à la lumière pour atteindre la cible et revenir. Un mécanisme mécanique avec un miroir balaie le faisceau lumineux pour couvrir la scène souhaitée dans un plan ou même en trois dimensions, à l'aide d'un miroir rotatif incliné.

Une façon de mesurer le temps de vol du faisceau lumineux consiste à utiliser un laser pulsé, puis à mesurer directement le temps écoulé. Une électronique capable de résoudre des picosecondes est nécessaire dans de tels dispositifs et ils sont donc très coûteux. Une autre méthode consiste à mesurer le déphasage de la lumière réfléchie.

Un laser infrarouge collimaté est utilisé pour la mesure du déphasage. Pour les surfaces ayant une rugosité supérieure à la longueur d'onde de la lumière incidente, une réflexion diffuse se produira. La composante de la lumière infrarouge reviendra presque parallèlement au faisceau transmis pour les objets.

Le capteur mesure le déphasage entre les signaux transmis et réfléchis. L'image montre comment cette technique peut être utilisée pour mesurer la distance. La longueur d'onde du signal modulant obéit à l'équation :

c =f  

où c est la vitesse de la lumière et f la fréquence de modulation et la longueur d'onde de modulation connue.

La distance totale D' parcourue par la lumière émise est :

D' =B + 2A =B + (θ * τ) / 2π 

où A est la distance mesurée. B est la distance de l'unité de mesure de phase. La distance D requise, entre la lame séparatrice et la cible, est donc donnée par

D =τ * θ / 4π 

où est la différence de phase mesurée électroniquement entre les faisceaux lumineux transmis et réfléchi.

On peut montrer que la plage est inversement proportionnelle au carré de l'amplitude du signal reçu, affectant directement la précision du capteur.

(copié de http://home.roboticlab.eu/en/examples/sensor/lidar).

Dans le cadre de mon projet de dernière année, j'ai besoin de la carte 2D des environs pour mon véhicule autonome, j'ai donc choisi LiDAR car il est si rapide et précis. Contrairement aux sonars qui font rebondir les ondes ultrasonores, le « cône » de détection est très étroit.

VL6180x ou Vl53l0x est un capteur optique de STMicroelectronics. Le VL53L0x est beaucoup plus précis et n'a pas de problèmes de linéarité ou de « double imagerie » où vous ne pouvez pas savoir si un objet est très loin ou très proche.

Ce capteur de temps de vol est en fait utilisé dans notre téléphone portable pour régler la mise au point de la caméra.

Schéma de circuit

Installer la bibliothèque Adafruit

Code Arduino

#include #include "Adafruit_VL6180X.h"#include 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); } }boucle vide() { for (pos =0; pos <=180; pos +=.5) { myservo.write(pos); uint8_t range =vl.readRange(); Serial.println(Chaîne(plage)+"p"+Chaîne(pos*Pi/180)+"p"+Chaîne(pos)); retard(10) ; } /*for (pos =180; pos>=0; pos -=.5) { myservo.write(pos); uint8_t range =vl.readRange(); { Serial.println(Chaîne(plage)+"p"+Chaîne(pos*Pi/180)+"p"+Chaîne(pos)); delay(10);} }*/ myservo.write(0); retard (2000);} 

Code de traitement (référez-vous à un autre projet de radar si vous avez besoin d'une bonne interface radar) changez le numéro de port Arduino (par exemple "COM 3") avant de l'exécuter.

import processing.serial.*;Serial myPort;String val;int range,i=0;float pos;void setup(){ size(550,500); String portName ="COMx" ; //x=votre numéro de port arduino 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");//diviser les données reçues par 'p' if(nums.length==3) { range=int(nums[0 ]); //conversion de chaîne en entier pos=float(nums[1]); i=int(nombres[2]); if(i==180){ background(255); } } }}traduire (25,-50);ligne(250,500,250-2*(plage*cos(pos)),500-2*(plage*sin(pos))); } 

La vitesse du capteur est limitée à 10 Hz et la réponse du servo est mauvaise à une vitesse plus élevée. Si quelqu'un envisage de fabriquer un LIDAR à grande vitesse, utilisez un moteur pas à pas ou des moteurs à courant continu avec système de rétroaction. utilisez des bagues collectrices pour une rotation continue (https://www.adafruit.com/product/736).

Toutes les questions, suggestions sont les bienvenues !

Code

  • Code Arduino
  • code de traitement
Code ArduinoArduino
#include #include "Adafruit_VL6180X.h"#include 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); } }boucle vide() { for (pos =0; pos <=180; pos +=.5) { myservo.write(pos); uint8_t range =vl.readRange(); Serial.println(Chaîne(plage)+"p"+Chaîne(pos*Pi/180)+"p"+Chaîne(pos)); retard(10) ; } /*for (pos =180; pos>=0; pos -=.5) { myservo.write(pos); uint8_t range =vl.readRange(); { Serial.println(Chaîne(plage)+"p"+Chaîne(pos*Pi/180)+"p"+Chaîne(pos)); retard(10) ; } }*/ monservo.write(0); retard(1000);}
code de traitementTraitement
import processing.serial.*;Serial myPort;String val;int range,i=0;float pos;void setup(){ size(550,500); frameRate(36); String portName ="COMx" ; //x=votre numéro de port arduino myPort =new Serial(this, portName, 115200); arrière-plan (255); }void draw(){ if ( myPort.available()> 0) { val =myPort.readStringUntil('\n'); if(val!=null) { String[] nums=split(val,"p");//diviser les données reçues par 'p' if(nums.length==3) { range=int(nums[0 ]); //conversion de chaîne en entier pos=float(nums[1]); i=int(nombres[2]); if(i==180){ background(255); } } } }translate(25,-50);line(250,500,250-2*(range*cos(pos)),500-2*(range*sin(pos))); }

Processus de fabrication

  1. Lanterne à gaz
  2. Pointeur laser
  3. Lampe de poche
  4. Kaléidoscope
  5. Laser à semi-conducteur
  6. Photographie
  7. Feux de signalisation
  8. Ampoule
  9. LiDAR 3D Kodiak