076-Управление нагрузками при помощи IR-пульта (ATtiny13).

Автор: | 12.06.2011

ТитлИмея устройство IR-to-UART, которое выдает по UART код нажатой на IR-пульте клавиши , совсем не сложно сделать прошивку для прямого дрыганья ногами микроконтроллера. Единственная проблема в том, что заранее неизвестно какой пульт мы будем использовать или какую клавишу задействуем. Придется приделать к программе кусок, позволяющий изучать нужные кнопки. Этим мы сейчас и займемся!

Согласитесь, очень удобно когда, не вставая с кресла, можно одним пультом управлять, кроме телевизора, еще и освещением, вентилятором или другими бытовыми приборами в комнате. А если к устройству трудно (или вообще невозможно) добраться? Или нужен пульт для управления Вашей моделью.  Именно для таких целей и предназначено это устройство. Для управления нагрузками подойдет любой, выбранный Вами пульт, на котором можно выбрать любые клавиши. И если вдруг Вы не сможете быстро отыскать, где-то оставленный Вами пульт, Вы сможете использовать любой другой попавшийся под руку пульт, пройдя несложную процедуру его изучения. В общем, это нужное устройство. Будем собирать!

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

Распиновка устройства

Ножки Load A, Load B, Load C предназначены для управлением нагрузками (как подключить нагрузку к микроконтроллеру – читаем здесь >>). Индикаторный светодиод будет отображать действия устройства.

Прошивка.
Для прошивки микроконтроллера на плате выведены все необходимые сигналы. Подключаем программатор и заливаем прошивку.
076-T13-IR-to-Pin.hex v2.0 - Прошивка устройства управления нагрузками
076-FuseBit - Фьюз биты для устройства
Как правильно прошить AVR фьюзы

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

Процедура изучения клавиш пульта:
— включаем устройство;
— в течении около 10 секунд удерживаем нажатой любую клавишу пульта (для разных пультов время удержания разное, так как замеряется не время удержания, а количество автоповторов команды кнопки);
— по истечении 10 секунд замерцает индикаторный светодиод – устройство перешло в режим изучения;
— далее последовательно нажимаем клавиши пульта в порядке следования функций устройства. После каждой нажатой клавиши устройство будет подтверждать запоминание кнопки мерцанием;
— после последней изученной кнопки устройство подтвердит окончание изучения пульта длительным мерцанием и перейдет в режим управления нагрузкой.
Изучение команд клавиш пульта можно производить сколько угодно раз. Изученные кнопки записываются в энергонезависимую память, поэтому устройство их будет «помнить» даже после обесточивания устройства.

Последовательность изучения кнопок пульта:
1
включение/отключение нагрузки A (Load A)
2 включение/отключение нагрузки B (Load B)
3 включение/отключение нагрузки C (Load C)
4 выключить все нагрузки
5 включить все нагрузки
6 сохранить состояние нагрузок в энергонезависимую память
7 восстановить из энергонезависимой памяти состояние нагрузок
Всего 7 команд.

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

Видео, о том как это все выглядит на самом деле:

Файлы:
076-T13-IR-to-Pin.hex v2.0 - Прошивка устройства управления нагрузками
076-FuseBit - Фьюз биты для устройства
076-source-T13-IR-to-PIN v2.0 - Исходник устройства управления нагрузками

Ссылки:
069-Универсальная плата-IR Driver на ATtiny13.

P.S. Данный вариант обработки IR-сигнала и изучения пультов почти без изменений войдет в 1W-IR сеть, т.е. каждое устройство в сети (если это для него нужно) сможет принимать кроме сообщений сети еще и команды с IR-пультов. Алгоритм еще будет дорабатываться, так как он еще не оптимален и не отлажен.

 

МОДИФИКАЦИИ.
(Изменение некоторых аспектов работы устройства. Общая логика работы остается прежней)

Больше модификаций можно посмотреть в разделе форума. Там-же можно показать свои модификации.

 

Модификация №1.
— Убрано: запуск процедуры обучения пульта при длительном нажатии на любую клавишу пульта.
+ Добавлено: запуск процедуры обучения пульта при условии закорачивания  ножки кристалла 6 (PB1) (или штырька платы Out) на «землю» при подаче питания. После перехода в режим обучения (индикаторный светодиод помигает)  ножку нужно «отпустить».

076-T13-IR-to-Pin-Mod1.hex - Модифицированная прошивка Mod1
076-FuseBit - Фьюз биты для устройства

Как правильно прошить AVR фьюзы
076-source-T13-IR-to-PIN-mod1.zip - Исходник модификации 1

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

 

