Ультразвуковой датчик расстояния

Ультразвуковые датчики расстояния, или как их еще по-другому называют - сонары, активно используются в робототехнике для определения дистанции до препятствия, а также в различных проектах, таких как терменвокс, электронная рулетка, системах сигнализации и умного дома.

Принцип работы

Ультразвуковой датчик позволяет оценить расстояние до объекта. Принцип работы сенсора заключается в следующем: на плате датчика установлены ультразвуковые приемник и передатчик, а также микросхема - обработчик данных. Передатчик излучает ультразвуковой импульс определенной длительности и в этот же момент микроконтроллер запускает таймер, сигнал отражается от ближайшего объекта и возвращается в приемник, на этом моменте таймер останавливается. Зная скорость распространения ультразвука в воздухе и время, за которое сигнал достиг препятствия и вернулся, можно найти расстояние, но поскольку сигнал на самом деле прошел расстояние два раза (до объекта и обратно), то полученное значение микросхема делит на 2 и выдает в качестве цифрового сигнала. 

Подключение

В датчике Geegrow используется два вида подключения к микроконтроллеру: по стандартному способу через пины trig и echo, либо по шине данных I2C. Если используется первый тип, то выводы trig и echo должны приходить на обычные цифровые пины. В случае же обмена данными по I2C нужно задействовать соответствующий разъем с выводами SCL и SDA. 

Подключение модуля осуществляется с помощью разъема XH-2.54-4P, выводы которого имеют следующие назначения:

Разъем trig/echo

VCC - питание +3.3...+5V 
ECHO - вывод данных с датчика
TRIG - передачик, излучает ультразвуковой сигнал
GND - земля (общий)

Разъем I2C

VCC - питание +3.3...+5V
SCL - подключается к одноименному порту контроллера
SDA - подключается к одноименному порту контроллера
GND - земля (общий)

Чтобы начать работу с датчиком его необходимо подключить к микроконтроллеру по схеме ниже, в зависимости от типа подключения. Для быстрого и надежного подключения используйте QuatroPort A050.

Способ 1. Подключение по trig/echo

Необходимо подключить провод в нижний разъем датчика, а второй конец к шилду к обычным портам, например в разъем №3, соответственно к портам контроллера 11 и 13.

В качестве trig используется порт 13, в качестве echo - 11.

Далее необходимо загрузить программу в микроконтроллер, предварительно скачав и установив библиотеку для работы с ультразвуковым датчиком отсюда: https://github.com/geegrow/GW_US04 (папку с библиотекой необходимо переименовать в "GW_US04" и поместить в папку Документы - Arduino - libraries). Как устанавливать библиотеки описано здесь: https://geegrow.ru/wiki/programming/libraries/

Так как код предусматривает возможность работы по обоим каналам, необходимо убрать комментарий в строчке с тем методом, который используете, и закомментировать строчку со вторым подключением, как указано ниже.

#include "GW_US04.h"

#define TRIG_PIN    13
#define ECHO_PIN    11
#define I2C_ADDR    14


/* 2 способа подключения: trig-echo и i2c. 
Раскомментируйте, который используете. */

//Работа по trig-echo:
GW_US04 sonar = GW_US04(TRIG_PIN, ECHO_PIN); 
//Работа по i2c:
//GW_US04 sonar = GW_US04(I2C_ADDR);

void setup() {
  Serial.begin(9600);
  delay(2000);
}

void loop() {
  Serial.println(sonar.scan());
  delay(100);
}

Теперь если открыть монитор порта, в него будут выводиться даннные с датчика в миллиметрах. 

Способ 2. Подключение по I2C

Подключение осуществляется по данной схеме. Необходимо подключить провод в верхний разъем датчика с контактами SDA и SCL, а второй конец к шилду в один из разъемов линии I2C, например в разъем №1.

Далее необходимо загрузить программу в микроконтроллер. Так как код предусматривает возможность работы по обоим каналам, необходимо убрать комментарий в строчке с тем методом, который используете, и закомментировать строчку со вторым подключением, как указано ниже. 

#include "GW_US04.h"

#define TRIG_PIN    13
#define ECHO_PIN    11
#define I2C_ADDR    14


/* 2 способа подключения: trig-echo и i2c. 
Раскомментируйте, который используете. */

//Работа по trig-echo:
//GW_US04 sonar = GW_US04(TRIG_PIN, ECHO_PIN); 
//Работа по i2c:
GW_US04 sonar = GW_US04(I2C_ADDR);

void setup() {
  Serial.begin(9600);
  delay(2000);
}

void loop() {
  Serial.println(sonar.scan());
  delay(100);
}

Теперь если открыть монитор порта, в него будут выводиться даннные с датчика в миллиметрах.