Подключение ультразвукового дальномера HC-SR04 к Arduino

Ультразвуковой дальномер HC-SR04 предназначен для измерения расстояния от устройства до объекта. Работа модуля основана на принципе эхолокации. Модуль посылает ультразвуковой сигнал и принимает его отражение от объекта. Измерив время между отправкой и получением импульса, не сложно вычислить расстояние до препятствия. Поскольку в основе работы устройства используется ультразвук, модуль плохо подходит для определения расстояния до звукопоглощающих объектов. Для идеального измерения расстояния поверхность объекта должна быть ровной и гладкой. В этой статье мы подключим ультразвуковой дальномер HC-SR04 к Arduino.

Схема подключения 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 к Arduino - Результат

Установка библиотеки HC-SR04

Количество строк кода можно существенно уменьшить, используя библиотеку HCSR04 для работы с дальномером. Библиотеку можно установить из самой среды следующим образом:

  1. В Arduino IDE открываем менеджер библиотек: Скетч->Подключить библиотеку->Добавить .ZIP библиотеку…Подключение дальномера HC-SR04 к Arduino - Добавить .ZIP библиотеку...
  2. Выбираем .ZIP архив (HCSR04.zip) и кликаем Open/Открыть.Подключение дальномера HC-SR04 к Arduino - Выбор архива .ZIP
  3. Библиотека установлена.Подключение дальномера HC-SR04 к Arduino - Библиотека Добавлена.

Описание методов библиотеки 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 - Результат используя библиотеку HCSR04.zip

Подключение HC-SR04 к Arduino и вывод на LCD1602

Чтобы не использовать компьютер для вывода информации, мы будем вывести данные о расстоянии на ЖКИ, в моём случае — это LCD1602 (два ряда по 16 символов). Лучше всего использовать PCF8574 — I2C модуль для LCD на базе HD44780. Подробнее в статье Подключение LCD1602 к Arduino по I2C (HD44780/PCF8574).

Схема подключения LCD1602 и HC-SR04 к Arduino

Схема подключения I2C 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);
}

Результат

Подключение HC-SR04 к Arduino и вывод на LCD1602 по I2C- Результат

Материалы

Подключение LCD1602 к Arduino по I2C (HD44780/PCF8574)
HC-SR04 — ультразвуковой датчик расстояния
datasheets_HCSR04.pdf

Похожие записи

Комментарии 2

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *