цифровая электроника
вычислительная техника
встраиваемые системы

 

Arduino и лазерный датчик расстояния ToF10120

Автор: Mike(admin) от 22-03-2019, 21:55

Простой лазерный дальномер на Arduino своими руками


Измерение расстояния до объекта является важной особенностью некоторых проектов, как в серьезной инженерии, так и в радиолюбительстве. Сегодня на рынке представлено много датчиков расстояния, отличающихся как по характеристикам, так и по цене.


лазерный датчик расстояния ToF10120

В данном примере мы свяжем лазерный датчик расстояния ToF 10120 с Arduino и будем выводить получаемые с него данные на ЖК-дисплей.


Датчики типа ToF (Time-of-Flight) стали очень популярными благодаря своей надежности и простоте использования. Кроме того, лазерные датчики ToF, несмотря на более высокую цену относительно стоимости ультразвуковых датчиков, отлично подходят для высокочастотных приложений.


лазерный датчик расстояния ToF10120

Лазерные датчики имеют тот же принцип работы, что и ультразвуковые: отправка сигнала и ожидание его возврата назад. Продолжительность между отправкой и получением называется временем полета (Time-of-Flight). Скорость известна заранее, длительность рассчитывается и делится на 2, в итоге мы можем найти расстояние.


Преимущество лазерных датчиков в том, что они очень малы по сравнению с другими типами, и могут использоваться для высокочастотных применений, таких как автофокусировка камеры.


лазерный датчик расстояния ToF10120

Модуль ToF10120, который мы будем использовать в данном проекте, имеет 6 выводов: питание GND-VCC, RX-TX для UART и SDA-SCL для I2C. В этом примере мы будем использовать интерфейс I2C для подключения датчика к Arduino, а также добавим ЖК-экран с интерфейсом I2C, чтобы увидеть результаты измерений в мм.


Схема подключения Arduino, датчика расстояния ToF10120 и LCD-дисплея выглядит следующим образом.


Arduino и лазерный датчик расстояния ToF10120

Комментированный код программы получения данных от датчика расстояния следующий.



#include <Wire.h>

unsigned char ok_flag;
unsigned char fail_flag;

unsigned short lenth_val = 0;
unsigned char i2c_rx_buf[16];
unsigned char dirsend_flag=0;


void setup() {
  Wire.begin(); 
  Serial.begin(9600,SERIAL_8N1); 
  printf_begin();          

}

void loop() {
  

   int x=ReadDistance();
   Serial.print(x);
   Serial.println(" mm");
  
}

int serial_putc( char c, struct __file * )
{
  Serial.write( c );
  return c;
}

void printf_begin(void)
{
  fdevopen( &serial_putc, 0 );
}



void SensorRead(unsigned char addr,unsigned char* datbuf,unsigned char cnt) 
{
  unsigned short result=0;
  // шаг 1: дать указание датчику считать эхо-сигнал
  Wire.beginTransmission(82); // передать на устройство 82 (0x52)
  // адрес, указанный в документации - 164 (0xa4)
  // но i2c адресация использует старшие 7 бит, так что это 82
  Wire.write(byte(addr));      // устанавливает адрес данных расстояния (адрес)
  Wire.endTransmission();      // прекратить передачу
  // Шаг 2: дожидаемся показаний
  delay(1);                   // в документации указано, что ждать нужно минимум 30 мкс
  // шаг 3: запрос показаний от датчика
  Wire.requestFrom(82, cnt);    // запрос cnt байтов от ведомого устройства 82 (0x52)
  // шаг 5: получить показания от датчика
  if (cnt <= Wire.available()) { // если два байта были получены
    *datbuf++ = Wire.read();  // получить старший байт (перезаписывает предыдущее считывание)
    *datbuf++ = Wire.read(); // получить младший байт как младшие 8 бит
  }
}

int ReadDistance(){
    SensorRead(0x00,i2c_rx_buf,2);
    lenth_val=i2c_rx_buf[0];
    lenth_val=lenth_val<<8;
    lenth_val|=i2c_rx_buf[1];
    delay(300); 
    return lenth_val;
}

Подключив компоненты и загрузив код в Arduino, можно протестировать устройство. Включите питание и наблюдайте за полученными показаниями сделанного своими руками лазерного дальномера. В документации на датчик максимальный диапазон составляет 1,8 метра, но, как показано ниже, можно измерить расстояние до 2 метров.


Arduino и лазерный датчик расстояния ToF10120



© digitrode.ru


Теги: Arduino, датчик расстояния



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий