Меню

Управление освещением с пульта arduino



Урок 31. Управление освещением с ИК-пульта

Схема управления освещением с любого ИК-пульта реализована следующим образом:

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

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

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

220 В, с током потребления до 2 А.

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

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

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

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

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

Видео:

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

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

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

Не устанавливайте Trema-модуль ИК-приёмник рядом с источниками яркого света. Он может препятствовать приёму слабого инфракрасного света от ИК-пульта.

Источник

Управление светодиодом через пульт дистанционного управления

Урок по управлению светодиодами с помощью ИК-пульта дистанционного управления с использованием Arduino Uno R3 в качестве контроллера.

Комплектующие

Ниже перечислим все комплектующие для нашего урока.

Arduino Uno R3

Arduino Uno R3 — это плата, которая поможет вам обработать код и заставить вашу схему работать. Вы также можете купить данную плату в любом удобном магазине.

Макетная плата

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

Кабель для Arduino

Этот кабель поможет вам подключить Ардуино к вашему ноутбуку.

ИК-приемник

ИК-приемник поможет вам получить ИК-сигнал и отправить информацию в Arduino.

ИК-пуль дистанционного управления

ИК-пульт отправляет ИК-сигнал на ИК-приемник.

Перемычки «мама-мама»

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

Светодиоды

Светодиод включается и светится, когда на него подается электричество.

Резисторы 1 КОм и 220 Ом

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

Схема соединения

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

Код проекта

Для начала нам нужно сказать библиотеку для ИК-управления IRremote.

В первом варианте с несколькими светодиодами и 220 Ом резисторами наш код выглядеть будет таким образом:

Во втором варианте с резисторами 1 КОм (схема выше) можно использовать следующий код:

Добавление опций в схему

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

Результат

Решения, если цепь не работает.

  1. Проверьте соединения в цепи, правильно ли вы все соединили.
  2. Если у вас нет ИК-пульта Elegoo, найдите коды кнопок вашего ИК-пульта и замените их на коды в IRCode == (ваш код).
  3. Проверьте, правильный ли код вы скопировали.

На этом наш урок закончен. Больше про работу с пультами дистанционного управления будет в следующих уроках.

Источник

19dx.ru — R0WBH

Личный блог Гладышева Дмитрия

Arduino: управление светом с пульта дистанционного управления

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

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

  • Arduino
  • Реле на 5 вольт
  • IR-приёмник TSOP1xxx
  • Любой подходящий пульт ДУ

Сборка

Собираем следующую схему:

Внимание! Если код кнопки будет считываться с ошибками, либо не считываться совсем, необходимо собрать схему с фильтром:

Распиновка IR-приёмника TSOP1xxx:

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

Здесь два реле с обвязкой, можно подключать напрямую к микроконтроллеру (контакты IN1 и IN2). На контакты GND и VCC подаётся питание 5 вольт. Только необходимо иметь ввиду, что у некоторых таких сборок «логика наоборот». То есть при подаче сигнала реле отключается, при снятии — включается.

Читайте также:  Контроллер управления led освещением

Также можно использовать и твердотельное реле, что я и сделал. Они хоть и дороже, но обладают рядом преимуществ: абсолютно бесшумная работа, очень малое энергопотребление, можно подключать напрямую к микроконтроллеру, широкий диапазон управляющего напряжения. Вот пример твердотельного реле для нагрузки переменного тока 24-380 В и управляющим напряжением от 3 до 32 вольт:

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

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

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

При необходимости изменяем номера пинов, к которым подключены IR-приёмник и реле:

Также заменяем в следующей строчке код кнопки (на тот, который вы записали ранее):

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

Работа проверялась с Arduino IDE v1.0.1

Источник

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

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

ИК-пульт

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

На таком пульте есть 10 цифровых кнопок и 11 кнопок для манипуляции с музыкой: громкость, перемотка, play, stop, и т.д. Для наших целей более чем достаточно.

ИК-датчик

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

Для этого урока воспользуемся популярным ИК-датчиком VS1838B, который обладает следующими характеристиками:

  • несущая частота: 38 кГц;
  • напряжение питания: 2,7 — 5,5 В;
  • потребляемый ток: 50 мкА.

Можно использовать и другие датчики, например: TSOP4838, TSOP1736, SFH506.

Подключение

Датчик имеет три вывода (три ноги). Если посмотреть на датчик со стороны приёмника ИК сигнала, как показано на рисунке,

  • то слева будет — выход на контроллер,
  • по центру — отрицательный контакт питания (земля),
  • и справа — положительный контакт питания (2.7 — 5.5В).

Принципиальная схема подключения

Внешний вид макета

Программа

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

Загружаем программу на Ардуино. После этого, пробуем получать команды с пульта. Открываем монитор последовательного порта (Ctrl+Shift+M), берём в руки пульт, и направляем его на датчик. Нажимая разные кнопочки, наблюдаем в окне монитора соответствующие этим кнопкам коды.

Проблема с загрузкой программы

В некоторых случаях, при попытке загрузить программу в контроллер, может появиться ошибка:

TDK2 was not declared In his scope

Чтобы ее исправить, достаточно удалить два файла из папки библиотеки. Заходим в проводник. Переходим в папку, где установлено приложение Arduino IDE (скорее всего это «C:\Program Files (x86)\Arduino»). Затем в папку с библиотекой:

, и удаляем файлы: IRremoteTools.cpp и IRremoteTools.h. Затем, перезапускаем Arduino IDE, и снова пробуем загрузить программу на контроллер.

Управляем светодиодом с помощью ИК-пульта

Теперь, когда мы знаем, какие коды соответствуют кнопкам пульта, пробуем запрограммировать контроллер на зажигание и гашение светодиода при нажатии на кнопки громкости. Для этого нам потребуется коды (могут отличаться, в зависимости от пульта):

  • FFA857 — увеличение громкости;
  • FFE01F — уменьшение громкости.

В качестве светодиода, используем встроенный светодиод на выводе №13, так что схема подключения останется прежней. Итак, программа:

Загружаем на Ардуино и тестируем. Жмем vol+ — светодиод зажигается. Жмем vol- — гаснет. Теперь, зная как это все работает, можно вместо светодиода управлять двигателями робота, или другими самодельными микроэлектронными устройствами!

К размышлению

Несмотря на то, что инфракрасные пульты всё еще сильно распространены, этот способ передачи данных сильно проигрывается более современным подходам. Для управления устройствами удобнее использовать bluetooth, wi-fi или zigbee. Также для создания самодельных устройств с дистанционным управлением подойдут низкоуровневые передатчики: самый простой RF433 или RF315, а также более серъёзный NRF24L01.

Читайте также:  Управление освещением схемы подключения проходных выключателей

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

Во-первых спасибо за пример!
но он не работал у меня(

пришлось его доделать=)

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

decode_results results;
int Relay = 4;

у меня тоже не заработал скетч . вот скетч который у меня
заработал.

#include // подключаем библиотеку для IR приемника

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

void setup() // процедура setup
<
irrecv.enableIRIn(); // запускаем прием инфракрасного сигнала

pinMode(11, OUTPUT); // пин 13 будет выходом (англ. «output»)
pinMode(12, OUTPUT); // пин 12 будет выходом (англ. «output»)
pinMode(A0, INPUT); // пин A0 будет входом (англ. «intput»)

Serial.begin(9600); // подключаем монитор порта
>

// включаем и выключаем светодиоды, в зависимости от полученного сигнала

if (results.value == 12535991) <
digitalWrite(11, HIGH);
>
if (results.value == 12574751 ) <
digitalWrite(11, LOW);
>
if (results.value == 16718055) <
digitalWrite(12, HIGH);
>
if (results.value == 16724175) <
digitalWrite(12, LOW);
>
irrecv.resume(); // принимаем следующий сигнал на ИК приемнике
>
>

А какая библиотека?

Большое спасибо за познавательный урок, я бы хотел попросить вас усложнить задачку и сделать при помощи ШИМ плавное вкл/откл светодиода. Спасибо!

Дополнить программу кодом в данном месте (для увеличения яркости)
case 0xFFA857:
// например
int val = 0;
val += 50; // значение может быть любым
// или val++; для более плавного перехода
if (val > 255) val = 255
analogWrite( 13, val );
break;

при этом коде светодиод просто включается, плавности нет.

Нужно подключать к выходам с ШИМ (PWM)

У вас ошибка в коде. При таком алгоритме значение val всегда будет 50, так как постоянно при нажатии на кнопку пульта у вас будет переопределяться переменная val. Во избежание этого следует добавить слово «static» к типу данных val.

надо добавить, чтобы работало
pinMode(13, OUTPUT);

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

