РадиоКот :: ИК УПРАВЛЕНИЕ ИГРУШЕЧНЫМ СВЕТОФОРОМ
Например TDA7294

РадиоКот >Схемы >Цифровые устройства >Игрушки >

Теги статьи: Добавить тег

ИК УПРАВЛЕНИЕ ИГРУШЕЧНЫМ СВЕТОФОРОМ

Автор: rozorh
Опубликовано 11.12.2018
Создано при помощи КотоРед.

ПРЕДЫСТОРИЯ (о пользе субботников)

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

Алгоритм несложный, но что-то – и я долго не мог понять что – никак не давало мне покоя. Не хочу сказать, что потерял сон и аппетит, но какой-то червячок, словно бы, грыз и грыз изнутри. И тут БАХ! Вспомнил. Субботник. Обычный капиталистический субботник, который так любят проводить в нашей компании в преддверии майских праздников.

Обсуждать моё отношение к этому добровольно-принудительному виду трудовой деятельности мы здесь, конечно же, не будем, а вместо этого поговорим о халяве в виде пары пультов ДУ от автомобильных MP-3 плееров, которые я перехватил на этапе их переброски в ящик с хламом, подлежащего уничтожению.

 

 

 

 

 

 

 

 

 

 

 

 

 

Зачем они мне и что с ними делать потом, на этапе перехвата я ещё не знал, но с рефлексами не поспоришь… Короче – по итогам субботника пульты перешли в моё полное и безраздельное владение и смиренно ждали часа, когда до них доберутся руки. А тут, понимаешь, светофор…

Всё, файлы сошлись. Решено – делаем игрушечный светофор с ИК управлением!

 

СХЕМА (всё гениальное – просто)

Сам себя, как говорится, не похвалишь – никто не похвалит, но… схема действительно не содержит дефицитных деталей и проста, как мурчание:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В качестве приёмника ИК излучения задействован TSOP-1838. Кнопки – обычные, с нормально разомкнутыми контактами. Разноцветные светодиоды – noname. «Мозг» схемы, реализующий алгоритм управления светодиодами – микроконтроллер ATtiny2313.

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

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

После этого происходит возврат к автоматическому режиму управления с началом нового 20-секундного отсчёта, и далее по кругу, пока не случится повторное нажатие на соответствующую кнопку.

 

РЕАЛИЗАЦИЯ ИК УПРАВЛЕНИЯ (лень – двигатель прогресса)

В поисках информации о пультах наткнулся на их очередную китайскую инкарнацию. Позабавил кейворд для поиска:

 

 

 

 

 

 

 

 

 

 

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

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

 

 

 

 

 

 

 

 

В итоге нам остаётся лишь декодировать её и привязать к выполнению определённого действия: к переключению светодиодов светофора в противоположное состояние, например.

Как это работает? Элементарно ;))

Присвоение условного уровня принятому биту происходит посредством определения длительности между двумя последовательными спадами сигнала (см. рис. ниже): если она равна 1,13 mS – принятому биту присваивается условный “0”, если 2,26 mS – условная “1”.

 

 

 

 

 

 

 

 

 

 

Сама длительность определяется с помощью встроенного 8-битного Timer/Counter0. Его настройки таковы, чтобы счётчик мог переполняться, примерно, каждые 33 mS, поэтому длительность 1,13 mS он отсчитает чуть меньше, чем за 9 тактов, а длительность 2,26 mS – чуть больше, чем за 17. В прерывании, случающемся по каждому спаду сигнала, считываются и обнуляются данные из счётного регистра таймера. Таким образом, сравнение тактовой длительности принятого бита с «золотой серединой», равной 13-ти, позволит однозначно определить – единица это была или ноль.

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

 

 

 

 

 

 

 

По завершении приёма каждой кодовой посылки реализована функция автоматической передачи принятого и декодированного кода в Терминал, для чего задействован аппаратный UART (3-й пин ATtiny2313). Ниже приведён скрин того, как будет расшифрована передача пакета, осциллограмма которого показана ранее. На нём же видны и настройки терминальной программы.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Как видно – стартовый бит игнорируется, короткие импульсы определяются, как «00», длинные – как «01».

Для чего это сделано? Лично мне это очень сильно облегчило жизнь, во-первых, при отладке программы, а во-вторых, при последующем повторении проекта, т.к. это является самым простым способом определения кода любой кнопки пульта. Аппетит, как известно, приходит во время еды…

Тем же, кому достаточно управления одной из двух уже определённых кнопок, достаточно внести требуемые изменения в код программы. По умолчанию она скомпилируется на срабатывание от нажатия верхней левой кнопки пульта. Чтобы изменить логику на срабатывание от нажатия на правую верхнюю кнопку необходимо заменить адрес в регистровой паре сравнения на SW_REF:

 

 

 

 

 

 

 

 

 

 

РЕАЛИЗАЦИЯ «В ЖЕЛЕЗЕ» (о пользе фаст-фуда и гипермаркетов)

Собственно, картинки, идущие далее, говорят сами за себя:
•      Корпус для ИК приёмника и светодиодов – клеящий карандаш, купленный в своё время то ли в Глобусе, то ли в Ашане за удивительно смешную цену в 7 (!) руб.;
•      Ножка, внутри которой проведена проводка – трубочка от промо-шарика, взятого в одном из «ресторанов быстрого обслуживания» на фуд-корте;
•      Основание – батарейный отсек на 4 «пальчиковых» гнезда, одно из которых задействовано под установку платы и укладку проводов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Т.к. коммутация питания теперь осуществляется внутри батарейного отсека, то штатное отверстие под вывод проводов теперь задействовано под кнопку «SW» ручного переключения рабочего режима светофора.

Крепление всего и вся выполнялось с помощью клеевого термопистолета, каждый светодиод для предотвращения утапливания зафиксирован в корпусе каплей супер-клея.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ЗАКЛЮЧЕНИЕ (совсем не о том, с чего начинали)

А в качестве заключения – «виват!» и троекратное «ура!!!» безымянному герою проекта – ИК пульту, благодаря которому получилась такая вот игрушка:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Спасибо за внимание и, конечно же, удачи решившим повторить!

P.S. Настройки fuse-ов стоковые.


Файлы:
Исходник
Печатка


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

26 2 4