Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Arduino LIDAR

Componentes e suprimentos

Arduino UNO
× 1
Sensor Range Finder SparkFun ToF - VL6180
VL53L0X para longo alcance e VL6180X para curto alcance. aqui usei VL6180X
× 1
servo motor
× 1

Aplicativos e serviços online

Arduino IDE
Processamento

Sobre este projeto





Algumas coisas sobre o LiDAR


LIDAR (Light Detection and Ranging) é um sistema de sensoriamento remoto óptico que pode medir a distância de um alvo iluminando-o com luz. A tecnologia LIDAR está sendo usada na robótica para a percepção do ambiente e também para a classificação de objetos. A capacidade da tecnologia LIDAR de fornecer mapas de elevação 2D do terreno, distância de alta precisão ao solo e velocidade de aproximação pode permitir a aterrissagem segura de veículos robóticos e tripulados com um alto grau de precisão.

O LIDAR consiste em um transmissor que ilumina um alvo com um feixe de laser e um receptor capaz de detectar o componente da luz que é essencialmente coaxial com o feixe transmitido. Os sensores do receptor calculam a distância, com base no tempo necessário para a luz atingir o alvo e retornar. Um mecanismo mecânico com um espelho varre o feixe de luz para cobrir a cena necessária em um plano ou mesmo em três dimensões, usando um espelho giratório giratório.

Uma forma de medir o tempo de vôo do feixe de luz é usar um laser pulsado e medir o tempo decorrido diretamente. Eletrônicos capazes de resolver picossegundos são necessários em tais dispositivos e, portanto, são muito caros. Outro método é medir a mudança de fase da luz refletida.

O laser infravermelho colimado é usado para a medição de deslocamento de fase. Para superfícies com rugosidade maior que o comprimento de onda da luz incidente, ocorrerá reflexão difusa. O componente da luz infravermelha retornará quase paralelo ao feixe transmitido para objetos.

O sensor mede a mudança de fase entre os sinais transmitidos e refletidos. A imagem mostra como essa técnica pode ser usada para medir distâncias. O comprimento de onda do sinal modulante obedece à equação:
  c =f ∙ τ  

onde c é a velocidade da luz ef a frequência de modulação e τ o comprimento de onda de modulação conhecido.

A distância total D 'coberta pela luz emitida é:
  D '=B + 2A =B + (θ * τ) / 2π  

onde A é a distância medida. B é a distância da unidade de medição de fase. A distância necessária D, entre o divisor de feixe e o alvo, é, portanto, dada por
  D =τ * θ / 4π  

onde θ é a diferença de fase medida eletronicamente entre os feixes de luz transmitidos e refletidos.

Pode ser mostrado que a faixa é inversamente proporcional ao quadrado da amplitude do sinal recebido, afetando diretamente a precisão do sensor.

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

Como parte do meu projeto de último ano, preciso do mapa 2D dos arredores do meu veículo autônomo, então escolhi o LiDAR porque é muito rápido e preciso. Ao contrário dos sonares que refletem ondas ultrassônicas, o 'cone' de detecção é muito estreito.

VL6180x ou Vl53l0x é um sensor óptico da STMicroelectronics .VL53L0x é muito mais preciso e não tem problemas de linearidade ou 'imagem dupla' onde você não pode dizer se um objeto está muito longe ou muito perto.

Este sensor de tempo de vôo é realmente usado em nosso celular para ajustar o foco da câmera.





Diagrama de circuito





Instale a biblioteca Adafruit





Código 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); enquanto (! Serial) {atraso (1); } if (! vl.begin ()) {while (1); }} void loop () {para (pos =0; pos <=180; pos + =.5) {myservo.write (pos); uint8_t range =vl.readRange (); Serial.println (String (intervalo) + "p" + String (pos * Pi / 180) + "p" + String (pos)); atraso (10); } / * para (pos =180; pos> =0; pos - =.5) {myservo.write (pos); uint8_t range =vl.readRange (); {Serial.println (String (intervalo) + "p" + String (pos * Pi / 180) + "p" + String (pos)); atraso (10);}} * / myservo.write (0); atraso (2000);}  

Processando código (consulte outro projeto de radar se você precisar de uma boa interface de radar) mude o número da porta do Arduino (por exemplo, "COM 3") antes de executar.
  importação processing.serial. *; Serial myPort; String val; intervalo interno, i =0; posição flutuante; void setup () {size (550.500); String portName ="COMx"; // x =seu número de porta do 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"); // dividindo os dados recebidos separados por 'p' if (nums.length ==3) {range =int (nums [0 ]); // conversão de string para inteiro 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))); }  





A velocidade do sensor é limitada a 10 Hz e a resposta do servo é pobre em velocidades mais altas. Se alguém planeja fazer LIDAR de alta velocidade, use um motor de passo ou motores CC com sistema de feedback. use anéis coletores para rotação contínua (https://www.adafruit.com/product/736).

Qualquer dúvida, sugestões são bem vindas!

Código

  • código Arduino
  • código de processamento
Código do Arduino 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); enquanto (! Serial) {atraso (1); } if (! vl.begin ()) {while (1); }} void loop () {para (pos =0; pos <=180; pos + =.5) {myservo.write (pos); uint8_t range =vl.readRange (); Serial.println (String (intervalo) + "p" + String (pos * Pi / 180) + "p" + String (pos)); atraso (10); } / * para (pos =180; pos> =0; pos - =.5) {myservo.write (pos); uint8_t range =vl.readRange (); {Serial.println (String (intervalo) + "p" + String (pos * Pi / 180) + "p" + String (pos)); atraso (10); }} * / myservo.write (0); atraso (1000);} 
código de processamento Processamento
 importar processamento.serial. *; Serial myPort; String val; intervalo interno, i =0; float pos; void setup () {size (550.500); frameRate (36); String portName ="COMx"; // x =seu número de porta do Arduino myPort =new Serial (this, portName, 115200); fundo (255); } void draw () {if (myPort.available ()> 0) {val =myPort.readStringUntil ('\ n'); if (val! =null) {String [] nums =split (val, "p"); // dividindo os dados recebidos separados por 'p' if (nums.length ==3) {range =int (nums [0 ]); // conversão de string em inteiro 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))); } 

Processo de manufatura

  1. Lanterna a gás
  2. Ponteiro Laser
  3. Lanterna
  4. Caleidoscópio
  5. Laser semicondutor
  6. Fotografia
  7. Sinal de trânsito
  8. Lâmpada
  9. Fibra Óptica
  10. Kodiak 3D LiDAR