Arduino uno. подключение ик-приемника

Урок 35. Универсальный ИК-пульт дистанционного управления

В этом уроке мы создадим универсальный ИК-пульт дистанционного управления. Шесть кнопок универсального ИК-пульта позволяют запрограммировать себя на передачу команды любого* другого ИК-пульта. Код кнопок сохраняется в энергонезависимую область памяти Arduino – EEPROM. Это значит, что Вам не придётся программировать кнопки при каждом включении универсального ИК-пульта.

*Универсальный ИК-пульт может воспроизводить сигналы только тех ИК-пультов, которые передают данные одним информационным пакетом не длиннее 32 бит, а также имеют (или нет) одинаковые пакеты удержания (пакеты повторов).

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

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

  • iarduino_IR для работы с ИК-приёмопередатчиками.
  • EEPROM – входит в стандартный набор Arduino IDE.

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

Видео:

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

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

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

Отправка команд:

  • При нажатии на одну из 6 кнопок универсального ИК-пульта, он отправит команду, соответствующую нажатой кнопке.
  • Если нажатой кнопке команда не присвоена, то ИК-пульт издаст звуковой сигнал, сигнализирующий об ошибке.

Назначение команд кнопкам:

  • Для назначения команд кнопкам универсального ИК-пульта, нужно выполнить следующие действия:
    • Нажать на кнопку “запись команды” и, не отпуская её, нажать на ту кнопку универсального ИК-пульта, которой мы хотим присвоить команду с другого ИК-пульта.
    • Универсальный ИК-пульт издаст два коротких звуковых сигнала, сигнализируя о готовности принять данные.
    • Нажать на кнопку другого ИК-пульта, код которой мы хотим считать.
    • Как только код будет считан, универсальный ИК-пульт издаст короткий звуковой сигнал, сигнализирующий об успешной записи кода. Теперь можно отпустить все кнопки.
  • Можно присвоить одной кнопке – код одного пульта, а другой кнопке – код другого пульта.

    Так как для каждой кнопки, сохраняется не только код, но и протокол передачи данных.

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

