
Интернет-магазин «Неглупый Дом»
HC-SR04 постоянно измеряет расстояние до противоположной стены или косяка двери. Как только между датчиком и стеной появляется препятствие ближе установленного порога — включается сирена.
HC-SR04 измеряет расстояние методом эхолокации: передатчик испускает короткий импульс ультразвука (около 40 кГц, выше порога слышимости человека), а приёмник ждёт отражённую волну. Время между отправкой и приёмом эха прямо пропорционально пройденному звуком расстоянию (туда и обратно), поэтому формула деления на 58 переводит микросекунды полёта звука в сантиметры с учётом скорости звука в воздухе.
В отличие от ИК-барьера (где нужны два модуля по разные стороны проёма), здесь достаточно одного датчика, направленного на противоположную стену или косяк: он постоянно замеряет расстояние до неё, и когда в проёме появляется препятствие (человек), измеренное расстояние резко уменьшается — это и есть сигнал тревоги.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, что указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
const int trigPin = 9;
const int echoPin = 10;
const int buzzerPin = 8;
const int thresholdCm = 80; // расстояние до стены при пустом проходе
long getDistanceCm() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
return duration / 58; // перевод времени полёта звука в сантиметры
}
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
}
void loop() {
long distance = getDistanceCm();
Serial.print("Расстояние, см: ");
Serial.println(distance);
if (distance > 0 && distance < thresholdCm) {
tone(buzzerPin, 1500);
} else {
noTone(buzzerPin);
}
delay(100);
}
Порог `thresholdCm` нужно откалибровать под конкретный проём — измерьте штатное расстояние до стены через Serial-монитор и возьмите значение чуть меньше него.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 195 ₽ 176 ₽ (экономия 19 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.