Ультразвуковой дальномер HC-SR04 предназначен для измерения расстояния от устройства до объекта. Работа модуля основана на принципе эхолокации. Модуль посылает ультразвуковой сигнал и принимает его отражение от объекта. Измерив время между отправкой и получением импульса, не сложно вычислить расстояние до препятствия. Поскольку в основе работы устройства используется ультразвук, модуль плохо подходит для определения расстояния до звукопоглощающих объектов. Для идеального измерения расстояния поверхность объекта должна быть ровной и гладкой. В этой статье мы подключим ультразвуковой дальномер HC-SR04 к Arduino.
Схема подключения HC-SR04 к Arduino
Подключение ультразвукового датчика расстояния HC-SR04 к Arduino достаточно просто. Схема подключения показана на рисунке.
Контакт земли подключаем к выводу GND на плате Arduino, вывод питания соединяем с 5V. Trig и Echo подсоединяем к цифровым пинам платы.
Arduino | HC-SR04 |
---|---|
VCC | Vcc |
13 | Trig |
12 | Echo |
GND | Gnd |
Пример скетча
Ну а теперь после подключения ультразвуковой дальномера HC-SR04 к Arduino разберемся с программной частью. Для начала мы используем простой скетч, который поможет нам определить расстояние до объекта в сантиметрах без использования библиотек.
#define ECHO_PIN 12 #define TRIG_PIN 13 void setup() { /* задаем скорость общения с компьютером */ Serial.begin (9600); /* инициируем как выход TRIG пин */ pinMode(TRIG_PIN, OUTPUT); /* инициируем как вход ECHO пин */ pinMode(ECHO_PIN, INPUT); } void loop() { int duration, cm; /* для большей точности установим значение LOW на пине Trig */ digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2); /* установим высокий уровень на пине Trig */ digitalWrite(TRIG_PIN, HIGH); /* Подождем 10 μs */ delayMicroseconds(10); /* установим низкий уровень на пине Trig */ digitalWrite(TRIG_PIN, LOW); /* Узнаем длительность высокого сигнала на пине Echo */ duration = pulseIn(ECHO_PIN, HIGH, 30000); /* Рассчитаем расстояние в сантиметрах */ cm = duration / 58; /* Отправляем полученные данные на компьютер */ Serial.print(cm); Serial.println(" cm"); /* Ждём четверть секунды и повторяем снова */ delay(250); }
Результат
Установка библиотеки HC-SR04
Количество строк кода можно существенно уменьшить, используя библиотеку HCSR04 для работы с дальномером. Библиотеку можно установить из самой среды следующим образом:
- В Arduino IDE открываем менеджер библиотек: Скетч->Подключить библиотеку->Добавить .ZIP библиотеку…
- Выбираем .ZIP архив (HCSR04.zip) и кликаем Open/Открыть.
- Библиотека установлена.
Описание методов библиотеки HCSR04.zip
HCSR04(uint8_t, uint8_t, unsigned long)
Конструктор для создания экземпляра класса, первый параметр это номер trig пина, второй — echo, третий — timeout в микросекундах.
HCSR04(uint8_t trigPin, uint8_t echoPin, unsigned long timeout = 1000000);
begin()
Инициализация HC-SR04.
void begin();
getDistanceMm()
Возвращает расстояние в миллиметрах.
unsigned int getDistanceMm();
getDistanceCm()
Возвращает расстояние в сантиметрах.
unsigned int getDistanceCm();
getDistanceInch()
Возвращает расстояние в дюймах.
unsigned int getDistanceInch();
getDistanceMmFloat()
Возвращает расстояние в миллиметрах. Тип возвращаемых данных float.
float getDistanceMmFloat();
getDistanceCmFloat()
Возвращает расстояние в сантиметрах. Тип возвращаемых данных float.
float getDistanceCmFloat();
getDistanceInchFloat()
Возвращает расстояние в дюймах. Тип возвращаемых данных float.
float getDistanceInchFloat();
getDuration()
Это частный метод, который возвращает продолжительность в микросекундах — прошедшее время до объекта/препятствия и обратно.
unsigned long getDuration();
Пример скетча
Проверить работоспособность библиотеки можно следующим примером:
/* Включяем библиотеку для работы с HC-SR04 */ #include <hcsr04.h> #define ECHO_PIN 12 #define TRIG_PIN 13 #define TIMEOUT 30000 /* Создаём экземпляр класса HCSR04 */ HCSR04 hcsr04(TRIG_PIN, ECHO_PIN, TIMEOUT); void setup() { /* задаем скорость общения с компьютером */ Serial.begin(9600); /* HC-SR04как выход TRIG пин */ hcsr04.begin(); } void loop() { float cm, inch; int mm; /* Получаем расстояние в миллиметрах */ mm = hcsr04.getDistanceMm(); /* Даём сонару чуть-чуть отдохнуть */ delay(10); /* Получаем расстояние в сантиметрах. Тип возвращаемых данных float */ cm = hcsr04.getDistanceCmFloat(); /* Даём сонару чуть-чуть отдохнуть */ delay(10); /* Получаем расстояние в дюймах. Тип возвращаемых данных float */ inch = hcsr04.getDistanceInchFloat(); /* Отправляем полученные данные на компьютер */ Serial.print(mm); Serial.print(" mm "); Serial.print(cm); Serial.print(" cm "); Serial.print(inch); Serial.print(" inch"); Serial.println(); /* Ждём четверть секунды и повторяем снова */ delay(250); }
Результат
Подключение HC-SR04 к Arduino и вывод на LCD1602
Чтобы не использовать компьютер для вывода информации, мы будем вывести данные о расстоянии на ЖКИ, в моём случае — это LCD1602 (два ряда по 16 символов). Лучше всего использовать PCF8574 — I2C модуль для LCD на базе HD44780. Подробнее в статье Подключение LCD1602 к Arduino по I2C (HD44780/PCF8574).
Схема подключения LCD1602 и HC-SR04 к Arduino
Подключение HC-SR04 к Arduino:
Arduino Pro Mini | HC-SR04 |
---|---|
VCC | Vcc |
13 | Trig |
12 | Echo |
GND | Gnd |
Подключение LCD1602 к Arduino:
Arduino Pro Mini | LCD I2C модуль |
---|---|
GND | GND |
5V | VCC |
A4 | SDA |
A5 | SCL |
Пример скетча
#include <LiquidCrystal_I2C.h> /* Включяем библиотеку для работы с HC-SR04 */ #include <hcsr04.h> #define ECHO_PIN 12 #define TRIG_PIN 13 #define TIMEOUT 30000 /* Устанавливаем ЖК-дисплей по адресу 0x27, 16 символов и 2 строки */ LiquidCrystal_I2C lcd(0x27, 16, 2); /* Создаём экземпляр класса HCSR04 */ HCSR04 hcsr04(TRIG_PIN, ECHO_PIN, TIMEOUT); void setup() { hcsr04.begin(); /* Инициализируем ЖК-дисплей */ lcd.init(); /* Включаем подсветку дисплея */ lcd.backlight(); } void loop() { float cm, inch; int mm; /* Получаем расстояние в миллиметрах */ mm = hcsr04.getDistanceMm(); /* Даём сонару чуть-чуть отдохнуть */ delay(30); /* Получаем расстояние в сантиметрах. Тип возвращаемых данных float */ cm = hcsr04.getDistanceCmFloat(); /* Даём сонару чуть-чуть отдохнуть */ delay(30); /* Получаем расстояние в дюймах. Тип возвращаемых данных float */ inch = hcsr04.getDistanceInchFloat(); /* Отправляем полученные данные на LCD */ lcd.clear(); lcd.setCursor(0, 0); lcd.print(mm); lcd.print("mm "); lcd.setCursor(8, 0); lcd.print(cm); lcd.print("cm"); lcd.setCursor(0, 1); lcd.print(inch); lcd.print("inch"); delay(500); }
Результат
Материалы
Подключение LCD1602 к Arduino по I2C (HD44780/PCF8574)
HC-SR04 — ультразвуковой датчик расстояния
datasheets_HCSR04.pdf
Пребывание каждого человека в
постоянной опасности
и осознание бессилия против природы объединили людей в
общество. А созданию системы наказаний предшествовал запрет на убийство одного
индивида другим и наличие такой возможности убийства у общества
в случае нарушения названного запрета.
5 способов вернуть интерес к работе и увлечениям
Do you mind if I quote a few of your posts as
long as I provide credit and sources back to your weblog? My blog site
is in the exact same area of interest as
yours and my users would genuinely benefit from some of the information you provide here.
Please let me know if this ok with you. Appreciate it!
poip-nsk.ru
vipspark.ru
serial.vipspark.ru