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

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

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

ИК приемник + Ардуино. Подключение

Подключение ИК приемника к Ардуино ► расскажем, как использовать библиотеку IRremote.h и продемонстрируем скетч для IR приемника Arduino со светодиодом и серво.

Рассмотрим на этом занятии подключение ИК приемника к Ардуино. Расскажем какую библиотеку следует использовать для IR приемника, продемонстрируем скетч для тестирования работы инфракрасного приемника от пульта дистанционного управления и разберем команды в языке C++ для получения сигнала. Сразу отметим, что IR датчик Ардуино подходит не к каждому пульту, частота сигнала может отличаться.

Устройство ИК приемника. Принцип работы

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

Принцип работы IR ресивера. Обработка сигнала от пульта ДУ

ИК-приемник на Ардуино способен принимать и обрабатывать инфракрасный сигнал, в виде импульсов заданной длительности и частоты. Используется при изготовлении датчика препятствия и дальномера для Arduino. Обычно ИК-приемник имеет три ножки и состоит из следующих элементов: PIN-фотодиод, усилитель, полосовой фильтр, амплитудный детектор, интегрирующий фильтр и выходной транзистор.

Под действием инфракрасного излучения в фотодиоде, у которого между p и n областями создана дополнительная область из полупроводника (i-область), начинает течь ток. Сигнал поступает на усилитель и далее на полосовой фильтр, который настроен на фиксированную частоту: 30; 33; 36; 38; 40 и 56 килогерц и защищает приемник от помех. Помехи могут создавать любые бытовые приборы.

Как подключить ИК приемник к Ардуино

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • IR приемник;
  • пульт ДУ;
  • 1 светодиод и резистор 220 Ом;
  • провода «папа-папа» и «папа-мама».

Корпуса инфракрасных приемников содержат оптический фильтр для защиты прибора от внешних электромагнитных полей, изготавливаются они специальной формы для фокусировки принимаемого излучения на фотодиоде. Для подключения IR приемника к Arduino UNO используют три ножки, которые соединяют с — GND, 5V и A0. Советуем для начала использовать 3,3 Вольта, чтобы не сжечь ИК датчик при настройке.

Читайте также  Эмулятор таксофонной карты или эссе об авторизации

Схема подключения ИК приемника к аналоговому порту Ардуино

Подключите IR приемник по схеме, представленной выше, и подключите светодиоды к 12 и 13 пину. Перед загрузкой программы, вам потребуется установить библиотеку IRremote.h, если она не была еще установлена. Данная библиотека не относится к стандартным библиотекам среды программирования Arduino IDE. Скачать библиотеку IRremote.h и готовый скетч можно одним архивом с Google Диск по ссылке здесь.

Скетч для ИК приемника Arduino со светодиодом

Пояснения к коду:

  1. библиотека IRremote.h содержит набор команд и позволяет упростить скетч;
  2. оператор decode_results присваивает получаемым сигналам от пульта дистанционного управления имя переменной results .

ИК датчик можно применять во многих устройствах на микроконтроллере Ардуино, в том числе, можно сделать дистанционное управление сервоприводом на Ардуино от ИК приемника. При настройке следует включить монитор порта Arduino IDE и узнать какой сигнал отправляет та или иная кнопка на пульте ДУ. Полученные коды следует использовать в скетче после знака двойного равенства в условиях if () .

Скетч для ИК приемника Ардуино и серовомотора

Пояснения к коду:

  1. в условиях if (results.value == 16724175) следует поставить свои значения, они будут появляться на мониторе порта при нажатии кнопок на пульте ду.

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

FAMAT › Блог › ROBOTяга ARDUINO — 4. ИК управление.

РОБОТяга уже ездит… можем не очень контролируемо…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. Для других пультов нужно менять коды.

// *********************** Установка выводов моторов ************************
int MotorLeftSpeed = 5; // Левый (А) мотор СКОРОСТЬ — ENA
int MotorLeftForward = 4; // Левый (А) мотор ВПЕРЕД — IN1
int MotorLeftBack = 2; // Левый (А) мотор НАЗАД — IN2
int MotorRightForward = 8; // Правый (В) мотор ВПЕРЕД — IN3
int MotorRightBack = 7; // Правый (В) мотор НАЗАД — IN4
int 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; // результаты декодирования ИК сигналов

//****************** Настраиваем параметры выводов 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]

Читайте также  Как менять проводку в панельном доме?

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

Как подключить инфракрасный сенсор к Arduino

Для проекта нам понадобятся:

  • Arduino UNO или иная совместимая плата;
  • инфракрасный датчик препятствий;
  • инфракрасный приёмник;
  • соединительные провода (рекомендую вот такой набор);
  • макетная плата (breadboard);
  • персональный компьютер со средой разработки Arduino IDE.

