Ик пульт ардуино подключение. Универсальный пульт на Arduino

Инфракрасный пульт дистанционного управления — один из самых простых способов взаимодействия с электронными приборами. Так, практически в каждом доме есть несколько таких устройств: телевизор, музыкальный центр, видеоплеер, кондиционер. Но самое интересное применение инфракрасного пульта — дистанционное правление роботом. Собственно, на этом уроке мы попытаемся реализовать такой способ управления с помощью популярного контроллера Ардуино Уно.

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- — гаснет. Теперь, зная как это все работает, можно вместо светодиода управлять двигателями робота, или другими самодельными микроэлектронными устройствами!

ИК приемник и инфракрасный пульт дистанционного управления – самый распространенный и простой способ управления электронной аппаратурой. Инфракрасный спектр излучения не виден человеческим глазом, но он отлично принимается ИК приемниками, которые встроены в электронные приборы. Модули Arduino ir remote используются для управления различной техникой в прямой видимости.

Широкое применение ИК излучателей стало возможным благодаря их низкой стоимости, простоте и удобству в использовании. ИК излучение лежит в диапазоне от 750 до 1000 мкм – это самая близкая часть спектра к видимому свету. В области инфракрасного излучения могут меняться оптические свойства различных материалов. Некоторые стекла, например, становятся непрозрачными для ИК лучей, парафин же наоборот прозрачен в ИК спектре.

Регистрируется излучение с помощью специальных фотоматериалов, на основе которых изготавливаются приемники. Источником инфракрасного излучения помимо нагретых тел (Солнца, ламп накаливания или свечей), могут быть твердотельные приборы – ИК светодиоды, лазеры. Излучение в инфракрасном диапазоне обладает рядом особенностей, благодаря которым их удобно использовать в пультах:

  • Твердотельные излучатели (ИК светодиоды) стоят дешево и они компактны.
  • Инфракрасные лучи не воспринимаются и не фиксируются человеческим глазом.
  • ИК приемники также дешево стоят, и они имеют небольшие размеры.
  • Малые помехи, так как передатчик и приемник настроены на одну частоту.
  • Отсутствует негативное влияние на здоровье человека.
  • Высокий показатель отражения от большинства материалов.
  • IR излучатели не влияют на работу других устройств.

Работа пульта осуществляется следующим образом. При нажатии кнопки происходит кодирование сигнала в инфракрасном свете, приемник принимает его и выполняет требуемое действие. Информация кодируется в виде логической последовательности пакетов импульсов с определенной частотой. Приемник получает эту последовательность и выполняет демодулирование данных. Для приема сигнала используется микросхема, в которой содержатся фотоприемник (фотодиод), усилители, полосовой фильтр, демодулятор (детектор, который позволяет выделить огибающую сигнала) и выходной транзистор. Также в ней установлены фильтры – электрический и оптический. Работают такие устройства на расстоянии до 40 метров. ИК способ передачи данных существует во многих устройствах: в бытовых приборах, в промышленной технике, компьютерах, оптоволоконных линиях.

IR приемник Arduino

Для считывания IR сигнала понадобятся сама плата Ардуино, макет, приемник IR сигнала и перемычки. Существует огромное множество различных приемников, но лучше использовать TSOP312 или другие соответствующие для Ардуино. Данные от пульта к приемнику могут передаваться по протоколу RC5 или NEC.

Чтобы определить, какая ножка к чему относится, нужно посмотреть на датчик со стороны приемника. Тогда на приемнике центральный контакт – это земля, слева – выход на микроконтроллер, справа – питание.

Для удобства можно использовать готовые модули IR приемника.

Подключение IR приемника к ардуино

Выходы IR приемника подключают к Ардуино к портам GND, 5V и цифровому входу. Схема подключения датчика к 11 цифровому пину изображена ниже.

Вот так выглядит схема с модулем инфракрасного приемника:


Библиотеки для работы с IR

