Главная » Ардуино » Определение расстояния с помощью HC-SR04. Работа с Ардуино без библиотеки

Определение расстояния с помощью HC-SR04. Работа с Ардуино без библиотеки

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

HC-SR04, вероятно, самый дешевый модуль измерения расстояния, который  известен. Его очень просто использовать совместно с Ардуино.

Технические характеристики HC-SR04

Технические характеристики HC-SR04

  • Рабочий диапазон: 2-200 см
  • Разрешение: 0,3 см
  • Источник питания: 5В
  • Средний ток потребления: 15 мА
  • Угол измерения: 30 градусов
  • Рабочая частота: 40 кГц
  • Размеры: 45 х 20 х 15 мм

Выводы HC-SR04

Vcc, GND — Питание (5В), земля

Trig – Вход. Запуск измерения (высокое состояние продолжительностью 10 мкс)

Ehco — Выход. На нем появляется высокое состояние, продолжительность которого зависит от расстояния между препятствием и датчиком.

(см. подробная распиновка здесь)

Работа датчика

На выводе TRIG модуля подается сигнал высокого уровня на время, по крайней мере, 10мкс. Это запускает измерение расстояния с использованием звуковой волны частотой 40 кГц.

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

На выходе Echo устанавливается высокое состояние с длительностью, пропорциональной расстоянию от препятствия до модуля (датчика). Расстояние определяется по формуле:

Time [мс]  * 343[м/с] / 2

где 343 м/с —  скорость звука в воздухе при температуре 20 градусов Цельсия, a Time — длительность сигнала на выходе Echo.

Практический пример

Система работает на Ардуино Uno и LCD Shield. Результаты отображаются как на дисплее, так и отправляются в монитор последовательного порта.

Функция для вычисления расстояния взята из этого источника

Определение расстояния с помощью HC-SR04

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
const int TrigPin = A5;
const int EchoPin = A4;

void setup() {
  pinMode(TrigPin, OUTPUT);
  pinMode(EchoPin, INPUT);
  lcd.begin(16, 2);
  Serial.begin(9600); 
}

void loop() {
  int distance = getDistance();
  lcd.setCursor(0,0);
  lcd.print("Distance [cm]:");  
  lcd.setCursor(0,1);
  lcd.print(distance);  
  Serial.print("Distance [cm]: ");
  Serial.println(distance); 
  delay(1000);
  lcd.clear();
}

/**
 * Speed of Sound: 343 m/s
 */
int getDistance() 
{
  long time;
  // Low (5us)
  digitalWrite(TrigPin, LOW);
  delayMicroseconds(5);
  // High (15us)
  digitalWrite(TrigPin, HIGH);
  delayMicroseconds(15);
  // Low  
  digitalWrite(TrigPin, LOW);
  time = pulseIn(EchoPin, HIGH, 50000);
  return round(time / 58);
}

Кроме того, доступны библиотеки, например Ардуино New Ping. Однако в данном случае использование библиотек — это немного перебор.

Примечание

  • Вы можете купить различные зажимы для модуля, в частности те, которые позволяют установить его на сервопривод.
  • в datasheet упоминается площадь препятствия не менее 0,5 м2.
  • упомянутый выше угол измерения (30 градусов) является максимальным значением и применяется к горизонтальному положению (уровень). По вертикали это значение будет меньше. В теме  HC-SR04: тесты на точность, прецизионность и разрешающую способность ультразвуковых измерений один из пользователей указывает, что 4 градуса по вертикали и около 21 градуса по горизонтали являются реальными значениями углов согласно его измерениям.
  • модуль может «потеряться» в случае препятствий, расположенных под углом к ​​датчику больше этих 30 градусов.
  • Тестируя модуль, после одного из очередных изменений кода, я начал получать в качестве результата 0. После долгих поисков на форумах выяснилось, что использование вывода A1 Ардуино может вызвать проблемы (отсюда и переход на выводы A4 и A5, что принесло улучшение). Цитата на форуме : «Примерно через 2 часа после прочтения дюжины форумов я обнаружил, что основная проблема, из-за которой мой ультразвуковой датчик возвращал ноль при использовании библиотеки NewPing, заключается в том, что контакт 1 и другие контакты приводят к тому, что ультразвуковой датчик HC-SR04 не работает должным образом»

Оставить комментарий

Ваш email нигде не будет показан. Обязательные для заполнения поля помечены *

*