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

hcsr1

Если вы ищите ультразвуковой модуль для проектов, HC-SR04 хороший выбор. Стабильная производительность и высокая точность в диапазоне делают его популярным модулем на рынке электронных компонентов. Он может измерять расстояния в диапазоне от 2 до 500 см с точностью до 2 мм. Модуль включает в себя ультразвуковой передатчик, приемник и плату управления.   hcsr2

 Характеристики

  • Источник питания: 5V DC
  • Потребляемый ток: <2 мА
  • Угол обзора: <15 °
  • Измеряемое расстояние: 2 см — 500 см
  • Погрешность: 3 мм
  • Ультразвуковая частота: 40 КГц

Принцип действия

hcsr3

Принцип метода измерения расстояния заключается в следующем: один из пьезоэлементов(передатчик) излучает ультразвуковой сигнал, а другой пьезоэлемент(приемник) принимает этот же отражённый сигнал от препятствия. Затем замеряется время, которое прошло с момента отправки до момента приема отраженного сигнала. Следующий импульс может быть передан, когда эхо исчезло. Этот период времени называется период цикла. Рекомендованный период цикла должен быть не менее 50 мс. Импульс длительностью 10 мкс дает команду на отправку 8-ми импульсов 40КГц ультразвукового сигнала и детектирование эхо-сигнала обратно. Измеренное расстояние пропорционально длительности импульса на выходе Echo и может быть рассчитана по формуле:

S = Tus/58   см, где

Tus — длительность эхо импульса в микросекундах;

58 — константа.

Также можно не делить , а умножать на коэффициент 0,017. Ардуино умножение выполняет быстрее.

Если никаких препятствий не обнаруживается, то выходной контакт даст сигнал на 38ms высокого уровня.

Описание выводов

1 —  Vcc  Питание

2 — Trig     Вход подачи строба запуска

3 — Echo   Вывод для получения ответного импульса

4 — GND  Земля.

Схема подключения

hcsr4

Код без использования библиотеки:

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
const int trigPin = 12;
const int echoPin = 11;
 
void setup()  {
  pinMode(trigPin, OUTPUT); // триггер - выходной пин
  pinMode(echoPin, INPUT); // эхо - входной
  Serial.begin(9600); // инициализация послед. порта
}
 
void loop()  { 
  long distance = getDistance(); // получаем дистанцию с датчика
  Serial.println(distance); // выводим в последовательный порт
  delay(100);
} 
 
// Определение дистанции до объекта в см
long getDistance() {
  long distacne_cm = getEchoTiming() * 1.7 * 0.01;
  return distacne_cm;
}
 
// Определение времени задержки
long getEchoTiming() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH); // генерируем импульс запуска
  delayMicroseconds(10);  
  digitalWrite(trigPin, LOW);
  // определение на пине echoPin длительности уровня HIGH, мксек:
  long duration = pulseIn(echoPin, HIGH); 
  return duration;
}

Функция getEchoTiming() генерирует импульс запуска. Создаем импульс 10 мкс на Trig и излучатель дальномера выдает звуковой пакет. Происходит запоминание времени от начала передачи звуковой волны до прихода эха.

Функция getDistance() рассчитывает дистанцию до объекта.

Другой вариант кода:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#define trigPin 12 //Sensor Echo pin connected to Arduino pin 12
#define echoPin 11 //Sensor Trip pin connected to Arduino pin 11

void setup() 
{  
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  Serial.begin(9600); // инициализация послед. порта
}
 
void loop() {
  long duration, distance;
  digitalWrite(trigPin, LOW); // Подаем 0 на выход микроконтроллера
  delayMicroseconds(2); //задержка 2 мкс
  digitalWrite(trigPin, HIGH); // Подаем сигнал на выход микроконтроллера
  delayMicroseconds(10);  // Удерживаем 10 микросекунд
  digitalWrite(trigPin, LOW); // Затем убираем
  duration = pulseIn(echoPin, HIGH); //замеряем время Echo
  distance = duration/58.2; // пересчитываем в см.
 
 Serial.println(distance); // выводим в последовательный порт
 
  delay(100);
}

Код с использованием библиотеки Ultrasonic.h:

1
2
3
4
5
6
7
8
9
10
11
12
#include "Ultrasonic.h" //подключаем библиотеку
Ultrasonic ultrasonic(12,11); //trigPin - 12; echoPin - 11;
 
void setup() {
Serial.begin(9600); // инициализация послед. порта
}
void loop()
{  
  Serial.println(ultrasonic.Ranging(CM));
  Serial.println("cm");
    delay(100);
}

Библиотеку берем отсюда:

библиотека Ultrasonic

И самое главное:

Вы научились подключать ультразвуковой дальномер HC-SR04 и замерять дистанцию до препятствий. Теперь необходимо решить, чем может управлять данный датчик.

Рассмотрим это в следующих статьях.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Навигация по записям