Полное руководство по ультразвуковому датчику HC-SR04 с Arduino

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

Полное руководство по ультразвуковому датчику HC-SR04 с Arduino

Описание

Ультразвуковой датчик HC-SR04 использует сонар для определения расстояния до объекта. Этот датчик измеряет расстояние от 2 см до 400 см (от 0,8 дюйма до 157 дюймов) с точностью 0,3 см (0,1 дюйма), что отлично подходит для большинства любительских проектов. Кроме того, этот модуль оснащён ультразвуковым передатчиком и приёмником.

На следующем рисунке показан ультразвуковой датчик HC-SR04.

Ультразвуковой датчик HC-SR04 — вид спереди

На следующем рисунке показана обратная сторона датчика.

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

Как это работает?

Ультразвуковой датчик использует сонар для определения расстояния до объекта. Вот что происходит:

  1. Ультразвуковой передатчик (вывод trig) излучает высокочастотный звук (40 кГц).

  2. Звук распространяется по воздуху. Если он находит объект, он отражается обратно к модулю.

  3. Ультразвуковой приёмник (вывод echo) принимает отражённый звук (эхо).

Принцип работы ультразвукового датчика

Время между передачей и приёмом сигнала позволяет рассчитать расстояние до объекта. Это возможно, потому что мы знаем скорость звука в воздухе. Вот формула:

расстояние до объекта = ((скорость звука в воздухе) * время) / 2
  • Скорость звука в воздухе при 20°C (68°F) = 343 м/с

Распиновка ультразвукового датчика HC-SR04

Распиновка ультразвукового датчика HC-SR04

Ниже приведена распиновка ультразвукового датчика HC-SR04.

VCC

Питание датчика (5 В)

Trig

Вывод входа запуска (Trigger Input)

Echo

Вывод выхода эхо (Echo Output)

GND

Общая земля

Где купить?

Вы можете проверить ультразвуковой датчик HC-SR04 на Maker Advisor, чтобы найти лучшую цену:

Arduino с датчиком HC-SR04

Плата Arduino UNO с ультразвуковым датчиком HC-SR04

Этот датчик очень популярен среди любителей Arduino. Поэтому мы предоставляем пример использования ультразвукового датчика HC-SR04 с Arduino. В этом проекте ультразвуковой датчик считывает и выводит расстояние до объекта в монитор последовательного порта.

Цель этого проекта — помочь вам понять, как работает этот датчик. После этого вы сможете использовать этот пример в своих собственных проектах.

Необходимые компоненты

Ниже приведён список компонентов, необходимых для выполнения следующего руководства:

Вы можете использовать ссылки выше или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!

Схема подключения Arduino с датчиком HC-SR04

Следуйте приведённой ниже схеме для подключения ультразвукового датчика HC-SR04 к Arduino.

Схема подключения ультразвукового датчика 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 UNO с ультразвуковым датчиком HC-SR04

Загрузите код на плату Arduino. Затем откройте монитор последовательного порта на скорости 115200 бод.

Монитор последовательного порта

Расстояние до ближайшего объекта отображается в окне монитора последовательного порта.

Демонстрация Arduino с ультразвуковым датчиком — вывод в мониторе последовательного порта

Заключение

В этой статье мы показали, как работает ультразвуковой датчик HC-SR04 и как его можно использовать с платой Arduino. Для примера проекта вы можете собрать парковочный датчик со светодиодами и зуммером.

Если вы новичок в Arduino, мы рекомендуем пройти наш Мини-курс Arduino, который поможет вам быстро начать работу с этой замечательной платой.

Если вам нравится Arduino, вам также могут понравиться:

Все наши проекты и руководства по Arduino вы можете найти здесь.

Надеемся, что это руководство оказалось полезным. Спасибо за чтение.