Проект 27: инфракрасное дистанционное управление умным домом

Описание

Умные дома используют технологии Интернета вещей (IoT) и автоматизации, чтобы обеспечить людям более комфортный, удобный и безопасный образ жизни. Это охватывает многие аспекты — от освещения и безопасности до управления бытовыми приборами.

В этом проекте мы используем основную плату Arduino UNO R3, инфракрасный приемник, релейный модуль и шаговый двигатель для создания миниатюрной «системы умного дома». Вы можете использовать обычный ИК-пульт дистанционного управления для удаленного управления устройствами дома: например, с помощью реле включать или выключать «свет», а с помощью шагового двигателя управлять открытием и закрытием «штор».

Аппаратное обеспечение

  1. Плата разработки UNO R3 (CH340) × 1

  2. ИК-приемник × 1 (включая конденсаторы 100нФ и 10μФ)

  3. Релейный модуль × 1

  4. Шаговый двигатель 28BYJ-48 × 1

  5. Драйвер шагового двигателя ULN2003 × 1

  6. ИК-пульт дистанционного управления × 1

  7. Светодиод (LED) × 1 (используется для имитации бытового прибора, управляемого реле)

  8. Резистор 220Ω × 1 (для ограничения тока через светодиод)

  9. Макетная плата × 1 и несколько проводов Dupont

Принцип работы

При нажатии кнопки на пульте ИК-приемник обнаруживает определенный закодированный инфракрасный сигнал. Arduino декодирует этот сигнал и выполняет соответствующие действия в зависимости от кода:

  • Управление освещением (реле): При получении кода «Кнопка 1» Arduino переключает состояние реле (если было ВКЛ, выключает; если ВЫКЛ, включает), тем самым управляя светодиодом, подключенным к реле.

  • Управление шторами (шаговый двигатель): При получении «Кнопки 2» Arduino заставляет шаговый двигатель повернуться вперед на один полный оборот (симуляция открытия штор); при получении «Кнопки 3» — повернуться назад на один полный оборот (симуляция закрытия штор).

Схема подключения

1. ИК-приемник

  • VCC ➔ Arduino 5V

  • GND ➔ Arduino GND

  • OUT (Signal Pin)Arduino D2

2. Шаговый двигатель и драйвер (ULN2003)

  • Подключите белый разъем шагового двигателя к соответствующему гнезду на драйвере ULN2003.

  • Вход драйвера IN1Arduino D8

  • Вход драйвера IN2Arduino D10 (Примечание: согласно коду ниже, IN2 подключается к D10, IN3 — к D9)

  • Вход драйвера IN3Arduino D9

  • Вход драйвера IN4Arduino D11

  • Питание драйвера + (VCC) ➔ Arduino 5V

  • Земля драйвера - (GND) ➔ Arduino GND

3. Релейный модуль

  • Реле VCC ➔ Arduino 5V

  • Реле GND ➔ Arduino GND

  • Реле S (Signal/IN)Arduino D3

4. Имитация бытового прибора (LED, подключенный к стороне реле)

  • Подключите длинную ножку светодиода (анод) через резистор 220Ω к 5V.

  • Короткую ножку светодиода (катод) подключите к нормально разомкнутому (NO) контакту реле.

  • Общий контакт реле (COM) подключите к GND.
    Img

Пример кода

Примечание: Перед загрузкой кода убедитесь, что вы установили библиотеку IRremote (рекомендуемая версия 2.0.1) через менеджер библиотек Arduino IDE. Шестнадцатеричные коды 0xFF... в коде — примеры; замените их на реальные коды кнопок вашего пульта.

/*

Electronics Learning Starter Kit for Arduino

Project 27

infrared remote control Smart Home

Edit By Keyes

*/

#include <IRremote.h> // Include IR remote library
#include <Stepper.h>  // Include Arduino built-in stepper motor library

// --- 1. Pin and parameter definitions ---
#define IR_RECEIVE_PIN 2   // IR receiver pin D2
#define RELAY_PIN 3        // Relay control pin D3
#define STEPS_PER_REV 2048 // Number of steps for 28BYJ-48 stepper motor to complete one revolution

