DIY ультразвуковая сигнализация на Arduino: детектирование расстояния в реальном времени
Компоненты и материалы
| Arduino UNO | × | 1 |
| Макетная плата | × | 1 |
| Ультразвуковой датчик HC-SR04 | × | 1 |
| Пьезо-звукопищатель (buzzer) | × | 1 |
| Светодиоды (красный, желтый, зеленый) | × | 3 |
| Резистор 220 Ом | × | 1 |
| Перемычки (набор) | × | 10 |
О проекте
Шаг 1: Подготовка материалов

Шаг 2: Схема подключения

Соедините красный провод от 5V Arduino к плюсовой шине макетной платы, черный — от GND к минусовой шине.
- Buzzer — пин 7
- HC-SR04: Echo — пин 3, Trig — пин 2
- Светодиоды: Зеленый — пин 6, Желтый — пин 5, Красный — пин 4
Аноды (длинные ножки) светодиодов к пинам Arduino, катоды (короткие) через резистор 220 Ом к минусовой шине.
Шаг 3: Сборка на макетке — питание

Подключите 5V и GND Arduino к шинам макетной платы: 5V — к плюсовой, GND — к минусовой.
Шаг 4: Ультразвуковой датчик HC-SR04

Рекомендую ставить датчик как можно правее на макетке, «глядя» наружу. GND датчика — к минусовой шине, Trig — к пину 2 Arduino, Echo — к пину 3, VCC — к плюсовой шине.
Шаг 5: Светодиоды

Подключение каждого светодиода: анод (длинная ножка) к соответствующему пину Arduino (зеленый→6, желтый→5, красный→4), катод (короткая) через резистор 220 Ом к минусовой шине. Резисторы желательны — защищают светодиоды и ограничивают ток.
Шаг 6: Звукопищатель

Длинная ножка buzzer'а — к пину 7 Arduino, короткая — через резистор 220 Ом к минусовой шине. Резистор настоятельно рекомендуется — сильно снижает громкость и продлевает жизнь пьезоэлементу.
Код
Ultrasonic Security System (Arduino)
#define trigPin 2
#define echoPin 3
#define LEDlampRed 4
#define LEDlampYellow 5
#define LEDlampGreen 6
#define soundbuzzer 7
int sound = 500;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LEDlampRed, OUTPUT);
pinMode(LEDlampYellow, OUTPUT);
pinMode(LEDlampGreen, OUTPUT);
pinMode(soundbuzzer, OUTPUT);
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) / 29.1; // см
if (distance < 50) digitalWrite(LEDlampGreen, HIGH); else digitalWrite(LEDlampGreen, LOW);
if (distance < 20) digitalWrite(LEDlampYellow, HIGH); else digitalWrite(LEDlampYellow, LOW);
if (distance < 5) { digitalWrite(LEDlampRed, HIGH); sound = 1000; } else digitalWrite(LEDlampRed, LOW);
if (distance > 5 || distance <= 0) {
Serial.println("Outside the permissible range of distances");
noTone(soundbuzzer);
} else {
Serial.print(distance);
Serial.println(" cm");
tone(soundbuzzer, sound);
}
delay(300);
}
Примечание: в оригинальном коде были опечатки в именах переменных (distanceincm vs distance, distanceinsm) — исправлены в листинге выше.
Схемы

Производственный процесс
- Камера охраны с детектором движения на ESP32-CAM и отправкой фото в Discord
- Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
- Создание рулетки на 37 светодиодов с Arduino Nano
- Мини-аркада на ATtiny85: Snake — ручная OLED-консоль своими руками
- Портативный дальномер на Arduino Nano: HC-SR04, питание 18650, 3D-корпус
- Умный дом и система безопасности на базе 1Sheeld
- Умная система автополива растений на Arduino Nano
- Медное гальваническое покрытие: умная система на Arduino UNO
- NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10
- Создание потрясающих световых последовательностей с Arduino и сдвиговым регистром