#include // Подключаем библиотеку для работы с ИК-приёмником
#include // Подключаем библиотеку для работы с ИК-передатчиком
#include // Подключаем библиотеку для работы с EEPROM (энергонезависимой областью памяти)
// Указываем выводы к которым подключены модули:
const uint8_t PinButton1= 2; // Объявляем константу с указанием вывода к которому подключена кнопка 1
const uint8_t PinButton2= 3; // Объявляем константу с указанием вывода к которому подключена кнопка 2
const uint8_t PinButton3= 4; // Объявляем константу с указанием вывода к которому подключена кнопка 3
const uint8_t PinButton4= 5; // Объявляем константу с указанием вывода к которому подключена кнопка 4
const uint8_t PinButton5= 6; // Объявляем константу с указанием вывода к которому подключена кнопка 5
const uint8_t PinButton6= 7; // Объявляем константу с указанием вывода к которому подключена кнопка 6
const uint8_t PinButton7= 8; // Объявляем константу с указанием вывода к которому подключена кнопка 7 (запись)
iarduino_IR_RX IR_Read ( 9); // Объявляем объект IR_Read с указанием вывода к которому подключён ИК-приёмник
iarduino_IR_TX IR_Write (10); // Объявляем объект IR_Write с указанием вывода к которому подключён ИК-передатчик
const uint8_t PinBuzzer= 11; // Объявляем константу с указанием вывода к которому подключен зуммер
// Объявляем для хранения временных данных:
uint8_t ValButton= 0; // Объявляем переменную для хранения номера нажатой кнопки
uint32_t ValCode; // Объявляем переменную для хранения кода кнопки
char ValProtocol[26]; // Объявляем строку для хранения 25 символов протокола передачи данных + символ конца строки
void setup(){
// Инициируем работу с ИК-приёмником и ИК-передатчиком: IR_Read.begin(); // Инициируем работу с ИК-приёмником IR_Write.begin(); // Инициируем работу с ИК-передатчиком
// Конфигурируем выводы: pinMode(PinButton1, INPUT); // Конфигурируем вывод с подключенной кнопкой №1 в режим входа pinMode(PinButton2, INPUT); // Конфигурируем вывод с подключенной кнопкой №2 в режим входа pinMode(PinButton3, INPUT); // Конфигурируем вывод с подключенной кнопкой №3 в режим входа pinMode(PinButton4, INPUT); // Конфигурируем вывод с подключенной кнопкой №4 в режим входа pinMode(PinButton5, INPUT); // Конфигурируем вывод с подключенной кнопкой №5 в режим входа pinMode(PinButton6, INPUT); // Конфигурируем вывод с подключенной кнопкой №6 в режим входа pinMode(PinButton7, INPUT); // Конфигурируем вывод с подключенной кнопкой №7 в режим входа pinMode(PinBuzzer, OUTPUT); // Конфигурируем вывод с подключенным зуммером в режим выхода
}
void loop(){
// Проверяем состояние кнопок: if(digitalRead(PinButton1)){ ValButton=1;}else // Если нажата кнопка 1, записываем число 1 в переменную ValButton if(digitalRead(PinButton2)){ ValButton=2;}else // Если нажата кнопка 2, записываем число 2 в переменную ValButton if(digitalRead(PinButton3)){ ValButton=3;}else // Если нажата кнопка 3, записываем число 3 в переменную ValButton if(digitalRead(PinButton4)){ ValButton=4;}else // Если нажата кнопка 4, записываем число 4 в переменную ValButton if(digitalRead(PinButton5)){ ValButton=5;}else // Если нажата кнопка 5, записываем число 5 в переменную ValButton if(digitalRead(PinButton6)){ ValButton=6;}else // Если нажата кнопка 6, записываем число 6 в переменную ValButton {delay(100); ValButton=0;} // Если кнопки 1-6 не нажаты, записываем число 0 в переменную ValButton и подавляем дребезг
// Выполняем действия при нажатии на кнопку: if(ValButton){ // Если нажата кнопка 1-6
// Чтение данных: if(digitalRead(PinButton7)){ // Если нажата кнопка 7 (запись), то … myTone(100); delay(100); myTone(100); // Выводим два коротких звуковых сигнала, сигнализирующих о готовности считать данные while(digitalRead(PinButton7)){ // Входим в цикл while, пока не будет отпущена кнопка 7 (запись) if(IR_Read.check()){ // Если в буфере имеются данные, принятые с другого пульта
// Получаем данные, принятые с пульта strcpy(ValProtocol, IR_Read.protocol()); // Получаем протокол передачи данных пульта в строку ValProtocol ValCode = IR_Read.data; // Получаем код кнопки в переменную ValCode
// Записываем принятые данные в EEPROM for(uint8_t i=0; i((29-i)*8)));} // Последние 4 байта заполняем данными из переменной ValCode (это код кнопки) } myTone(100); // Выводим короткий звуковой сигнал, сигнализирующий об успешной записи } }
// Отправка данных: }else{ // Если не нажата кнопка 7, то …
// Читаем протокол передачи данных и код кнопки из EEPROM: for(uint8_t i=0; i

Источник: https://lesson.iarduino.ru/page/urok-35-universalnyy-ik-pult-distancionnogo-upravleniya/

ИК-приемник VS1838B и arduino

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

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

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

Подключение ИК-датчика VS1838B к arduino

Для считывания ИК-сигнала и преобразования его к человеческому виду – числу, можно воспользоваться библиотекой IRremote, с ее помощью весь скетч займет всего несколько строк.
Ссылка на библиотеку: IRremote .

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

Ниже приведена фотография VS1838B с подписанными ножками:

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

Что использовалось в проекте:

Код скетча для ИК-приемника VS1838B

Каждая кнопка ИК-пульта имеет уникальный код, который мы будем получать с помощью датчика VS1838B. В первую очередь запишем скетч, который выводит в консоль коды кнопок, после чего уже дополнить программу условиями на конкретные кнопки.
Ниже приведет скетч для работы с ИК-приемником VS1838B и arduino, скачать его можно тут: скачать.

#include // подключаем библиотеку int ledPin = 13; // светодиод int reciverPin = 11; // пин, к котрому подключен ИК-приемник IRrecv irrecv(reciverPin); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // запуск приемника pinMode(ledPin, OUTPUT); } void loop() { // постоянно считываем данные с приемника if (irrecv.decode(&results)) { // выводим в консольку, что получили, число в 16-ричном виде Serial.println(results.value, HEX); // проверяем сигналы – и если это те, что нам нужны, то вкл или выкл светодиод if(results.value == 0x926DC837) digitalWrite(13, HIGH); if(results.value == 0x926D48B7) digitalWrite(13, LOW); irrecv.resume(); // готовы принимать следующий сигнал } }

Пример работы ИК-датчика VS1838B и arduino можно посмотреть ниже на видео.

Источник: https://vk-book.ru/ik-priemnik-vs1838b-i-arduino/

Ик пульт ардуино

ИК приемник и инфракрасный пульт дистанционного управления – самый распространенный и простой способ управления электронной аппаратурой.  Инфракрасный спектр излучения не виден человеческим глазом, но он отлично принимается ИК приемниками, которые встроены в электронные приборы. Модули 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.

Источник: https://ArduinoMaster.ru/datchiki-arduino/ir-ik-pult-upravleniya-arduino/

Передача данных в инфракрасном диапазоне при помощи Arduino

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

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

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

        Итак, что же нам потребуется в качестве компонентов для нашего эксперимента? Как вариант продаются готовые модули ИК-пульта и ИК-приёмника. Но нам не хочется ждать и платить деньги, поэтому будет действовать более хардкорно.

Возьмём за основу пульт ДУ неизвестного происхождения, также у нас имеется кусок платы от китайского тюнера на котором распаян инфракрасный приёмник. На фото ниже вы можете видеть эти комплектующие.

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

        Ну так что же, как говаривал Ганнибал – “Вперед, на Карфаген”. Нам нужно просто выпаять приёмник и подключить его к плате Arduino по нижеследующей схеме…

        ИК-приёмник который был выпаян из платы не имеет какой либо маркировки, это просто очередной неизвестный китайский радиокомпонент, каких выпущено было тысячи. Вкратце можно сказать – в одном корпусе он объединяет фотодиод, предусилитель и формирователь.

На выходе формируется обычный ТТЛ-сигнал без заполнения, пригодный для дальнейшей обработки микроконтроллером. Несущая частота возможно(!) 36 кГц, но сейчас это не так важно… Просто попробуем его подключить к плате Arduino, условная схема даст нужную распиновку данного девайса.

На схеме ниже, выделенное красным – это форма корпуса в котором выполнен наш ИК-приёмник, выделенное зеленым – распиновка по которой он подключен к плате Arduino. 

        Итак, всё подключено. Чтобы прочитать коды с пульта ДУ существует библиотека IRremote.h, именно с её помощью будем изучать наш пульт, а точнее коды кнопок. В дальнейшем используем прочитанные коды в своих целях.

Скетч, при помощи которого будут прочитаны коды кнопок, представлен в примерах этой библиотеки, называется он IRrecvDemo.

Внимание !!! Скетч при компиляции выдаёт ошибку, в  самом начале  нужно добавить еще две подключаемые библиотеки:

#include “boarddefs.h”   //Добавочная библиотека #include “IRremote.h” #include “IRremoteInt.h” //Добавочная библиотека int RECV_PIN = 2;        //Пин подключения выходного сигнала с ИК-приёмника //Создаём экземпляр класса IRrecv, в качестве параметра передаём пин подключения сигнала ИК-приёмника IRrecv irrecv(RECV_PIN);   decode_results results;   //Переменная для сохранения полученного кода нажатой кнопки void setup() {   Serial.begin(9600);   irrecv.enableIRIn();     //Включение ИК-приёмника в работу } void loop() {   if (irrecv.decode(&results))             //Если произошло событие/кнопка была нажата   {     Serial.println(results.value, HEX);    //Выводим в монитор порта код нажатой кнопки в шестнадцатиричном виде     irrecv.resume();                       //Считываем следующую значение/кнопку   }   delay(100); } 

        После того как скетч был залит в плату Arduino(мы используем Arduino Nano на шилде I/O Wireless Shield for Nano), можно открыть монитор порта и посмотреть какие появляются коды при нажатии кнопок на пульте ДУ. Результат работы скетча представлен на скриншоте ниже:

        Кстати, в качестве монитора порта мы используем свой проверенный софт, если кому интересно – почитать статью и скачать Serial Monitor Pro можно здесь. 

Далее, нужно оформить полученные коды кнопок в виде констант, сделано это будет примерно так:

#define KEY_ONOFF 0x807F807F    //Кнопка Включения/Выключения #define KEY_MUTE  0x807F48B7    //Кнопка Mute #define KEY_1     0x807F00FF    //Кнопка 1 #define KEY_2     0x807FE01F    //Кнопка 2 #define KEY_3     0x807F609F    //Кнопка 3 #define KEY_4     0x807F20DF    //Кнопка 4 #define KEY_5     0x807FD02F    //Кнопка 5 #define KEY_6     0x807F50AF    //Кнопка 6 #define KEY_7     0x807F10EF    //Кнопка 7 #define KEY_8     0x807FF00F    //Кнопка 8 #define KEY_9     0x807F708F    //Кнопка 9 #define KEY_0     0x807FC837    //Кнопка 0

        И вот теперь, в общем то всё готово для финального теста – это будет элементарный тест управления включением/выключением релейных модулей. Приведем небольшое задание:

  • Используем два релейных модуля
  • Реле №1 привязываем к кнопке “1” пульта
  • Реле №2 привязываем к кнопке “2” пульта 
  • Включение любого из релейных модулей производится нажатием на кнопку к которой он привязан
  • Выключение любого из релейных модулей также производится нажатием на кнопку к которой он привязан
  • Нажатие на кнопку On/Off безусловно выключает оба релейных модуля(если они были включены, либо один из них включеный) 

Скетч, который реализует вышеописанное задание:

#include “boarddefs.h”   //Добавочная библиотека #include “IRremote.h” #include “IRremoteInt.h” //Добавочная библиотека #define KEY_ONOFF 0x807F807F    //Кнопка Включения/Выключения #define KEY_1     0x807F00FF    //Кнопка 1 #define KEY_2     0x807FE01F    //Кнопка 2 #define RELOUT1 3               //Выходной порт для реле 1 #define RELOUT2 4               //Выходной порт для реле 2 int RECV_PIN = 2; IRrecv irrecv(RECV_PIN); decode_results results; static boolean REL1_ONOFF = false; static boolean REL2_ONOFF = false; void setup() {   pinMode(RELOUT1, OUTPUT);   pinMode(RELOUT2, OUTPUT);     Serial.begin(9600);   irrecv.enableIRIn(); // Start the receiver } void loop() {   if (irrecv.decode(&results))   {     switch(results.value)     {       case(KEY_ONOFF):         REL1_ONOFF = false;         REL2_ONOFF = false;         break;       case(KEY_1):         if(REL1_ONOFF)           REL1_ONOFF = false;         else           REL1_ONOFF = true;         break;       case(KEY_2):         if(REL2_ONOFF)           REL2_ONOFF = false;         else           REL2_ONOFF = true;         break;     }     irrecv.resume();   }   digitalWrite(RELOUT1, REL1_ONOFF);   digitalWrite(RELOUT2, REL2_ONOFF);     delay(100); }

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

Источник: http://arduino.on.kg/peredacha-dannyh-v-infrakrasnom-diapazone-pri-pomoshchi-Arduino

Arduino Uno. Подключение ИК-приемника

В сегодняшней статье будет рассматриваться подключение ИК приемника 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); }
}

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

