Система сигнализации с ИК-пультом и паролем на Arduino
В этом проекте мы создадим простую, но эффективную систему домашней сигнализации на базе Arduino. Она реагирует на движение, включает тревогу и позволяет пользователю **включать и выключать систему с помощью ИК-пульта и пароля**. Когда система активирована, датчик движения проверяет наличие активности. При обнаружении движения включается звуковой и световой сигнал. Для отключения сигнализации нужно ввести установленный паролем код с ИК-пульта.
Такой проект отлично подходит для обучения работе с инфракрасными пультами дистанционного управления, обработкой паролей, дисплеями LCD и PIR-датчиками движения. Он может быть полезным как для домашней сигнализации, так и просто как учебный опыт для новичков в электронике и Arduino.
Что понадобится для проекта
- Arduino Uno или аналогичная плата
- ИК-приёмник для дистанционного пульта
- Пульт дистанционного управления (ИК-remote)
- PIR-датчик движения
- Буззер (зуммер) для сигнала тревоги
- Светодиод или лампочка для визуального сигнала
- 16×2 LCD-дисплей с интерфейсом I²C для показа статуса
- Резисторы, провода и макетная плата
Назначение выводов Arduino
| Компонент | Пин Arduino | Роль |
|---|---|---|
| ИК-приёмник | D7 | Считывание сигналов ИК-пульта |
| PIR-датчик движения | D6 | Обнаружение движения |
| Зуммер | D5 | Сигнал тревоги |
| Свет (лампочка/LED) | D4 | Визуальный сигнал |
| LCD RS | D8 | Управление LCD |
| LCD E | D9 | Enable для LCD |
| LCD DB4 | D10 | LCD данные |
| LCD DB5 | D11 | LCD данные |
| LCD DB6 | D12 | LCD данные |
| LCD DB7 | D13 | LCD данные |
Как работает система
Сигнализация использует PIR-датчик, который отслеживает движение в зоне покрытия. Если система активирована и датчик обнаруживает движение, Arduino включает зуммер и световой индикатор, а на LCD-дисплей выводится сообщение о тревоге. Система продолжит сигнализировать до тех пор, пока пользователь не введёт правильный код с ИК-пульта.
ИК-пульт используется для ввода трёхзначного пароля. Arduino считывает поступающие IR-коды и сопоставляет их с ожидаемым паролем. Если введённый код совпадает с паролем — система переключается между активным и неактивным состоянием. LCD-дисплей отображает, активирована система или отключена, а также показывает информационные сообщения во время ввода пароля.
Как узнать коды кнопок своего ИК-пульта
Перед тем как задать пароль, необходимо узнать числовые коды кнопок именно вашего ИК-пульта. Для этого используется простой тестовый скетч, который выводит коды нажатых кнопок в Serial Monitor.
Загрузите следующий скетч в Arduino:
#include <IRremote.h>
void setup() {
Serial.begin(9600);
IrReceiver.begin(7);
}
void loop() {
if (IrReceiver.decode()) {
Serial.println(IrReceiver.decodedIRData.command);
IrReceiver.resume();
}
}
После загрузки откройте Serial Monitor и установите скорость 9600 бод. Нажимайте кнопки на ИК-пульте и смотрите, какие числа появляются в окне монитора порта.
Каждое число соответствует одной кнопке пульта. Эти значения можно использовать для создания пароля в основном скетче сигнализации.
Пример скетча Arduino
#include <LiquidCrystal.h>
#include <IRremote.h>
// ===== НАСТРОЙКИ ПАРОЛЯ =====
const int PASS[3] = {17, 17, 12}; // код кнопок пульта
int userInput[3];
int inputIndex = 0;
// ===== ПИНЫ =====
const int IR_PIN = 7;
const int PIR_PIN = 6;
const int BUZZER = 5;
const int LIGHT = 4;
// ===== СОСТОЯНИЯ =====
bool alarmEnabled = false;
int pirState = LOW;
// ===== LCD =====
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
void setup() {
lcd.begin(16, 2);
lcd.print("ALARM: OFF");
pinMode(BUZZER, OUTPUT);
pinMode(LIGHT, OUTPUT);
pinMode(PIR_PIN, INPUT);
IrReceiver.begin(IR_PIN);
}
void loop() {
checkPIR();
int code = readInfrared();
if (code != -1) {
processCode(code);
}
}
// ===== ЧТЕНИЕ PIR =====
void checkPIR() {
pirState = digitalRead(PIR_PIN);
if (alarmEnabled && pirState == HIGH) {
digitalWrite(BUZZER, HIGH);
digitalWrite(LIGHT, HIGH);
lcd.setCursor(0, 1);
lcd.print("INTRUDER ALERT ");
} else {
digitalWrite(BUZZER, LOW);
digitalWrite(LIGHT, LOW);
}
}
// ===== ЧТЕНИЕ ИК ПУЛЬТА =====
int readInfrared() {
if (IrReceiver.decode()) {
int value = IrReceiver.decodedIRData.command;
IrReceiver.resume();
return value;
}
return -1;
}
// ===== ОБРАБОТКА КОДА =====
void processCode(int code) {
userInput[inputIndex] = code;
inputIndex++;
lcd.setCursor(inputIndex - 1, 1);
lcd.print("*");
if (inputIndex >= 3) {
checkPassword();
inputIndex = 0;
lcd.setCursor(0, 1);
lcd.print(" ");
}
}
// ===== ПРОВЕРКА ПАРОЛЯ =====
void checkPassword() {
bool correct = true;
for (int i = 0; i < 3; i++) {
if (userInput[i] != PASS[i]) {
correct = false;
break;
}
}
lcd.clear();
if (correct) {
alarmEnabled = !alarmEnabled;
if (alarmEnabled) {
lcd.print("ALARM: ON");
} else {
lcd.print("ALARM: OFF");
}
} else {
lcd.print("WRONG CODE");
delay(1500);
lcd.clear();
lcd.print(alarmEnabled ? "ALARM: ON" : "ALARM: OFF");
}
}
В этом скетче Arduino считывает сигналы с ИК-приёмника, отслеживает PIR-датчик и управляет зуммером и светом. При получении трёх цифр ИК-пульта с помощью `processCode()` происходит проверка пароля и изменение состояния сигнализации.
FAQ — Сигнализация с ИК-пультом и паролем
Что делает PIR-датчик?
PIR-датчик измеряет движение человека или животного по изменению инфракрасного излучения. Когда рядом кто-то проходит, он подаёт сигнал Arduino.
Можно ли сменить пароль?
Да. Пароль хранится в массиве `PASS[]` в коде. Его можно изменить на любой другой трёхзначный код.
Какой пульт подходит?
Любой инфракрасный пульт с стандартной частотой 38 кГц и выдающий легко декодируемые коды команд.
Можно ли заменить LCD-дисплей?
Да, вместо LCD можно использовать OLED или Serial Monitor для вывода статуса.
Что делать, если система не реагирует на пульт?
Проверь подключение ИК-приёмника, убедись, что батарейки в пульте рабочие, и что используешь правильную библиотеку приема.
Заключение
Система сигнализации с ИК-пультом и паролем — отличный проект для практики программирования и электроники. Он сочетает в себе обработку движения, работу с инфракрасным управлением и пользовательский ввод пароля, что делает его более сложным и интересным, чем простые охранные проекты.