Arduino:Примеры/Гайд по использованию ультразвукового датчика HC-SR04 с Arduino

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.



Гайд по использованию ультразвукового датчика 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 мс, а у Parallax28 мс. Если вы используете функцию 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.

См.также

Внешние ссылки