1 Описание и принцип действия ИК датчика препятствий

Длины волн разных типов электромагнитного излучения

Если оснастить, для примера, своего робота несколькими такими ИК модулями, можно определять направление приближения препятствия и менять траекторию движения робота в нужном направлении.

Модуль с ИК излучателем и ИК приёмником

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

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

2 Подключение ИК датчика препятствийк Arduino

Подключение ИК модуля к Arduino предельно простое: VCC и GND модуля подключаем к +5V и GND Arduino, а выход OUT сенсора – к любому цифровому или аналоговому выводу Arduino. Я подключу его к аналоговому входу A7.

Модуль с инфракрасным датчиком подключён к Arduino Nano

3 Скетч Arduino для инфракрасного датчика препятствий

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

ИК датчик может состоять из одного только инфракрасного приёмника, как в этом случае:

ИК приёмник

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

К Arduino модуль с ИК приёмником подключается тоже очень просто:

Пин модуля Пин Arduino Назначение
DAT Любой цифровой Признак наличия ИК излучения на входе приёмника
VCC +5V Питание
GND GND Земля

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

Напишем скетч, в котором будем просто показывать с помощью встроенного светодиода, что на входе приёмника присутствует ИК излучение. В данном модуле аналогично с ранее рассмотренным на выходе DAT уровень «0», когда ИК излучение попадает на приёмник, и «1» когда ИК излучения нет.

Если загрузить этот скетч в Arduino, направить на ИК приёмник ИК пульт и нажимать на нём разные кнопки, то мы увидим, что светодиод нашего индикатора быстро мигает. Разные кнопки – по-разному мигает.

Чтение команд ИК пульта с Arduino

Очевидно, что каждая команда закодирована своей бинарной последовательностью. Хотелось бы увидеть, какие именно команды приходят от пульта. Но прежде чем ответить на этот вопрос, нужно посмотреть другим способом, что же отправляет пульт. А именно – с помощью осциллографа. Подключим осциллограф DS203 к тому месту, где сигнал непосредственно излучается в пространство: к аноду инфракрасного светодиода.

Осциллограф отображает часть команды ИК пульта

На осциллограмме видна серия «пачек» импульсов примерно одинаковой длительности. Каждая «пачка» состоит из 24-х импульсов.

Осциллограф отображает часть команды ИК пульта

Подключение выхода с ИК приёмника и выхода ИК пульта к осциллографу

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

Осциллограмма пакета с ИК пульта ДУ

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

Биты пакета ИК пульта, масштаб: 1 клетка – 200 мкс Биты пакета ИК пульта, масштаб: 1 клетка – 1 мс Начало пакета ИК пульта, масштаб: 1 клетка – 5 мс, только цифровой сигнал

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

Если зарисовать этот пакет, то получится как-то так:

Один из пакетов ИК пульта

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

Есть несколько вариантов, как поступить для получения цифровых данных пакета:

  1. опрашивать пакет через равные промежутки времени (т.н. «стробирование»), а затем принимать решение, это логический «0» или «1»;
  2. ловить фронты импульсов (детектор фронта), затем определять их длительность и также принимать решение, какой это бит.

Напомню, что будем считать короткие импульсы логическим нулём, длинные – логической единицей.

Для реализации первого варианта понятно, с какой частотой необходимо опрашивать ИК датчик, чтобы принимать с него корректные данные: 600 мкс. Это время в два раза меньшее, чем длительность коротких импульсов сигнала (логических нулей). Или, если рассматривать с точки зрения частоты, опрашивать приёмник нужно в 2 раза большей частотой (вспомним Найквиста и Котельникова). Напишем скетч, реализующий вариант со стробированием.

Скетч для чтения пакета от ИК пульта методом стробирования

Поэкспериментируем с данным скетчем и ИК приёмником. Загрузим скетч в память Ардуино. Запустим последовательный монитор. Нажмём на пульте несколько раз одну и ту же кнопку и посмотрим, что мы увидим в мониторе.

Выводим принятые пакеты ИК пульта в последовательный монитор

Это похоже на пакет, который мы видели на осциллограмме, но всё-таки есть ошибки. Между одинаковыми пакетами также встречаются различия, которых быть не должно. Можно улучшить результат, если увеличить частоту стробирования, чтобы точнее определять биты пакета. Для безошибочного приёма необходимо чтобы строб попадал ближе к середине импульса. Но мы не можем гарантировать это, т.к. импульсы могут распространяться с варьирующимися задержками; Arduio выполняет код также не моментально, каждый цикл требует малого, но всё же времени, поэтому с каждым битом мы немного будем уходить от исходной позиции посередине импульса и рано или поздно «промахнёмся» (определим бит с ошибкой).

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

Скетч для чтения пакета от ИК пульта методом детекции фронтов

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

