Ардуино: инфракрасный пульт и приемник. Управляем любой ду техникой дома по ик с вебстраницы
Обычно пульты дистанционного управления телевизора, кабельной приставки, Blu-ray плеера и стерео системы не только занимают место, но и затрудняют работу по управлению всеми этими устройствами. Вы можете рассмотреть вариант покупки универсального пульта, но они обычно дорогие и иногда не обеспечивают требуемый уровень управления или интерфейс. В данном проекте создается устройство, которое может отправлять и принимать коды пульта управления со стандартной веб-страницы. Вы сможете запрограммировать требуемую функциональность с любого смартфона или компьютера!
В данном проекте используется модуль Arduino Yún, который специально разработан для управления устройствами с поддержкой сетевого соединения. Yún имеет два процессора, первый из которых запускает операционную систему Linux и может подключаться к проводной или беспроводной сети. Второй процессор выполняет те же функции, что и процессор в модуле Arduino Leonardo. Поэтому он обеспечивает хорошую совместимость с библиотеками Arduino и аппаратными средствами.
В данном проекте для отправки и приема сигналов пульта дистанционного управления используется инфракрасный светодиод и приемник. Инфракрасный свет невидим для человеческого глаза, но легко детектируется электронными датчиками. Для более надежной передачи сигнала устройства используют модулированный инфракрасный свет, поэтому исключается возможность принятия ложных сигналов. Инфракрасный приемник – это небольшое устройство, которое принимает инфракрасные сигналы, промодулированные на определенной частоте, обычно 38 кГц. С помощью данного приемника модуль Arduino определяет биты информации, которые отправлены с пульта управления.
Отправка команд для вашего мультимедийного центра будет осуществляться с помощью простого веб-интерфейса, который запускает локально на модуле Yún и доступен для большинства современных веб-браузеров. Веб-сайт облегчает работу по управлению инфракрасным устройством и позволяет обрабатывать даже несколько команд одновременно. Например, при нажатии кнопки ‘Watch Movie’ (Просмотр фильма) может отправляться сигнал для включения телевизора, Blu-ray плеера и его подключения к входу телевизора.
Для выполнения данного проекта нужен некоторый опыт по запуску скетчей Arduino и использованию инструментов с командной строкой. Электронные компоненты проекта можно установить на макетной плате.
Шаг #1: Подключение компонентов
- Подключите инфракрасный светодиод к модулю Yún, проложив провод от анода светодиода (длинный вывод) к цифровому выводу 13 модуля Yún.
- Используя резистор номиналом 100 Ом, подключите катод светодиода (более короткий вывод) к земляному выводу инфракрасного датчика (средний вывод датчика).
- Подключите вывод распознавания detect инфракрасного датчика (самый левый вывод, если смотреть спереди датчика) к цифровому выводу 11 модуля Yún.
- Подключите заземляющий вывод инфракрасного датчика (средний вывод) к заземляющему выводу модуля Yún.
- В заключение, подключите питающий вывод датчика (крайне правый вывод, если смотреть спереди датчика) к выводу 5 вольт модуля Yún.
Шаг #2: Установка программных зависимостей
- При вставленной MicroSD карте в модуль Yún, включите Yún, подключив USB Micro B кабель к модулю Yún и USB адаптеру питания.
- Убедитесь в том, что Yún настроен и подключен к беспроводной сети. Настройка модуля Yún указана на данной странице .
- Подключитесь к командной строке Yún, используя SSH. Данный процесс описан на данной странице .
- После подключения к командной строке вы увидите версию микропрограммного кода. Данный проект протестирован с версией BusyBox v1.19.4 от 2014-04-10 и выше. Если вы используете более старую версию, тогда выполните следующие инструкции.
- В командной строке выполните следующие команды для обновления диспетчера пакета:
- Далее установите PIP, диспетчер пакета Python:
Данный процесс занимает несколько минут. Вы можете увидеть некоторые предупреждающие сообщения, однако их можно проигнорировать.
- Создайте директорий на SD карте для сохранения пакетов Python:
- Установите интегрированную среду Flask Python:
Вы можете увидеть некоторые предупреждающие сообщения, однако их можно проигнорировать.
- Обновите путь поиска файлов пакета Python:
- Создайте директории, в которые среда Arduino IDE будет подгружать файлы веб-сервера:
- Перезагрузите Arduino Yún, чтобы обновить путь поиска файлов Python.
- Загрузите библиотеку IR library. (Arduino IRremote, библиотека создана Ken Shirriff .)
Распакуйте архив, переименуйте папку с Arduino _ IRremote - master на Arduino _ IRremote , и импортируйте папку Arduino_IRremote как библиотеку в среду разработки Arduino IDE. Подробная информация указана - Загрузите скетч Smart Remote Control Arduino из zip архива отсюда .
Распакуйте архив и перетащите папку SmartRemoteControl в папку со скетчем Arduino. Откройте скетч в Arduino IDE. - Скомпилируйте скетч и загрузите его в модуль Yún по WiFi, выбрав соответствующую опцию в списке портов Arduino Yún. Убедитесь в загрузке скетча по WiFi, чтобы требуемые скрипты python скопировались в модуль Yún! После загрузки скетча откройте Serial Monitor в среде Arduino IDE (это может занять несколько минут).
- Нацельте пульт дистанционного управления на инфракрасный датчик и нажмите несколько кнопок на пульте. Вы должны увидеть код на мониторе Serial Monitor. Если код не отображается, тогда проверьте подключение цепей датчика.
Шаг #4: Конфигурирование кодов пульта дистанционного управления
- Теперь вы можете сконфигурировать операции (activities) и коды пульта дистанционного управления, связав их с XML файлом конфигурации. Используя текстовый редактор, откройте файл activities . xml в поддиректории www папки скетча на вашем ПК. (Из Arduino IDE, нажмите меню Sketch и выберите "Show Sketch Folder").
- Примите во внимание формат примера операций в файле. Каждый блок операции определяет имя атрибута, которое будет отображаться как кнопка на веб-странице пульта. Внутри каждой операции блок кодов содержит последовательность инфракрасных кодов, которые необходимо выполнить. В примере сначала выполняется команда Sony A90 (вкл/выкл питания) для включения телевизора, затем команда Panasonic (вкл/выкл питания) для включения Blu-ray плеера. Каждый код имеет строковый параметр, который является прямым выходом данных обнаруженного кода пульта из скетча Arduino.
- Добавьте свои команды в файл, скопировав пример и изменив названия и коды. Когда пульт нацелен на инфракрасный датчик, нажмите кнопки и внимательно запишите определенную инфракрасную кодовую последовательность. Скопируйте последовательность в конфигурацию кода операции.
- Как только вы получите нужный файл конфигурации, сохраните файл и повторно загрузите скетч в модуль Yún по WiFi. Для обновления файла конфигурации измените файл и загрузите скетч по WiFi с использованием среды Arduino IDE.
Шаг #5: Запуск сервера с веб-интерфейсом
- Для запуска сервера подключите модуль Yún через SSH. Для запуска сервера выполните следующую команду:
- При успешном запуске сервера вы увидите сообщение:
- Если вы увидите ошибку, тогда проверьте все зависимости, установленные на предыдущих этапах.
- В веб-браузере введите адрес http://arduino.local:5000/. Если браузер не поддерживает mDNS URL (как Windows, Android, и некоторые дистрибутивы Linux) введите http://arduino _ ip _ address :5000/, где arduino _ ip _ address - это IP адрес вашего Arduino Yún. IP адрес располагается в нижней части среды Arduino IDE при подключении Yún (рисунок 2).
- После загрузки страницы вы увидите список сконфигурированных операций для кнопок. Если вы увидите ошибку, тогда проверьте правильность установки зависимостей, загруженный скетч, и что сервер работает без ошибок.
- Для остановки сервера нажмите комбинацию Ctrl-C в командном окне, в котором запускался сервер.
Шаг #6: Использование веб-интерфейса
- Для использования умного пульта нацельте светодиод на электронные устройства и нажмите одну из активных кнопок. Если требуемое устройство не включается, попытайтесь приблизить светодиод ближе к требуемым устройствам. Зона действия светодиода небольшая, около 6 футов. Необходимо добавить транзистор для увеличения зоны действия светодиода. Подробная информация указана здесь .
- Вы также можете протестировать инфракрасные коды, открыв Yún Serial Monitor в среде Arduino IDE и отправив инфракрасный код как команду. Например, отправка кода "SONY: C A90" (без кавычек) приведет к отправке аппаратными средствами команды на включение Sony A90. ("C" представляет собой бит длины команды,12, преобразованный в шестнадцатеричный вид).
- Для автоматического запуска сервера при загрузке отредактируйте файл / etc / rc . local в модуле Yún (с помощью редактора nano или vi) и добавьте следующую строку перед строкой "exit 0" в конце:
- Для речевого распознавания запустите браузер Google Chrome. Нажмите кнопку "Speak" и браузер Chrome запросит разрешение на использование микрофона. После этого произнесите название активной операции и подождите, пока она не будет распознана. Например, для выполнения операции просмотра фильма "Movies", нажмите кнопку "Speak", и скажите в микрофон слово "Movies" (Фильмы). Фразы, такие как "Play Movies" (Просмотреть фильмы) или "Run Movies" (Запустить фильмы), не поддерживаются - распознается только четкое название активной операции.
Есть много статей в интернете о том, как сделать свой пульт к телевизору на Arduino, но мне понадобился универсальный пульт для управления телевизором и медиа-плеером. Главное преимущество моего универсального пульта в том, что кнопки в приложении для андроид телефона двух-целевые, а впрочем, смотрите на видео.
Пульт очень удобен в том, что на экране практически одни и те же кнопки используются для управления телевизором и плеером. Одно отличие в том, что кнопка "AV
" в режиме управления телевизором меняется на кнопку "◻
" (stop) при переходе в режим управления плеером. На картинках показано два режима, слева режим управления телевизором, справа - режим управления плеером.
Ну а сейчас я расскажу немного о создании такого пульта. Для устройства использовал пульт от телевизора ERGO и пульт от медиаплеера DUNE HD TV101W.
Для получения данных от пультов я использовал инфракрасный датчик TSOP1138 (аналог TSOP4838) на рабочей частоте 38 кГц и подключил его к плате Arduino по схеме:
Этот скетч на потребуется для определения кодировки передачи данных и считывания кода кнопок пультов.
В скетче в строке int RECV_PIN = 11; указываем наш пин под номером 4
После заливки скетча открываем «монитор порта» и, нажимая на кнопки пульта, смотрим на полученные данные.
На картинке пример сканирования кнопки включения от пульта телевизора и пульта плеера. Теперь формируем таблицу для кодов кнопок.
У меня получилось как на фото выше. Под надписью TV коды кнопок пульта от телевизора; под надписью Player - коды от пульта медиаплеера.
Теперь отключаем наш приемник инфракрасных сигналов от платы Arduino и подключаем к ней Bluetooth модуль HC-05 и инфракрасный светодиод по схеме на фото.
После этого переходим непосредственно к скетчу.
Скетч
#include
В скетче вам потребуется отредактировать коды кнопок, а именно в строках:
If (x == 97) {
irsend.sendNEC(0x807F08F7, 32);
delay(40);
Значение 807F08F7 поменять на:
If (y == 1) { //коды кнопок для пульта от телевизора
if (x == 97) {
irsend.sendNEC(0x12345678, 32);
delay(40);
}
Где 12345678 - это код вашей кнопки.
После редактирования скетча по ваши коды кнопок заливаем скетч в плату Arduino и переходим к установке приложения на телефон.
Включаем блютуз в телефоне, ищем наше устройство, создаем пару, потом запускаем приложение Pult на телефоне.
При запуске у нас появится экран с красным значком bluetooth в правом нижнем углу, что сигнализирует о том, что мы не подключены к нашему устройству.
После этого жмем на этот значок. У нас должно появится окно со списком всех доступных bluetooth устройств, где мы выбираем наше устройство для подключения.
Теперь мы снова вернулись на главный экран и уже можем управлять телевизором:
Для перехода в режим управления нам потребуется нажать кнопку с надписью «Player» . Как я говорил раньше, у нас кнопка с надписью «AV» поменяется на кнопку "◻ ":
Для отключения от нашего устройства просто зажмите кнопку «Power» на несколько секунд.
Ну и несколько фотографий моего готового устройства.
Получилось, вроде, неплохо. Жду комментарии к статье.
Есть много статей в интернете о том, как сделать свой пульт к телевизору на Arduino, но мне понадобился универсальный пульт для управления телевизором и медиа-плеером. Главное преимущество моего универсального пульта в том, что кнопки в приложении для андроид телефона двух-целевые, а впрочем, смотрите на видео.
Пульт очень удобен в том, что на экране практически одни и те же кнопки используются для управления телевизором и плеером. Одно отличие в том, что кнопка "AV
" в режиме управления телевизором меняется на кнопку "◻
" (stop) при переходе в режим управления плеером. На картинках показано два режима, слева режим управления телевизором, справа - режим управления плеером.
Ну а сейчас я расскажу немного о создании такого пульта. Для устройства использовал пульт от телевизора ERGO и пульт от медиаплеера DUNE HD TV101W.
Для получения данных от пультов я использовал инфракрасный датчик TSOP1138 (аналог TSOP4838) на рабочей частоте 38 кГц и подключил его к плате Arduino по схеме:
Этот скетч на потребуется для определения кодировки передачи данных и считывания кода кнопок пультов.
В скетче в строке int RECV_PIN = 11; указываем наш пин под номером 4
После заливки скетча открываем «монитор порта» и, нажимая на кнопки пульта, смотрим на полученные данные.
На картинке пример сканирования кнопки включения от пульта телевизора и пульта плеера. Теперь формируем таблицу для кодов кнопок.
У меня получилось как на фото выше. Под надписью TV коды кнопок пульта от телевизора; под надписью Player - коды от пульта медиаплеера.
Теперь отключаем наш приемник инфракрасных сигналов от платы Arduino и подключаем к ней Bluetooth модуль HC-05 и инфракрасный светодиод по схеме на фото.
После этого переходим непосредственно к скетчу.
Скетч
#include
В скетче вам потребуется отредактировать коды кнопок, а именно в строках:
If (x == 97) {
irsend.sendNEC(0x807F08F7, 32);
delay(40);
Значение 807F08F7 поменять на:
If (y == 1) { //коды кнопок для пульта от телевизора
if (x == 97) {
irsend.sendNEC(0x12345678, 32);
delay(40);
}
Где 12345678 - это код вашей кнопки.
После редактирования скетча по ваши коды кнопок заливаем скетч в плату Arduino и переходим к установке приложения на телефон.
Включаем блютуз в телефоне, ищем наше устройство, создаем пару, потом запускаем приложение Pult на телефоне.
При запуске у нас появится экран с красным значком bluetooth в правом нижнем углу, что сигнализирует о том, что мы не подключены к нашему устройству.
После этого жмем на этот значок. У нас должно появится окно со списком всех доступных bluetooth устройств, где мы выбираем наше устройство для подключения.
Теперь мы снова вернулись на главный экран и уже можем управлять телевизором:
Для перехода в режим управления нам потребуется нажать кнопку с надписью «Player» . Как я говорил раньше, у нас кнопка с надписью «AV» поменяется на кнопку "◻ ":
Для отключения от нашего устройства просто зажмите кнопку «Power» на несколько секунд.
Ну и несколько фотографий моего готового устройства.
Получилось, вроде, неплохо. Жду комментарии к статье.
Инфракрасный пульт дистанционного управления — один из самых простых способов взаимодействия с электронными приборами. Так, практически в каждом доме есть несколько таких устройств: телевизор, музыкальный центр, видеоплеер, кондиционер. Но самое интересное применение инфракрасного пульта — дистанционное правление роботом. Собственно, на этом уроке мы попытаемся реализовать такой способ управления с помощью популярного контроллера Ардуино Уно.
1. ИК-пульт
Что нужно для того, чтобы научить робота слушаться инфракрасного (ИК) пульта? Во-первых, нам потребуется сам пульт. Можно использовать обычный пульт от телевизора, а можно приобрести миниатюрный пульт от автомагнитолы. Именно такие пульты часто используются для управления роботами.
На таком пульте есть 10 цифровых кнопок и 11 кнопок для манипуляции с музыкой: громкость, перемотка, play, stop, и т.д. Для наших целей более чем достаточно.
2. ИК-датчик
Во-вторых, для приема сигнала с пульта нам потребуется специальный ИК-датчик. Вообще, мы можем детектировать инфракрасное излучение обычным фотодиодом/фототранзистором, но в отличие от него, наш ИК-датчик воспринимает инфракрасный сигнал только на частоте 38 кГц (иногда 40кГц). Именно такое свойство позволяет датчику игнорировать много посторонних световых шумов от ламп освещения и солнца.
Для этого урока воспользуемся популярным ИК-датчиком VS1838B , который обладает следующими характеристиками:
- несущая частота: 38 кГц;
- напряжение питания: 2,7 — 5,5 В;
- потребляемый ток: 50 мкА.
Можно использовать и другие датчики, например: TSOP4838, TSOP1736, SFH506.
3. Подключение
Датчик имеет три вывода (три ноги). Если посмотреть на датчик со стороны приёмника ИК сигнала, как показано на рисунке,
- то слева будет - выход на контроллер,
- по центру - отрицательный контакт питания (земля),
- и справа - положительный контакт питания (2.7 — 5.5В).
Принципиальная схема подключения
Внешний вид макета
4. Программа
Подключив ИК-датчик будем писать программу для Ардуино Уно. Для этого воспользуемся стандартной библиотекой IRremote , которая предназначена как раз для упрощения работы с приёмом и передачей ИК сигналов. С помощью этой библиотеки будем принимать команды с пульта, и для начала, просто выводить их в окно монитора последовательного порта. Эта программа нам пригодится для того, чтобы понять какой код дает каждая кнопка.
#include "IRremote.h" IRrecv irrecv(2); // указываем вывод, к которому подключен приемник decode_results results; void setup() { Serial.begin(9600); // выставляем скорость COM порта irrecv.enableIRIn(); // запускаем прием } void loop() { if (irrecv.decode(&results)) { // если данные пришли Serial.println(results.value, HEX); // печатаем данные irrecv.resume(); // принимаем следующую команду } }
Загружаем программу на Ардуино. После этого, пробуем получать команды с пульта. Открываем монитор последовательного порта (Ctrl+Shift+M), берём в руки пульт, и направляем его на датчик. Нажимая разные кнопочки, наблюдаем в окне монитора соответствующие этим кнопкам коды.
Проблема с загрузкой программы
В некоторых случаях, при попытке загрузить программу в контроллер, может появиться ошибка:
TDK2 was not declared In his scope
Чтобы ее исправить, достаточно удалить два файла из папки библиотеки. Заходим в проводник. Переходим в папку, где установлено приложение Arduino IDE (скорее всего это «C:\Program Files (x86)\Arduino»). Затем в папку с библиотекой:
…\Arduino\libraries\RobotIRremote
И удаляем файлы: IRremoteTools.cpp и IRremoteTools.h. Затем, перезапускаем Arduino IDE, и снова пробуем загрузить программу на контроллер.
5. Управляем светодиодом с помощью ИК-пульта
Теперь, когда мы знаем, какие коды соответствуют кнопкам пульта, пробуем запрограммировать контроллер на зажигание и гашение светодиода при нажатии на кнопки громкости. Для этого нам потребуется коды (могут отличаться, в зависимости от пульта):
- FFA857 — увеличение громкости;
- FFE01F — уменьшение громкости.
В качестве светодиода, используем встроенный светодиод на выводе №13, так что схема подключения останется прежней. Итак, программа:
#include "IRremote.h" IRrecv irrecv(2); // указываем вывод, к которому подключен приемник decode_results results; void setup() { irrecv.enableIRIn(); // запускаем прием } void loop() { if (irrecv.decode(&results)) { // если данные пришли switch (results.value) { case 0xFFA857: digitalWrite(13, HIGH); break; case 0xFFE01F: digitalWrite(13, LOW); break; } irrecv.resume(); // принимаем следующую команду } }
Загружаем на Ардуино и тестируем. Жмем vol+ — светодиод зажигается. Жмем vol- — гаснет. Теперь, зная как это все работает, можно вместо светодиода управлять двигателями робота, или другими самодельными микроэлектронными устройствами!