Алиса и обучаемый ИК-пульт DIY

Материал из База знаний
Перейти к навигации Перейти к поиску



Знания 
Применение информации с этой страницы требует специальных знаний и навыков
 
Всё описанное на этой странице вы производите на свой страх и риск, включая нарушение работы программного обеспечения и выход из строя оборудования, а также риск поражения током и травмы.
Материал носит информационный характер, и не является прямым указанием к действию!


Вступление

Сегодня будем собирать собственный, и даже почти обучаемый ИК-пульт :) Автор назвал его "НеЯндекс.Пульт", и дальнейший текст основан на его оригинальной инструкции.


Преимущества DIY-решения очевидны:

  • Гибкая настройка (программирование) всего, что только можно;
  • Произвольные последовательности команд на один и более передатчиков;
  • "Индивидуальные" пульты (излучатель светит "в упор" в глазок нужного устройства, чтобы не возникало коллизий с другими);
  • Возможность разместить пульт в любой корпус (включая корпус самого принимающего устройства);
  • Отличный способ провести время и подтянуть скиллы.


Конечно, придётся немного потрудиться. Для сборки нам понадобятся:

  • NodeMCU (автор брал здесь)
  • Модуль ИК-приёмника (автор использовал этот)
  • Модуль ИК-излучателя (например, модуль из примера уже содержит драйвер, и их можно подключить сразу несколько штук на один пин без дополнительного обвеса и повернуть во все нужные стороны)
  • Источник стабилизированного (желательно, чтобы избежать проблем) питания


Подготовительные работы

Установить:

  • ArduinoIDE, и в самой среде:
    • библиотеки Blynk и IRremoteESP8266,
    • библиотеки для платы NodeMCU.

Проверить правильность настройки ArduinoIDE:

  • Подключить NodeMCU к USB-порту компьютера.
  • Выбрать правильный тип платы.
  • Выбрать правильный порт (меню «Инструменты» - «Порт»), его можно посмотреть в диспетчере устройств вашей ОС (например, COM4).
  • Создать пустой скетч (меню «Файл» - «Новый», или Ctrl-N).
  • Загрузить этот пустой скетч в плату (кнопка «Загрузка», или Ctrl-U).


Подробнее по настройке разделе «Полезные ссылки».


Считываем оригинальные коды

Схема 1a: питание приёмника через VIN
Схема 1b: питание приёмника по micro-USB

Наши первые действия - сбор информации с пультов. Для этого собираем ИК-приёмник согласно схемам.

 Важно! Выбирайте правильное подключение в зависимости от Вашего питания.
Схема 1a - когда плата запитана через пины VIN и GND. 
Схема 1b - более универсальная, будет работать и при питании платы через встроенный порт micro-USB.

Дальше:

  1. Прошиваем NodeMCU кодом PULT_resv.ino (см. ниже).
  2. В ArduinoIDE открываем "Монитор порта", направляем пульт-оригинал (от телевизора, люстры, кондиционера итд) на наш приёмник, жмём нужную кнопку.

В мониторе побегут одинаковые строки с числами типа 807F00FF. Это и есть код, переданный при нажатии кнопки.

Помимо вывода в монитор порта в данном коде есть возможность вывода кодов ИК-пульта в виртуальный пин V30 в приложении Blynk. Для этого в созданном Вами проекте Blynk нужно создать элемент Text Input и задать ему виртуальный пин V30. После сборки, прошивки и подключения к сети в данный элемент будут поступать коды при нажатии на кнопки пульта.

NoY IR-code-blynk.jpg

Записываем полученные коды в блокнот, сразу с названиями кнопок. А чтобы не вставать два раза(тм), запишем все кнопки со всех пультов, которые планируем использовать.


Повелеваем устройствами

Схема 2a: Питание пульта и модулей через VIN
Схема 2b: Питание пульта по micro-USB

Первая часть завершена! Схему приёмника можно разобрать, или оставить на будущее), а сейчас:

  1. Собираем пульт по схеме 2a или 2b (различия те же, что и в вариантах приёмника).
  2. Прошиваем код PULT_send.ino, перед этим немного изменив код:
    • заполним char auth[]=, char ssid[]= и char pass[]= своими значениями (ориентируясь на подсказки в комментариях).
    • пропишем виртуальные пины.

Действие-реакция на изменение состояния каждого отдельного пина представляет типовой блок:

BLYNK_WRITE(V0) { //виртуальный пин 0
 int pinValue = param.asInt();
 if (pinValue==1) irsend.sendNEC (0xЗАПИСАННЫЙКОД, 32);
}

Расшифруем:

  • BLYNK_WRITE(V0) - отслеживаем изменение виртуального пина V0
  • if (pinValue==1) - если пин принимает значение 1, то...
  • irsend.sendNEC (0xЗАПИСАННЫЙКОД, 32); - здесь мы укажем (а программа отправит) ИК-код из тех, что мы сохранили в блокнотик при считывании пультов (например, 807F00FF или любой другой).
Для каждой виртуальной кнопки нашего пульта нужно указать свой irsend.sendNEC (0xКОД, 32); имитирующий её нажатие.
Можно указать сразу серию нажатий при изменении одного виртуального пина (например, "Включить ТВ" + "Переключить нужный канал/вход"; или убавить громкость сразу на 7 нажатий кнопки "-").

По этой же схеме настраиваем все виртуальные пины Blynk, вебхуки, и пробрасываем их в Алису через Кузю, об этом подробно уже написано здесь.



Исходные коды прошивок

Скачать архив прошивок для пульта можно по этой ссылке.


Полезные ссылки


Что можно улучшить

  • Брать один виртуальный пин (например, V0) и задавать ему не 0 и 1, а сразу строковое значение типа "FFFFFFFF" ИК-кода, а в код подставлять переменную.
  • Совместить обе схемы (и прошивки) в одной (D2 передатчик, D3 приёмник), отлавливать коды прямо из блинка и сделать конструкцию универсальной. Изменяться будут только передаваемые вебхуком значения одного пина.
  • Дописать прошивку так, чтобы пульт стал полностью самообучаемым и умел сохранять команды в энергонезависимой памяти (EEPROM).


Кстати, один из участников нашего чата по аналогичной схеме сделал... ИК-прокси, который пропускал в телевизор только разрешённые коды )


Удачной сборки, весёлых экспериментов и надёжной работы!

Источник — https://wiki.yaboard.com/index.php?title=Алиса_и_обучаемый_ИК-пульт_DIY&oldid=3002 // MOD ext links // End MOD