Подключаем ультразвуковой датчик к Ардуино

Современность добавляет функциональности множеству аналоговых устройств, за счет логических схем. В роли последних выступают персональные компьютеры и их младшие собратья — микроконтроллеры. Наиболее близкий обывателю пример — обычный медицинский градусник.

Было-стало

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

Основой как приведенного примера, так и остальных логических устройств служат микроконтроллеры. Речь идет о таких контролирующих системах, как Arduino или Raspberry PI. Их функциональность обеспечивается не только логической частью, но и дополнительными исполняющими модулями и сенсорами.

Некоторые из многообразия чувствительных элементов

Среди последних можно вспомнить Arduino ультразвуковой датчик. Своеобразный сонар работающий на основе неслышимого человеком звука и возвращающий расстояние до предмета в поле зрения устройства. О нем и пойдет речь дальше.

Ниши применения

Применение датчика расстояния весьма широко. В бытовой жизни его используют в парктрониках или высотомерах дронов. Встречается он в качестве своеобразных «глаз» робота-пылесоса, как и любого другого подвижного автомата. Последнее касается не только конструкций, от которых мало зависит жизнь человека, но и таких средств обеспечения его безопасности, как системы, уменьшающие шанс аварийного столкновения автомобилей или автобусов. В настоящих случаях, определив близкое препятствие при помощи звукового дальномера, связанный микроконтроллер включит аварийные тормоза.

Работа системы предотвращения аварий

Пригодится «высокоинтеллектуальный» дальномер и инвалидам или плохо видящим людям, в качестве дистанционного измерителя расстояния до различных препятствий. Последний можно изготовить в виде направленного датчика, закрепляемого на грудь или голову и подающего звуковой сигнал в зависимости от наличия предметов перед ним. Или же классически — закрепив чувствительный элемент на трость. В последнем случае ей даже не понадобиться дотрагиваться до поверхности, чтобы сообщить плохо видящему о наличии препоны на его пути.

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

Карта дна получаемая ультразвуковой гидролокацией

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

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

Отражение звуковой волны от препятствий

Скорость распространения звука конечна для разных сред. К тому же, он отражается от предметов. В жизни мы слышим последнее в качестве эха. Вычисляя разницу между отправкой звуковой волны и временем ее возврата, легко получают расстояние до отразившего его препятствия в конкретной среде. Настоящий принцип и используется на Ардуино датчиках. Конечно, небольшие различия будут в зависимости от текущей температуры или изменившегося давления в окружающем пространстве. Их учитывает микроконтроллер при обработке времени ответа, для получения более точных сведений о расстоянии.

Разница ультразвукового сонара от прочих излучателей слышимых колебаний в направленности действия. Волна двигается от него в определенную сторону, охватывая угол до 15–20° перед прибором. Оттуда же ожидается эхо-возврат, отраженный от препятствия. С целью уменьшения влияния сторонних помех на сигнал используется звук с частотой в 40 КГц, не слышимый человеческим ухом.

Существующие проблемы технологии

Падение мощности звука в зависимости от дальности прохождения

Главная проблема УЗ во взаимосвязи мощности сигнала и расстоянии его распространения. Для воздуха, на дальность больше 5 метров, нужно использовать и мощные излучатели, и чувствительные приемники. В воде, конечно расстояние хода волны больше. Но и требования к объему проверяемого пространства обычно шире.

Влияет на «эхо» и пористость препятствия. Губка, поролон или любая относительно не гладкая поверхность поглощают звук, слабо отражая его обратно. В разрезе темы статьи, для более точного определения расстояния можно применять лазерный дальномер Arduino.

УЗ дальномер для Arduino

Ультразвуковой датчик расстояния Ардуино удобен проработанностью интерфейсной части, соединяющей его с конечным микроконтроллером. Для передачи данных применяют всего два цифровых пина платы. Первый используется с целью генерации длительности звука, на втором сигнал HIGH держится до момента получении эха, после изначальной отправки волны. С целью увеличения точности, HC-SR04 посылает не единичный импульс, а серию из восьми.

Схема работы HC-SR04

Параметры, характеризующие ультразвуковой дальномер HC-SR04:

  • Питание: 5 В
  • Ток в активном состоянии (мА): 15
  • Ток в режиме простоя (мА): <2
  • Угол захвата ультразвука: 15°
  • Ширина импульса: 30°
  • Глубина минимального охвата чувствительности: 3 мм
  • Время действия излучателя: 10–6 сек

Интерфейсные контакты датчика:

Номер (слева-направо) Обозначение Указание
1 +5 В Питание +5 В
2 TRIG(T) Триггер инициализации импульса.
3 ECHO(R) Пин возвращающий время возврата
4 GND «Земля»

HC-SR04

Соединение HC-SR04 с Arduino

Подключение ультразвукового датчика к Ардуино не требует применения дополнительных радиодеталей. Достаточно прямого соединения 5 В к питанию, GND к общей земле, а пинов TRIG и ECHO с любыми двумя контактами цифрового интерфейса микроконтроллера.

Схема подключения

Доступна возможность соединения датчика на один пин Arduino. ECHO с помощью резистора в 2.2 кОм, совмещается с TRIG. Соответственно, от платы микроконтроллера он отключается.

Скетч

