Инструменты пользователя

Инструменты сайта


hc-sr04

Информация

Датчик расстояния Ардуино является прибором бесконтактного типа, и обеспечивает высокоточное измерение и стабильность. Диапазон дальности его измерения составляет от 2 до 400 см. На его работу не оказывает существенного воздействия электромагнитные излучения и солнечная энергия.

Подключение

Библиотека:

ultrasonic-hc-sr04.zip

Код

Начнем работу с датчиком сразу с относительного сложного варианта – без использования внешних библиотек.

В данном скетче мы выполняем такую последовательность действий:

Коротким импульсом (2-5 микросекунды) переводим датчик расстояния в режим эхолокации, при котором в окружающее пространство высылаются ультразвуковые волны с частотой 40 КГц. Ждем, пока датчик проанализирует отраженные сигналы и по задержке определит расстояние. Получаем значение расстояния. Для этого ждем, пока HC SR04 выдаст на входе ECHO импульс, пропорциональный расстоянию. Мы определяем длительность импульса с помощью функции pulseIn, которая вернет нам время, прошедшее до изменения уровня сигнала (в нашем случае, до появления обратного фронта импульса). Получив время, мы переводим его в расстояние в сантиметрах путем деления значения на константу (для датчика SR04 это 29.1 для сигнала «туда», столько же для сигнала «обратно», что в сумме даст 58.2). Если датчик расстояния не выполняет считывание сигнала, то преобразование выходного сигнала никогда не примет значения короткого импульса – LOW. Так как у некоторых датчиков время задержки варьируется в зависимости от производителя, рекомендуется при использовании указанных скетчей выставлять его значение вручную (мы это делаем в начале цикла).

Если расстояние составляет более 3 метров, при котором HC SR04 начинает плохо работать, время задержки лучше выставлять более 20 мс, т.е. 25 или 30 мс.

#define PIN_TRIG 12
#define PIN_ECHO 11

long duration, cm;
 
void setup() {
 
  // Инициализируем взаимодействие по последовательному порту
 
  Serial.begin (9600);
  //Определяем вводы и выводы
  pinMode(PIN_TRIG, OUTPUT);
  pinMode(PIN_ECHO, INPUT);
}
 
void loop() {
 
  // Сначала генерируем короткий импульс длительностью 2-5 микросекунд.
 
  digitalWrite(PIN_TRIG, LOW);
  delayMicroseconds(5);
  digitalWrite(PIN_TRIG, HIGH);
 
  // Выставив высокий уровень сигнала, ждем около 10 микросекунд. В этот момент датчик будет посылать сигналы с частотой 40 КГц.
  delayMicroseconds(10);
  digitalWrite(PIN_TRIG, LOW);
 
  //  Время задержки акустического сигнала на эхолокаторе.
  duration = pulseIn(PIN_ECHO, HIGH);
 
  // Теперь осталось преобразовать время в расстояние
  cm = (duration / 2) / 29.1;
 
  Serial.print("Расстояние до объекта: ");
  Serial.print(cm);
  Serial.println(" см.");
 
  // Задержка между измерениями для корректной работы скеча
  delay(250);
}

Теперь давайте рассмотрим вариант скетча с использованием библиотеки NewPing. Код существенно упростится, т.к. все описанные ранее действия спрятаны внутри библиотеки. Все, что нам нужно сделать – создать объект класса NewPing, указав пины, с помощью которых мы подключаем датчик расстояния и использовать методы объекта. В нашем примере для получения расстояния в сантиметрах нужно использовать ping_cm().

#include <NewPing.h>

#define PIN_TRIG 12
#define PIN_ECHO 11

#define MAX_DISTANCE 200 // Константа для определения максимального расстояния, которое мы будем считать корректным.

// Создаем объект, методами которого будем затем пользоваться для получения расстояния.
// В качестве параметров передаем номера пинов, к которым подключены выходы ECHO и TRIG датчика
 
NewPing sonar(PIN_TRIG, PIN_ECHO, MAX_DISTANCE);
 
void setup() {
  // Инициализируем взаимодействие по последовательному порту на скорости 9600
  Serial.begin(9600);
}
 
void loop() {
 
  // Стартовая задержка, необходимая для корректной работы.
  delay(50);
 
  // Получаем значение от датчика расстояния и сохраняем его в переменную
  unsigned int distance = sonar.ping_cm();
 
  // Печатаем расстояние в мониторе порта
  Serial.print(distance);
  Serial.println("см");
 
}
hc-sr04.txt · Последнее изменение: 2020/12/17 19:48 — admin

Инструменты страницы