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

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

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

Паяльный фен YIHUA 8858
Обновленная версия, мощность: 600 Вт, расход воздуха: 240 л/час...
Подробнее

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 — Выход. На нем появляется высокое состояние, продолжительность которого зависит от расстояния между препятствием и датчиком.

Тестер транзисторов / ESR-метр / генератор
Многофункциональный прибор для проверки транзисторов, диодов, тиристоров...
Подробнее

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

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

На выводе 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 не работает должным образом»
Блок питания 0...30 В / 3A
Набор для сборки регулируемого блока питания...
Подробнее

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

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

*