Arduino-сигнализация: датчик движения, мигающие огни и пронзительная сирена

В этом проекте мы обнаруживаем движение и “пугаем” незваного гостя пронзительным звуком и мигающими огнями. Цель — показать, как собрать такое устройство полностью с нуля: сначала тестируем каждую часть по отдельности, затем объединяем в единый скетч.
Важно: это учебный проект. Он может напугать соседского кота или сестру, но не заменяет полноценных средств безопасности.
Что понадобится
- Плата Arduino (Uno / Nano / совместимая)
- Ультразвуковой модуль HC-SR04 (или PIR-датчик — более подходящий для дверей, но дороже)
- Пьезоизлучатель (пиезобуззер)
- RGB-светодиодная лента 5 В (с MOSFET/драйвером, если лента потребляет существенный ток)
- Провода, макетная плата, источник питания 5 В для ленты
Примечание: не запитывайте длинную LED-ленту напрямую с 5 В пина Arduino — используйте отдельный блок питания и общую землю.
Структура статьи
- Тестируем RGB-ленту (мигающие огни)
- Подключаем и тестируем HC-SR04 (датчик расстояния)
- Тестируем пьезоизлучатель
- Собираем полный скетч и отлаживаем
- Советы по питанию, отладке и альтернативы
Важно: всегда подключайте общий провод (GND) между Arduino и внешними источниками питания.
Подготовка проводки — постепенно
Не снимайте и не переделывайте полностью сборку на каждом шаге. Постепенно добавляйте новые модули поверх проверенной схемы. К моменту интеграции у вас должна получиться примерно такая схемa:
Мигающие огни
Подключите RGB-ленту так же, как в базовом руководстве по RGB, используйте PWM-выходы Arduino для управления каналами. Не меняйте номера пинов, если хотите повторять примеры ниже (мы используем 10, 11 и 9 — они поддерживают PWM).
Для быстрой проверки можно загрузить простой скетч, который моргает цветами. Если всё подключено правильно, вы увидите мигание.
Датчик расстояния HC-SR04
На модуле SR04 четыре вывода: VCC, GND, TRIG и ECHO.
- VCC → +5 В
- GND → GND
- TRIG → цифровой пин 6
- ECHO → цифровой пин 7
Для упрощения работы мы будем использовать библиотеку NewPing. Скачайте её и поместите в папку Libraries вашей IDE Arduino, затем перезапустите среду.
Откройте монитор порта (115200 бод) и запустите тестовый скетч — вы должны увидеть вывод измерений расстояния в сантиметрах с периодичностью около 20 измерений в секунду.
Пояснение: NewPing возвращает время в микросекундах между посылкой и приёмом эха. Для перевода в сантиметры используется константа US_ROUNDTRIP_CM.
Пьезоизлучатель
Пьезо — простой компонент. Подключите один контакт к пину 3 (PWM), другой — к GND. Нельзя забывать, что громкий звук беспокоит окружающих.
Тональность генерируется посредством изменения частоты сигнала. Пьезо может потребовать небольшой транзистор/драйвер для более громкого звука, но для теста достаточно прямого подключения.
Кодирование: объединяем всё вместе
Создайте новый скетч с именем Alarm и поэтапно объединяйте переменные и объявления из тестов. Ниже — весь объединённый рабочий пример. Перед использованием убедитесь, что установлены библиотеки NewPing и NewTone.
#include
#include
// Выбор PWM-выходов для RGB-ленты
#define RED_PIN 10
#define GREEN_PIN 11
#define BLUE_PIN 9
#define TRIGGER_PIN 6 // TRIG на ультразвуковом датчике
#define ECHO_PIN 7 // ECHO на ультразвуковом датчике
#define MAX_DISTANCE 100 // Максимальная дальность пинга в сантиметрах, для детейлирования можно увеличить
#define ALARM 3 // Пьезо на пине 3
float sinVal;
int toneVal;
// Инициализация NewPing (пины TRIG, ECHO и максимально измеряемая дистанция)
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
boolean triggered = false; // Состояние срабатывания
void setup(){
// Настройка пинов для RGB-ленты
pinMode(RED_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
// Сброс значений света
analogWrite(RED_PIN, 0);
analogWrite(BLUE_PIN, 0);
analogWrite(GREEN_PIN, 0);
// Пьезо
pinMode(ALARM, OUTPUT);
Serial.begin(115200); // Для отладки
// Небольшая задержка перед запуском главного цикла (даёт время отступить)
delay(5000);
}
// Вспомогательная функция для отправки RGB-значения одним вызовом
void color(unsigned char red, unsigned char green, unsigned char blue)
{
analogWrite(RED_PIN, red);
analogWrite(BLUE_PIN, blue);
analogWrite(GREEN_PIN, green);
}
// Функция тревоги: мигающие огни + пьезо
void alarm(){
// Запускаем цикл формирующий звуковой эффект и мигающий свет
for (int x = 0; x < 180; x++) {
// Получаем синус для модуляции частоты
sinVal = sin(x * (3.1412 / 180.0));
toneVal = 2000 + (int)(sinVal * 1000.0);
// Включаем тон (NewTone — неглобально совместима с NewPing по прерываниям без конфликта)
NewTone(ALARM, toneVal);
// Мигаем цветами: чередуем красный и жёлтый
if (x % 2 == 0) color(255, 0, 0); // красный
else color(255, 255, 0); // желтый
delay(10); // Небольшая задержка для ритма
}
// Остановим тон
NewTone(ALARM, 0);
}
void loop(){
if (triggered == true) {
alarm();
}
else {
delay(50); // Ждём 50 мс между пингами (~20 измерений/с)
unsigned int uS = sonar.ping(); // Посылаем пинг, получаем время в микросекундах
unsigned int distance = uS / US_ROUNDTRIP_CM; // Переводим в сантиметры
Serial.println(distance);
// Если расстояние меньше порога — срабатывает сигнализация
// Порог можно изменить по месту, здесь установлен 50 см
if (distance > 0 && distance < 50) {
triggered = true;
}
}
} Короткие пояснения по коду:
- Мы постоянно опрашиваем датчик, получаем расстояние и печатаем его в Serial.
- Если расстояние меньше порогового значения (здесь 50 см), устанавливаем triggered = true и запускаем alarm().
- alarm() запускает короткий цикл, генерирующий синусоидально-модулированную тональность и мигающие цвета.
Практические замечания и безопасность
- Источник питания: если LED-лента длинная или яркая, используйте отдельный 5 В блок питания с достаточной силой тока (многими амперами). Не тяните ток ленты от 5 В пина Arduino.
- Общая земля: обязательно свяжите GND Arduino и GND внешнего источника питания.
- Ток и нагрев: контролируйте температуру MOSFET’ов/транзисторов и качество соединений.
- Датчики PIR лучше подходят для обнаружения человека по движению тела; HC-SR04 чувствителен к преградам и может «видеть» через небольшие проёмы.
Заметка: при тестировании предупредите домашних, чтобы не пугать людей и животных громкими звуками.
Отладка — типичные проблемы и способы решения
- Нулевой вывод в Serial: проверьте скорость (115200) и подключение питания к модулю SR04.
- Некорректные показания расстояния: откалибруйте MAX_DISTANCE, проверьте, не мешает ли отражение (блестящие поверхности дают ложные показания).
- Конфликт прерываний между libraries: если стандартная tone вызывает конфликты с NewPing, используйте NewTone (как в примере) или иначе разделите время выполнения.
- Лента не светится: проверьте питание 5 В напрямую, проверьте общую землю и наличие MOSFET/транзистора для управления каналами.
Альтернативные подходы и расширения
- Использовать PIR-датчик (например, HC-SR501) вместо HC-SR04 для надёжного обнаружения людей и снижения ложных срабатываний.
- Добавить кнопку сброса/отключения, чтобы можно было выключить сигнализацию вручную.
- Подключить реле и отправлять SMS/уведомление на телефон (через GSM- или Wi‑Fi-модуль).
- Использовать MOSFET-драйверы для управления мощными светодиодными лентами.
Мини-методология разработки (итеративный подход)
- Соберите и проверьте RGB-ленту (мигает, PWM работает).
- Соберите и проверьте HC-SR04 отдельно, убедитесь, что Serial показывает расстояние.
- Подключите пьезо и протестируйте простую тональность.
- Объедините всё в один скетч, сначала без звука — только свет по триггеру.
- Добавьте звук, проверяйте конфликт библиотек и питание.
Критерии приёмки
- Arduino выводит адекватные значения расстояния в Serial.
- При приближении на порог (≈50 см) RGB-лента начинает мигать.
- Пьезо генерирует заметный звук при срабатывании.
- Устройство не перегревается и блок питания держит нагрузку.
Тесты и сценарии проверки
- Прохожу рукой перед датчиком — система должна сработать.
- Отключаю питание ленты — Arduino продолжает работать и показывает расстояние.
- Меняю порог в коде и проверяю, что срабатывание происходит при нужном расстоянии.
Сравнение датчиков (кратко)
- HC-SR04: хорошо для измерения расстояний и визуальных экспериментов.
- PIR: лучше для обнаружения живых существ и экономии энергии.
Короткий словарь терминов
- PWM — широтно-импульсная модуляция для регулировки яркости.
- PIR — пассивный инфракрасный датчик движения.
- NewPing / NewTone — библиотеки Arduino для работы с ультразвуком и альтернативной функцией генерации тонов.
Быстрая памятка по безопасности
- Используйте отдельный источник питания для ленты.
- Всегда общая земля между устройствами.
- Не оставляйте громкий сигнал включённым длительное время рядом с домашними животными.
Короткое резюме
- Сначала тестируйте подсистемы по отдельности.
- NewPing упрощает работу с HC-SR04, NewTone помогает избежать конфликтов с tone().
- Обратите внимание на питание и тепловой режим при подключении светодиодных лент.
Если при сборке или компиляции возникают ошибки, опишите текст ошибки и окружение (плата Arduino, версия IDE, установленные библиотеки), и я помогу диагностировать проблему.
Image credit: Fire Alarm via Flickr
Похожие материалы
Nearby Share на Android — настройка и использование
Менеджер паролей на Android: автозаполнение
Восстановление пароля Gmail — пошаговое руководство
Найти и изменить пароль Wi‑Fi в Windows 10
Алиасы в Gmail: создание, настройка и безопасность