Партнер данной статьи: Electronoff

Прикрепленные файлы:

  • IR.rar (123 Кб)
  • Arduino_IR_lib.rar (23 Кб)

Rough

Источник: http://cxem.net/arduino/arduino127.php

Ардуино: инфракрасный пульт и приемник

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

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

 Собственно, на этом уроке мы попытаемся реализовать такой способ управления с помощью популярного контроллера Ардуино Уно.

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»). Затем в папку с библиотекой:

…ArduinolibrariesRobotIRremote

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

Изменено: 19 Фев, 2015 13:06

Источник: http://robotclass.ru/tutorials/arduino-ir-remote-control/

ROBOTяга ARDUINO — 4. ИК управление. — DRIVE2

РОБОТяга уже ездит… можем не очень контролируемо…www.drive2.ru/b/2816135/Давайте заставим его слушать нас!Есть самый простой способ управлять роботом — с помощью Инфракрасного излучения (ИК).

Не бойтесь, в ходе экспериментов никто не пострадает – ИК излучение будет излучать пульт управления из комплекта робота 🙂

Необходимо:— ИК приемник с пультом — в наборе назывался «HX1838 Infrared Remote Control Module».— Провода.

— Крепеж/двухсторонний скотч.

В комплекте с роботом идет:
ИК пульт Модель 042803. По всей видимости он «рождался» чтобы управлять автомобильными МР3 проигрывателями… Вообще нам подойдет практически любой пульт! Об этом я расскажу далее.

