Проект 26: Вентилятор с ИК-пультом
Введение в проект
В этом проекте мы объединим «технологию инфракрасного дистанционного управления» с «технологией управления двигателем постоянного тока», чтобы создать умный вентилятор, которым можно управлять беспроводным пультом. Инфракрасные пульты широко используются в бытовой технике, такой как телевизоры и кондиционеры. Мы будем использовать модуль ИК-приёмника для захвата сигналов, посылаемых пультом (например, кнопки «вперёд», «назад» и «стоп»). После декодирования этих сигналов с помощью Arduino мы будем командовать микросхеме L293D изменять состояние работы вентилятора (двигателя постоянного тока), обеспечивая полноценное дистанционное управление.
Аппаратная часть проекта
Для выполнения проекта потребуются следующие компоненты:
Плата разработки UNO R3 (CH340) × 1
ИК-пульт дистанционного управления × 1
ИК-приёмный модуль × 1 (если используется голый компонент, добавьте конденсаторы 100нФ и 10μФ по необходимости)
Микросхема драйвера мотора L293D × 1
Двигатель постоянного тока 130 × 1
Батарейка 9В и держатель для батарейки × 1 (для независимого питания мотора)
Макетная плата × 1 и несколько проводов Dupont
Принцип работы проекта
Проект включает скоординиренную работу двух независимых систем:
Декодирование инфракрасного сигнала (ИК-декодирование):
ИК-пульт излучает инфракрасные световые сигналы, модулированные несущей частотой 38 кГц, через передний ИК-светодиод. ИК-приёмник улавливает этот свет, фильтрует помехи окружающей среды и преобразует его обратно в электрические сигналы. Arduino с помощью библиотекиIRremoteдекодирует эти сигналы по протоколу NEC, преобразуя их в уникальные шестнадцатеричные (HEX) коды. Каждая кнопка соответствует уникальному коду.Управление мотором:
После получения декодированного кода кнопки Arduino выполняет логическую проверку (например, нажата ли кнопка «вверх»?). После подтверждения команды Arduino посылает соответствующий PWM-сигнал скорости и сигналы высокого/низкого уровня направления на микросхему L293D. Используя внутреннюю схему H-моста L293D, он безопасно управляет вращением мотора вперёд, назад или торможением.
Установка библиотеки (Установка библиотеки IRremote)
Перед написанием кода необходимо установить специальную библиотеку для ИК-пульта:
В Arduino IDE нажмите в меню Инструменты -> Управление библиотеками….
В появившемся окне менеджера библиотек в поле поиска введите
IRremote.Найдите библиотеку с названием
IRremote, выберите версию2.0.1из выпадающего списка версий (чтобы соответствовать синтаксису этого урока, не устанавливайте последнюю версию), затем нажмите «Установить».Дождитесь, пока статус не изменится на «Установлено», затем закройте окно.
Схема подключения
1. Контакты ИК-приёмника
VCC➔ Подключить к 5V ArduinoGND➔ Подключить к общему GND макетной платыOUT (сигнальный пин)➔ Подключить к Arduino D2
2. Контакты драйвера мотора L293D
Pin 1 (Enable 1)➔ Подключить к Arduino D10 (управление скоростью PWM)Pin 2 (Input 1)➔ Подключить к Arduino D11 (направление 1)Pin 7 (Input 2)➔ Подключить к Arduino D9 (направление 2)Pin 3 (Output 1)➔ Подключить к одному из выводов двигателя постоянного токаPin 6 (Output 2)➔ Подключить к другому выводу двигателя постоянного токаPin 16 (VCC1)➔ Подключить к 5V Arduino (питание логики микросхемы)Pin 8 (VCC2)➔ Подключить к положительному выводу батарейки 9V (независимое питание вентилятора)Pin 4, 5 (GND)➔ Подключить к общему GND макетной платы (Важно: GND Arduino и отрицательный вывод батарейки 9V должны иметь общий общий провод)

