Ультразвуковой дальномер 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
Kuyaplay — You can Use GCash to play in anytime
Free Spins 1000+ Free Demo Slot
Openning Bonus 120% piso back
or Searching lawinplay on Google or Bing to get free coins
https://kuyaplayvip.com/
Fachai Casino — best slot online in the Philippines
better than jili slot and pg slot
free Spins 3000+ Free Demo Slot
searching fachaicasino.org on Google or Bing to get free coins for play
https://fachaicasino.org/