ИК приемник HX1838 с платой подключения «адаптером».

Данные приемника HX1838 можно увидеть здесь: dalincom.ru/datasheet/AX-1838HS.pdf
Электрическая схема “адаптера”:

Подключение:Все, что нужно подключить — это ИК приемник.Для этого ИК приемник нужно:— вставить в имеющиеся разъемы «адаптера», или— припаять в имеющиеся разъемы «адаптера».Я выбрал – «вставить».Далее подключаем плату с ИК к Arduino — подключение простое – смотрите таблицу ниже.ВНИМАНИЕ: Если будите менять схему подключения – на 13 разъеме Arduino ИК датчик не работает.

ПРИМЕЧАНИЕ: Заодно я указал подключения Моторов – я буду в каждом примере указывать необходимые подключения. Цвет проводов указал себе для удобства — он может быть любым 🙂

Осталось прикрепить ИК датчик к роботу – главное условие, чтобы ИК датчик был на видном месте для ИК сигналов… Я выбрал место в «корме» робота. Крепил винтом, но можно и на двух сторонний скотч.

Программирование.Теперь самое интересное!

Научим РОБОТягу послушности 🙂

Но сначала немного про пульт…Я уже писал, что нам подойдет почти любой пульт.Все дело в том, что нам нужно только знать какие коды выдает пульт при нажатии каждой кнопки.

А это оказалось очень просто – вот например, тут написано как считать код с любого пульта — robotclass.ru/tutorials/arduino-ir-remote-control/ .