Скетч залился успешно, без ошибок? Причины могут быть разные. Например, пульт дает сигнал на частоте 40КГц, а приемник скорее всего 38КГц.

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

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

У разных пультов разный код.

А почему на схеме и на внешнем виде макета отличается подключение выводов? На схеме у вас (слева направо) идёт земля выход вход, а на макете земля вход выход.

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

Спасибо за замечание! Оказалось, что в редакторе схем fritzing ИК-датчик отображается неверно. Заменили на правильный вариант. Теперь всё как надо. Если не заработает, ищите проблему в другом.

разные выводы на сенсоре и на плате ky-022
вносите корректировку.

Можно ссылочку на деталь в Fritzing

Я пишу скетч на управление сервой с помощью ик приёмника и вылетает ошибка:
‘results’ was not declared in this scope

Скетч:
#include
#include
#include

void setup() <
Serial.begin(9600);
irrecv.enableIRIn(); // запускаем прием
MyServo.attach(4);

void loop() <
if ( irrecv.decode( &results )) <
switch ( results.value ) <
case 0xFFA25D:
MyServo.write(0);
break;
case 0xFF629D:
MyServo.write(90); //поворот на 90 градусов
break;
>
irrecv.resume(); // принимаем следующую команду
>

Почему- то не прописалось:
#include <>
#include <>
#include <>

Спасибо за пример! Заработал с первого раза. Очень доходчиво и просто. Спасибо.

Использовал скетчи из этой темы для того, что бы сделать лазертаг мишень: принимает ИК сигнал выстрела, загорается и гаснет, но вот какие вопросы:
1. Как только программа загружается в Ардуино — диод горит сразу.
2. Что надо сделать, что бы принял сигнал — моргнул 500 мсек — погас?

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

void setup() <
Serial.begin(9600); // выставляем скорость COM порта
irrecv.enableIRIn(); // запускаем прием
pinMode(3, OUTPUT);
>

void loop() <
if ( irrecv.decode( &results )) < // если данные пришли
switch ( results.value ) <
case 0x2FD58A7:
digitalWrite ( 3, HIGH );
delay (10);
case 0x2FDD827:
digitalWrite ( 3, LOW);
delay (100);
>
Serial.println( results.value, HEX ); // печатаем данные
irrecv.resume(); // принимаем следующую команду
>

Автору респект.
Alexandr, отдельная благодарность.
Светодиод горел на авторском скетче вполнакала,
с Вашей поправкой все заработало отлично.

Добрый день.
Не подскажете, в чем может быть проблема?
#include «IRremote.h»
void setup() <>
void loop()<>
Не компилируется:
IRremote.h: No such file or directory

Скобки поставь одинарные #include

#include скобки щдинарные

Читайте также:  Плафон освещения салона мерседес 190

Скачайте библиотеку IRremote.h

вместо «IRremote.h» напиши «IRremote.h»

Использую код из ваших примеров, но среда упорно пишет «Ошибка компиляции для платы Arduino/Genuino Uno». Никаких подробностей не указано больше. В чем проблема может быть?

Походу проблема в библиотеке

Проблема в библиотеке, В новой версии поддержка для UNO Выключена, Попробуйте скачать другую версию.
Я пользуюсь библиотекой от сюда https://www.arduinolibraries.info/libraries/i-rremote

Бывает такое при подключении платы с уже запущенным приложением Arduino IDE. Закрой ИДЕшку, извлеки провод, с помощью которого прошиваешь плату, запусти ИДЕ, подключи плату(ардуинку). PROFIT

Можно сделать проще: зайти в программу, Инструменты, Порт и выбираем

Добрый день? возможно ли подключить к uno серво шилд и wi-fi шилд? если нет, то какой вариант возможен?

извините,но в вашем коде какая то фигня… Вставте ваш код в word и вы поймёте.

собрал все по схеме светодиодом моргать получается а когда вместо светодиода цепляю реле неработает

Скорее всего тока не хватает для управления реле.
Какое реле подключаете?

Доброго времени суток!
Господа, я новичок в освоении Ардуино, Но!
Получаю команды с пульта всегда в двух числах, исходя из этого
хотел бы спросить профессионалов — Почему 2 цифры?
Как я понял одна из них и есть код сигнала, а вторая преселектор (т.е доп сигнал, для считывания нажатия комбинации кнопок в момент времени),.
Так, как в моем случае, мне нужна быстрая реакция на нажатие, я включил их в обработку
Пример ниже…

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

