Ультразвуковой дальномер (HC-SR04)

22.03.2017 20:24

genaonyx



Введение

Приветствую всех, сегодня мы поговорим об одном из самых популярных модулей из мира Arduino, а именно об ультразвуковом дальномере HC-SR04 (datasheet).

Данный модуль настолько популярен, что не писал о нем разве что ленивый, а это значит, что и нам пришло время рассмотреть его на нашем сайте.


Описание

Модуль HC-SR04 - это бесконтактный ультразвуковой дальномер, измеряющий расстояние от модуля до какого либо объекта. По команде, модуль генерирует восемь ультразвуковых импульсов частотою 40кГц, после чего переходит в режим прослушивания, и фиксирует время за которое эти импульсы отразились от объекта и вернулись обратно. Далее, путем не сложных вычислений, это время переводиться в расстояние до объекта. Таким образом, чем быстрее вернуться импульсы обратно, тем ближе объект к модулю.

Как и любое другое устройство, модуль HC-SR04 обладает как преимуществами над другими дальномерами, так и недостатками.

  • К преимуществам можно смело отнести цену, простоту и доступность. Так же на показания дальномера не влияют засветки от солнца, цвет и прозрачность объекта.
  • К недостаткам можно отнести плохое реагирование на пушистые и тонкие предметы. Отсутствие различных режимов и интерфейсов.


Характеристики

  • Рабочее напряжение: 5 В.
  • Рабочий ток: 15 мА.
  • Потребление в режиме тишины: 2 мА.
  • Рабочая частота: 40Гц.
  • Диапазон измерений: 2-400 см.
  • Эффективный угол: 15°.
  • Рабочий угол наблюдения: 30°.
  • Диапазон рабочих температур: 0 ° С до 60 ° С (± 10%).
  • Размеры: 45х20х15 мм.


Распиновка и подключение

  • Vcc - питание 5В.
  • Trig - цифровой вход. Для запуска измерения необходимо подать на этот вход логическую единицу на 10 мкс. Следующее измерение рекомендуется выполнять не ранее чем через 50 мс.
  • Echo - цифровой выход. После завершения измерения, на этот выход будет подана логическая единица на время, пропорциональное расстоянию до объекта.
  • GND - земля.


Принцип работы

  1. Подать на вывод Trig - HIGH (логическая единица, 5В) длительностью 10-11 мкс. Запуск.
  2. Ультразвуковой дальномер генерирует 8 импульсов на частоте 40 кГц и получает отражение (эхо).
  3. Считать длительность фронтов на выводе Echo (мкс).
  4. Перевести время в дальность до объекта.


Программирование

Работать с ультразвуковым дальномером HC-SR04 довольно просто, т.к. Arduino IDE и ее библиотека Wiring содержат все необходимые функции для работы с данным модулем. [pinMode(), digitalWrite(), LOW, HIGH, delayMicroseconds(), pulseIn()]

Но, если вы хотите сократить программирование к минимуму, вы можете воспользоваться и готовыми решениями в виде библиотек Ultrasonic и NewPing.

Теперь давайте рассмотрим несколько подготовленных мною примеров, где мы попробуем как самостоятельно работать с модулем, так и при помощи различных библиотек.


Примеры

Пример №1 (Самостоятельная работа).

#define TRIGGER_PIN 12 // Вывод Trig подключен к 12-у порту Ардуино.
#define ECHO_PIN 11    // Вывод Echo подключен к 11-у порту Ардуино.

void setup()
{
  Serial.begin(9600);             // Инициализация передачи по COM порту.
  pinMode(TRIGGER_PIN, OUTPUT);   // Устанавливаем режим работы вывода, как "выход".
  pinMode(ECHO_PIN, INPUT);       // Устанавливаем режим работы вывода, как "вход".
  digitalWrite(TRIGGER_PIN, LOW); // Приводим порт Trig к состоянию по умолчанию.
  delayMicroseconds(50);          // Делаем небольшую задержку в 50 мкс.
}

void loop()
{
  long duration, cm, inch, mm;        // Объявляем переменные для расчетов.
  digitalWrite(TRIGGER_PIN, HIGH);    // Подаем логическую единицу (5В) на порт Trig (Включаем передатчик).
  delayMicroseconds(11);              // Ждем 10-11 мкс.
  digitalWrite(TRIGGER_PIN, LOW);     // Подаем логический ноль на порт Trig (Выключаем передатчик).
  duration = pulseIn(ECHO_PIN, HIGH); // Засекаем время ответного импульса на порту Echo.
  // Пересчет и вывод результата в сантиметрах.
  cm = duration / 58;
  Serial.print("cm: ");
  Serial.println(cm);
  // Пересчет и вывод результата в миллиметрах.
  mm = duration / 5.8;
  Serial.print("mm: ");
  Serial.println(mm);
  // Пересчет и вывод результата в дюймах.
  inch = duration / 148;
  Serial.print("inch: ");
  Serial.println(inch);
  // Выводим разделитель и ждем 1 секунду.
  Serial.println("");
  delay(1000);
}


Пример №2 (Библиотека Ultrasonic).

#include "Ultrasonic.h"

#define TRIGGER_PIN 12   // Вывод Trig подключен к 12-у порту Ардуино.
#define ECHO_PIN 11      // Вывод Echo подключен к 11-у порту Ардуино.

// Создаем объект ultrasonic.
Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);

void setup()
{
  Serial.begin(9600); // Инициализация передачи по COM порту.
}

void loop()
{
  // Вывод расстояния раз в секунду в сантиметрах.
  Serial.print("cm: ");
  Serial.println(ultrasonic.Ranging(CM));
  // Ждем 1 секунду.
  delay(1000);
}


Пример №3 (Библиотека NewPing).

#include "NewPing.h"

#define TRIGGER_PIN 12   // Вывод Trig подключен к 12-у порту Ардуино.
#define ECHO_PIN 11      // Вывод Echo подключен к 11-у порту Ардуино.
#define MAX_DISTANCE 400 // Максимальная дистанция в сантиметрах. Чем меньше - тем точнее.

// Создаем объект sonar.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
 
void setup()
{
  Serial.begin(9600); // Инициализация передачи по COM порту.
}
 
void loop()
{
  // Вывод расстояния раз в секунду в сантиметрах.
  Serial.print("cm: ");
  Serial.println(sonar.ping_cm());
  // Ждем 1 секунду.
  delay(1000);
}


Заключение

Как вы видите работать с данным модулем довольно таки просто, ну а дополнительные библиотеки и вовсе сводят программирование к минимуму. Самостоятельно писать скетч или использовать одну из библиотек - решать вам, но мне лично приглянулась библиотека NewPing.

На этом обзор бесконтактного ультразвукового дальномера HC-SR04 подходит к концу, оставляйте свои комментарии и пожелания. Всем успехов и удачи!



Расскажи о нас

Сообщение

Если у Вас есть опыт в работе с Arduino и собственно есть время для творчества, мы приглашаем всех желающих стать авторами статей публикуемых на нашем портале. Это могут быть как уроки, так и рассказы о ваших экспериментах с Arduino. Описание различных датчиков и модулей. Советы и наставления начинающим. Пишите и размещайте свои статьи в соответсвующей ветке форума.