Если решите попробовать – не забудьте поменять разъем подключения ИК на 12 (для нашего робота).

Кстати! Я в скетче прописал такую же возможность – если вы будите использовать чужой пульт, робот не поедет, но покажет вам коды!

Для Пульта модель 042803 вам не нужно этого делать, так как я уже узнал коды соответствующие каждой кнопке данного пульта – они в таблице ниже.
ПРИМЕЧАНИЕ: ИК пульт Модель 042803 использует кодировку NEC. Может, зачем то вам это пригодится 🙂

Скетч – тут тоже все просто, благодаря специальной библиотеке IRremote – она уже есть в Arduino IDE.

Каждому коду (кнопке) устанавливаем действие, которое должен делать робот и вперед!В моем случае запрограммированы следующие кнопки:2 – прямо;8 – назад;4 – поворот влево;6 – поворот вправо;5 – стоп.

В отличии от предыдущего примера управление движением моторов сгруппировано в функции, например ВПЕРЕД:

void forward (int a) // ВПЕРЕД{digitalWrite (MotorRightBack, LOW);digitalWrite (MotorRightForward, HIGH);analogWrite (MotorRightSpeed, 150);digitalWrite (MotorLeftBack, LOW);digitalWrite (MotorLeftForward, HIGH);analogWrite (MotorLeftSpeed, 150);delay (a * 50);

}

Эта функция зависит от параметра «а», где а – это время в течении которого нужно двигаться.

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

В этом скетче, кстати, не задействованы движения типа «разворот».Можете поэкспериментировать и поменять, как вам понравится.Кроме того можно поиграть со скоростями движения – ускориться или замедлиться.Например, в команде ВПЕРЕД (см. выше) «условная» скорость (ШИМ) всего 150 из максимальной 255!

Но не рекомендую снижать ее ниже 100 – при таком значении робот будет очень вялым… и может вообще отказаться двигаться.

СКЕТЧ[code]

//Управляем роботом с помощью ИК пульта Модель 042803. Для других пультов нужно менять коды.

#include<\p>

// *********************** Установка выводов моторов ************************int MotorLeftSpeed = 5; // Левый (А) мотор СКОРОСТЬ — ENAint MotorLeftForward = 4; // Левый (А) мотор ВПЕРЕД — IN1int MotorLeftBack = 2; // Левый (А) мотор НАЗАД — IN2int MotorRightForward = 8; // Правый (В) мотор ВПЕРЕД — IN3int MotorRightBack = 7; // Правый (В) мотор НАЗАД — IN4int MotorRightSpeed = 6; // Правый (В) мотор СКОРОСТЬ — ENB

int duration;

// ************************ Настройка ИК управления ************************
const int irReceiverPin = 12; // Инфокрасный датчик (D12)

long IRfront = 0x3D9AE3F7;//код пульта для кнопки 2 — ВПЕРЕДlong IRback = 0x1BC0157B;//код пульта для кнопки 8 — НАЗАДlong IRturnright = 0x449E79F;//код пульта для кнопки 6 — ВПРАВОlong IRturnleft = 0x8C22657B;//код пульта для кнопки 4 — ВЛЕВО

long IRstop = 0x488F3CBB;//код пульта для кнопки 5 — СТОП

IRrecv irrecv (irReceiverPin); // определение IRrecv для приема инфракрасных сигналов
decode_results results; // результаты декодирования ИК сигналов

// *********************************** SETUP ********************************void setup (){

Serial.begin (9600); //Включаем серйиный порт — скрость 9600

//****************** Настраиваем параметры выводов ARDUINO ******************pinMode (MotorLeftForward, OUTPUT);pinMode (MotorLeftBack, OUTPUT);

pinMode (MotorLeftSpeed, OUTPUT);

pinMode (MotorRightForward, OUTPUT);pinMode (MotorRightBack, OUTPUT);

pinMode (MotorRightSpeed, OUTPUT);

irrecv.

