#27Новичок

Измерение расстояния HC-SR04 (вывод в порт)

4.6(46)
71 собрано
Измерение расстояния HC-SR04 (вывод в порт)
Датчик HC-SR04 работает совсем как летучая мышь, которая находит дорогу в темноте: он посылает звук, которого ты не слышишь, слушает эхо и измеряет, насколько далеко предмет перед ним. Arduino каждые полсекунды выводит это расстояние в сантиметрах на экран компьютера и показывает значения от 3 до 100 сантиметров. Это основа проектов вроде парктроников и роботов, объезжающих препятствия.

Видео

Схема

Измерение расстояния HC-SR04 (вывод в порт) - Circuit

Исходный код

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Измерение расстояния HC-SR04 (вывод в порт)
4// ─────────────────────────────────────────
5// Измеряет расстояние ультразвуковым датчиком HC-SR04 и каждые 0,5 с
6// выводит в монитор порта результаты от 3 до 100 см (в см).
7//
8// Пины:
9//   D7 -> HC-SR04 Trig
10//   D6 -> HC-SR04 Echo
11//   VCC HC-SR04 к 5V, GND к GND
12
13int echoPin = 6;        // Вход Echo
14int trigPin = 7;        // Выход Trigger
15int maxDistance = 100;  // Наибольшее показываемое расстояние (см)
16int minDistance = 3;    // Наименьшее показываемое расстояние (см)
17
18void setup() {
19  pinMode(trigPin, OUTPUT);
20  pinMode(echoPin, INPUT);
21  Serial.begin(9600);
22}
23
24void loop() {
25  // Импульс запуска 10 мкс отправляет звуковую посылку
26  digitalWrite(trigPin, HIGH);
27  delayMicroseconds(10);
28  digitalWrite(trigPin, LOW);
29
30  // Время, пока Echo остаётся в HIGH (мкс), — это время туда и обратно. Звук проходит 0.034 см/мкс;
31  // половина пути даёт расстояние
32  unsigned long duration = pulseIn(echoPin, HIGH);
33  double totalPath = (double)duration * 0.034;
34  int distance = totalPath / 2;
35
36  // Выводить только в допустимом диапазоне
37  if (distance > minDistance && distance < maxDistance) {
38    Serial.print("Distance: ");
39    Serial.print(distance);
40    Serial.println("cm");
41  }
42
43  delay(500);   // Ждать 0,5 с
44}
45

Частые вопросы

Как HC-SR04 измеряет расстояние?

Датчик излучает звуковую волну 40 kHz и измеряет, за какое время возвращается эхо. Звук идёт по воздуху со скоростью около 343 м/с; расстояние в сантиметрах вычисляется по формуле: расстояние = время × 0.0343 / 2 (деление на 2 учитывает путь туда и обратно).

Какое самое маленькое и самое большое расстояние он измеряет?

На практике он измеряет расстояния примерно от 2 до 400 см. При расстоянии меньше 2 см, на очень больших расстояниях или на поглощающих звук поверхностях (ткань, поролон) измерения могут быть неточными или равными 0.

Иногда показания равны 0 или очень большие. Почему?

Если эхо не пришло, `pulseIn` завершится по таймауту. Направь датчик на ровную твёрдую поверхность, делай паузу не меньше 60 ms между измерениями и отсеивай ошибочные показания в коде.

Можно ли использовать его с ESP32?

HC-SR04 работает от 5 V, и его пин ECHO выдаёт 5 V. ESP32 работает с логикой 3,3 V, поэтому либо добавь на линию ECHO делитель напряжения (например, 1 kΩ + 2 kΩ), либо используй модель HC-SR04P, совместимую с 3,3 V.