Обзор ультразвукового датчика расстояния HC-SR04
В этой статье расскажу о ультразвуковом датчике HC-SR04, из-за небольшой стоимости, часто используется в различных проектах, где есть необходимость измерять расстояние до объекта.
Технические параметры
► Напряжение питания: 4.8 В … 5.5 В
► Потребляемый ток: 15 мА
► Угол обзора: < 15 °
► Измеряемое расстояние: 2 см … 400 см
► Точность: 0.3 см
► Рабочая температура: 0 ° С … + 60 ° С
► Габариты: 45мм х 20мм х 15мм
Общие сведения
Ультразвуковой датчик HC-SR04 использует точно такую же технологию, что и летучие мыши (ультразвук). Если не вдаваться в подробности, то описать принцип работы можно, датчик посылает звуковые импульсы частотой 40 кГц и прослушивает эхо. В отличии от других датчиков, HC-SR04 не реагирует на солнечный свет или черные предметы, но может давать ложные показания от ткани или тонких предметов.
На передней части HC-SR04 расположено два ультрозвуковых датчика, первый с надписью T (Transmiter) — это передатчик ультрозвуковых волн (TCT40-16T), а второй с надписью R (Receive) — это приемник отраженных ультрозвуковых волн (TCT40-16R), по центру расположен выводной кварцевый генератор на 27 МГц.
С другой стороны датчика HC-SR04, расположена электрическая обвязка, в которой выделяется три основных микросхема и электрическая обвязка. Для взаимодействия с контроллером Arduino установлен четырех выводной разъем, назначение контактов можно посмотреть ниже.
Назначение контактов:
► VCC: «+» питание модуля
► Trig : вход триггера
► Echo: выход, эхо.
► GND: «-» питание модуля
Подключение HC SR04 к Arduino
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
► Ультразвуковой датчик расстояния HC-SR04 x 1 шт.
Подключение:
В данном примере с помощью HC SR04 будем замерять расстояние до объектов и полученные данные отобразим в окне «мониторинг порта» в среде разработки IDE Arduino. Сборка проекта несложная, нам надо четыре провода, вывод 11 (Arduino UNO) подключаем к выводу Trig (HC SR04), вывод 12 (Arduino UNO) подключаем к выводу Echo (HC SR04), осталось подключить питание VCC к +5V и GND к GND, да наглядности выложу схему таблицу подключения.
Программа
Существует две популярные библиотеки Ultrasonic и NewPing, скачать их можно с официальных сайтов. В это примере они не используются, скопируйте данный код в среду разработки IDE Arduino и загрузите в Arduino UNO.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
/* Тестирование производилось на Arduino IDE 1.6.12 Дата тестирования 02.12.2016г. */ int trigPin = 11; // Номер вывод Trig int echoPin = 12; // Номер вывод Echo long duration, cm, inches; // Указываем тип данных для переменных duration, cm и inches void setup() { Serial.begin (9600); // Задаем скорость передачи данных pinMode(trigPin, OUTPUT); // Вывод trigPin установим как выход pinMode(echoPin, INPUT); // вывод echoPin установим как вход } void loop() { digitalWrite(trigPin, LOW); // Устанавливаем на выходе trigPin 0 delayMicroseconds(5); // Ожидаем 5 микросекунд digitalWrite(trigPin, HIGH); // Устанавливаем на выходе trigPin 1 delayMicroseconds(10); // Ожидаем 10 микросекунд digitalWrite(trigPin, LOW); // Устанавливаем на выходе trigPin 0 duration = pulseIn(echoPin, HIGH); // Если на echoPin - HIGH, включаем таймер до появления LOW, данные записать в duration cm = (duration/2) / 29.1; // Высчитываем значение Serial.print(cm); // Выводим значение переменной cm Serial.print("cm"); // Выводим символ cm Serial.println(); // Новая строка delay(250); // Ждем 250 мкс } |
Откройте «мониторинг порта»
Описание работы программы:
Немного расскажу о программе, начну сразу с void loop(), в строке 16 устанавливаем trig в положение LOW, на всякий случай, так как мы не уверены, в каком состоянии был вывод, в строке 17 делаем паузу, для ожидания переходных процессов.
1 2 |
16: digitalWrite(trigPin, LOW); 17: delayMicroseconds(5); |
Запускаем процесс измерения, для этого в строке 18 устанавливаем treg в положение HIGN, в такой состоянии вывод необходимо держать не менее 10 мкс, строка 19 (взято с мануала этого датчика), затем устанавливаем trig в LOW, строка 20
1 2 3 |
18: digitalWrite(trigPin, HIGH); 19: delayMicroseconds(10); 20: digitalWrite(trigPin, LOW); |
Далее, начинаем замерять длительность логической единице на выводе echo (мкс), для этого используем функцию pulseIn (то есть, когда на выводе echo появляется HIGH, включается таймер, когда на выводе LOW таймер отключится), полученные данные запишутся в переменную duration
1 |
21: duration = pulseIn(echoPin, HIGH); |
В строке 22, рассчитываем полученное значение и записываем в переменную cm.
1 |
22: cm = (duration/2) / 29.1; |
В следующих строках, выводим полученные данные в компьютер.
1 2 3 |
23: Serial.print(cm); 24: Serial.print("cm"); 25: Serial.println(); |
Ссылки
Документация к HC-SR04
Купить на Aliexpress
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Ультразвуковой датчик расстояния HC-SR04
Купить в Самаре и области
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Ультразвуковой датчик расстояния HC-SR04
Можно ли вывести мониторинг порта на сайт?
Здравствуйте, не подскажу.
Есть ли принципиальная схема этого датчика?
Добрый день.
Скажите ,какой максимальной точности измерения можно добиться на этом датчике?
Здравствуйте, Валентин.
Датчик не очень точный, может дать погрешность от 1 см до 4 см, все зависит от расстояния измерения и условий.