Полное руководство по ультразвуковому датчику HC-SR04 с Arduino
Эта статья представляет собой руководство по ультразвуковому датчику HC-SR04. Мы объясним, как он работает, покажем некоторые его характеристики и предоставим пример проекта на Arduino, который вы можете использовать в своих проектах. Мы предоставим схему подключения ультразвукового датчика и пример скетча для Arduino.
Описание
Ультразвуковой датчик HC-SR04 использует сонар для определения расстояния до объекта. Этот датчик измеряет расстояние от 2 см до 400 см (от 0,8 дюйма до 157 дюймов) с точностью 0,3 см (0,1 дюйма), что отлично подходит для большинства любительских проектов. Кроме того, этот модуль оснащён ультразвуковым передатчиком и приёмником.
На следующем рисунке показан ультразвуковой датчик HC-SR04.
На следующем рисунке показана обратная сторона датчика.
Характеристики
Ниже приведён список некоторых характеристик и спецификаций ультразвукового датчика HC-SR04 — для получения дополнительной информации обратитесь к техническому описанию (datasheet) датчика:
Напряжение питания: +5 В постоянного тока
Ток покоя: < 2 мА
Рабочий ток: 15 мА
Эффективный угол: < 15°
Диапазон измерения: 2 см – 400 см / 1» – 13 футов
Разрешение: 0,3 см
Угол измерения: 30 градусов
Ширина импульса запуска: 10 мкс TTL-импульс
Выходной сигнал Echo: TTL-импульс, пропорциональный расстоянию
Размеры: 45 мм x 20 мм x 15 мм
Как это работает?
Ультразвуковой датчик использует сонар для определения расстояния до объекта. Вот что происходит:
Ультразвуковой передатчик (вывод trig) излучает высокочастотный звук (40 кГц).
Звук распространяется по воздуху. Если он находит объект, он отражается обратно к модулю.
Ультразвуковой приёмник (вывод echo) принимает отражённый звук (эхо).
Время между передачей и приёмом сигнала позволяет рассчитать расстояние до объекта. Это возможно, потому что мы знаем скорость звука в воздухе. Вот формула:
расстояние до объекта = ((скорость звука в воздухе) * время) / 2
Скорость звука в воздухе при 20°C (68°F) = 343 м/с
Распиновка ультразвукового датчика HC-SR04
Ниже приведена распиновка ультразвукового датчика HC-SR04.
VCC |
Питание датчика (5 В) |
Trig |
Вывод входа запуска (Trigger Input) |
Echo |
Вывод выхода эхо (Echo Output) |
GND |
Общая земля |
Где купить?
Вы можете проверить ультразвуковой датчик HC-SR04 на Maker Advisor, чтобы найти лучшую цену:
Arduino с датчиком HC-SR04
Этот датчик очень популярен среди любителей Arduino. Поэтому мы предоставляем пример использования ультразвукового датчика HC-SR04 с Arduino. В этом проекте ультразвуковой датчик считывает и выводит расстояние до объекта в монитор последовательного порта.
Цель этого проекта — помочь вам понять, как работает этот датчик. После этого вы сможете использовать этот пример в своих собственных проектах.
Необходимые компоненты
Ниже приведён список компонентов, необходимых для выполнения следующего руководства:
Arduino UNO — читайте Лучшие стартовые наборы Arduino
Вы можете использовать ссылки выше или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!
Схема подключения Arduino с датчиком HC-SR04
Следуйте приведённой ниже схеме для подключения ультразвукового датчика HC-SR04 к Arduino.
В следующей таблице показаны соединения, которые необходимо выполнить:
Ультразвуковой датчик HC-SR04 |
Arduino |
|---|---|
VCC |
5V |
Trig |
Pin 11 |
Echo |
Pin 12 |
GND |
GND |
Код
Загрузите следующий код в Arduino IDE.
/*
* created by Rui Santos, https://randomnerdtutorials.com
*
* Complete Guide for Ultrasonic Sensor HC-SR04
*
Ultrasonic sensor Pins:
VCC: +5VDC
Trig : Trigger (INPUT) - Pin11
Echo: Echo (OUTPUT) - Pin 12
GND: GND
*/
int trigPin = 11; // Trigger
int echoPin = 12; // Echo
long duration, cm, inches;
void setup() {
//Serial Port begin
Serial.begin (9600);
//Define inputs and outputs
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
// The sensor is triggered by a HIGH pulse of 10 or more microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Read the signal from the sensor: a HIGH pulse whose
// duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
// Convert the time into a distance
cm = (duration/2) / 29.1; // Divide by 29.1 or multiply by 0.0343
inches = (duration/2) / 74; // Divide by 74 or multiply by 0.0135
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(250);
}
Как работает код
Сначала вы создаёте переменные для выводов trigger и echo, которые называются trigPin и echoPin соответственно. Вывод trigger подключён к цифровому пину 11, а вывод echo подключён к пину 12:
int trigPin = 11;
int echoPin = 12;
Также вы создаёте три переменные типа long: duration, cm и inches. Переменная duration сохраняет время между излучением и приёмом сигнала. Переменная cm будет хранить расстояние в сантиметрах, а переменная inches — расстояние в дюймах.
long duration, cm, inches;
В функции setup() инициализируйте последовательный порт на скорости 9600 бод и установите вывод trigger как OUTPUT, а вывод echo как INPUT.
//Serial Port begin
Serial.begin (9600);
//Define inputs and outputs
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
В функции loop() запустите датчик, отправив HIGH-импульс длительностью 10 микросекунд. Но перед этим подайте короткий LOW-импульс, чтобы гарантировать чистый HIGH-импульс:
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
Мы используем функцию pulseIn() для получения времени прохождения звуковой волны:
duration = pulseIn(echoPin, HIGH);
Функция pulseIn() считывает HIGH или LOW импульс на выводе. Она принимает в качестве аргументов вывод и состояние импульса (HIGH или LOW). Она возвращает длительность импульса в микросекундах. Длительность импульса соответствует времени, которое потребовалось для прохождения до объекта плюс время обратного пути.
Затем мы рассчитываем расстояние до объекта, учитывая скорость звука.
distance = (traveltime/2) x speed of sound
The speed of sound is: 343m/s = 0.0343 cm/uS = 1/29.1 cm/uS
Or in inches: 13503.9in/s = 0.0135in/uS = 1/74in/uS
Нам нужно разделить время прохождения на 2, потому что мы должны учитывать, что волна была отправлена, достигла объекта, а затем вернулась к датчику.
cm = (duration/2) / 29.1;
inches = (duration/2) / 74;
Наконец, мы выводим результаты в монитор последовательного порта:
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
Исходный код с библиотекой NewPing
Вы также можете использовать библиотеку NewPing. Скачайте библиотеку здесь.
После установки библиотеки NewPing вы можете загрузить приведённый ниже код.
/*
* Posted on https://randomnerdtutorials.com
* created by http://playground.arduino.cc/Code/NewPing
*/
#include <NewPing.h>
#define TRIGGER_PIN 11
#define ECHO_PIN 12
#define MAX_DISTANCE 200
// NewPing setup of pins and maximum distance
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(9600);
}
void loop() {
delay(50);
unsigned int distance = sonar.ping_cm();
Serial.print(distance);
Serial.println("cm");
}
Как работает код
Получение расстояния до объекта с помощью библиотеки NewPing значительно проще.
Вы начинаете с подключения библиотеки NewPing:
#include <NewPing.h>
Затем определите выводы trigger и echo. Вывод trigger подключён к цифровому пину 11 Arduino, а echo — к пину 12. Также необходимо определить переменную MAX_DISTANCE для использования библиотеки.
#define TRIGGER_PIN 11
#define ECHO_PIN 12
#define MAX_DISTANCE 200
Далее создайте экземпляр NewPing с именем sonar:
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
В функции setup() инициализируйте последовательное соединение на скорости 9600 бод.
Serial.begin(9600);
Наконец, в функции loop() вам нужно просто использовать метод ping_cm() объекта sonar, чтобы получить расстояние в сантиметрах.
unsigned int distance = sonar.ping_cm();
Если вы хотите получить расстояние в дюймах, вы можете использовать sonar.ping_in() вместо этого.
Демонстрация
Загрузите код на плату Arduino. Затем откройте монитор последовательного порта на скорости 115200 бод.
Расстояние до ближайшего объекта отображается в окне монитора последовательного порта.
Заключение
В этой статье мы показали, как работает ультразвуковой датчик HC-SR04 и как его можно использовать с платой Arduino. Для примера проекта вы можете собрать парковочный датчик со светодиодами и зуммером.
Если вы новичок в Arduino, мы рекомендуем пройти наш Мини-курс Arduino, который поможет вам быстро начать работу с этой замечательной платой.
Если вам нравится Arduino, вам также могут понравиться:
Все наши проекты и руководства по Arduino вы можете найти здесь.
Надеемся, что это руководство оказалось полезным. Спасибо за чтение.