Последовательность совершения операций для ультразвукового дальномера HC-SR04:

  • На 10 мс устанавливаем High на пине TRIG сенсора, который подключается к Ардуино.
  • Замеряем время длительности высокого сигнала на ноге с ECHO и присваиваем его T. Оно равно времени прохождения УЗ между отправкой и возвратом, но не более 38 мс.
  • Считаем, что, если эхо вернулось за время более 25 мс, — расстояние слишком велико для точности — заканчиваем.
  • Вычисляем дальность разделив время пополам и перемножив его на скорость распространения волны в стабильной воздушной среде. Формула: t/2×340.
  • Приводим результат в читабельный вид и отправляем на монитор порта, для последующего отображения его на дисплее пользователя.

#define PIN_E_R 2
#define PIN_T_T 3
void setup() {
pinMode(PIN_E_R, INPUT);
pinMode(PIN_T_T, OUTPUT);
Serial.begin (9600);
Serial.println("Датчик инициализирован");
Serial.println("Запущен бесконечный цикл с временем определения расстояния около 1 секунды");
}
void loop() {
int SM,PERIOD_E_R;
while (true){
//сбрасываем датчик в начале каждого цикла
digitalWrite(PIN_T_T, LOW);
delayMicroseconds(2);
//отправляем волну УЗ длинной в 10ms
digitalWrite(PIN_T_T, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_T_T, LOW);
//Замеряем время ответа
PERIOD_E_R = pulseIn(PIN_E_R,HIGH);
//если оно находиться в нормальных пределах (до 50 мс), вычисляем расстояние
if ( PERIOD_E_R <= 50 ){
SM = (PERIOD_E_R * 0.034) / 2;
Serial.print("До препятствия ");
Serial.print(SM);
Serial.println(" См");
delay(100);
} //в противном случае "молчим", чтобы не давать лишнюю информацию в монитор, или
//else {
// Serial.println("Препятствия не обнаружены");
//}
//Ждем до конца секунды
DelayMicroseconds(938);
}
}

Слегка модернизировав приведенный скетч, можно создать сонар для использования в быту. Речь идет об уже рассказанных сферах — парктроник, «глазах» роботов, определителя препятствий для слабовидящих, или высотомере дрона. Естественно с коррекцией последней паузы кода в сторону ее уменьшения.

Если применяется схема с соединением по одному пину на Arduino, используется следующий скетч (модификация предыдущего):

#define PIN_T_T 3
// не нужно
//#define PIN_E_R 2
void setup() {
// не нужно
// pinMode(PIN_E_R, INPUT);
pinMode (PIN_T_T, INPUT); //изменение раз для одношинной схемы
Serial.begin (9600);
Serial.println("Датчик инициализирован");
Serial.println("Запущен бесконечный цикл с временем определения расстояния в 1 секунду");
}
Void loop () {
Int SM,PERIOD_E_R;
while (true) {
//сбрасываем датчик в начале каждого цикла
DigitalWrite (PIN_T_T, LOW);
DelayMicroseconds (2);
//отправляем волну УЗ длинной в 10ms
DigitalWrite (PIN_T_T, HIGH);
DelayMicroseconds (10);
DigitalWrite (PIN_T_T, LOW);
//Замеряем время ответа
PERIOD_E_R = pulseIn (PIN_T_T, HIGH); // изменение два для одношинной схемы
//если оно находиться в нормальных пределах (до 50 мс), вычисляем расстояние
If (PERIOD_E_R <= 50) {
SM = (PERIOD_E_R * 0.034) / 2;
Serial.print ("До препятствия ");
Serial.print(SM);
Serial.println(" См");
delay(100);
} //в противном случае "молчим", чтобы не давать лишнюю информацию в монитор, или
else {
Serial.println("Препятствия не обнаружены");
}
}
}

Существует отдельная библиотека работы с ультразвуковым датчиком. Называется она «NewPing» и распространяется через сайт https://playground.arduino.cc/Code/NewPing/

Код работы с ней:

#define PIN_T_T 3
#define PIN_E_R 22
#define SENS_SIZE 20
#include
//Создаем объект на основе NewPing с установкой его параметрами пинов триггера,
//эха и предельной дистанции работы. Последний важен для задержки. Если SENS_SIZE будет
//0, то она составит 1000мс. Задается расстояние в метрах
NewPing USDetector(PIN_T_T, PIN_E_R, SENS_SIZE);
Void setup () {
Serial.begin (9600);
Serial.println ("Cycle sonar on ~1sec");
}
Void loop () {
While (true) {
unsigned int SM = USDetector.ping_cm();
if (SM > 0) {
Serial.print("Distance on eco ");
Serial.print(SM);
Serial.println("sm");
}
delay(950);
}
}

Основное преимущество модуля в совместимости с различными ультразвуковыми дальномерами, без изменения исходного кода скетчей. Он управляет Paralax Ping, Dyp-ME007, SRF06, SRF05, SR04. С ними всеми взаимодействие может проходить в режиме двух пинов или по одному. Достаточно в строке инициализации указать его и для ECHO и в случае TRIG. Единственным исключением будет ультразвуковой датчик SRF06. Его конструкция не допускает подключение через совмещение контактов.

Трехпроводный Parallax PING

Резюмируя

Надеемся представленный текст помог найти ответ на вопрос, как подключить ультразвуковой датчик своими руками к Ардуино и найти ниши использования аналогичных систем. Здесь же дана полная информация о программировании комплекса и основных его характеристиках.

Видео по теме

Ссылка на основную публикацию
Adblock
detector