Для работы с ИК устройствами можно использовать библиотеку IRremote, которая позволяет упростить построение систем управления. Скачать библиотеку можно . После загрузки скопируйте файлы в папку \arduino\libraries. Для подключения в свой скетч библиотеки нужно добавить заголовочный файл #include .

Для чтения информации используется пример IRrecvDumpV2 из библиотеки. Если пульт уже существует в списке распознаваемых, то сканирование не потребуется. Для считывания кодов нужно запустить среду ARduino IDE и открыть пример IRrecvDemo из IRremote.

Существует и вторая библиотека для работы с ИК сигналами – это IRLib . Она похожа по своему функционалу на предыдущую. По сравнению с IRremote в IRLib имеется пример для определения частоты ИК датчика. Но первая библиотека проще и удобнее в использовании.

После загрузки библиотеки можно начать считывать получаемые сигналы. Для этого используется следующий код.

Оператор decode_results нужен для того, чтобы присвоить полученному сигналу имя переменной results .

В коде нужно переписать «HEX» в «DEC».

Затем после загрузки программы нужно открыть последовательный монитор и нажимать кнопки на пульте. На экране будут появляться различные коды. Нужно сделать пометку с тем, к какой кнопке соотносится полученный код. Удобнее полученные данные записать в таблицу. После этот код можно записать в программу, чтобы можно было управлять прибором. Коды записываются в память самой платы ардуино EEPROM, что очень удобно, так как не придется программировать кнопки при каждом включении пульта.

Бывает, что при загрузке программы выдается ошибка «TDK2 was not declared In his scope». Для ее исправления нужно зайти в проводник, перейти в папку, в которой установлено приложение Arduino IDE и удалить файлы IRremoteTools.cpp и IRremoteTools.h. После этого нужно произвести перезагрузку программы на микроконтроллер.

Заключение

Использование Arduino ir remote упрощает жизнь пользователю. В качестве пульта дистанционного управления может выступать мобильный телефон, планшет или компьютер – для этого только нужен специальный софт. При помощи Ардуино можно централизовать все управление. Одной кнопкой на пульте можно выполнить сразу несколько действий – например, включить одновременно телевизор и Blu-Ray.

Вопрос удаленного или дистанционного управления электрооборудованием всегда был и будет актуальным, не зависимо от того имеется ли средства автоматизации в системе или нет. Для организации дистанционного управления совершенно неважно нужен ли , все зависит от необходимых функций, возлагаемых на управляемое устройство. Из этой статьи вы узнаете общие сведения о способах дистанционного управления микроконтроллером.

Виды

Существует два основных вида дистанционной связи:

Проводной . Когда управление исполнительными механизмами, находящимися в одном помещении (или не помещении) ведется с диспетчерского пульта или с кнопочного поста расположенного в другом месте. В таком случае обеспечивается электрическое проводное соединение управляющих цепей и исполнительных устройств (реле, контакторов, которые включают механизмы, типа двигателей или системы, например, освещение).

Беспроводной . В этом варианте не требуется электрического соединения управляющих и исполнительных цепей. В беспроводной схем есть два устройства: передатчик или пульт дистанционного управления (ПДУ) и приемник, который входит в состав управляемой цепи. Беспроводное управление в свою очередь распространено в двух вариантах:

    По оптическому сигналу. Такие системы есть в каждом доме, так вы управляете работой телевизора, кондиционера и другой бытовой техники.

    По радиосигналу. Здесь уже целый ряд вариантов: Bluetooth, ZigBee, Wi-Fi, приемники-передатчики 433 мГц и другие вариации на эту тему.

Стоит отметить, что при современных технически средствах вы можете управлять микроконтроллером, как с пульта дистанционного управления, так и через интернет в локальной сети или с доступом из любой точки мира.

ИК-пульт

Начнем рассмотрение с самого простого и классического варианта. Управление устройством путем передачи кода из последовательности мерцаний ИК-светодиода в оптоприемник, установленный на устройстве. Стоит отметить, что ИК-спектр не видим для человеческого глаза, но его видит большинство фото-видео камер.