Модификация №2.
+ Добавлено: запуск процедуры обучения пульта при БОЛЕЕ длительном нажатии на любую клавишу пульта.

076-T13-IR-to-Pin-Mod2.hex - Модифицированная прошивка Mod2
076-FuseBit - Фьюз биты для устройства

Как правильно прошить AVR фьюзы
076-source-T13-IR-to-PIN-mod2.zip - Исходник модификации 2

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

(Visited 12 280 times, 18 visits today)

076-Управление нагрузками при помощи IR-пульта (ATtiny13).: 540 комментариев

  1. DARKMAVR

    КРАСАВЕЦ!!! Ещё бы исходники на Си для изучения…

  2. mallsa

    Супер! Аttiny2313 нельзя использовать? как вариант расширения.

  3. GetChiper Автор записи

    DARKMAVR :

    Ещё бы исходники на Си для изучения…

    Боюсь тини13 маловата для СИ. Но кто попробует сделать — буду рад выложить исходник и на СИ!

    mallsa :

    Аttiny2313 нельзя использовать? как вариант расширения.

    Уже делаю подобную штуку на ATtiny2313 с расширенным функционалом:
    — 8 каналов нагрузки
    — 2 канала с ШИМ выходом (плавное изменение уровня сигнала)
    — кое что по мелочи.

  4. exersizze

    Шим очень кстати, я тоже собрал недавно подобный модуль на тини2313. А там глядишь и до RGB-контроллера не далеко 😉

  5. ewgeny

    Прекрасно работает 🙂
    Аффтар молодец!
    Насчет Таньки с ШИМом абсолютно согласен. Получится крайне полезная в хозяйстве вещь.

  6. mallsa

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

  7. GetChiper Автор записи

    mallsa :

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

    ОК — сделаю.

  8. karu

    Молодчинка!!! Нада же такое сотворил… Супер!!!

  9. gindul

    GetChiper :

    DARKMAVR :
    Ещё бы исходники на Си для изучения…

    Боюсь тини13 маловата для СИ. Но кто попробует сделать – буду рад выложить исходник и на СИ!

    mallsa :
    Аttiny2313 нельзя использовать? как вариант расширения.

    Уже делаю подобную штуку на ATtiny2313 с расширенным функционалом:
    — 8 каналов нагрузки
    — 2 канала с ШИМ выходом (плавное изменение уровня сигнала)
    — кое что по мелочи.

    ну так как насчет исходника на СИ, а то я на алгоритм-билдер не шарю.
    Хочу сделать управление вентилятором (ШИМ) через ИК (если буде возможна через тиньку 13А, если нет то уже поставлю 2313 в СМД)

  10. GetChiper Автор записи

    А чем готовое решение не устраивает? Я подправлю!

  11. gindul

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

    Заранее благодарю!

  12. GetChiper Автор записи

    Следующее устройство будет делать все что Вам нужно! Уже отлаживаю программу.

  13. ewgeny

    Евгений, ИМХО не мешало бы разработать брелок-пульт для управления приемником.
    Я вижу модуль примерно таким — плата размером со спичечный коробок, 4(6) кнопочек, в качестве МК — тини2313, питание батарейное, для максимальной дальности/надежности использовать два-три светодиода. Для получения достаточной мощности источника питания для формирования пакета импульсов можно использовать конденсатор-электролит, при этом пауза между посылками должна должна быть достаточной для его подзарядки от батареи.
    Из разряда бреда — можно использовать миниатюрный энкодер для плавной регулировки какого-либо канала управления.

  14. ankar

    Штука действительно отличная. Щас думаю куда ее применить.Единственно вопрос к печатке. Проводники сделаны 0.5, хотя спокойно идут 0.8. И меньше перетрав.
    А вообще Вам большое СПАСИБО.

  15. Ghjuhfvvf

    Иногда, в течение 5-15 мин самопроизвольно включается. Пробовал перекинуть на другой канал — результат тот же

  16. Ploxoi

    Собрал,все заработало с первого раза!Вопрос: а можно ли собрать нечто подобное на attiny 2313, там команд столько же будет? или больше?

  17. Ploxoi

    Уважаемый GetChiper!Сразу не посмотрел,ты написал что уже собирал на 2313. Выложи пожалуйста материал.

  18. ankar

    У меня пульт от LG 2005 года. Запоминание проходит нормально. Но срабатывает через раз. Хотя светик при нажатии клавиши моргает. Т.е. сигнал идет. первое нажатие-вкл. второе- ничего. третье- выкл. Да и самопроизвольно включается канал С.

  19. ewgeny

    ankar, вполне возможно что ваш пульт отправляет сразу пачку кодов, отсюда и сбои в работе и ложные срабатывания. Я подбирал себе пульт, залив в модуль прошивку IR-UART и наблюдая за принятыми байтами в терминале. Так отобрал два пульта с однобайтовыми посылками и четкой работой приемного модуля.
    Попробуйте просто заменить пульт на другой. Или просто переназначить управление на другие кнопы.

  20. ankar

    Возможно Вы правы. Но идея была, как я понял,подключать ЛЮБОЙ пульт. Да и самопроизвольное включение тоже немного напрягает. А так вещь хорошая, за что неоднократное спасибо. Просто пока сыровато.
    И потом, чем больше будет высказано замечаний, тем легче их устранять. В новом всегда есть глюки.

  21. rgraf

    GetChiper я пытаюсь сделать «Умный дом», параллельно изучаю программирование AVR. У меня возникла такая идея, хочу сделать, чтобы при хождении по квартире свет в комнатах сам включался и выключался, я думаю для этого вполне подойдет IR. Идея заключается в следующем: С одной стороны дверной коробки, на высоте примерно 1 метр стоит IR светодиод, с другой два IR фотоприемника на некотором расстоянии друг от друга (например на ширину дверной коробки) все это хозяйство управляется какой нибудь Тинькой которая определяет в зашел человек или несколько человек (подсчитывает количество вошедших в комнату)включает свет и как только из комнаты выйдут все отключает свет. Еще должен быть порт по которому можно это все подцепить к компу для контроля и управления например по урезанному протоколу MODBUS. Кстати про реализацию MODBUS тоже интересная статья будет!!!

  22. GetChiper Автор записи

    я тут потерялся на неделю 🙂 появлюсь — будем отлавливать баги и увеличивать функциональность. пока копим информацию!

  23. vuln

    rgraf имхо вам луче всего подойдет готовый датчик движения(принципе они не дорого стоят у нас рублей 150 будет, дешевле чем самому собирать), либо емкостной датчик, идея с IR хорошая но ошибки неизбежны например два человека вошли в комнату почти впритык друг другу, система определит как вошел один человек, один из них выйдет система решит что комнате никого и выключит свет))))) или разнести датчики подальше друг от друга

  24. rgraf

    @vuln
    vuln готовый не подойдет, я уже думал. Как определит этот датчик если ты стоишь, сидишь или спишь 🙂 в комнате, я имею в виду не двигаешься или вошел ты или вышел? А на счет почти впритык друг другу, как часто вам приходится ходить по квартире гуськом?

  25. ankar

    rgraf :
    @vuln
    vuln готовый не подойдет, я уже думал. Как определит этот датчик если ты стоишь, сидишь или спишь в комнате, я имею в виду не двигаешься или вошел ты или вышел? А на счет почти впритык друг другу, как часто вам приходится ходить по квартире гуськом?

    два датчика. Обычный счетчик ИЕ3,4,10 с возможностью вычитания. и будет Вам счастье.

  26. ve4er21

    у вас в фьюзах стоит галочка на RSTDISBL запрет зброса после прошивки мой тини больше не читается вопрос нужно ли RSTDISBL прошывать

  27. GetChiper Автор записи

    скорей всего вы неправильно прошили фьюзы. прочитайте статью про фьюзы

  28. ve4er21

    я оживил свою тини «Atmega fusebit doctor» но не знаю просто вы прошиваете другой прогой можете вылаживать фьюзы в виде
    High Fuse = 0xD1
    Low Fuse = 0xE1

  29. ve4er21

    Собрал работает клас БОЛЬШОЕ спасибо фъюзы поставил такие CKSEL0, SUT0, EESAVE, SPIEN.

  30. Ghjuhfvvf

    Объясните! Не могу понять как считает до 85 для выхода в режим обучения, при TOV_Count = 10 клавиша считается отпущенной и в подпрограмме Key_Up Rep_Count=0, т.е. Rep_Count не может быть больше 10. Хотя на пульте Yamaha от DVD считает и выходит в режим обучения, а вот от Hitachi от телика не выходит в режим обучения.

  31. Ghjuhfvvf

    Понял, TOV_Count обнуляется не доходя до 10

  32. Ghjuhfvvf

    1 -> Pin_LA на Тини проходит и инвертирует(не понимаю), на Меге16 пришлось использовать: Pin_LA->r2.0, r2.0^#b11111111, r2.0->Port_LA и уменьшить TOV_Count до 5 (частота 8МГц)

  33. Ghjuhfvvf

    Переделал процедуру Key_Work следующим образом: т.к. в памяти коды клавиш лежат упорядоченно (см. Последовательность изучения кнопок пульта), то нам стоит извлечь код и сравнивать с нажатой клавишей (как у Евгения), в случае если флаг Z равен 0, то считываем следующий код из памяти, если Z не равен 0, то принятая команда есть в памяти, а далее 7 условий со счетчиком (Pult_Count=1..7). При совпадении со счетчиком делаем то-то.

  34. Smex07

    Идея классная!!! Но есть одно НО!? А где мне взять 5 вольт в машине например или в вентиляторе где 220 вольт? Подскажите пожалуйста!!!

  35. GetChiper Автор записи

    Ghjuhfvvf :

    Иногда, в течение 5-15 мин самопроизвольно включается. Пробовал перекинуть на другой канал – результат тот же

    У кого еще так случается?

    Ploxoi :

    Уважаемый GetChiper!Сразу не посмотрел,ты написал что уже собирал на 2313. Выложи пожалуйста материал.

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

    ankar :

    Возможно Вы правы. Но идея была, как я понял,подключать ЛЮБОЙ пульт. Да и самопроизвольное включение тоже немного напрягает. А так вещь хорошая, за что неоднократное спасибо. Просто пока сыровато.
    И потом, чем больше будет высказано замечаний, тем легче их устранять. В новом всегда есть глюки.

    Да Вы правы за цель ставиться именно работа с любым пультом, поэтому буду работать над проблемой. А никак нельзя увидеть протокол Вашего пульта (осциллограф, звуковая карта …)?

    Smex07 :

    Идея классная!!! Но есть одно НО!? А где мне взять 5 вольт в машине например или в вентиляторе где 220 вольт? Подскажите пожалуйста!!!

    Все очень просто:
    — 5 вольт из 12 получаем преобразователем 78L05 — копеешная деталюшка.
    — 5 вольт из 220 — тут варианты — конденсаторно-резисторный делитель напряжения — просто, но небезопасно — не рекомендую. Или взять_старую / купить_новую_недорогую подзарядку от мобильного (там, обычно, стоит импульсный преобразователь) — недорого и безопасно. Или взять трансформатор + диодный мост — габариты будут побольше …

  36. ankar

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

  37. GetChiper Автор записи

    ОК. Я сейчас правлю алгоритм, похоже нашел где алгоритм не срабатывает (случайные включения).

  38. Леонид

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

  39. GetChiper Автор записи

    Гляну и это.

  40. Smex07

    78L05 его нужно через конденсаторы включать по моему, и как его к схеме прилепить внедрять в саму плату?Можно такое подключение преобразователя добавить на страницу «подключения МК к нагрузке»?

  41. andru

    Спасибо огромное за великолепный проект! Но отпишусь на счёт странных глюков. Правда может они у меня только. Но т.к. информация всегда только на пользу то… Происходят произвольные отключения (включения) нагрузок. И что интерестно только если включен один или два канала. Когда включены все три (кнопкой «включить всё»)- то ни каких самопроизвольных отключений я не заметил. Тестировал и разбирался в течении 7 дней.

  42. GetChiper Автор записи

    UPDATE!!

    версия №2
    + исправлены произвольные включения/отключения нагрузки;
    + исправлены случайные автоповторы во время изучения пультов.

    Спасибо всем, кто принял участие в тестировании устройства!
    На очереди исправления, позволяющие устройству корректно работать с бОльшим количеством пультов. Очень жду отчетов об ошибках в работе!

    P.S. В следующей статье дам простой инструмент, позволяющий записывать протоколы пультов на звуковую карту — работа над ошибками пойдет быстрей.

  43. Ghjuhfvvf

    GetChiper :
    UPDATE!!
    версия №2
    + исправлены произвольные включения/отключения нагрузки

    А в чем причина-то была?

  44. GetChiper Автор записи

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

  45. ankar

    Желательно, конечно, инструмент для прогона пультов. Бо с того осцилографа, что у меня стоит нельзя делать снимки.
    А прошивку погоняем .
    Спасибо.

  46. ewgeny

    GetChiper, пожалуйста, перезалейте прошивку второй версии. Она не может быть размером 32 байта 🙂
    Перекомпилировал сорцы, тестирую вторую версию.
    Спасибо!

  47. GetChiper Автор записи

    ewgeny :

    GetChiper, пожалуйста, перезалейте прошивку второй версии.

    Опа, точно, не то залил! Спасибо! Сейчас там то, что нужно.

  48. Леонид

    ща будем обкатывать

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