Ардуино использование двух ультразвуковых hc sr04. Ультразвуковой датчик измерения расстояния HC-SR04
терморегулятор W1209 DC, Релейный модуль, датчик движения HC-SR501, Модуль Wi-Fi ESP8266-12E, датчик движения HC-SR501, Блок питания, Микросхема контроллера коллекторного электродвигателя, ИК-пульт дистанционного управления, Радиомодуль NRF24L01, OKI 120A2, SD Card Module, Микросхема контроллера коллекторного электродвигателя, Модем M590E GSM GPRS, Часы реального времени DS 3231/DS 1307, Mini 360 на схеме LM2596, L293D, Инфракрасные датчики расстояния, Часы реального времени, HC-SR501, блок питания Mini 360 на схеме LM2596, Контроллер L298N, HC-SR501, GSM GPRS, Модем M590E GSM GPRS, Часы реального времени DS 3231/DS 1307, Модуль Wi-Fi ESP8266-12E, Card Module, Блок питания, Mini 360, L293D, блок питания Mini 360 на схеме LM2596, Радиомодуль, ИК-пульт дистанционного управления, ИК-пульт, Ethernet shield, Микросхема контроллера коллекторного электродвигателя, Микросхема контроллера коллекторного электродвигателя, ИК-пульт дистанционного управления, SD Card Module, Радиомодуль NRF24L01, двигатель OKI, L293D, Шаговый двигатель, Блок питания, L293D, блок питания Mini 360 на схеме LM2596, Карта памяти SD, Ethernet shield, датчик движения HC-SR501, Модуль Wi-Fi ESP8266-12E, Шаговый двигатель OKI 120A2, Шаговый двигатель,
Ультразвуковые дальномеры HC-SR04
Познакомимся с датчиками расстояния, которые пригодятся в проектах, рассматриваемых в следующих главах. Ультразвуковой дальномер HC-SR04 - это помещенные на одну плату приемник и передатчик ультразвукового сигнала. Кроме самих приемника и передатчика на плате находится еще и необходимая обвязка, чтобы сделать работу с этим датчиком простой и непринужденной.
|
|
Датчик обладает низким энергопотреблением, что также является немаловажным преимуществом в случае с мобильными роботами, не привязанными к розетке. Питается датчик HC-SR04 от 5 В, что тоже удобно при подключении его к Arduino.
Характеристики ультразвукового дальномера HC-SR04:
Измеряемый диапазон - от 2-х до 500 см;
Точность - 0,3 см;
Угол обзора - < 15 °;
Напряжение питания - 5 В.
Датчик имеет 4 вывода стандарта 2,54 мм:
VCC - питание +5 В;
Trig (T) - вывод входного сигнала;
Echo (R) - вывод выходного сигнала;
GND - земля.
Проверка работы датчика
Залить программу
Sketch code
/* Скетч с библиотекой NewPing, которая может использоваться и для датчика HC-SR04
приведенного здесь SRF06 и позволяет подключать ульразвуковые датчики
с помощью одного пина на Arduino. Можно дополнительно подключить конденсатор на 0.1 мкФ к пинам Эхо и Триггер на датчике.*/
#include
#define TRIGGER_PIN 12 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN 11 // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Максимальное расстояние, которое мы контролируем (в сантиметрах). Максимальное расстояние подобных датчиков находится в диапазоне 400-500см.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Настройка пинов и максимального расстояния
void setup() {
Serial.begin(115200); // Открытие серийного протокола с частотой передачи данных 115200 бит/сек.
}
void loop() {
delay(500); // Задержка в 500 миллисекунд между генерацией волн. 29 миллисекунд – минимально допустимая задержка.
unsigned int uS = sonar.ping(); // Генерация сигнала, получение времени в микросекундах (uS).
Serial.print("Ping: ");
Serial.print(uS / US_ROUNDTRIP_CM); // Преобразование времени в расстояние и отображение результата (0 соответствует выходу за допустимый диапазон)
Serial.println("cm");
}
Открыть монитор порта
Принцип работы ультразвукового дальномера HC-SR04
В составе дальномера имеются два пьезоэлемента: один работает как излучатель сигнала, другой - как приемник. Излучатель генерирует сигнал, который, отразившись от препятствия, попадает на приемник. Измерив время, за которое сигнал проходит до объекта и обратно, можно оценить расстояние.
Последовательность действий следующая:
- Подаем импульс продолжительностью 10 мкс на вывод Trig.
- Внутри дальномера входной импульс преобразуется в 8 импульсов частотой 40 кГц и посылается вперед через излучатель T .
- Дойдя до препятствия, посланные импульсы отражаются и принимаются приемником R , в результате получаем выходной сигнал на выводе Echo.
- Непосредственно на стороне контроллера переводим полученный сигнал в расстояние по формуле:
Ширина импульса (мкс) / 58 = дистанция (см);
Ширина импульса (мкс) / 148 = дистанция (дюйм).
Библиотека Ultrasonic
Для работы Arduino с датчиком HC-SR04 имеется готовая библиотека - Ultrasonic. Конструктор Ultrasonic принимает два параметра: номера пинов, к которым подключены выводы Trig и Echo соответственно:
Ultrasonic ultrasonic(12,13);
здесь вывод датчика Trig подключен к 12-му пину Arduino, а Echo - к 13-му.
Библиотека имеет один метод Ranging, в качестве параметра которому задается, во что пересчитывать расстояние до объекта: в сантиметры или в дюймы:
#define CM 1
#define INC 0
Таким образом строчка ultrasonic.Randing(CM)вернет расстояние до объекта (типа long) в сантиметрах.
Файлы библиотеки вы можете найти в папке libraries/Ultrasonic сопровождающего книгу электронного архива. Для использования библиотеки в своих проектах поместим ее в папку libraries каталога установки Arduino.
Скетч, выдающий в последовательный порт расстояние до объекта в сантиметрах, представлен в примере.
Sketch code
#include "Ultrasonic.h"
// sensor connected to:
// Trig - 12, Echo - 13 Ultrasonic ultrasonic(12, 13);
Serial.begin(9600);
float dist_cm = ultrasonic.Ranging(CM); Serial.println(dist_cm);
Подключение датчика HC–SR04 к Arduino
Ультразвуковой датчик HC–SR04 определяет расстояние и выводит полученные значения в окно серийного монитора в среде Arduino IDE.
Небольшое примечание: в свободном доступе существует отличная библиотека NewPing , которая еще больше облегчает использование HC–SR04, пример ее использование тоже приведен ниже. // Генерируем короткий LOW импульс, чтобы обеспечить «чистый» импульс HIGH:
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Считываем данные с ультразвукового датчика: значение HIGH, которое
// зависит от длительности (в микросекундах) между отправкой
// акустической волны и ее обратном приеме на эхолокаторе.
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
// преобразование времени в расстояние
cm = (duration/2) / 29.1;
inches = (duration/2) / 74;
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
Sketch code
#include
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Настройка пинов и максимального расстояния.
Serial.begin(9600);
unsigned int uS = sonar.ping_cm();
Serial.print(uS);
Serial.println(“cm”);
Если HC-SR04 не считывает сигнал эхо, выходной сигнал никогда не преобразуется в LOW. Датчики Devantec и Parallax обеспечивают время задержки 36 миллисекунд 28 миллисекунд соответственно. Если вы используете скетч, приведенный выше, программа «зависнет» на 1 секунду. Поэтому желательно указывать параметр задержки.
Датчик HC-SR04 плохо работает при измерении расстояний более 10 футов. Время возврата импульса составляет около 20 миллисекунд, так что рекомендуется в таких случаях выставлять время задержки более 20, напрмер, 25 или 30 миллисекунд.
Можно подключить ультразвуковой датчик расстояния HC-SR04 лишь к одному пину Arduino. Для этого необходимо между пинами Триггера и Эхо установить резистор на 2.2 кОм и подключить к Arduino только пин Триггера.
В данное статье рассмотрим принцип работы ультразвукового дальномера 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
Принцип работы ультразвукового дальномера HC-SR04
- Подаем импульс продолжительностью 10 мкс, на вывод Trig.
- Внутри дальномера входной импульс преобразуется в 8 импульсов частотой 40 КГц и посылается вперед через "T глазик".
- Дойдя до препятствия, импульсы отражаются и принимаются "R глазиком". Получаем выходной сигнал на выводе Echo.
- Непосредственно на стороне контроллера переводим полученный сигнал в расстояние.
Схема подключение дальномера к Arduino
Вам представлена схема подключения ультразвукового датчика к Ардуино. Как вы можете заметить, она очень проста и очень интересна. Но следует не забывать о правильном подключении. Мой совет: никогда не торопитесь подключать прибор потому, что вы больше затратите времени на поиск ошибки в подключении.
Следующим этапом является изучение скетча программы
Программирование ультразвукового датчика 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);
}
После того как вы вставили этот код, загрузите его в программу и включите "монитор порта". Там вы увидите расстояние от датчика до препятствия, поэкспериментируйте с изменением расстояния объекта.
Вот что должно у вас получиться!
Надеюсь у вас все получилось! Если у вас остались вопросы, можете написать нам в
Входное напряжение 5 В постоянного тока, подаётся на выводы Vcc и GND датчика.
Подробнее о датчике:
Если подать положительный импульс на вход датчика TRIG длительностью 10 мкс, то датчик отправит звуковую волну (8 импульсов на частоте 40 кГц - ультразвук) и установит уровень логической «1» на выходе ECHO. Звуковая волна отразится от препятствия и вернётся на приёмник датчика, после чего он сбросит уровень на выходе ECHO в логический «0» (то же самое датчик сделает, если звуковая волна не вернётся в течении 38 мс.) В результате время наличия логической «1» на выходе ECHO равно времени прохождения ультразвуковой волны от датчика до препятствия и обратно. Зная скорость распространения звуковой волны в воздухе и время наличия логической «1» на выводе ECHO, можно рассчитать расстояние до препятствия.
Расстояние вычисляется умножением скорости на время (в данном случае скорости распространения звуковой волны 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 Результат работы обоих примеров:
Из примера видно, что если во время измерений не учитывать температуру воздуха, то можно получить результаты с высокой погрешностью.