enableIRIn (); // включение ИК декодирования}// ****************** Задаем основные направления движения ******************void forward (int a) // ВПЕРЕД{digitalWrite (MotorRightBack, LOW);digitalWrite (MotorRightForward, HIGH);analogWrite (MotorRightSpeed, 150);digitalWrite (MotorLeftBack, LOW);digitalWrite (MotorLeftForward, HIGH);analogWrite (MotorLeftSpeed, 150);delay (a * 50);}void right (int b) // ПОВОРОТ ВПРАВО (одна сторона){digitalWrite (MotorLeftBack, LOW);digitalWrite (MotorLeftForward, HIGH);analogWrite (MotorLeftSpeed, 200);digitalWrite (MotorRightBack, LOW);digitalWrite (MotorRightForward, LOW);delay (b * 50);}void left (int c) // ПОВОРОТ ВЛЕВО (одна сторона){digitalWrite (MotorRightBack, LOW);digitalWrite (MotorRightForward, HIGH);analogWrite (MotorRightSpeed, 200);digitalWrite (MotorLeftBack, LOW);digitalWrite (MotorLeftForward, LOW);delay (c * 50);}void turnR (int d) // РАЗВОРОТ ВПРАВО (два стороны){digitalWrite (MotorRightBack, HIGH);digitalWrite (MotorRightForward, LOW);digitalWrite (MotorLeftBack, LOW);digitalWrite (MotorLeftForward, HIGH);delay (d * 50);}void turnL (int e) // РАЗВОРОТ ВЛЕВО (два стороны){digitalWrite (MotorRightBack, LOW);digitalWrite (MotorRightForward, HIGH);digitalWrite (MotorLeftBack, HIGH);digitalWrite (MotorLeftForward, LOW);delay (e * 50);}void stopp (int f) // СТОП{digitalWrite (MotorRightBack, LOW);digitalWrite (MotorRightForward, LOW);digitalWrite (MotorLeftBack, LOW);digitalWrite (MotorLeftForward, LOW);delay (f * 50);}void back (int g) // НАЗАД{digitalWrite (MotorRightBack, HIGH);digitalWrite (MotorRightForward, LOW);digitalWrite (MotorLeftBack, HIGH);digitalWrite (MotorLeftForward, LOW);;delay (g * 50);}// *************************** Управление по ИК ******************************void loop(){if (irrecv.decode (& results)) // Декодирование выполнено успешно — получены ИК сигналы{Serial.println( results.value, HEX ); // печатаем данные — может пригодится при настройке// *********************************************if (results.value == IRfront) // ВПЕРЕД{forward (10);}// *********************************************if (results.value == IRback) // НАЗАД{back (10);}// *********************************************if (results.value == IRturnright) // поворот ВПРАВО{right (6);}// *********************************************if (results.value == IRturnleft) // поворот ВЛЕВО{left (6);}// *********************************************if (results.value == IRstop) // СТОП{stopp (1);}irrecv.resume (); // Перейти к следующим полученным ИК сигналам}}

[/code]

Ну и напоследок показательное выступление:

А в следующий раз расскажу про блютуз…
www.drive2.ru/b/2867939/

P.S. Как вы наверно догадываетесь, теперь вы можете заставить слушаться не только робота 🙂 www.compcar.ru/forum/showthread.php?t=4959

Источник: https://www.drive2.ru/b/2818339/

Урок 5 – Управление Arduino с помощью пульта ДУ (IR). Библиотека IRremote

При создании проектов на Arduino. Часто возникает вопрос, с помощью чего управлять проектом. И желательно на расстоянии. Кнопки уже не модно.

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

Для урока я буду использовать вот такой набор и Arduino UNO.

Купить пульт с IR приемником всего за 100 руб. можно тут.

Приемники могут быть распаянные как в моем случае.

И вот такого плана.

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

Подключаем к Arduino UNO вот по такой схеме. К другим Ардуинкам подключается аналогично.

Для работы нам понадобиться библиотека IRremote. Скачать ее можно тут.

С библиотекой устанавливается ряд примеров. Нам понадобиться IrrecvDemo.

IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); // In case the interrupt driver crashes on setup, give a clue // to the user what's going on. Serial.println(“Enabling IRin”); irrecv.enableIRIn(); // Start the receiver Serial.println(“Enabled IRin”); } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); // Receive the next value } delay(100); }

После того как скетч загружен и IR приемник подключен можно проверить какой код соответствует той или иной кнопке пульта ДУ. Поднажимайте на кнопки и в мониторе последовательного порта (Ctrl+Shift+M) вы уведите следующее.

;FF18E7 FFFFFFFF FFA857 FF02FD FF18E7 FF38C7 FF4AB5 FF5AA5 FF10EF FF5AA5 FFFFFFFF FF10EF FF5AA5

У вас возник наверное вопрос что за повторяющая команда FFFFFFFF. Это команда выводиться когда вы долго удерживаете кнопку на пульте и на Ардуино приходить одинаковая команда.

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

Отпускаем и машина перестает ехать и поворачивать.

Само простое, чем можно управлять это включение и выключения встроенного светодиода на плату Arduino при помощи пульта дистанционного управления и инфракрасного приемника.

Схема подключения как и в примере выше. Коды кнопок моего пульта:

//FF10EF — стрелочка вправо //FF5AA5 — стрелочка влево

У вашего пульта команды будут другие. Код получается вот такой.

//FF10EF — стрелочка вправо //FF5AA5 — стрелочка влево #include “IRremote.h” IRrecv irrecv(11); // указываем вывод, к которому подключен приемник decode_results results; void setup() { irrecv.enableIRIn(); // запускаем прием } void loop() { if ( irrecv.decode( &results )) { // если данные пришли switch ( results.value ) { case 0xFF10EF: digitalWrite( 13, HIGH ); break; case 0xFF5AA5: digitalWrite( 13, LOW ); break; } irrecv.resume(); // принимаем следующую команду } delay(100); }

Вот так можно легко научить вашу Arduinо понимать команды с пульта.

Источник: http://portal-pk.ru/news/147-urok-4—upravlenie-arduino-s-pomoshchyu-pulta-du-ir.html

Arduino – работаем с IR сигналами – приёмник TSOP22 запись IR сигнала

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

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

Как это работает

Подключаем IR приёмник, направляем пульт ДУ на приёмник, записываем сигнал и выводим его на Serial. (т.к. это первая часть статьи мы не рассматриваем отправку сигнала. Речь об отправке пойдёт как раз во второй части).

Что нам понадобится

  • Arduino (или аналоги, я использую Tosduino — подешевле раза в 2, полная совместимость с обычным arduino)
  • Светодиод (LED)
  • Резистор на 220 kOm
  • IR приёмник из серии TSOP22

Подключение

IR Receiver (Приёмник)

ArduinoIR Receiver
GND (GrouND) левая нога
5 V средняя нога
digital pin 2 правая нога

Светодиод LED

ArduinoBreadboardArduino
pin number 11 резистор 220 kOm GND (GrouND)

IR технология

Самый дешевый способ для удаленного управления устройством в видимой доступности с помощью инфракрасного излучения. Почти всей аудио и видео техникой можно управлять таким образом. Благодаря широкому распространению необходимые компоненты довольно дешевы, что делает эту технологию идеальной для нас, любителей использовать ИК-пульта для наших собственных проектов.

Инфракрасное излучение на самом деле нормальный свет с определенным цветом. Мы, люди, не можем видеть этот цвет, потому что его длина волны 950 нм, что ниже видимого спектра.

Это одна из причин, почему ИК выбран для нужд телемеханики, мы хотим использовать его, но мы не заинтересованы его видеть.

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

Видеокамера или цифровой фотоаппарат «видит» инфракрасный свет, как вы можете видеть на видео ниже. Даже самые дешевые сотовые телефоны имеют встроенные камеры. Просто наведите пульт на такую ??камеру, нажмите любую кнопку, и вы увидите светодиодные мерцания.

TSOP22

TSOP22 — Серия миниатюрных приемников для инфракрасных систем дистанционного управления. PIN диод и предусилитель собраны на выводной рамке, и выполнен в виде ИК-фильтра. Демодулированный выходной сигнал может быть непосредственно декодирован с помощью микропроцессора. TSOP22 — это стандартный приемник, поддерживает все основные коды передачи.

PartCarrier Frequency
TSOP2230 30 kHZ
TSOP2233 33 kHZ
TSOP2236 36 kHZ
TSOP2237 36.7 kHZ
TSOP2238 38 kHZ
TSOP2240 40 kHZ
TSOP2256 56 kHZ

IRremote.h

Скачать библиотеку IRremote можно с моего репозитория на Github.com

Пример №1 — получаем код кнопки пульта ДУ

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

