Опубликовано: 22.03.2017 20:24
Автор: genaonyx
Приветствую всех, сегодня мы поговорим об одном из самых популярных модулей из мира Arduino, а именно об ультразвуковом дальномере HC-SR04 (datasheet).
Данный модуль настолько популярен, что не писал о нем разве что ленивый, а это значит, что и нам пришло время рассмотреть его на нашем сайте.
Модуль HC-SR04 - это бесконтактный ультразвуковой дальномер, измеряющий расстояние от модуля до какого либо объекта. По команде, модуль генерирует восемь ультразвуковых импульсов частотою 40кГц, после чего переходит в режим прослушивания, и фиксирует время за которое эти импульсы отразились от объекта и вернулись обратно. Далее, путем не сложных вычислений, это время переводиться в расстояние до объекта. Таким образом, чем быстрее вернуться импульсы обратно, тем ближе объект к модулю.
Как и любое другое устройство, модуль HC-SR04 обладает как преимуществами над другими дальномерами, так и недостатками.
Работать с ультразвуковым дальномером 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. Описание различных датчиков и модулей. Советы и наставления начинающим. Пишите и размещайте свои статьи в соответсвующей ветке форума.