Проект 27: инфракрасное дистанционное управление умным домом
Описание
Умные дома используют технологии Интернета вещей (IoT) и автоматизации, чтобы обеспечить людям более комфортный, удобный и безопасный образ жизни. Это охватывает многие аспекты — от освещения и безопасности до управления бытовыми приборами.
В этом проекте мы используем основную плату Arduino UNO R3, инфракрасный приемник, релейный модуль и шаговый двигатель для создания миниатюрной «системы умного дома». Вы можете использовать обычный ИК-пульт дистанционного управления для удаленного управления устройствами дома: например, с помощью реле включать или выключать «свет», а с помощью шагового двигателя управлять открытием и закрытием «штор».
Аппаратное обеспечение
Плата разработки UNO R3 (CH340) × 1
ИК-приемник × 1 (включая конденсаторы 100нФ и 10μФ)
Релейный модуль × 1
Шаговый двигатель 28BYJ-48 × 1
Драйвер шагового двигателя ULN2003 × 1
ИК-пульт дистанционного управления × 1
Светодиод (LED) × 1 (используется для имитации бытового прибора, управляемого реле)
Резистор 220Ω × 1 (для ограничения тока через светодиод)
Макетная плата × 1 и несколько проводов Dupont
Принцип работы
При нажатии кнопки на пульте ИК-приемник обнаруживает определенный закодированный инфракрасный сигнал. Arduino декодирует этот сигнал и выполняет соответствующие действия в зависимости от кода:
Управление освещением (реле): При получении кода «Кнопка 1» Arduino переключает состояние реле (если было ВКЛ, выключает; если ВЫКЛ, включает), тем самым управляя светодиодом, подключенным к реле.
Управление шторами (шаговый двигатель): При получении «Кнопки 2» Arduino заставляет шаговый двигатель повернуться вперед на один полный оборот (симуляция открытия штор); при получении «Кнопки 3» — повернуться назад на один полный оборот (симуляция закрытия штор).
Схема подключения
1. ИК-приемник
VCC➔ Arduino 5VGND➔ Arduino GNDOUT (Signal Pin)➔ Arduino D2
2. Шаговый двигатель и драйвер (ULN2003)
Подключите белый разъем шагового двигателя к соответствующему гнезду на драйвере ULN2003.
Вход драйвера
IN1➔ Arduino D8Вход драйвера
IN2➔ Arduino D10 (Примечание: согласно коду ниже, IN2 подключается к D10, IN3 — к D9)Вход драйвера
IN3➔ Arduino D9Вход драйвера
IN4➔ Arduino 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.

Пример кода
Примечание: Перед загрузкой кода убедитесь, что вы установили библиотеку 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» снова — реле щелкнет, и светодиод выключится.
Открытие штор: Нажмите «Кнопку 2», светодиод индикатора шагового двигателя заморгает, и вал мотора плавно повернется по часовой стрелке на один полный оборот, имитируя медленное открытие штор.
Закрытие штор: Нажмите «Кнопку 3», шаговый двигатель повернется против часовой стрелки на один полный оборот, возвращаясь в исходное положение, имитируя закрытие штор.
С помощью этого проекта вы наглядно поймете, как бытовые приборы и устройства автоматизации могут централизованно управляться с помощью беспроводных сигналов!