#include
int RECEIVE_PIN = 2;
IRrecv irrecv(RECEIVE_PIN);
decode_results results;
void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver
}
void loop() { if (irrecv.decode(&results)) { Serial.print(“0x”); Serial.println(results.value, HEX); delay(50); irrecv.resume();// Receive the next value }
}

Я буду использовать эти коды кнопок во всех следующих примерах:

Пример №2 — присваиваем имя для кнопки ПДУ

Отправим названия кнопок в Serial порт. (предварительно мы должны поймать коды этих кнопок и привязать им названия, смотрите в код, думаю там всё понятно будет).

#include
int RECEIVE_PIN = 2;
IRrecv irrecv(RECEIVE_PIN);
decode_results results;
void setup() { Serial.begin(9600); irrecv.enableIRIn();
}
void loop() { if (irrecv.decode(&results)) { switch (results.value) { case 0x77E1A0CB: Serial.println(“Center”); break; case 0x77E160CB: Serial.println(“Right”); break; case 0x77E190CB: Serial.println(“Left”); break; case 0x77E150CB: Serial.println(“Up”); break; case 0x77E130CB: Serial.println(“Down”); break; } irrecv.resume(); }
}

Пример №3 — включаем LED по кнопке ПДУ

Теперь научим нашу Arduino включать светодиод (LED) на PIN 11 через кнопку на пульте

#include
int LED = 11;
int state = 0; // 0 = LED off while 1 = LED on
int RECEIVE_PIN = 2;
IRrecv irrecv(RECEIVE_PIN);
decode_results results;
void setup() { Serial.begin(9600); irrecv.enableIRIn(); pinMode(LED, OUTPUT);
}
void loop() { if ((irrecv.decode(&results)) && (results.value==0x77E1A0CB) ) { if (state == 0) { state = 1; digitalWrite(LED, HIGH); Serial.println(“Center – HIGH”); } else { state = 0; digitalWrite(LED, LOW); Serial.println(“Center – LOW”); } delay(50); irrecv.resume(); }
}

Пример №4 — ШИМ с ПДУ

Теперь давайте будем управлять яркостью нашего светодиода (так как он подключен к 11 порту, который имеет ШИМ то проблем не должно возникнуть). Для управления яркостью будут использоваться кнопки вверх и вниз на пульте ДУ.

#include
int RECEIVE_PIN = 2;
int brightness = 0;
int LED = 11;
IRrecv irrecv(RECEIVE_PIN);
decode_results results;
void setup() { Serial.begin(9600); irrecv.enableIRIn();
}
void loop() { if (irrecv.decode(&results)) { switch (results.value) { case 0x77E150CB: if(brightness < 255) { brightness+=15; Serial.println(brightness); } break; case 0x77E130CB: if(brightness > 0) { brightness-=15; Serial.println(brightness); } break; } analogWrite(LED, brightness); irrecv.resume(); }
}

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

Фото Arduino + IR приёмник и пульт ДУ

Источник: https://ergoz.ru/arduino-rabotaem-s-ir-signalami-ch-1-priyomnik-tsop22-zapis-ir-signala/

Z- IR receiver. Модуль ИК приемника

Опубликовано 05.05.2014 8:44:00

Модуль ИК Приемника в связке и ИК пультом дистанционного управления позволит легко реализовать дистанционное управление платой Arduino.

Он представляет из себя не что иное, как ИК приемник VS1838B с установленной на плате рекомендуемой производителем обвязкой.

Для работы с данным модулем “из коробки” необходим ПДУ с частотой 38 кГц.

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

Основные технические характеристики:

• Напряжение питания: 2.7 – 5.5В

• Частота модуляции: 38кГц

• Диапазон температур: – 20 … +  80°C

• Интерфейс: Цифровой

Подключение к Arduino

Модуль оборудован трехпиновым разъемом стандарта 2.54мм

 : подключается к выводу GND

 : подключается к выводу +5V

 : подключается к цифровому выводу ( в примере D2 )

Пример работы в среде Arduino

Для работы с данным модулем необходимо установить библиотеку IRRemote

Скачиваем, распаковываем и закидываем в папку libraries в папке Arduino. В случае, если на момент добавления библиотеки, Arduino IDE была открытой, перезагружаем среду.

Считывание показаний кнопок ПДУ

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

В качестве примера будем использовать пульт, как на картинке, т.к. пульт такого типа идет в наборе ИК пульт + ИК модуль приемник

Про отличия в логике работы различных пультов можно прочитать в статье-оригинале от члена нашего сообщества под ником mgook

Пример программного кода:

// Тестировалось на Arduino IDE 1.0.3
#include 
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN); //Создаем объект получения сигнала с определенного порта
decode_results results; //Переменная, хранящая результат void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Начинаем прием
} void loop() {
  if (irrecv.decode(&results)) //При получении сигнала…
  { 
    Serial.println(results.value); //…выводим его значение в последовательный порт
    irrecv.resume(); // Получаем следующее значение
  }
}

В мониторе порта должны увидеть слудущее:

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

Управление платой Arduino c ПДУ

Заставим светодиод на плате Arduino (D13) загораться при получении кодировки первой кнопки и выключаться при получении кодировки второй.

Пример программного кода:

// Тестировалось на Arduino IDE 1.0.3
#include  int RECV_PIN = 2;
int LED = 13;
IRrecv irrecv(RECV_PIN);
decode_results results; void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Запуск приемника
  pinMode(LED, OUTPUT);
} void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value);
    if (results.value == 16769565) // При получении кодировки 1
    {
      digitalWrite(LED, HIGH); // Включаем светодиод
    }
    if (results.value == 16761405) // При получении кодировки 2
    {
      digitalWrite(LED, LOW); // Выключаем светодиод
    }
    irrecv.resume(); // Получаем следующее значение
  }
}

Купить в России  Z- Модуль ИК приемника

В данный момент еще реализованы не все элементы нашего сообщества. Мы активно работаем над ним и в ближайшее время возможность комментирования статей будет добавлена.

Источник: http://zelectro.cc/Z-IR_receiver

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}