ИК приемник и инфракрасный пульт дистанционного управления – самый распространенный и простой способ управления электронной аппаратурой. Инфракрасный спектр излучения не виден человеческим глазом, но он отлично принимается ИК приемниками, которые встроены в электронные приборы. Модули Arduino ir remote используются для управления различной техникой в прямой видимости.
Принцип действия ИК пульта
Широкое применение ИК излучателей стало возможным благодаря их низкой стоимости, простоте и удобству в использовании. ИК излучение лежит в диапазоне от 750 до 1000 мкм – это самая близкая часть спектра к видимому свету. В области инфракрасного излучения могут меняться оптические свойства различных материалов. Некоторые стекла, например, становятся непрозрачными для ИК лучей, парафин же наоборот прозрачен в ИК спектре.
Регистрируется излучение с помощью специальных фотоматериалов, на основе которых изготавливаются приемники. Источником инфракрасного излучения помимо нагретых тел (Солнца, ламп накаливания или свечей), могут быть твердотельные приборы – ИК светодиоды, лазеры. Излучение в инфракрасном диапазоне обладает рядом особенностей, благодаря которым их удобно использовать в пультах:
- Твердотельные излучатели (ИК светодиоды) стоят дешево и они компактны.
- Инфракрасные лучи не воспринимаются и не фиксируются человеческим глазом.
- ИК приемники также дешево стоят, и они имеют небольшие размеры.
- Малые помехи, так как передатчик и приемник настроены на одну частоту.
- Отсутствует негативное влияние на здоровье человека.
- Высокий показатель отражения от большинства материалов.
- IR излучатели не влияют на работу других устройств.
Работа пульта осуществляется следующим образом. При нажатии кнопки происходит кодирование сигнала в инфракрасном свете, приемник принимает его и выполняет требуемое действие. Информация кодируется в виде логической последовательности пакетов импульсов с определенной частотой. Приемник получает эту последовательность и выполняет демодулирование данных. Для приема сигнала используется микросхема, в которой содержатся фотоприемник (фотодиод), усилители, полосовой фильтр, демодулятор (детектор, который позволяет выделить огибающую сигнала) и выходной транзистор. Также в ней установлены фильтры – электрический и оптический. Работают такие устройства на расстоянии до 40 метров. ИК способ передачи данных существует во многих устройствах: в бытовых приборах, в промышленной технике, компьютерах, оптоволоконных линиях.
IR приемник Arduino
Для считывания IR сигнала понадобятся сама плата Ардуино, макет, приемник IR сигнала и перемычки. Существует огромное множество различных приемников, но лучше использовать TSOP312 или другие соответствующие для Ардуино. Данные от пульта к приемнику могут передаваться по протоколу RC5 или NEC.
Чтобы определить, какая ножка к чему относится, нужно посмотреть на датчик со стороны приемника. Тогда на приемнике центральный контакт – это земля, слева – выход на микроконтроллер, справа – питание.
Для удобства можно использовать готовые модули IR приемника.
Подключение IR приемника к ардуино
Выходы IR приемника подключают к Ардуино к портам GND, 5V и цифровому входу. Схема подключения датчика к 11 цифровому пину изображена ниже.
Вот так выглядит схема с модулем инфракрасного приемника:
Библиотеки для работы с IR
Для работы с ИК устройствами можно использовать библиотеку IRremote, которая позволяет упростить построение систем управления. Скачать библиотеку можно здесь. После загрузки скопируйте файлы в папку arduinolibraries. Для подключения в свой скетч библиотеки нужно добавить заголовочный файл #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, радио, и WiFi.
Принцип действия
ИК-приемник на Ардуино способен принимать и обрабатывать инфракрасный сигнал, в виде импульсов заданной длительности и частоты.
Под воздействием инфракрасного излучения в фотодиоде начинает течь ток. Сигнал поступает на встроенный усилитель и далее – на полосовой фильтр, настроенный на фиксированную частоту, который защищает приемник от помех.
Чтобы сигнал от пульта ДУ принимался ИК приемником Ардуино, пульт должен быть настроен на соответствующую частоту. Поэтому не каждый пульт ДУ подойдет для нашего ИК приемника.
Схема подключения
Разберем на распиновку ИК приемника. Традиционный ИК-приемник имеет три контакта:
- Питание (VCC, 5V)
- Земля (GND)
- Данные (выходное напряжение, VOUT)
Для удобства можно использовать и готовые модули ИК приемника, которые дополнят ИК приемник RC-фильтром.
Давайте же соберем что-нибудь!
Задача
Светодиод, управляемый дистанционно.
Необходимые компоненты
Итак, нам понадобится:
- 1 пульт ДУ. Подойдет практически любой ИК пульт дистанционного управления.
- Плата Ардуино, макетная плата, перемычки
В качестве светодиода будем использовать встроенный светодиод ардуино.
Схема сборки
Соберем такую схему:
Скетч
Для работы нашего скетча нам понадобится специальная библиотека — Arduino-IRremote, которую потребуется установить.
Загрузим в ардуино такой скетч:
/** * (C) jarduino.ru * * Эксперимент № 14. ИК пульт дистанционного управления * * Эксперименты с ардуино. * Управление arduino с помощью ИК пульта ДУ */ #include // подключаем библиотеку для ИК приемника // Константы программы const int irPin = A0; // аналоговый порт для ИК приемника const int ledPin = 13; // порт для светодиода // Глобальные переменные bool ledState = false; IRrecv irRec(irPin); // Инициализируем объект ИК приемника decode_results irData; // переменная для получения данных от ИК приемника void setup() { Serial.begin(9600); // Иницилизация последовательного порта, для вывода отладочной информации irRec.enableIRIn(); // запускаем прием инфракрасного сигнала pinMode(ledPin, OUTPUT); } void loop() { if (irRec.decode(&irData)) // Получение данных с ИК приемник { // Данные пришли - анализируем, выполняем команды с пульта: Serial.println(irData.value); // выводим полученные данные на порт if (irData.value == 16738455) // соответветствует цифре 1 на пульте { ledState = !ledState; // переключить состояние светодиода digitalWrite(ledPin, ledState); // обновить состояние светодиода } irRec.resume(); // принимаем следующий сигнал на ИК приемнике } delay(100); // небольшая пауза, 0,1 сек. }
Результат
Если вы используете типовой пульт ДУ для ардуино, то нажимайте на кнопку 1, и встроенный светодиод будет то зажигаться, то гаснуть.
Если вы используете какой-то другой пульт, то программу потребуется настроить на код нажимаемой вами кнопки. Для этого программа выводит все коды, получаемые от пульта.
Объяснение
Для работы с пультом нам потребуется объявить два объекта: типа IRrecv – для приемника и типа decode_results – для разбора полученных приемником данных.
IRrecv irRec(irPin); // Инициализируем объект ИК приемника
decode_results irData; // переменная для получения данных от ИК приемника
При объявлении объекта приемника вы должны указать аналоговый порт, к которому подключен приемник.
Чтобы приемник начал работать на прием, необходимо его включить. Мы это делаем в функции setup():
irRec.enableIRIn(); // запускаем прием инфракрасного сигнала
Метод decode() позволяет получить данные от приемника.
irRec.decode(&irData);
Если decode() возвращает значение > 0, то сигнал поступил, и его можно проанализировать.
Чтобы понять какой именно сигнал получил, мы анализируем свойство value объекта данных:
if (irData.value == 16738455) // соответветствует цифре 1 на пульте
Чтобы продолжить получение данных, надо вызвать метод resume():
irRec.resume(); // принимаем следующий сигнал на ИК приемнике
Заключение
Теперь вы умеете управлять устройством Ардуино не вставая с дивана 😉. Не нужно разводить кнопки. Или кнопки можно просто продублировать пультом.
Если вы уже знаете как работать с реле и силовым ключом, то вы можете сделать дистанционное включение и выключение чего угодно – освещения, аквариума, входной двери и т.п.
tormozedisonТемы / СоветыДатчик, предложенный автором Instructables под ником AdnanA61, позволяет обнаруживать коротковолновое ИК-излучение от таких источников, как пульты ДУ, огонь, лампы накаливания, солнце. Он не реагирует на другой вид ИК-излучения — длинноволновое, источниками которого являются все объекты, нагретые до обычных температур. Самоделка вырабатывает два вида сигналов: аналоговый и дискретный, второй из них формируется компаратором, порог срабатывания которого сделан регулируемым. Оба сигнала можно подать как на Arduino, так и на другие устройства как с микроконтроллером, так и без него. Далее показано другое исполнение платы, схема при этом не отличается:Датчик выполнен на одном из двух компараторов микросхемы LM393, второй можно при желании задействовать для решения другой задачи. Если же им не пользоваться, лучше соединить оба его входа с общим проводом, а выход оставить неподключённым.Схема составлена так, что читать её не очень удобно. Три точки, обозначенные как A0, необходимо соединить между собой. Две точки, обозначенные как D0 — тоже. Вот и становится понятно, что с чем соединено и как работает. Никаких загадок. Если собирать датчик из конструктора, цоколёвка гребёнки на плате, входящей в комплект, будет следующей:Конечно, на самодельной плате, печатной или макетной, эту цоколёвку можно сделать такой, какая будет вам удобна. Проверить плату в действии и отрегулировать порог срабатывания компаратора можно сразу после сборки, просто подав питание, благодаря светодиоду на борту. Второй светодиод при поданном питании светится постоянно. Затем можно соединить датчик с Arduino и проверть работу аналогового выхода таким скетчем:
//copy this code in the ide of arduino from this line //note:- this code is for analog value int sensor=A0; //initializing the analog pin int buzzer=3; // initializing buzzer pin int value; void setup(){ Serial.begin(9600); pinMode(sensor, INPUT); // assing the pin mode type of the pin as input or output pinMode(buzzer, OUTPUT); } void loop(){ value=analogRead(sensor); //reading the valus from the sensor value=map(value,0,1023,0,255); // mapping the value from 0 to 1023 b/w 0 to 255 digitalWrite(buzzer, value); // switching the buzzer on or off by the mapped value }
А цифрового — другим скетчем:
//copy this code in the ide of arduino from this line //note:- this code is for digital value int sensor_digital=2; // initializing the digital pin int buzzer=3; int value; void setup(){ Serial.begin(9600); pinMode(sensor_digital, INPUT); pinMode(buzzer, OUTPUT); } void loop(){ value=digitalRead(sensor_digital); // reading the digital dat from the sensor digitalWrite(buzzer, value); // switching buzzer on or off }
Когда всё заработает, можно написать и программы, реализующие алгоритмы большей сложности. Например, для робота, «боящегося» приближаться к пламени или мощной лампе накаливания, чтобы не испортиться. И правильно делающего, так как поднесение платы датчика к источникам сильного нагрева на расстояние менее 100 мм может вывести её из строя. Используемые источники:
- https://arduinomaster.ru/datchiki-arduino/ir-ik-pult-upravleniya-arduino/
- https://jarduino.ru/2019/09/15/arduino-exp14-ir-remote-control/
- https://usamodelkina.ru/16520-ik-datchik-dlja-arduino-i-ne-tolko.html