4.07.2. Лабораторная работа №4.7.2.md
ИК-пульт и ИК-приемник
Тема работы
В этой лабораторной работе мы сделаем наши проекты по-настоящему беспроводными! Мы познакомимся с инфракрасным (ИК) пультом и ИК-приёмником — технологией, которая используется в пультах от телевизоров, кондиционеров и музыкальных центров. Мы научимся считывать и декодировать сигналы от пульта, чтобы управлять Рудироном
на расстоянии, и разберёмся, как правильно обрабатывать не только одиночные нажатия, но и зажатие кнопок.
Цель
- Понять принцип работы ИК-связи.
- Научиться использовать библиотеку
Rudiron_IRremote
для приёма и декодирования ИК-сигналов. - Определять уникальные коды кнопок пульта.
- Реализовать управление светодиодом, включая правильную обработку зажатия кнопки.
Оборудование и материалы
- Отладочная плата
Рудирон
. - Макетная плата.
- ИК-приёмник.
- ИК-пульт.
- Соединительные провода.
- USB-кабель для подключения
Рудирона
. - Компьютер с
Arduino IDE
и установленной библиотекойRudiron_IRremote
.
Ход работы
-
Как работает ИК-управление?
- Пульт (передатчик). Когда вы нажимаете кнопку, ИК-светодиод на пульте начинает очень быстро мигать (обычно с частотой 38 кГц), отправляя закодированную последовательность импульсов. У каждой кнопки — своя уникальная «морзянка».
- Приёмник. Он отфильтровывает видимый свет, «очищает» сигнал от несущей частоты 38 кГц и на своём выходе (
Signal
) выдаёт микроконтроллеру чистую последовательность импульсов.
Вся сложность расшифровки этих импульсов скрыта в библиотеке. Наша задача — просто получить готовый код кнопки.
-
Установка библиотеки и сборка схемы
- Скачайте архив с библиотекой
Rudiron_IRremote
из нашего репозитория: Rudiron Libraries. - Установите её через
Arduino IDE
(Sketch → Include Library → Add .ZIP Library…). - Подключите ИК-приёмник:
GND
(или–
) — к пину GNDРудирона
.VCC
(или+
) — к пину 5VРудирона
.Signal
(илиOUT
) — к пину 2Рудирона
.
- Скачайте архив с библиотекой
-
Этап 1. Узнаём коды кнопок
Сначала нам нужно узнать, какие коды отправляет каждая кнопка нашего пульта.
-
Загрузите на
Рудирон
следующий код-декодер:#include <Rudiron_IRremote.h> #define IR_RECEIVE_PIN 2 void setup() { Serial.begin(115200); IrReceiver.attach(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Включаем приёмник Serial.println("Наведите пульт и нажимайте кнопки..."); } void loop() { if (IrReceiver.decode()) { // Выводим полученный код в шестнадцатеричном формате Serial.print("Код: 0x"); Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); // Готовимся к приёму следующей команды IrReceiver.resume(); } }
- Откройте монитор порта (скорость 115200 бод).
- Направляйте пульт на приёмник и нажимайте кнопки «+» и «-». Запишите их коды.
- Обратите внимание! Если зажать кнопку, сначала отправится её уникальный код, а затем — многократно код повтора
FFFFFFFF
.
-
-
Этап 2. Программа управления
Теперь напишем программу, которая будет управлять яркостью встроенного светодиода
L1
.-
Сотрите предыдущий код и введите новый, подставив ваши коды кнопок:
#include <Rudiron_IRremote.h> #define IR_RECEIVE_PIN 2 // Вставьте сюда ВАШИ коды кнопок! #define PLUS_CODE 0xFFA857 // Пример кода для кнопки «+» #define MINUS_CODE 0xFFE01F // Пример кода для кнопки «-» #define REPEAT_CODE 0xFFFFFFFF int brightness = 0; // Текущая яркость светодиода L1 unsigned long lastDecodedValue = 0; // Хранит последний РЕАЛЬНЫЙ код кнопки void setup() { Serial.begin(115200); IrReceiver.attach(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); pinMode(LED_BUILTIN_1, OUTPUT); } void loop() { if (IrReceiver.decode()) { unsigned long currentCode = IrReceiver.decodedIRData.decodedRawData; unsigned long codeToProcess; // --- Логика обработки зажатия --- if (currentCode != REPEAT_CODE) // Если пришел новый, уникальный код, запоминаем его lastDecodedValue = currentCode; // --- Управление на основе кода --- switch (lastDecodedValue) { case PLUS_CODE: brightness += 10; break; case MINUS_CODE: brightness -= 10; break; } // Ограничиваем яркость в пределах 0-255 brightness = constrain(brightness, 0, 255); // Применяем новую яркость analogWrite(LED_BUILTIN_1, brightness); Serial.print("Яркость: "); Serial.println(brightness); IrReceiver.resume(); } }
- Загрузите код на плату и проверьте: кнопки «+» и «-» должны плавно менять яркость светодиода
L1
. Если зажать кнопку, яркость будет меняться непрерывно.
-
Результаты
Вы создали полноценную систему дистанционного управления. Вы научились декодировать сигналы с любого ИК-пульта и, что самое важное, реализовали правильную логику для обработки как одиночных нажатий, так и зажатия кнопок.
Анализ результатов
- Библиотека
Rudiron_IRremote
. Она работает в фоновом режиме. ФункцияIrReceiver.decode()
просто проверяет, не появилось ли в её внутреннем буфере новое, полностью принятое и расшифрованное сообщение. Это идеальный пример псевдопараллелизма. -
Обработка зажатия: Наш алгоритм работает так:
- Мы ждём новый сигнал от приёмника.
- Если пришедший код — не код повтора, мы считаем его новой командой и запоминаем в переменной
lastDecodedValue
. - Если пришедший код — это код повтора (
FFFFFFFF
), мы игнорируем его и используем для обработки последнюю запомненную команду изlastDecodedValue
.
Это позволяет корректно реагировать на зажатие - действие (увеличение или уменьшение яркости) будет продолжаться, пока мы держим кнопку.
Выводы
В этой лабораторной работе вы освоили технологию ИК-управления. Вы поняли, как с помощью готовой библиотеки можно легко работать со сложными протоколами связи, и создали устройство, которым можно управлять на расстоянии, как бытовой техникой.
Вопросы для самопроверки
- Как пульт передаёт информацию о том, какая кнопка нажата?
- Что такое код повтора и зачем он нужен?
- Объясните, как работает наша логика обработки зажатия с переменной
lastDecodedValue
. - Что делает команда
IrReceiver.resume()
? - Как изменить программу, чтобы по нажатию на кнопку «POWER» светодиод либо выключался (
0
), либо включался на полную яркость (255
)?
Вы научились создавать устройства с дистанционным управлением!
- Страницы
- 1. Введение
- 1.01. Лабораторная работа №1.1
- 1.02. Лабораторная работа №1.2
- 1.03. Лабораторная работа №1.3
- 1.04. Лабораторная работа №1.4
- 1.05. Лабораторная работа №1.5
- 2. Основы электроники
- 2.01. Электрический ток и параметры цепи
- 2.01.1. Лабораторная работа №2.1.1
- 2.01.2. Лабораторная работа №2.1.2
- 2.02. Сопротивление в цепи
- 2.02.1. Лабораторная работа №2.2.1
- 2.02.2. Лабораторная работа №2.2.2
- 2.03. Полупроводники
- 2.03.1. Лабораторная работа №2.3.1
- 2.03.2. Лабораторная работа №2.3.2
- 3. Основы программирование на C++
- 3.01. Типы данных и переменные
- 3.01.1. Практикум
- 3.02. Операторы в C++
- 3.02.1. Практикум
- 3.03. Структуры ветвления
- 3.03.1. Практикум
- 3.04. Структуры повторения
- 3.04.1. Практикум
- 3.05. Массивы
- 3.05.1. Практикум
- 3.06. Функции
- 3.06.1. Практикум
- 3.07. Решения задач
- 4. Программирование микроконтроллеров
- 4.01. Цифровые сигналы и GPIO
- 4.01.1. Лабораторная работа №4.1.1
- 4.01.2. Лабораторная работа №4.1.2
- 4.01.3. Лабораторная работа №4.1.3
- 4.01.4. Лабораторная работа №4.1.4
- 4.01.5. Лабораторная работа №4.1.5
- 4.01.6. Лабораторная работа №4.1.6
- 4.01.7. Лабораторная работа №4.1.7
- 4.01.8. Лабораторная работа №4.1.8
- 4.02. Аналоговые сигналы и ШИМ
- 4.02.1. Лабораторная работа №4.2.1
- 4.02.2. Лабораторная работа №4.2.2
- 4.02.3. Лабораторная работа №4.2.3
- 4.02.4. Лабораторная работа №4.2.4
- 4.02.5. Лабораторная работа №4.2.5
- 4.03. Аналоговый сигнал и АЦП
- 4.03.1. Лабораторная работа №4.3.1
- 4.03.2. Лабораторная работа №4.3.2
- 4.03.3. Лабораторная работа №4.3.3
- 4.03.4. Лабораторная работа №4.3.4
- 4.03.5. Лабораторная работа №4.3.5
- 4.04. Аналоговый сигнал и ЦАП
- 4.04.1. Лабораторная работа №4.4.1
- 4.04.2. Лабораторная работа №4.4.2
- 4.05. Генерация и измерение импульсов
- 4.05.1. Лабораторная работа №4.5.1
- 4.05.2. Лабораторная работа №4.5.2
- 4.06. Аппаратные прерывания
- 4.06.1. Лабораторная работа №4.6.1
- 4.06.2. Лабораторная работа №4.6.2
- 4.07. Псевдопараллелизм
- 4.07.1. Лабораторная работа №4.7.1
- 4.07.2. Лабораторная работа №4.7.2
- 4.08. Интерфейсы связи - UART
- 4.08.1. Лабораторная работа №4.8.1
- 4.09. Интерфейсы связи - I2C
- 4.09.1. Лабораторная работа №4.9.1
- 4.10. Интерфейсы связи - SPI
- 4.10.1. Лабораторная работа №4.10.1
- home
-
imgs
- 1. Введение
- 1.01. Лабораторная работа №1.1
- 1.02. Лабораторная работа №1.2
- 1.03. Лабораторная работа №1.3
- 1.04. Лабораторная работа №1.4
- 1.05. Лабораторная работа №1.5
- 2. Основы электроники
- 2.01. Электрический ток и параметры цепи
- 2.01.1. Лабораторная работа №2.1.1
- 2.01.2. Лабораторная работа №2.1.2
- 2.02. Сопротивление в цепи
- 2.02.1. Лабораторная работа №2.2.1
- 2.02.2. Лабораторная работа №2.2.2
- 2.03. Полупроводники
- 2.03.1. Лабораторная работа №2.3.1
- 2.03.2. Лабораторная работа №2.3.2
- 3. Основы программирование на C++
- 3.01. Типы данных и переменные
- 3.01.1. Практикум
- 3.02. Операторы в C++
- 3.02.1. Практикум
- 3.03. Структуры ветвления
- 3.03.1. Практикум
- 3.04. Структуры повторения
- 3.04.1. Практикум
- 3.05. Массивы
- 3.05.1. Практикум
- 3.06. Функции
- 3.06.1. Практикум
- 3.07. Решения задач
- 4. Программирование микроконтроллеров
- 4.01. Цифровые сигналы и GPIO
- 4.01.1. Лабораторная работа №4.1.1
- 4.01.2. Лабораторная работа №4.1.2
- 4.01.3. Лабораторная работа №4.1.3
- 4.01.4. Лабораторная работа №4.1.4
- 4.01.5. Лабораторная работа №4.1.5
- 4.01.6. Лабораторная работа №4.1.6
- 4.01.7. Лабораторная работа №4.1.7
- 4.01.8. Лабораторная работа №4.1.8
- 4.02. Аналоговые сигналы и ШИМ
- 4.02.1. Лабораторная работа №4.2.1
- 4.02.2. Лабораторная работа №4.2.2
- 4.02.3. Лабораторная работа №4.2.3
- 4.02.4. Лабораторная работа №4.2.4
- 4.02.5. Лабораторная работа №4.2.5
- 4.03. Аналоговый сигнал и АЦП
- 4.03.1. Лабораторная работа №4.3.1
- 4.03.2. Лабораторная работа №4.3.2
- 4.03.3. Лабораторная работа №4.3.3
- 4.03.4. Лабораторная работа №4.3.4
- 4.03.5. Лабораторная работа №4.3.5
- 4.04. Аналоговый сигнал и ЦАП
- 4.04.1. Лабораторная работа №4.4.1
- 4.04.2. Лабораторная работа №4.4.2
- 4.05. Генерация и измерение импульсов
- 4.05.1. Лабораторная работа №4.5.1
- 4.05.2. Лабораторная работа №4.5.2
- 4.06. Аппаратные прерывания
- 4.06.1. Лабораторная работа №4.6.1
- 4.06.2. Лабораторная работа №4.6.2
- 4.07. Псевдопараллелизм
- 4.07.1. Лабораторная работа №4.7.1
- 4.07.2. Лабораторная работа №4.7.2
- 4.08. Интерфейсы связи - UART
- 4.08.1. Лабораторная работа №4.8.1
- 4.09. Интерфейсы связи - I2C
- 4.09.1. Лабораторная работа №4.9.1
- 4.10. Интерфейсы связи - SPI
- 4.10.1. Лабораторная работа №4.10.1
- home