Рейтинг@Mail.ru
Модуль HC-SR04
Модуль HC-SR04

Как подключить ультразвуковой дальномер HC-SR04 к Arduino

Подключим в этой статье ультразвуковой дальномер-эхолокатор HC-SR04 к Arduino.

Инструкция по подключению ультразвукового датчика расстояния HC-SR04 к Arduino

Вам понадобится

  • Arduino;
  • ультразвуковой датчик HC-SR04;
  • соединительные провода.

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

Действие ультразвукового дальномера HC-SR04 основано на принципе эхолокации. Он излучает звуковые импульсы в пространство и принимает отражённый от препятствия сигнал. По времени распространения звуковой волны к препятствию и обратно определяется расстояние до объекта.

Запуск звуковой волны начинается с подачи положительного импульса длительностью не менее 10 микросекунд на ножку TRIG дальномера. Как только импульс заканчивается, дальномер излучает в пространство перед собой пачку звуковых импульсов частотой 40 кГц. В это же время на ножке ECHO дальномера появляется логическая единица. Как только датчик улавливает отражённый сигнал, на выводе ECHO появляется логический ноль. По длительности логической единицы на ножке ECHO («Задержка эхо» на рисунке) определяется расстояние до препятствия.

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

Диапазон измерения расстояния дальномера HC-SR04 – до 4 метров с разрешением 0,3 см. Угол наблюдения – 30°, эффективный угол – 15°. Ток потребления в режиме ожидания 2 мА, при работе – 15 мА.

2Схема подключения датчика расстояния

Питание ультразвукового дальномера осуществляется напряжением +5 В. Два других вывода подключаются к любым цифровым портам Arduino, мы подключим к 11 и 12.

Схема подключения датчика расстояния HC-SR04 к Arduino
Схема подключения датчика расстояния HC-SR04 к Arduino
Ультразвуковой дальномер HC-SR04 подключён к Arduino
Ультразвуковой дальномер HC-SR04 подключён к Arduino

3Получение дистанции до объекта с датчика HC-SR04

Теперь напишем скетч, определяющий расстояние до препятствия и выводящий его в последовательный порт. Сначала задаём номера выводов TRIG и ECHO – это 12 и 11 пины. Затем объявляем триггер как выход, а эхо – как вход. Инициализируем последовательный порт на скорости 9600 бод. В каждом повторении цикла loop() считываем дистанцию и выводим в порт.

const int trigPin = 12;
const int echoPin = 11;

void setup()  {
  pinMode(trigPin, OUTPUT); // триггер - выходной пин
  pinMode(echoPin, INPUT); // эхо - входной
  Serial.begin(9600); // инициализация послед. порта
}

void loop()  { 
  long distance = getDistance(); // получаем дистанцию с датчика
  Serial.println(distance); // выводим в последовательный порт
  delay(100);
} 

// Определение дистанции до объекта в см
long getDistance() {
  long distacne_cm = getEchoTiming() * 1.7 * 0.01;
  return distacne_cm;
}

// Определение времени задержки
long getEchoTiming() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH); // генерируем импульс запуска
  delayMicroseconds(10);  
  digitalWrite(trigPin, LOW);
  // определение на пине echoPin длительности уровня HIGH, мксек:
  long duration = pulseIn(echoPin, HIGH); 
  return duration;
}

Функция getEchoTiming() генерирует импульс запуска. Она как раз создаёт тот 10-микросекундный импульс, который является триггером для начала излучения дальномером звукового пакета в пространство. Далее она запоминает время от начала передачи звуковой волны до прихода эха.

Функция getDistance() рассчитывает дистанцию до объекта. Из школьного курса физики мы помним, что расстояние равно скорость умножить на время: S = V×t Скорость звука в воздухе 340 м/сек, время в микросекундах мы знаем (переменная duratuion). Чтобы получить время duratuion в секундах, нужно разделить его на 1 000 000. Так как звук проходит двойное расстояние – до объекта и обратно – нужно ещё разделить результат пополам. Вот и получается, что расстояние до объекта S = 34000 см/сек × duration / 1 000 000 сек / 2 = 1,7 см/сек / 100, что мы и написали в скетче.

Операцию умножения микроконтроллер выполняет быстрее, чем операцию деления, поэтому :100 я заменил на эквивалентное ×0,01.

4Библиотека для работы с эхолокатором HC-SR04

Также для работы с ультразвуковым дальномером написано множество библиотек. Например, вот эта библиотека Ultrasonic. Установка библиотеки происходит стандартно: скачать, разархивировать в директорию /libraries/, которая находится в папке с Arduino IDE. После этого библиотекой можно пользоваться.

Установив библиотеку, напишем новый скетч.

#include <Ultrasonic.h> // подключаем библиотеку

Ultrasonic ultrasonic(12, 11); // Trig - 12, Echo - 11

void setup() {
  Serial.begin(9600); // инициализация послед. порта
}

void loop() {
  float dist_cm = ultrasonic.Ranging(CM); // дистанция в см
  Serial.println(dist_cm); // выводим дистанцию в порт
  delay(100);
}

Результат его работы тот же – в мониторе последовательного порта выводится дистанция до объекта в сантиметрах.

Если в скетче написать float dist_cm = ultrasonic.Ranging(INC); – дистанция будет отображаться в дюймах.

5Выводы по работе с сонаром HC-SR04

Итак, мы с вами подключили к Arduino ультразвуковой дальномер HC-SR04 и получили с него данные двумя разными способами: с использованием специальной библиотеки и без.

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

Последнее изменениеВторник, 31 Январь 2017 19:10
(5 голосов)
Прочитано 12790 раз

Поделиться

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

Убедитесь, что вы вводите (*) необходимую информацию, где нужно
HTML-коды запрещены