Раз уж большинство камер видит ИК-излучение, так вы можете проверять . Для этого просто направьте пульт так, чтобы излучатель смотрел в камеру и понажимайте кнопки. Обычно на экране видно белое свечение с фиолетовым отливом.

У такого управления есть очевидный недостаток - вы должны направлять пульт в сторону приемника. А если батарейки в пульте севшие, то приходится еще и целится, так как срабатывания становятся всё реже и реже.

Достоинства заключаются в простоте, высокой ремонтопригодности, как передатчика, так и приемника. Можно найти детали, разобрав поломанные пульты и телевизоры, для того, чтобы это применить в собственных проектах.

Типовой датчик выглядит следующим образом. Так как происходит прием оптического сигнала, необходимо исключить срабатывания от посторонних источников света, таких как солнце, лампы освещения и прочие. Также стоит отметить то, что ИК-сигнал принимается в основном на частоте в 38 кГц.

Вот характеристики одного из ИК-датчиков:

    несущая частота: 38 кГц;

    напряжение питания: 2,7 — 5,5 В;

    потребляемый ток: 50 мкА.

И схема его подключения:

Пульт может использоваться любой с аналогичным принципом работы, подходят пульты от:

Вот пример использования такого датчика :

Чтобы микроконтроллер, в нашем случае Ардуина, поняла сигнал с датчика нужно использовать библиотеку IRremote.h. Для примера того, как читать сигнал с датчика приведем код для их распознавания через чтение последовательного порта микроконтроллера из среды Arduino IDE:

#include "IRremote.h" // подключаем библиотеку для работы с ИК сигналом.

decode_results results;

Serial.begin(9600); // выставляем скорость COM порта

Serial.println(results.value, HEX); // печатаем данные

В результате, когда вы прошьете ардуинку, и начнете «светить» в приемник пультом, в мониторе последовательного порта мы увидим следующую картинку:

Это коды, которые посылают кнопки в шестандцатеричном виде. Таким образом, вы можете узнать, какая кнопка на пульте какой код посылает, поэтому нет конкретных требований к используемому пульту, ведь вы можете распознать и привязать любой. Кстати это идея для проекта обучаемого универсального пульта, такие раньше продавались. Но сейчас в век интернета количество техники управляемой таким образом снижается с каждым годом.

А с помощью такого кода можно распознавать сигналы и управлять нагрузкой:

#include "IRremote.h"

IRrecv irrecv(2); // указываем вывод, к которому подключен приемник

decode_results results;

irrecv.enableIRIn(); // запускаем прием

