Arduino:Примеры/Гайд по использованию ультразвукового датчика HC-SR04 с Arduino
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Гайд по использованию ультразвукового датчика HC-SR04 с Arduino[1]
Эта статья – об ультразвуковом датчике HC-SR04. Она объясняет, как он работает, рассказывает о некоторых его функциях, а также содержит скетч Arduino, который вы можете использовать в своих проектах.
Описание

Ультразвуковой датчик HC-SR04 использует сонар, с помощью которого определяет расстояние до объекта, как это делают летучие мыши. Кроме того, этот датчик отличается высокой точностью и простотой использования. Диапазон измеряемого расстояния – от 2 до 400 см. В отличие от дальномеров Sharp, датчику HC-SR04 не мешает ни солнечный свет, ни черные материалы, но ему трудно определять акустически мягкие материалы вроде тканей. В комплекте с HC-SR04 также идет ультразвуковой приемопередатчик.
Функции
Датчик HC-SR04 обладает следующими функциями:
- Питание: +5 вольт постоянного тока
- Сила тока в состоянии покоя: не более 2 мА
- Сила тока во время работы: 15 мА
- Эффективный угол при измерении: не более 15°
- Диапазон измеряемого состояния: от 2 до 400 см
- Разрешение: 0,3 см
- Рабочий угол при измерении: 30°
- Продолжительность импульса для триггера: 10 мкс
- Размеры: 45 мм х 20 мм х 15 мм
Назначение контактов HC-SR04
- Контакт VCC – для постоянного тока +5 вольт
- Контакт Trig – для запуска измерения
- Контакт Echo – для выдачи измеренных данных
- Контакт GND – для заземления
Использование HC-SR04 с платой Arduino
Датчик HC-SR04 очень популярен среди тех, кто занимается разработкой проектов на базе Arduino. Поэтому я решил написать для него специальный скетч. В нем ультразвуковой датчик определяет расстояние до объекта, а затем передает эти данные на монитор порта IDE Arduino. Все очень просто.
Примечание: Чтобы упростить использование датчика HC-SR04, можно воспользоваться библиотекой NewPing для Arduino.
Схема

Код
/*
* Автор – Руи Сантос (Rui Santos); http://randomnerdtutorials.com
*
* Скетч сделан для руководства по ультразвуковому датчику HC-SR04
*
* Подключение контактов:
* VCC: к +5 вольтам постоянного тока
* Trig (входной): к контакту 11
* Echo (выходной): к контакту 12
* GND: к контакту GND
*/
int trigPin = 11; // Trig – зеленый провод-перемычка
int echoPin = 12; // Echo – желтый провод-перемычка
long duration, cm, inches;
void setup() {
// открываем последовательный порт:
Serial.begin (9600);
// задаем входные и выходные контакты:
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop()
{
// датчик запускается импульсом HIGH продолжительностью 10 мкс
// или более; но перед этим нужно подать короткий импульс LOW,
// чтобы Trig в конце концов получил четкий импульс HIGH:
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// считываем сигнал от датчика; продолжительность импульса HIGH –
// это время, прошедшее от отправки импульса
// до получения эха от объекта:
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
// конвертируем время в расстояние:
cm = (duration/2) / 29.1;
inches = (duration/2) / 74;
Serial.print(inches);
Serial.print("in, "); // "дюймов, "
Serial.print(cm);
Serial.print("cm"); // "сантиметров"
Serial.println();
delay(250);
}
Код с библиотекой NewPing
Ниже – скетч для тех же целей, но с использованием библиотеки NewPing. Загрузить ее можно отсюда.
/*
* Опубликовано на: http://randomnerdtutorials.com
* Создано на: http://playground.arduino.cc/Code/NewPing
*/
#include <NewPing.h>
#define TRIGGER_PIN 11
#define ECHO_PIN 12
#define MAX_DISTANCE 200
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
// настройка объекта NewPing: контакты и максимальная дистанция
void setup() {
Serial.begin(9600);
}
void loop() {
delay(50);
unsigned int uS = sonar.ping_cm();
Serial.print(uS);
Serial.println(“cm”); // "сантиметров"
}
Где купить?

Купить датчик HC-SR04 можно тут.
О таймауте
Если HC-SR04 не получит эхо, то выходной сигнал никогда не перейдет в состояние LOW. У датчика Devantec таймаут составляет 36 мс, а у Parallax – 28 мс. Если вы используете функцию pulseIn(), как в первом скетче, то при отсутствии эха программа зависнет на 1 секунду – это таймаут для pulseIn() по умолчанию. Если вы хотите изменить время таймаута, то это значение задается в третьем параметре функции pulseIn().
Подробнее почитать о функции pulseIn() можно тут.
Если HC-SR04 будет измерять расстояние 300 см, то полный путь сигнала туда-обратно составит 600 см, а время пути – около 20 мс. Следовательно, таймаут нужно выставить чуть выше этого значения: на 25 или 30 мс.
Кроме того, вы можете подключить HC-SR04 всего к одному контакту Arduino. Для этого контакты Trig и Echo нужно подключить друг к другу с использованием резистора на 2200 Ом, а затем подключить контакт Trig к Arduino. Подробнее ищите в статьях об 1-контактном использовании ультразвуковых датчиков.
Если вы используете HC-SR04 вместе с PicAxe, то его тактовую частоту нужно поднять как минимум до 8 МГц. В противном случае вы не увидите начало эхо-импульса, из-за чего функция pulseIn() никогда не запустится. HC-SR04 отлично работает с BS2.
См.также
Внешние ссылки
развернутьПартнерские ресурсы |
---|
развернутьСправочник языка Arduino |
---|
развернутьБиблиотеки Arduino |
---|
развернутьArduino продукты |
---|
развернутьПримеры Arduino |
---|
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino