Ультразвуковой дальномер HC-SR04

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

Работа модуля основана на принципе эхолокации. Модуль посылает ультразвуковой импульс и принимает его отражение от объекта. Разница между отправкой и приёмом импульса позволяет вычислить расстояние до препятствия.

Подключение УЗ дальномера

Модуль подключается четырьмя проводами. Контакты VCC и GND служат для подключения питания, а Trig и Echo— для отправки и приема сигналов дальномера. Подключим их к пинам 10 и 11 соответственно.

Напряжение питания дальномера 5 В. При работе с платами, рабочее напряжение которых 3,3 В, подключать его стоит к пинам группы P8-P13. Джампер выбора питания V2 на Troyka Shield при этом необходимо установить в положении V2+5V. Пин микроконтроллера, соединённый с пином Echo должен быть толерантен к 5 В. Приведённая схема подходит для подключения дальномера к Iskra JS.

Пример работы

Для начала рассмотрим принцип работы более детально.

  • Для того чтобы инициализировать отправку сигнала дальномером, необходимо подать высокий сигнал длительностью 10 μs на пин Trig.
  • После получения высокого сигнала длительностью 10 μs на пин Trig, модуль генерирует пучёк из 8-ми сигналов частотой 40 кГц и устанавливает высокий уровень на пине Echo.
  • После получения отраженного сигнала модуль устанавливает на пине Echo низкий уровень.

Зная продолжительность высокого сигнала на пине Echo можем вычислить расстояние, умножив время, которое потратил звуковой импульс, прежде чем вернулся к модулю, на скорость распространения звука в воздухе (340 м/с).

Функция pulseIn позволяет узнать длительность импульса в μs. Запишем результат работы этой функции в переменную duration.

Теперь вычислим расстояние переведя скорость из м/с в см/мкс:

distance = duration * 340 м/с = duration * 0.034 м/мкс

Преобразуем десятичную дробь в обыкновенную

distance = duration * 1/29 = duration / 29

Принимая во внимание то, что звук преодолел расстояние до объекта и обратно, поделим полученный результат на 2

distance = duration / 58

Оформим в код всё вышесказанное и выведем результат в Serial Monitor

ultrasonic.ino
// Укажем, что к каким пинам подключено
int trigPin = 10; 
int echoPin = 11;  
 
void setup() { 
  Serial.begin (9600); 
  pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT); 
} 
 
void loop() { 
  int duration, distance;
  // для большей точности установим значение LOW на пине Trig
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2); 
  // Теперь установим высокий уровень на пине Trig
  digitalWrite(trigPin, HIGH);
  // Подождем 10 μs 
  delayMicroseconds(10); 
  digitalWrite(trigPin, LOW); 
  // Узнаем длительность высокого сигнала на пине Echo
  duration = pulseIn(echoPin, HIGH); 
  // Рассчитаем расстояние
  distance = duration / 58;
  // Выведем значение в Serial Monitor
  Serial.print(distance); 
  Serial.println(" cm"); 
  delay(100);
}

Работа с библиотекой

Количество строк кода можно существенно уменьшить, используя библиотеку для работы с дальномером.

ultrasonic_lib.ino
#include <NewPing.h>
 
#define TRIGGER_PIN  10
#define ECHO_PIN     11
#define MAX_DISTANCE 400
 
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
 
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  delay(50);
  Serial.print("Ping: ");
  Serial.print(sonar.ping_cm());
  Serial.println("cm");
}

Работа с Iskra JS

var sonic = require('@amperka/ultrasonic')
  .connect({trigPin: P10, echoPin: P11});
 
sonic.ping(function(err, value) {
  if (err) {
    console.log('An error occurred:', err);
  } else {
    console.log('The distance is:', value, 'millimeters');
  }
}, 'mm');

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

  • Напряжение питания: 5 В
  • Потребление в режиме тишины: 2 мА
  • Потребление при работе: 15 мА
  • Диапазон расстояний: 2–400 см
  • Эффективный угол наблюдения: 15°
  • Рабочий угол наблюдения: 30°

Ресурсы