// --- 2. Create control objects ---
IRrecv irrecv(IR_RECEIVE_PIN); // Create IR receiver object
decode_results results;        // Store IR decode results

// Create stepper motor object; note pin order is 8, 10, 9, 11 (corresponding to IN1, IN3, IN2, IN4, which is the motor’s required driving sequence)
Stepper stepper(STEPS_PER_REV, 8, 10, 9, 11); 

void setup() {
  irrecv.enableIRIn();           // Initialize and start the IR receiver
  
  pinMode(RELAY_PIN, OUTPUT);    // Set relay pin as output
  digitalWrite(RELAY_PIN, LOW);  // Initialize relay as OFF
  
  stepper.setSpeed(10);          // Set stepper motor speed to 10 RPM
}

void loop() {
  // If an IR signal is received
  if (irrecv.decode(&results)) {
    
    // Perform actions based on received button code
    switch (results.value) {
      
      // Button 1 (example code 0xFF6897): control light (relay)
      case 0xFF6897: 
        // Toggle relay state: if ON, turn OFF; if OFF, turn ON
        digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN)); 
        break;

      // Button 2 (example code 0xFF9867): open curtains (stepper motor forward)
      case 0xFF9867: 
        // Rotate stepper motor forward one full revolution (2048 steps)
        stepper.step(STEPS_PER_REV); 
        break;

      // Button 3 (example code 0xFFB04F): close curtains (stepper motor backward)
      case 0xFFB04F: 
        // Rotate stepper motor backward one full revolution (-2048 steps)
        stepper.step(-STEPS_PER_REV); 
        break;
    }
    
    // Resume IR receiver to get next signal
    irrecv.resume(); 
  }
}

Объяснение кода

1. Подключение необходимых библиотек:

#include <IRremote.h>
#include <Stepper.h>

Библиотека IRremote.h позволяет Arduino распознавать «коды», посылаемые ИК-пультом дистанционного управления. Библиотека Stepper.h — официальная библиотека Arduino для точного управления углами и направлением вращения шагового двигателя (здесь используется для имитации движения штор).

2. Инициализация объектов:

Stepper stepper(STEPS_PER_REV, 8, 10, 9, 11);

Эта строка очень важна. Из-за внутреннего расположения обмоток шагового двигателя 28BYJ-48 для обеспечения плавного вращения порядок пинов, передаваемых в код, должен быть 8, 10, 9, 11 (соответствует входам драйвера IN1, IN3, IN2, IN4). Это называется последовательностью полушага.

3. Логика переключения реле:

digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN));

Это классический код «переключения одной кнопкой». Сначала считывается текущее состояние реле с помощью digitalRead, затем оператор ! (НЕ) инвертирует состояние, и с помощью digitalWrite записывается противоположное состояние. Таким образом, одно нажатие кнопки включает реле, второе — выключает.

4. Вращение шагового двигателя:

stepper.step(STEPS_PER_REV);
stepper.step(-STEPS_PER_REV);

Функция step() заставляет двигатель повернуться на заданное количество шагов. Поскольку мы определили STEPS_PER_REV = 2048, передача 2048 заставляет мотор сделать один полный оборот вперед (открытие штор), а передача -2048 — один полный оборот назад (закрытие штор). Программа приостанавливается на этой строке, пока мотор не выполнит все шаги.

Результат проекта

После загрузки кода и подачи питания на схему вы сможете управлять умным домом:

  1. Управление светом: Нажмите «Кнопку 1» на пульте — вы услышите щелчок реле, и светодиод включится; нажмите «Кнопку 1» снова — реле щелкнет, и светодиод выключится.

  2. Открытие штор: Нажмите «Кнопку 2», светодиод индикатора шагового двигателя заморгает, и вал мотора плавно повернется по часовой стрелке на один полный оборот, имитируя медленное открытие штор.

  3. Закрытие штор: Нажмите «Кнопку 3», шаговый двигатель повернется против часовой стрелки на один полный оборот, возвращаясь в исходное положение, имитируя закрытие штор.

С помощью этого проекта вы наглядно поймете, как бытовые приборы и устройства автоматизации могут централизованно управляться с помощью беспроводных сигналов!

P27