Подключение HC-SR04 к Arduino
Ультразвуковой датчик расстояния
К Arduino Uno и Nano HC-SR04 подключается без дополнительных деталей: питание 5 В, земля и два цифровых вывода под TRIG и ECHO. Уровни датчика и платы совпадают, делитель не нужен.
Схема подключения HC-SR04 к Arduino
| HC-SR04 | Arduino Uno |
|---|---|
| ECHO | D7 |
| TRIG | D6 |
| VCC | 5V |
| GND | GND |
Схема из примера «Arduino Uno: дальномер HC-SR04».
Выводы HC-SR04
| Вывод | Назначение |
|---|---|
| ECHO | выход: длительность высокого уровня — время полёта звука |
| TRIG | вход запуска: импульс 10 мкс начинает измерение |
| VCC | питание 5 В |
| GND | общий провод |
Код для Arduino
// Дальномер: импульс туда, время обратно.
//
// Работает он буквально как эхолот. На TRIG подаётся импульс в 10
// микросекунд, датчик пищит ультразвуком, а на ECHO держит высокий
// уровень ровно столько, сколько звук летел туда и обратно.
//
// Дальше — арифметика. Звук идёт примерно 343 метра в секунду, то есть
// 29 микросекунд на сантиметр. Путь двойной, поэтому делим ещё на два:
//
// расстояние = время / 29 / 2
//
// Библиотека здесь не нужна: весь датчик — это два вывода и pulseIn.
// Заодно видно, чем он занят, а не только результат.
//
// Таймаут в pulseIn обязателен. Без него функция ждёт ответа вечно, и
// отвалившийся провод превращается в зависшую плату. 30 миллисекунд —
// это примерно пять метров, дальше датчик всё равно не видит.
//
// Крутите ползунок расстояния на детали.
const int TRIG = 6;
const int ECHO = 7;
void setup() {
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
unsigned long us = pulseIn(ECHO, HIGH, 30000UL);
if (us == 0) {
Serial.println(F("нет ответа: слишком далеко или провод отошёл"));
} else {
float cm = us / 29.0 / 2.0;
Serial.print("cm:");
Serial.println(cm, 1);
}
delay(200);
}
Скетч можно править и запускать в симуляторе без платы и установки среды.
Что учесть на Arduino
- Подойдёт любой цифровой вывод; TRIG и ECHO удобно брать на соседние, например D6 и D7.
pulseIn(ECHO, HIGH, 30000)с тайм-аутом 30 мс не зависает, если эха нет; расстояние в сантиметрах — длительность в микросекундах, делённая на 58.
Частые ошибки при подключении к Arduino
- Измерять чаще раза в 60 мс: эхо предыдущего импульса принимается за новое, и показания скачут.
- Питать датчик от вывода 3,3 В платы: ему нужны именно 5 В, на 3,3 В показания нестабильны.
- Измерения чаще раза в 60 мс: эхо от прошлого импульса принимается за новое, и расстояние скачет.
pulseInбез тайм-аута: если эха нет (цель дальше 4 м или мягкая), скетч ждёт секунду. Передавайте третий аргумент, например 30000 мкс.- Мягкие и наклонные поверхности — ткань, поролон, стена под углом — рассеивают звук, и датчик их «не видит».
Ещё по теме
- плата Подключение HC-SR04 к ESP32
- деталь HC-SR04: подключение к ESP32 и Arduino
- калькулятор Делитель напряжения
Другие детали для Arduino
DHT22 (AM2302)BME280DS3231SSD1306 OLED 0,96″LCD 1602 с I2CMAX7219TM1637Модуль релеKY-040Клавиатура 4×4HX711ФоторезисторМодуль microSDRGB-светодиодСервопривод SG9074HC595Шаговый двигательКнопкаПотенциометрПьезопищалкаСветодиодПолзунковый переключательHC-SR501TTP223Датчик влажности почвыMQ-2LM35Джойстик KY-023DHT11HTU21D