Пример кода
Примечание: У разных пультов разные коды кнопок. Шестнадцатеричные коды, используемые ниже (например, 0xFF629D), являются примерами с распространённых пультов на рынке. Если кнопки вашего пульта не реагируют, откройте Монитор порта, нажмите кнопку, запишите отображаемый HEX-код и замените соответствующие операторы case в коде.
/*
Electronics Learning Starter Kit for Arduino
Project 26
IR Remote Fan
Edit By Keyes
*/
#include <IRremote.h> // Include IR library (version 2.0.1 required)
// --- 1. IR Receiver Pin Definition and Object Creation ---
const int RECV_PIN = 2; // IR receiver signal pin D2
IRrecv irrecv(RECV_PIN); // Create IR receiver object
decode_results results; // Object to store decoding results
// --- 2. L293D Motor Control Pin Definition ---
const int enablePin = 10; // D10: motor speed control (PWM)
const int in1Pin = 11; // D11: motor direction 1
const int in2Pin = 9; // D9: motor direction 2
void setup() {
Serial.begin(9600); // Initialize serial port at 9600 baud
irrecv.enableIRIn(); // Start the IR receiver
// Set motor pins as outputs
pinMode(enablePin, OUTPUT);
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);
Serial.println("System initialized, waiting for IR signals...");
}
void loop() {
// If an IR signal is received and decoded successfully
if (irrecv.decode(&results)) {
// Print the received hexadecimal IR code to the serial monitor
Serial.print("Received IR code: 0x");
Serial.println(results.value, HEX);
// Execute corresponding action based on received button code
switch (results.value) {
// Button 1 (example code): Forward rotation (replace with your remote's "up" key code)
case 0xFF629D:
setMotor(255, false); // Full speed forward
Serial.println("Action: Fan forward (FORWARD)");
break;
// Button 2 (example code): Reverse rotation (replace with your remote's "down" key code)
case 0xFFA857:
setMotor(255, true); // Full speed backward
Serial.println("Action: Fan backward (BACKWARD)");
break;
// Button 3 (example code): Stop (replace with your remote's "OK" or "stop" key code)
case 0xFF02FD:
setMotor(0, false); // Speed zero, stop
Serial.println("Action: Fan stop (STOP)");
break;
default:
// Unknown button, do nothing
break;
}
// Prepare to receive the next signal
irrecv.resume();
}
delay(100); // Slight delay to avoid excessive reading from rapid button presses
}
// --- 3. Custom Motor Control Function ---
void setMotor(int speed, boolean reverse) {
analogWrite(enablePin, speed);
digitalWrite(in1Pin, !reverse);
digitalWrite(in2Pin, reverse);
}
Объяснение кода
Подключение и инициализация:
#include <IRremote.h>импортирует библиотеку. Вsetup()функцияirrecv.enableIRIn()активирует приёмник для прослушивания сигнала 38 кГц на пине D2.Декодирование и обнаружение:
irrecv.decode(&results)— основная функция. Она постоянно слушает и возвращаетtrue, когда нажата кнопка пульта, сохраняя декодированный уникальный код вresults.value.Логика switch-case: После получения кода программа использует оператор
switchдля сопоставления. Если совпадаетcase 0xFF629D:, программа понимает, что нужно включить вентилятор, и вызывает пользовательскую функциюsetMotor(255, false).Сброс приёмника:
irrecv.resume()— часто забываемая, но критически важная строка. Она очищает буфер и готовит приёмник к приёму следующей команды. Без неё приёмник работает только один раз.
Наблюдения при эксперименте
После подключения и загрузки кода откройте Монитор порта в Arduino IDE и установите скорость передачи в правом нижнем углу на
9600.Направьте пульт на ИК-приёмник и нажимайте кнопки. В Мониторе порта будут отображаться шестнадцатеричные коды, например,
0xFF629D.Важный шаг отладки: Измените значения
0xFFxxxxв оператореswitchв примере кода согласно фактическим кодам вашего пульта, затем заново загрузите код.После отладки: при нажатии определённой кнопки вентилятор будет вращаться вперёд на полной скорости; при нажатии другой — назад на полной скорости; при нажатии кнопки стоп — плавно тормозить и останавливаться. Теперь у вас есть умный вентилятор, управляемый пультом от телевизора!