Загрузим скетч, запустим монитор, нажмём несколько раз ту же кнопку пульта.

Выводим принятые пакеты ИК пульта в последовательный монитор

Результат, как видно, более стабильный.

Arduino — два независимых ИК-приёмника и передатчика

В статье рассказано о том, как подключить к ардуине два независимых инфракрасных приёмника и передатчика.

Предполагается использование в составе «Умного дома».

Зачем это нужно

Например можно разнести приёмники в разные комнаты (подключив их к ардуине витой парой, у меня работает на длине

15м) и включать разные устройства одним и тем же пультом, одной и той же кнопкой.

В процессе эксплуатации замечено, что если в сети есть некачественные энергосберегающие лампы или какие-либо трансформаторы, то приёмник на длинном проводе ловит помехи и система плохо работает.

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

Подключение

Схема верна для приёмников TSOP2ххх и TSOP32хх, наиболее предпочтительный вариант — TSOPxx38 (38kHz).


Приёмники и передатчики:


Резисторы 100-400ом.

Программирование

Скачайте библиотеки IRremote и IRstD, установите их стандартным способом и залейте тестовый скетч:

Откройте монитор последовательного порта, возьмите пульт и понажимайте кнопки. Вы увидите коды кнопок считаные первым и вторым приёмниками.

Отправьте ардуине символ A:


Отработает первый передатчик.

Отправьте символ B:


Отработает второй передатчик.

Чтоб убедится в работе передатчиков, можно посмотреть через видеокамеру телефона.

Теперь предположим, что у вас есть ик-пульт с одной кнопкой и вы хотите включать этим пультом свет в разных помещениях.

Считываем код кнопки:

Разносим приёмники в разные места и заливаем в ардуину вот такой скетч:

В результате если послать сигнал первому приёмнику, то загорится D7, а если послать тот же сигнал второму приёмнику, то загорится D13.

Что же касается независимых передатчиков, то я пока что не нашёл им применения, однако надеюсь кому-то это может пригодится…

В архиве IRstD продублированы примеры из исходной библиотеки со всеми необходимыми изменениями.

Вступайте в Telegram-группу Arduino

Эксперимент №14. ИК пульт ардуино дистанционного управления

Введение

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

Благодаря своей дешевизне, простоте, экономичности и универсальности, ИК пульт всегда будет занимать свое место среди устройств дистанционного управления, наряду с Bluetooth, радио, и WiFi.

Принцип действия

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

Под воздействием инфракрасного излучения в фотодиоде начинает течь ток. Сигнал поступает на встроенный усилитель и далее – на полосовой фильтр, настроенный на фиксированную частоту, который защищает приемник от помех.

Чтобы сигнал от пульта ДУ принимался ИК приемником Ардуино, пульт должен быть настроен на соответствующую частоту. Поэтому не каждый пульт ДУ подойдет для нашего ИК приемника.

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

Разберем на распиновку ИК приемника. Традиционный ИК-приемник имеет три контакта:

Распиновка ИК приемника для пульта ДУ

  • Питание (VCC, 5V)
  • Земля (GND)
  • Данные (выходное напряжение, VOUT)

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

Давайте же соберем что-нибудь!

Задача

Светодиод, управляемый дистанционно.

Необходимые компоненты

Итак, нам понадобится:

  • 1 пульт ДУ. Подойдет практически любой ИК пульт дистанционного управления.
  • Плата Ардуино, макетная плата, перемычки

В качестве светодиода будем использовать встроенный светодиод ардуино.

Схема сборки

Соберем такую схему:

Скетч

Для работы нашего скетча нам понадобится специальная библиотека — Arduino-IRremote, которую потребуется установить.

Загрузим в ардуино такой скетч:

Результат

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

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

Объяснение

Для работы с пультом нам потребуется объявить два объекта: типа IRrecv – для приемника и типа decode_results – для разбора полученных приемником данных.

decode_results irData; // переменная для получения данных от ИК приемника

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

Чтобы приемник начал работать на прием, необходимо его включить. Мы это делаем в функции setup():

Метод decode() позволяет получить данные от приемника.

Если decode() возвращает значение > 0, то сигнал поступил, и его можно проанализировать.

Чтобы понять какой именно сигнал получил, мы анализируем свойство value объекта данных:

Чтобы продолжить получение данных, надо вызвать метод resume():

Заключение

Теперь вы умеете управлять устройством Ардуино не вставая с дивана ?. Не нужно разводить кнопки. Или кнопки можно просто продублировать пультом.

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

4 Replies to “Эксперимент №14. ИК пульт ардуино дистанционного управления”

один вопрос , а где так сказать , сама схема?

Схема на месте. Извините, потерялась после переноса на новую платформу )

Добавить комментарий Отменить ответ

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