Amateur Radio Station R9AL

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

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



      Модуль ультразвукового датчика HC-SR04 обеспечивает бесконтактное измерение расстояния до объекта от 2 до 400 см, с точностью до 3 мм. Модуль включает в себя ультразвуковой передатчик, приемник и схему управления. Основной принцип работы:

  1. На вход датчика подается управляющий импульс высокого уровня длительностью не менее 10 мкс.
  2. Модуль автоматически отправляет восемь импульсов частотой 40 кГц и определяет, есть ли отраженный сигнал.
  3. Если сигнал вернулся обратно, то на выходе устанавливается высокий уровень, длительностью пропорционально расстоянию до объекта.




Измеренное расстояние = (время высокого уровня * скорость звука (340 м/с) / 2

Временная диаграмма показана ниже. Вам нужно только подать короткий импульс 10 мкс на триггерный вход для запуска измерения, а затем модуль отправит 8 ультразвуковых импульсов (40 кГц) и примет отраженный сигнал. Ширина импульса на выходе датчика (Т) пропорционально расстоянию. Согласно приведенной выше формуле

Дистанция (м) = Т (с) * 340 (м/с) / 2;

Так как Т измеряется в микросекундах, а расстояние мы измеряем в сантиметрах, то можно записать:

Дистанция (см) = Т (мкс) * 0.034 (см/мкс) / 2 = Т (мкс) * 0.017 (см/мкс);

Если записать в виде обыкновенной дроби, то получим:

Дистанция (см) = Т (мкс) * 17/1000 ≈ T/58

Так как датчик позволяет измерять расстояние до 400 см, не трудно посчитать что максимальная ширина выходного импульса будет примерно 24 мс, а с учетом ширины управляющего импульса и отправляемых импульсов цикл измерения составляет не более 30 мс, но на практике, рекомендуется делать измерения с интервалом более 60 мс, чтобы не возникло накладок между сигналом запуска к эхо-сигналом.

Подключим датчик HC-SR04 к плате Arduino:



      Напишем программу, которая будет выводить в монитор измеренное расстояние:

void setup() {
  Serial.begin (9600); 
  pinMode(12, OUTPUT); 
  pinMode(11, INPUT); 
}

void loop() {
  int distance;                     // переменная, в которой будет храниться измеренное расстояние
   digitalWrite (12, 1);            //
   delayMicroseconds(10);           // формируем на выводе 12 управляющий импульс длительностью 10 мкс
   digitalWrite (12, 0);            //
   distance = pulseIn(11, HIGH)/58; // измеряем ширину импульса поступающего на 11 вывод и сразу переводим в сантиметры
     Serial.print(distance);        // выводим измеренное расстояние в монитор порта
   Serial.println("cm");
   delay(1000);                     // просто подождем секундочку :)
}
Как работает программа понятно из комментариев, сначала мы формируем импульс длительностью 10 мкс на выводе 12, с которого этот импульс поступает на вход TRIG датчика, а с выхода датчика ECHO импульс попадает на вывод 11, с которого функцией pulseIn() считываем его длительность. Преобразовав длительность импульса в расстояние в сантиметрах (разделив значение на 58) - выводим его в монитор порта. Меняя расстояние до объекта в программе, можно увидеть как меняется значение в мониторе порта:



Количество строк кода можно существенно уменьшить, используя библиотеку, например библиотеку SR04.h
#include "SR04.h"
#define TRIG_PIN 12
#define ECHO_PIN 11
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long a;

void setup() {
   Serial.begin(9600);
   delay(1000);
}

void loop() {
   a=sr04.Distance();
   Serial.print(a);
   Serial.println("cm");
   delay(1000);
}


Математические функции min(), max(), abs(), constrain(), map(), pow(), sq(), sqrt()











Copyright © R9AL 2021 Все права защищены

Рейтинг@Mail.ru Яндекс цитирования