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

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

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Pixel Art Mini Meow Animated.gif Черновик


Гайд по использованию ультразвукового датчика HC-SR04 с Arduino[1]

Эта статья – об ультразвуковом датчике HC-SR04. Она объясняет, как он работает, рассказывает о некоторых его функциях, а также содержит скетч Arduino, который вы можете использовать в своих проектах.

Описание

Ultra HC-SR04.png

Ультразвуковой датчик 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.

Схема

Schematics.png

Код

 1 /*
 2  * Автор – Руи Сантос (Rui Santos); http://randomnerdtutorials.com
 3  * 
 4  * Скетч сделан для руководства по ультразвуковому датчику HC-SR04
 5  *
 6  * Подключение контактов:
 7  * VCC: к +5 вольтам постоянного тока
 8  * Trig (входной): к контакту 11
 9  * Echo (выходной): к контакту 12
10  * GND: к контакту GND
11  */
12  
13 int trigPin = 11;    // Trig – зеленый провод-перемычка
14 int echoPin = 12;    // Echo – желтый провод-перемычка
15 long duration, cm, inches;
16  
17 void setup() {
18   // открываем последовательный порт:
19   Serial.begin (9600);
20   // задаем входные и выходные контакты: 
21   pinMode(trigPin, OUTPUT);
22   pinMode(echoPin, INPUT);
23 }
24  
25 void loop()
26 {
27   
28   // датчик запускается импульсом HIGH продолжительностью 10 мкс
29   // или более; но перед этим нужно подать короткий импульс LOW,
30   // чтобы Trig в конце концов получил четкий импульс HIGH:
31   digitalWrite(trigPin, LOW);
32   delayMicroseconds(5);
33   digitalWrite(trigPin, HIGH);
34   delayMicroseconds(10);
35   digitalWrite(trigPin, LOW);
36  
37   // считываем сигнал от датчика; продолжительность импульса HIGH –
38   // это время, прошедшее от отправки импульса 
39   // до получения эха от объекта:
40   pinMode(echoPin, INPUT);
41   duration = pulseIn(echoPin, HIGH);
42  
43   // конвертируем время в расстояние: 
44   cm = (duration/2) / 29.1;
45   inches = (duration/2) / 74; 
46   
47   Serial.print(inches);
48   Serial.print("in, ");  //  "дюймов, "
49   Serial.print(cm);
50   Serial.print("cm");  //  "сантиметров"
51   Serial.println();
52   
53   delay(250);
54 }

Код с библиотекой NewPing

Ниже – скетч для тех же целей, но с использованием библиотеки NewPing. Загрузить ее можно отсюда.

 1 /*
 2  * Опубликовано на: http://randomnerdtutorials.com
 3  * Создано на: http://playground.arduino.cc/Code/NewPing
 4 */
 5 
 6 #include <NewPing.h>
 7  
 8 #define TRIGGER_PIN 11
 9 #define ECHO_PIN 12
10 #define MAX_DISTANCE 200
11  
12 NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
13 // настройка объекта NewPing: контакты и максимальная дистанция
14  
15 void setup() {
16    Serial.begin(9600);
17 }
18  
19 void loop() {
20    delay(50);
21    unsigned int uS = sonar.ping_cm();
22    Serial.print(uS);
23    Serial.println(cm);  //  "сантиметров"
24 }

Где купить?

HC-SR04 1.jpg

Купить датчик 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.

См.также

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