Входное напряжение 5 В постоянного тока, подаётся на выводы Vcc и GND датчика.
Подробнее о датчике:
Если подать положительный импульс на вход датчика TRIG длительностью 10 мкс, то датчик отправит звуковую волну (8 импульсов на частоте 40 кГц - ультразвук) и установит уровень логической «1» на выходе ECHO. Звуковая волна отразится от препятствия и вернётся на приёмник датчика, после чего он сбросит уровень на выходе ECHO в логический «0» (то же самое датчик сделает, если звуковая волна не вернётся в течении 38 мс.) В результате время наличия логической «1» на выходе ECHO равно времени прохождения ультразвуковой волны от датчика до препятствия и обратно. Зная скорость распространения звуковой волны в воздухе и время наличия логической «1» на выводе ECHO, можно рассчитать расстояние до препятствия.
![](https://i1.wp.com/iarduino.ru/img/upload/491f0f8a682a7854db08e4dc6eb77d19.jpg)
Расстояние вычисляется умножением скорости на время (в данном случае скорости распространения звуковой волны V , на время ожидания эха Echo ). Но так звуковая волна проходит расстояние от датчика до объекта и обратно, а нам нужно только до объекта, то результат делим на 2:
L = V * Echo / 2
- L – расстояние (м);
- V – скорость звука в воздухе (м/с);
- Echo – время ожидания эха (с).
Скорость звука в воздухе , в отличии от скорости света, величина не постоянная и сильно зависит от температуры:
V 2 = γ R T / M
- V – скорость звука в воздухе (м/с)
- γ – показатель адиабаты воздуха (ед.) = 7/5
- R – универсальная газовая постоянная (Дж/моль*K) = 8,3144598(48)
- T ° К) = t°C + 273,15
- M – молекулярная масса воздуха (г/моль) = 28,98
Подставив в формулу известные значения γ , R , M , получим:
V ≈ 20,042 √T
- T – абсолютная температура воздуха (° К) = t°C + 273,15
Осталось объединить формулы вычисления V и L , и перевести L из м в см, Echo из с в мкс, T из °К в °C, получим:
L ≈ Echo √(t+273,15) / 1000
- L – расстояние (см)
- Echo – время ожидания эха (мкс)
- t – температура воздуха (°C)
iarduino_HC_SR04 и iarduino_HC_SR04_int , синтаксис обеих библиотек одинаков. Они сами рассчитывают все значения и возвращают только расстояние в см. Температура по умолчанию установлена в 23°C, но её можно указывать. Работа с библиотеками и их функции описаны ниже.
Для работы с датчиком, нами разработаны две библиотеки iarduino_HC_SR04 и iarduino_HC_SR04_int , синтаксис обеих библиотек одинаков.
- Преимуществом библиотеки iarduino_HC_SR04 является то, что датчики можно подключать к любым выводам Arduino , а недостаток заключается в том, что библиотека ждёт ответа от датчика, который может длиться до 38 мс.
- Преимуществом библиотеки iarduino_HC_SR04_int является то, что она не ждёт ответа от датчиков (не приостанавливает выполнение скетча), но выводы ECHO датчиков нужно подключать только к тем выводам Arduino , которые используют внешние прерывания.
Подробнее про установку библиотеки читайте в нашей .
Примеры:
Определение расстояния с использованием библиотеки iarduino_HC_SR04:
#includeОпределение расстояния с использованием библиотеки iarduino_HC_SR04_int:
#include Результат работы обоих примеров:
![](https://i1.wp.com/iarduino.ru/img/upload/99e31e04e80392c743cbf08ca3b1fda6.jpg)
Из примера видно, что если во время измерений не учитывать температуру воздуха, то можно получить результаты с высокой погрешностью.
В данное статье рассмотрим принцип работы ультразвукового дальномера HC-SR04.
Принцип работы ультразвукового дальномера основан на испускании ультразвука и его отражения от впереди находящихся предметов. Исходя из времени возвращения звука, по простой формуле, можно рассчитать расстояние до объекта. Дальномер HC-SR04 является самым дешевым дальномером для хоббийного использования. При малой цене обладает хорошими характеристиками, способен измерять расстояние в диапазоне от 2 до 450см.
Используемые компоненты (купить в Китае):
Принцип работы датчика можно условно разделить на 4 этапа:
1. Подаем импульс продолжительностью 10 мкс, на вывод Trig.
2. Внутри дальномера входной импульс преобразуется в 8 импульсов частотой 40 КГц и посылается вперед через "T глазик"
3. Дойдя до препятствия, посланные импульсы отражаются и принимаются "R глазиком". Получаем выходной сигнал на выводе Echo.
4. Непосредственно на стороне контроллера переводим полученный сигнал в расстояние по формуле:
ширина импульса (мкс) / 58= дистанция (см)
ширина импульса (мкс) / 148= дистанция (дюйм)
Подключение к Arduino
Модуль оборудован четырех-пиновым разъемом стандарта 2.54мм
VCC : "+" питания
TRIG (T) : вывод входного сигнала
ECHO (R) : вывод выходного сигнала (Длина сигнала зависит от расстояния объекта до датчика)
GND : "-" питания
Подключив датчик к Arduino остается только залить скетч для работы. В приведенном ниже скетче информация о расстоянии будет отсылаться в порт компьютера, а также при дистанции менее 30 сантиметров зажигать светодиод подключенный к 13 пину.
пример программного кода:
#define Trig 9 #define Echo 8 #define ledPin 13 void setup //инициируем как выход pinMode (Echo, INPUT ); //инициируем как вход pinMode (ledPin, OUTPUT ); Serial .begin (9600); /* задаем скорость общения. В нашем случае с компьютером */ } unsigned int impulseTime=0; unsigned int distance_sm=0; void loop () { digitalWrite (Trig, HIGH ); /* Подаем импульс на вход trig дальномера */ delayMicroseconds (10); // равный 10 микросекундам digitalWrite (Trig, LOW ); // Отключаем impulseTime=pulseIn (Echo, HIGH ); // Замеряем длину импульса distance_sm=impulseTime/58; Serial .println (distance_sm); // Выводим на порт if (distance_sm<30) // Если расстояние менее 30 сантиметром { digitalWrite (ledPin, HIGH ); // Светодиод горит } else { digitalWrite (ledPin, LOW ); // иначе не горит } delay (100); /* ждем 0.1 секунды, Следующий импульс может быть излучён, только после исчезновения эха от предыдущего. Это время называется периодом цикла (cycle period). Рекомендованный период между импульсами должен быть не менее 50 мс. */ }Дополнительный пример работы:
Взаимодействие дальномера и сервопривода. Дистанция, измеряемая дальномером преобразуется в угол поворота сервопривода
Пример программного кода
//Тестировалось на Arduino IDE 1.0.1
#include
Добрый день, уважаемые программисты. Сегодня мы переходим к третьему уроку. Мы научимся подключать ультразвуковой дальномер HC-SR04 к Arduino . Разберем принцип работы дальномера , его характеристики и программирование этого устройства.
Ну что, приступим! Начнем мы с характеристики дальномера.
Характеристики ультразвукового датчика HC-SR04
Большим превосходством такого ультразвукового датчика над инфракрасными является то, что на ультразвуковые датчики не влияют источники света или цвет препятствие. Могут возникнуть проблемы с измерением расстояния до тонких или пушистых объектов. Хотелось бы сказать, что скорость звука в воздухе зависит от температуры. Следовательно, погрешность измерения будет меняться от повышения или понижения температуры.
- Рабочее напряжение 4,8 В до 5,5 В (± 0.2В макс).
- Диапазон измерения: от 2 см до 400 см.
- Диапазон рабочих температур: 0 ° С до 60 ° С (± 10%).
- Ток потребления в режимах ожидания до 2 мА.
- Ток потребления в режимах работы 15 мА.
- Ультразвуковой диапазон работы на частоте 40 кГц.
- Угол обзора 15 градусов.
- Измеряемое расстояние от 0,03 до 0,6 мс разрешающей способностью 3 мм.
- От 0,6 до 5 погрешность увеличивается.
Датчик имеет 4 вывода:
- VCC: "+" питание
- TRIG (T): вывод входного сигнала
- ECHO (R): вывод выходного сигнала
- GND: "-" питание
Необходимые компоненты для подключения ультразвукового дальномера
- Arduino (в нашем случае - UNO)
- Breadboard (макетная плата для удобного подключения приборов к Arduino)
- Провода
- Ультразвуковой датчик HC-SR04
![](https://i2.wp.com/helpduino.ru/images/componentu_dalnometr.png)
Принцип работы ультразвукового дальномера HC-SR04
![](https://i0.wp.com/helpduino.ru/images/dalnometr_princip_raboti.png)
- Подаем импульс продолжительностью 10 мкс, на вывод Trig.
- Внутри дальномера входной импульс преобразуется в 8 импульсов частотой 40 КГц и посылается вперед через "T глазик".
- Дойдя до препятствия, импульсы отражаются и принимаются "R глазиком". Получаем выходной сигнал на выводе Echo.
- Непосредственно на стороне контроллера переводим полученный сигнал в расстояние.
Схема подключение дальномера к Arduino
Вам представлена схема подключения ультразвукового датчика к Ардуино. Как вы можете заметить, она очень проста и очень интересна. Но следует не забывать о правильном подключении. Мой совет: никогда не торопитесь подключать прибор потому, что вы больше затратите времени на поиск ошибки в подключении.
![](https://i2.wp.com/helpduino.ru/images/sxema_podklychenia_dalnometra.png)
Следующим этапом является изучение скетча программы
Программирование ультразвукового датчика HC-SR04
#define
Trig 8 /* Обозначаем пин подачи импульса*/
#define
Echo 9 /* Обозначаем пин приема импульса*/
void
setup() {
pinMode
(Trig, OUTPUT); /*инициируем как выход */
pinMode
(Echo, INPUT); /*инициируем как вход */
Serial.begin
(9600); /* устанавливаем скорость порта */
}
unsigned int
impulseTime=0;
unsigned int
distance_sm=0;
void
loop() {
digitalWrite
(Trig, HIGH);
/* Подаем импульс на вход trig дальномера */
delayMicroseconds
(10); /* Импульс длится 10 микросекунд */
digitalWrite
(Trig, LOW); // Отключаем подачу импульса
impulseTime=pulseIn
(Echo, HIGH);
/*Принимаем импульс и подсчитываем его длину*/
distance_sm
=impulseTime/58; /* Пересчитываем его значение в сантиметры */
Serial.println(
distance_sm); /* Выводим значение на порт программы */
delay
(200);
}
После того как вы вставили этот код, загрузите его в программу и включите "монитор порта". Там вы увидите расстояние от датчика до препятствия, поэкспериментируйте с изменением расстояния объекта.
Вот что должно у вас получиться!
![](https://i1.wp.com/helpduino.ru/images/kak_doljno_polychitsya_dalnometr.png)
![](https://i0.wp.com/helpduino.ru/images/monitor_dalnometr.png)
Дальномер — это устройство для измерения расстояния до некоторого предмета. Дальномер помогает роботам в разных ситуациях. Простой колесный робот может использовать этот прибор для обнаружения препятствий. Летающий дрон использует дальномер для баражирования над землей на заданной высоте. С помощью дальномера можно даже построить карту помещения, применив специальный алгоритм SLAM.
1. Принцип действия
На этот раз мы разберем работу одного из самых популярных датчиков — ультразвукового (УЗ) дальномера. Существует много разных модификаций подобных устройств, но все они работают по принципу измерения времени прохождения отраженного звука. То есть датчик отправляет звуковой сигнал в заданном направлении, затем ловит отраженное эхо и вычисляет время полета звука от датчика до препятствия и обратно.![](https://i2.wp.com/robotclass.ru/wp-content/uploads/2016/07/output_8Nf2WC.gif)
![](https://i1.wp.com/robotclass.ru/wp-content/uploads/2016/07/HC-SR04_polar_pattern.jpg)
2. Ультразвуковой дальномер HC-SR04
В этом уроке мы будем работать с датчиком HC-SR04 и контроллером Ардуино Уно. Этот популярный дальномер умеет измерять расстояние от 1-2 см до 4-6 метров. При этом, точность измерения составляет 0.5 — 1 см. Встречаются разные версии одного и того же HC-SR04. Одни работают лучше, другие хуже. Отличить их можно по рисунку платы на обратной стороне. Версия, которая работает хорошо выглядит так:![](https://i2.wp.com/robotclass.ru/wp-content/uploads/2016/07/DSC00601_-1024x768.jpg)
![](https://i2.wp.com/robotclass.ru/wp-content/uploads/2016/07/DSC00600_-1024x768.jpg)
![](https://i2.wp.com/robotclass.ru/wp-content/uploads/2016/07/DSC00603_1-1024x768.jpg)
![](https://i2.wp.com/robotclass.ru/wp-content/uploads/2016/07/DSC00602_-1024x768.jpg)
3. Подключение HC-SR04
Датчик HC-SR04 имеет четыре вывода. Кроме земли (Gnd) и питания (Vcc) еще есть Trig и Echo. Оба этих вывода цифровые, так что подключаем из к любым выводам Ардуино Уно:HC-SR04 | GND | VCC | Trig | Echo |
Arduino Uno | GND | +5V | 3 | 2 |
![](https://i2.wp.com/robotclass.ru/wp-content/uploads/2016/07/sonic_%D1%81%D1%85%D0%B5%D0%BC%D0%B0.jpg)
![](https://i0.wp.com/robotclass.ru/wp-content/uploads/2016/07/sonic_bb-1024x543.png)
4. Программа
Итак, попробуем приказать датчику отправить зондирующий ультразвуковой импульс, а затем зафиксируем его возвращение. Посмотрим как выглядит временная диаграмма работы HC-SR04.![](https://i1.wp.com/robotclass.ru/wp-content/uploads/2016/07/HC-SR04_sequence_chart.png)
Задания
Теперь, когда мы умеем вычислять расстояние с помощью дальномера, сделаем несколько полезных устройств.- Строительный дальномер. Программа каждые 100мс измеряет расстояние с помощью дальномера и выводит результат на символьный ЖК дисплей. Для удобства полученное устройство можно поместить в небольшой корпус и запитать от батареек.
- Ультразвуковая трость. Напишем программу, которая будет «пищать» зуммером с различной частотой, в зависимости от измеренного расстояния. Например, если расстояние до препятствия более трех метров — зуммер издает звук раз в пол секунды. При расстоянии 1 метр — раз в 100мс. Менее 10см — пищит постоянно.
Заключение
Ультразвуковой дальномер — простой в использовании, дешевый и точный датчик, который отлично выполняет свою функцию на тысячах роботов. Как мы выяснили из урока, у датчика есть недостатки, которые следует учитывать при постройке робота. Хорошим решением может стать совместное использование ультразвукового дальномера в паре с лазерным. В таком случае, они будут нивелировать недостатки друг друга.Новые статьи
● Проект 23: Ультразвуковой датчик расстояния HC-SR04. Принцип работы, подключение, пример
В этом эксперименте мы рассмотрим ультразвуковой датчик для измерения расстояния и создадим проект вывода показаний датчика на экран ЖКИ WH1602.
Необходимые компоненты:
Ультразвуковой дальномер HC-SR04 (рис. 23.1) - это помещенные на одну плату приемник и передатчик ультразвукового сигнала. Излучатель генерирует сигнал, который, отразившись от препятствия, попадает на приемник. Измерив время, за которое сигнал проходит до объекта и обратно, можно оценить расстояние. Кроме самих приемника и передатчика, на плате находится еще и необходимая обвязка, чтобы сделать работу с этим датчиком простой и удобной.
Характеристики ультразвукового дальномера HC-SR04:
Измеряемый диапазон - от 2 до 500 см;
. точность - 0,3 см;
. угол обзора - < 15°;
. напряжение питания - 5 В.
Датчик имеет 4 вывода стандарта 2,54 мм:
VCC - питание +5 В;
. Trig (T) - вывод входного сигнала;
. Echo (R) - вывод выходного сигнала;
. GND - земля.
Последовательность действий для получения данных такова:
Подаем импульс продолжительностью 10 мкс на вывод Trig;
. внутри дальномера входной импульс преобразуется в 8 импульсов частотой 40 кГц и посылается вперед через излучатель T;
. дойдя до препятствия, посланные импульсы отражаются и принимаются приемником R, в результате получаем выходной сигнал на выводе Echo;
. непосредственно на стороне контроллера переводим полученный сигнал в расстояние по формуле:
Ширина импульса (мкс) / 58 = дистанция (см);
-- ширина импульса (мкс) / 148 = дистанция (дюйм).
В нашем эксперименте мы создадим звуковую сигнализацию, которая будет включаться при приближении к плате Arduino на расстояние меньше 1 м. Датчик размещен на кронштейне вращающейся сервы и контролирует пространство с углом обзора 180°. Если датчик обнаруживает объект в радиусе 1 м, подается звуковой сигнал на пьзоизлучатель, вращение сервы прекращается. Схема соединения элементов представлена на рис. 23.2.
Рис. 23.2. Схема соединения элементов для звуковой сигнализации
При написании скетча будем использовать библиотеку Servo для работы с сервоприводом и библиотеку Ultrasonic.
Для работы Arduino с датчиком HC-SR04 имеется готовая библиотека - Ultrasonic.
Конструктор Ultrasonic принимает два параметра: номера пинов, к которым подключены выводы Trig и Echo, соответственно:
Ultrasonic ultrasonic(12,13);
Содержимое скетча показано в листинге 23.1.
#include
Порядок подключения:
1. Закрепляем датчик расстояния HC-SR04 на сервоприводе.
2. Подключаем датчик HC-SR04, пьезозуммер и сервопривод к плате Arduino по схеме на рис. 23.2.
3. Загружаем в плату Arduino скетч из листинга 23.1.
4. Наблюдаем за циклическим перемещением сервопривода, при попадании объекта в поле зрения датчика HC-SR04 пьезозуммер издает сигнал, сервопривод останавливается, при исчезновении объекта из поля зрения датчика сервопривод возобновляет движение.
Листинги программ