Система сигнализации с ИК-пультом и паролем на 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 для вывода статуса.

Что делать, если система не реагирует на пульт?

Проверь подключение ИК-приёмника, убедись, что батарейки в пульте рабочие, и что используешь правильную библиотеку приема.

Заключение

Система сигнализации с ИК-пультом и паролем — отличный проект для практики программирования и электроники. Он сочетает в себе обработку движения, работу с инфракрасным управлением и пользовательский ввод пароля, что делает его более сложным и интересным, чем простые охранные проекты.