


Привет! Сегодня рассмотрим еще один датчик для ардуино. Ультразвуковой датчик расстояния или дальномер HC-SR04.
Такой датчик есть в стандартном обучающем наборе ардуино. Для чего его используют? На самом деле они очень распространены и востребованы в робототехнике, с их помощью можно сделать систему уклонения от препятствий, сонар, моделировать карты помещений и настроить системы оповещения и сигнализаций.
Содержание
В предыдущей статье мы рассматривали подключение сервопривода к ардуино. Посмотрите этот урок если вы уже забыли его или пропустили. В следующий раз мы будем использовать всю информацию из этих статей.
Для выполнения этого урока нам понадобятся
- Ардуино UNO
- Макетная плата
- Перемычки
- Ультразвуковой датчик расстояния hc-sr04
- 4 Резистора номиналом 220 Ом
- 4 Светодиода 5 мм
- Кабель USB
Ультразвуковой датчик расстояния
А сейчас рассмотрим подключение нового датчика. Этот модуль посылает ультразвуковой сигнал и принимает его отражение. Измерив время между отправкой и получением импульса, можно вычислить расстояние.
А более подробно это работает так. Сначала мы подаем сигнал продолжительностью 10 мкс на вывод Trig. Сам модуль преобразует сигнал в 8 импульсов частотой 40 кГц и посылается через излучатель T. Импульсы отражаются и принимаются приемником R и мы получаем сигнал на выводе Echo, который можно использовать в программе.



Технические характеристики HC-SR04
- диапазон — от 2 до 400 см;
- погрешность — 0,3 см;
- эффективный рабочий угол — < 15 °;
- угол измерений: 30 градусов;
- напряжение питания — 5 В.
- Сила тока покоя: < 2 мА;
- Рабочая сила тока: 15 мА; < 15°;
- ширина импульса триггера: 10 микросекунд;
- размеры: 45 мм x 20 мм x 15 мм.
Программа
Теперь соберем схему и напишем программу для визуализации работы датчика. Будем измерять расстояние до препятствия, считать его в сантиметрах в программе и зажигать светодиоды в зависимости от расстояния.
Ультразвуковой датчик расстояния измеряет достаточно точно от 2 сантиметров до 4 метров. Поэтому будем включать по одному светодиоду на 5 сантиметров расстояния. Если препятствие будет ближе 10 сантиметров должен зажечься красный сигнал.



Напишем свою функцию для включения светодиодов. Она будет принимать расстояние от датчика и включать светодиоды в зависимости от него.
void LedON(int dist){
digitalWrite(10, dist <= 25);
digitalWrite(8, dist <= 20);
digitalWrite(7, dist <= 15);
digitalWrite(5, dist <= 10);
}
Как вы помните, функция digitalWrite() принимает два параметра. Номер пина и значение HIGH или LOW. Однако, она позволяет использовать и логические операции. В данном случае мы использовали сравнение переменной с заданными значениями длины. Это позволит избежать использование конструкции if else и сэкономит много строк кода.
Рассчитать расстояние нам поможет еще одна новая функция pulseIn(). Она считывает длину сигнала в микросекундах. Принимает 3 параметра. Причем третий не обязателен.
duration = pulseIn(pin, value, [timeout]);
Работает это так. Функция ожидает когда на пине, установленном в первом параметре, появится сигнал HIGH или LOW из второго параметра. Когда нужный сигнал появился, включается счетчик микросекунд. И когда сигнал пропал, количество микросекунд возвращается из функции. Если установлен третий параметр, то функция ожидает сигнал определенное время. По умолчанию таймаут равен 1 секунде.



Полный текст программы
int trigPin = 13;
int echoPin = 12;
int duration, distance;
void LedON(int dist){
digitalWrite(10, dist <= 25);
digitalWrite(8, dist <= 20);
digitalWrite(7, dist <= 15);
digitalWrite(5, dist <= 10);
}
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(10, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(5, OUTPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration / 58;
Serial.print(distance);
Serial.println(" cm");
LedON(distance);
delay(100);
}
Заключение
В этой статье мы рассмотрели ультразвуковой датчик расстояния hc-sr04. И его подключение к ардуино. Написали программу и рассмотрели пару новых функций. Соединив несколько предыдущих уроков мы сможем объединить несколько датчиков и устройств, чтобы собрать наше первое настоящее устройство. Сделаем это в следующий раз.