void setup() <
pinMode(13,OUTPUT);
pinMode(12,OUTPUT);
Serial.begin(9600); // выставляем скорость COM порта
irrecv.enableIRIn(); // запускаем прием
>

if (results.value ==32||results.value==2080)
<
digitalWrite( 13, HIGH );
>
if (results.value ==33||results.value==2081)
<
digitalWrite( 13, LOW );
>
if (results.value ==17||results.value==2065)
<
digitalWrite( 12, HIGH );
>
if (results.value ==16||results.value==2064)
<
digitalWrite( 12, LOW );
>
irrecv.resume(); // принимаем следующую команду
>
>

У меня при case пишет что неуказонное значение.Помогите

Покажите свой скетч

Допишите 0x Например у вас код кнопки получился CE1972FD, значит пишем case 0xCE1972FD

ПОМОГИТЕ УМОЛЯЮ! ЗАГРУЖАЮ СКЕТЧ И ПИШЕТ ОШИБКУ!

Какая ошибка? case неверный? Допишите перед вашим значением кода 0x Например case 0xCE1972FD

Почему приёмник иногда пишет в консоль разные коды на одну и ту же кнопку? Как эти коды можно контролировать в понятный для Android вид чтобы создать программный пульт?

ТЫ НА ПУЛЬТЕ НАЖИМАЕШЬ РАЗНЫЕ КНОПКИ ПРОСТО СМОТРИ НА ПУЛЬТ И НАЖИМАЙ НОГТЕМ НА ОДНУ КНОПКУ НЕ УДЕРЖИВАЯ ПРИМЕРНО МЕНЬШЕ СЕКУНДЫ!

Почему светодиод не на полную мощность работает?

Может, сопротивление поменьше поставьте

ГДЕ ВЫ ПОКАЗАЛИ КАК ПОДКЛЮЧАТЬ ИК ДАТЧИК ТАМ НЕ ПРАВИЛЬНО МОЖНО БЫЛО ПОДКЛЮЧИТЬ НА 3 ВОЛЬТА А МОТОР НА 5 ИЛИ НА СЕМЬ ВОЛЬТ МЕНЬШЕ ПЯТИ ВОЛЬТ МОТОРУ НЕ ХВАТАЕТ МОЩНОСТИ!

Если использовать в одном скрипте + tone для пищалки, то вылетает ошибка
>>
Arduino: 1.8.8 (Windows XP), Плата:»Arduino/Genuino Uno»
Tone.cpp.o (symbol from plugin): In function `timer0_pin_port’:
(.text+0x0): multiple definition of `__vector_7′
libraries\IRremote\IRremote.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.
+2

Функция tone () использует таймер 2, который по умолчанию IRremote также использует при использовании чипа ATmega2560.
В файле IRremoteInt.h вы можете определить, какой таймер использовать. Или скачайте библиотеку TonePlayer

#include «IRremote.h»
вот эту строка пишет что не правельная что делать?

Скобки одинарные поставьте.

копировал, поменял на сигнал для своего пульта, закинул, выдает
Arduino: 1.8.9 Hourly Build 2019/03/18 11:33 (Windows 10), Плата: «Arduino BT, ATmega328P»

Скетч використовує 6502 байтів (22%) місця зберігання для програм. Межа 28672 байтів.
Глобальні змінні використовують 236 байтів (11%) динамічної пам’яті, залишаючи 1812 байтів для локальних змінних. Межа 2048 байтів.
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x78
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x86
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x60
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x66
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x86
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x78
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x06
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x18
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x60
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xe6
Сталася помилка при вивантаженні скетча

Цей звіт міститиме більше інформації, якщо
в меню Файл -> Налаштування увімкнути опцію
«Показати докладний звіт при компіляції».

Судя по ошибке, Arduino IDE не может залить скетч на плату по каким-то причинам. При этом скетч скомпилирован, к программе уже претензий нет. Проверьте кабель, подключение. Может загрузчик слетел с ардуины, такое тоже бывает.

встроенный 13светодиод после загрузки скетча не переключается.И не пишет ошибку

Добрый день! Кто знает: как сделать так, чтобы светодиод горел столько, сколько жмешь кнопку на пульте? Зараннее спасибо!

Ошибка компиляции — нет предустановленной библиотеки IRremote.h
А жаль…

Источник