if (irrecv.decode(&results)) { // если данные пришли

switch (results.value) {

digitalWrite(13, HIGH);

digitalWrite(13, LOW);

irrecv.resume(); // принимаем следующую команду

Основным в коде является распознавание через функцию Switch, иногда их называют «свитчкейс». Она является аналогом ветвлений if, но имеет более красивую форму для восприятия. Case - это варианты, «если пришёл такой код, то…» В коде управляют 13 пином при определенных сигналах. Напомню, что к 13 пину подключен встроенный светодиод на плате АРДУИНО, т.е. автор кода управлял светодиодом.

Вы можете управлять чем угодно, используя высокий или низкий уровень цифрового пина, через силовой транзистор (которые мы рассмотрели в двух статьях ранее и ) нагрузкой постоянного тока, или через симистор и драйвер для него нагрузкой постоянного тока, можно также применять реле и контакторы, в общем, целое поле для воображения.

Для использования с микроконтроллерами распространены передатчики с рабочими частотами 433 мГц или 315 мГц, могут быть и другие частоты, зависит от конкретной платы, но эти наиболее распространены. Система состоит из двух узлов - приемника и передатчика, что логично.

На картинке передатчик изображен справа вверху, а слева снизу - приемник. Их название для поиска: Радиомодуль 433МГц, MX-05V/XD-RF-5V (приемник и передатчик) .

Распиновка, как это часто бывает в модулях, расписана на плате, вот как у передатчика:

На приемнике не так очевидно, ведь Data на печатной плате написано над двумя пинами, по факту один из них не используется.

Для примера приведем схему и код для включения светодиода с одной платы ардуино, подключенного к другой аналогичной плате, без проводов. Приемник и передатчик подключены одинаково в к обеим платам:

Устройство

Модуль

Пины ардуино.

Приемник

Передатчик

2

Для начала напишем программу передатчика:

#include

RCSwitch mySwitch = RCSwitch (); // создаем объект для работы с перед-ком

void setup() {

mySwitch . enableTransmit (2); // говорим программе к какому пину подключен информационный канал

void loop() {

mySwitch.send(B0100, 4);

delay(1000);

mySwitch.send(B1000, 4);

delay(1000);

}

Передатчик умеет передавать двоичный код, но его значения можно записывать в десятеричном виде.

mySwitch.send(B0100, 4);

mySwitch.send(B1000, 4);

это команды передачи, mySwitch - это название передатчика, которое мы указали в начале кода, а send - команда передачи. Аргументами этой функции являются:

имяПередатчика.send(значение, размер пачки импульсов отправляемых в эфир);

B1000 - символ B - значит двоичный, это можно было написать как цифру 8, т.е. в десятеричном представлении. Еще один вариант был записать в виде строки (в кавычках) «1000».

#include

RCSwitch mySwitch = RCSwitch();

pinMode(3, OUTPUT);

mySwitch.enableReceive(0);

if(mySwitch.available()){

int value = mySwitch.getReceivedValue();

if(value == B1000)

digitalWrite(3, HIGH);

else if(value == B0100)

digitalWrite(3, LOW);

mySwitch.resetAvailable();

Здесь мы объявляем, что в переменную Value сохраняется принятое значение в строке mySwitch.getReceivedValue(). А тот факт, что приемник подключен ко 2-му пину описываем здесь mySwiitch.enableReceive(0).

В остальном код элементарен, если принят сигнал 0100, то переводим пин номер 3 в высокое состояние (лог. единица), а если 1000, то в низкое (лог. ноль).

Интересно:

В строке mySwitch.enableTransmit(0) мы говорим программе, что ко 2-му пину подключен приемник и включается режим приема. Самые внимательные заметили, что аргументом этого метода является не номер пина «2», а «0», дело в том, что метод enableTransmit(число) принимает не номер пина, а номер прерывания, а в atmega328, которую ставят на , на втором пине (PortD пин PD2) висит прерывание с номером ноль. Это увидеть вы можете в распиновке Атмеги применимой к плате ардуино, в розовых квадратиках написаны номера пинов.

Этот способ передачи и приема весьма прост и дешев, пара приемника и передатчика стоит на момент написания статьи примерно 1.5 доллара.

Wi-Fi, адруино и ESP8266

Начнем с того, что ESP8266 - это микроконтроллер с аппаратной поддержкой Wi-Fi , он продается как в виде отдельной микросхемы, так и распаян на плате, подобно ардуино. У него 32-битное ядро, он программируется через последовательный порт (UART).

На платах обычно расположено 2 и более свободных пина GPIO и всегда есть пины для прошивки, это нужно делать через USB to serial переходник. Управляется командами AT, полный список команд можно найти на официальном сайте ESP8266 и на github.

Есть и более интересный вариант, платы NodeMCU, в них есть возможность прошивки по USB, т.к. USB-UART преобразователь уже есть на плате, обычно выполнен на микросхеме CP2102. Node MCU - это прошивка, что-то вроде операционной системы, проект на основе скриптового языка Lua.

Прошивка может выполнять скрипты Lua, как принимая их по последовательному порту или воспроизводя алгоритмы, сохраненные во Flash-памяти.

Кстати в ней есть своя файловая система, правда в ней нет каталогов, т.е. только файлы без папок. В памяти могут храниться в не только скрипты, но и различные данные, т.е. плата может хранить записанную, например, с датчиков, информацию.

Плата работает с интерфейсами:

В ней есть целая масса функций:

    модуль шифрования;

    планировщик задач;

    часы реального времени;

    протокол синхронизации часов через интернет SNTP;

  • АЦП канал (один);

    проигрывать аудио файлы;

    формировать на выходах ШИМ-сигнал (до 6);

    использовать сокеты, есть поддержка FatFS, т.е можно подключать SD-карточки и так далее.

А вот краткий список, с чем может работать плата:

    акселерометры ADXL345;

    магнитометры HMC5883L;

    гироскопы L3G4200D;

    датчики температуры и влажности AM2320, DHT11, DHT21, DHT22, DHT33, DHT44;

    датчики температуры, влажности, атмосферного давления BME280;

    датчики температуры, атмосферного давления BMP085;

    множество дисплеев работающих по шинам I2C, SPI. С возможностью работы с разными шрифтами;

    умные светодиоды и LED контроллеры - WS2812, tm1829, WS2801, WS2812.

Еще интересно то, что на сайте https://nodemcu-build.com/ можно самому собрать прошивку из нужных модулей, таким образом, вы сэкономите место, исключив из неё ненужные элементы, для своего полезного кода. И вы можете залить эту прошивку на любую плату ESP8266.

Кроме использования языка Lua вы можете программировать плату и из под Arduino IDE.

Плата ESP8266 может использоваться как самостоятельное устройство, так и модуль для беспроводной связи с Arduino.

Рассмотрение всех функций и особенностей этой платы займет целый цикл статей.

Так вот эта плата - это отличный вариант дистанционного управления по Wi-Fi. Сфера применения колоссальная, например использовать смартфон в качестве пульта управления для самодельной радиоуправляемой машинки или квадрокоптера, вплоть до обустройства сетей на весь дом и управлять каждой розеткой, светильником и т.д. лишь бы пинов хватило.

Простейший вариант работы с микроконтроллером - это использование одной платы ESP8266. Ниже приведена схема простейшей wi-fi розетки.

Для сборки этой цепи потребуется модуль реле, или обычное реле подключенное к пину через транзистор. Для начала потребуется программа для смартфона RoboRemoFree, (https://www.roboremo.com/). В ней вы настроите подключение к ESP и сделаете интерфейс для управления розеткой. Чтобы описать, как ей пользоваться нужно написать отдельную статью, поэтому опустим пока этот материал.

В ESP загружаем следующую прошивку, через программу ESPlorer (программа для работы с платой)

WiFi AP Settup

wifi.setmode(wifi.STATIONAP)

cfg.ssid="ESPTEST"

cfg.pwd="1234567890"

wifi.ap.config(cfg)

my_pin_nummber = 1

Gpio.mode(my_pin_nummber, gpio.OUTPUT)

gpio.mode(my_pin_nummber, gpio.OPENDRAIN)

sv=net.createServer(net.TCP)

function receiver(sck, data)

if string.sub (data, 0, 1) == "1" then

if string.sub (data, 0, 1) == "0" then

sv:listen(333, function(conn)

conn:on("receive", receiver)

conn:send("Hello!")

Create HTTP Server

http=net.createServer(net.TCP)

function receive_http(sck, data)

local request = string.match(data,"([^\r,\n]*)[\r,\n]",1)

if request == "GET /on HTTP/1.1" then

Gpio.write(my_pin_nummber, gpio.HIGH)

gpio.write(my_pin_nummber, gpio.LOW)

if request == "GET /off HTTP/1.1" then

Gpio.write(my_pin_nummber, gpio.LOW)

gpio.write(my_pin_nummber, gpio.HIGH)

sck:on("sent", function(sck) sck:close() collectgarbage() end)

local response = "HTTP/1.0 200 OK\r\nServer: NodeMCU on ESP8266\r\nContent-Type: text/html\r\n\r\n"..

"NodeMCU on ESP8266"..

"

NodeMCU on ESP8266

"..

"On Off"..

sck:send(response)

http:listen(80, function(conn)

conn:on("receive", receive_http)

print("Started.")

Теперь вы можете управлять программой либо с программы Roboremo, либо через любой веб-браузер, для этого нужно набрать ip-адрес платы в адресной строке в режиме wi-fi точки он 192.168.4.1.

В коде есть фрагмент:

"NodeMCU on ESP8266"..

"

NodeMCU on ESP8266

"..

"On Off"..

""

Это своеобразный ответ, который выдаётся браузеру при обращении к плате. Он содержит HTML-код, т.е. простейшую WEB-страницу, аналогичную той, на которой вы сейчас читаете эту статью.

Вот эта страница, запущенная в браузере смартфона под управлением ОС Android. Описанное выше не является полноценной инструкцией, так как это заняло бы огромный объём, если вам интересна эта информация - пишите комментарии и мы обязательно проведем обзор и напишем статью о работе с ней.

Он отправляет пакет закодированных и промодулированных данных на ИК-светодиод, а при удержании кнопки, еще и пакеты повтора.

  • Невидимый инфракрасный свет от ИК-светодиода попадает на Trima-модуль ИК-приёмник , где преобразуются в демодулированные электрические импульсы.
  • Библиотека iarduino_IR постоянно считывает и раскодирует импульсы с ИК-приёмника (используя второй аппаратный таймер Arduino)
  • В коде loop мы сверяем раскодированные библиотекой данные с назначенными устройству (лампе) и если они совпали, то меняем состояние («1»/«0») на входе Trema-модуля Твердотельное реле , следовательно, включаем или выключаем устройство (лампу).
  • Устройство может быть полезным, если назначить неиспользуемые кнопки телевизионного пульта (например цветные кнопки телетекста) для управления освещением в комнате.

    Вместо ламп накаливания, Вы можете подключить любое устройство сети ~220 В, с током потребления до 2 А.

    Нам понадобится:

    • ИК-пульт дистанционного управления x 1шт. (подойдёт любой телевизионный ИК-пульт)
    • Устройства (лампы), которыми мы будем управлять х 3шт.

    Для реализации проекта нам необходимо установить библиотеку:

    • Библиотека iarduino_IR для работы с ИК-приёмопередатчиками
      ВАЖНО : библиотека использует второй аппаратный таймер,
      НЕ ВЫВОДИТЕ СИГНАЛЫ ШИМ НА 3 ИЛИ 11 ВЫВОД!

    О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki - Установка библиотек в Arduino IDE .

    Видео:

    Схема подключения:

    В данной схеме используются только цифровые модули, их можно подключать к любым (как цифровым так и аналоговым) выводам Arduino. Для примера, мы подключили все модули к аналоговым выводам. Не все знают, что аналоговые выводы Arduino могут работать как обычные цифровые выводы, позволяющие получать (от ИК-приёмника) и передавать (на твердотельные реле) цифровые сигналы в виде логических «0» и «1».

    Если Вы будете подключать устройства к другим выводам, то их номера нужно указать во второй (объявление объекта IR) и третей (объявление массива pinRelay) строках скетча . Код программы написан так, что вы можете подключить столько реле , сколько есть свободных выводов у вашей Arduino , просто перечислив номера выводов в третей строке скетча (объявление массива pinRelay).

    Алгоритм работы:

    • При старте , скетч последовательно назначает код кнопки ИК-пульта каждому твердотельному реле . Сначала мигает светодиод и замыкается цепь твердотельного реле вывод которого указан первым. Если нажать на любую кнопку ИК-пульта , то код данной кнопки присвоится этому реле и начнет мигать следующее, и так, пока всем реле не будут назначены кнопки ИК-пульта .
    • После назн ачения кнопок , все реле находятся в выключенном состоянии. Если нажать кнопку ИК-пульта , то включится реле которому присвоен код данной кнопки. Если повторно нажать на указанную кнопку, то реле выключится. Устройство не отреагирует на нажатие кнопок, код которых не присваивался ни одному реле.
    • Если Вы не хотите присваивать коды кнопок при каждом старте, то явно укажите их при объявлении массива varRelay, а из кода setup удалите циклы for и while.
    • Узнать код каждой кнопки можно написав следующую строку: if(IR.check()){Serial.println(IR.data);}

    Код программы:

    #include // подключаем библиотеку для работы с ИК приёмником iarduino_IR_RX IR(A5); // объявляем объект IR для работы с ИК приёмником (с указанием любого вывода к которому подключён ИК приёмник) const uint8_t pinRelay = {A1,A2,A3}; // объявляем массив с указанием номеров любых выводов (цифровых или аналоговых) к которым подключены твердотельные реле const uint8_t allRelay = sizeof(pinRelay); // объявляем константу передавая её количество элементов в массиве pinRelay (количество реле) uint32_t varRelay; // объявляем массив с кодами (командами) ИК-приёмника включающими реле bool modRelay; // объявляем массив с состояниями реле uint8_t setRelay; // объявляем переменную с количеством реле, для которых записана команда с ИК-приёмника void setup(){ IR.begin(); // инициализируем работу с ИК приёмопередатчиком for(uint8_t i=0; iВ сегодняшней статье будет рассматриваться подключение ИК приемника TSOP34836 к плате Aduino UNO. Для этих целей можно применить любой имеющийся у вас приемник, совместимый с вашим пультом по частоте. Назначение выводов показано на рисунке.

    1. Vout – выход приемника.
    2. GND – «земля», общий провод.
    3. Vcc – питание.
    Передача данных от ИК пульта к приемнику осуществляется по протоколу RC5, представляющий из себя последовательность импульсов. Подключение осуществляется по следующей схеме.

    А собрав, получаем примерно следующее:

    Для обработки данных, передаваемых пультом, используем библиотеку IRremote, данная библиотека прикреплена к статье. Вставляем следующий код:

    #include "IRremote.h" IRrecv irrecv(11); // Указываем пин, к которому подключен приемник decode_results results; void setup() { Serial.begin(9600); // Выставляем скорость COM порта irrecv.enableIRIn(); // Запускаем прием } void loop() { if (irrecv.decode(&results)) // Если данные пришли { Serial.println(results.value, HEX); // Отправляем полученную данную в консоль irrecv.resume(); // Принимаем следующую команду } }

    Теперь в консоле COM - порта можно наблюдать код нажимаемой клавиши в HEX.


    Вот и все, теперь можно использовать эту схему в ваших устройствах. Ниже приведен пример одного из практических применений ИК - приемника.

    В качестве демонстрации будет показано, как с помощью ИК-пульта управлять сервомашинкой.

    Схема устройства:

    Вот так оно должно выглядеть:

    Для работы устройства используем следующий код:

    #include "Servo.h" #include "IRremote.h" IRrecv irrecv(11); decode_results results; Servo servoMain; int servPoz = 90; //Начальное положение сервы int lastPoz = 0; void setup() { irrecv.enableIRIn(); servoMain.attach(10); // Servo присоединен к 10 выводу servoMain.write(servPoz); } void loop() { if (irrecv.decode(&results)) { int res = results.value; Serial.println(res, HEX); if(res==0xFFFF906F)// Если нажата кнопка "+" { lastPoz=res; servPoz++; servoMain.write(servPoz); } else if(res==0xFFFFA857)// Если нажата кнопка "-" { servPoz--; lastPoz=res; servoMain.write(servPoz); } else if(res==0xFFFFFFFF)// Если кнопку удерживают { if(lastPoz==0xFFFF906F) servPoz++;// Удерживают "+" if(lastPoz==0xFFFFA857) servPoz--;// Удерживают "-" servoMain.write(servPoz); } irrecv.resume(); delay(100); } }

    Пульт используется какой-то китайский, при нажатии "+" серва вращается в одну сторону, при нажатии "-", в другую.