Как подключить датчик расстояния HC-SR04
Подключение: VCC → 5V, GND → GND, Trig → вывод 9, Echo → вывод 10. Библиотека не нужна.
const int TRIG = 9;
const int ECHO = 10;
void setup() {
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH); // импульс 10 мкс — начать измерение
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
unsigned long duration = pulseIn(ECHO, HIGH, 30000); // мкс, ждать не дольше 30 мс
if (duration == 0) {
Serial.println("Нет эха");
} else {
float cm = duration * 0.0343 / 2;
Serial.print(cm);
Serial.println(" см");
}
delay(100);
}Как это работает
По импульсу на Trig датчик посылает ультразвук и держит на Echo уровень HIGH, пока не вернётся эхо. pulseIn измеряет длину этого импульса в микросекундах — это время полёта звука туда и обратно.
Скорость звука при 20 °C — 343 м/с, то есть 0,0343 см за микросекунду. Расстояние:
см = время × 0,0343 / 2
Пример: эхо 1166 мкс → 1166 × 0,0343 / 2 ≈ 20,0 см. Эхо 5831 мкс → 5831 × 0,0343 / 2 ≈ 100,0 см.
Третий аргумент pulseIn — сколько ждать: 30 000 мкс хватает на 30 000 × 0,0343 / 2 ≈ 515 см, больше, чем дальность датчика. Без него pulseIn ждёт до секунды, и скетч подолгу стоит, если эхо не пришло.
Что умеет датчик
- Дальность — примерно от 2 см до 4 м; надёжно — до 2–3 м.
- Конус обзора — около 15°: датчик видит то, что прямо перед ним.
- Хуже всего отражают мягкие и наклонные поверхности: ткань, поролон, стена под углом.
- Скорость звука зависит от температуры: на морозе расстояние будет немного завышено. Для бытовых задач это неважно.
Показывает 0, «Нет эха» или скачет
- Всегда 0 или «Нет эха» — перепутаны
TrigиEcho, номер вывода в скетче не тот, что на плате, или нет питания 5 В. Проверьте и то, что перед датчиком есть препятствие в пределах 4 м. - Скачет на 1–2 см — нормально; усредните несколько измерений.
- Случайные большие выбросы — эхо от другого предмета или от второго датчика. Между измерениями делайте паузу не меньше 60 мс; несколько датчиков опрашивайте по очереди.
- Всё время одно и то же маленькое число — датчик видит край корпуса или провода перед собой.
На платах 3,3 В
Классический HC-SR04 питается от 5 В, и вывод Echo выдаёт 5 В. Для плат на 3,3 В (ESP32, Nano 33) так подключать нельзя: поставьте делитель напряжения на Echo (например, 1 кОм от Echo к выводу платы и 2 кОм от вывода платы к GND — получится 5 × 2 / (1 + 2) ≈ 3,3 В) или возьмите версию датчика, рассчитанную на 3,3 В.
Подробнее о датчиках и библиотеках — в уроке Датчики и библиотеки.