РадиоКот >Схемы >Цифровые устройства >Бытовая техника >

Теги статьи:

"Умная" сталинская лампа. ИК-пульт, фоторезистор, ATtiny13

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

 

"Умная" сталинская лампа. ИК-пульт, фоторезистор, ATtiny13

 

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

 

Роясь в хламе, обнаружил раритетную лампу. В 60-х / 70-х (а может и в 30-х / 40-х) такие жили в учреждениях.

Очень солидная. Гламурная. Из текстолита. Но без проводов.

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

 

 

Но хотелось чего-то бОльшего.
И это бОльшее через некоторое время объявилось.

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

В залежах хлама (теперь уже относительно современного) внезапно нашелся пульт от давно почившего ТВ-тюнера. Целый Pinnacle!
После смены батареек проверка (камеры, если помните, легко берут ИК-диапазон) подтвердила, что живой.

 

 

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

Итак.
Смутно помнил, что где-то валяется TSOP-1736 и в паре к нему TSAL5100 - купил в свое время по случаю, но руки все не доходили.

Также определился с контроллером. Пусть это будет tiny13. Минимум.

TSOP-17xx - цифровое устройство. Выдает наружу уже либо "0", либо "1". Причем, до поимки сигнала, в режиме простоя выдает именно "1".
У нас 1736. Значит, пульт должен работать на частоте 36 КГц. Мой пиннакл - именно таков. Как оказалось. Повезло. Пульту полагается работать примерно так: для передачи ТСОПу логической единицы (на которую тот, как помним, ответит активным нулем) пульт выдает пакет импульсов с периодом 28 мкс. Импульсов должно быть не меньше некоего критического числа. Взял 50, с запасом. Паузы между пакетами по достижении последними заметной длины должны быть не короче самих пакетов, иначе ТСОП будет чудить. При правильной работе весь пакет будет воспринят ТСОПом как единое целое. Фронты будут запаздывать примерно на один импульс.

У моего пиннакла может быть все, что угодно. Взглянем.
Прицепил к ТСОПу ардуино и начал ловить по прерыванию любые изменения.

Что оказалось. Длины пауз варьируют от 800 до 6670 мкс. Гуляют максимум на 40 мкс (без учета погрешности приемника, что, в общем-то не верно). Одинаковые длительности могут находиться как в "1", так и в "0". Максимум может быть восемь отдельных пакетов-импульсов (16 изменений). Начальные площадки - всегда 1700 и 6670 мкс. Всего разных импульсов пауз 11, что тоже может что-то означать. Но для меня важно лишь число пакетов и разброс их длительностей.

Как только от последнего изменения проходило пороговое время (в разы бОльшее, чем самый длинный импульс), считал "хэш" - свертывал по двоичным разрядам времена между изменениями, предварительно деленные на число, чуть меньшее минимальной паузы - 700 (отброс нестабильной части).
Понимаю, что такой хэш - надругательство над наукой - но мне требуется что-то совсем легкое, tiny13 - не "Deep Blue". И, нужно сказать, для каждой из 41 кнопок пульта хэш был уникален. Ок.

Микросекундные последовательности трех клавиш; для проекта выбрал первую, как самую простую:

 

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

 

Схема для теста - из даташита (плюс сигнальная лампочка).

 

Код тестового скетча (нужен ли он) вот такой.

Настало время для tiny13.
Корректирую заводские фьюзы, снятием флажка "делить на 8"

 

Чтобы узнать хэши, просто записываю их в EEPROM. Много раз, для статистики. Все ок.

Для теста хватает все той же минимальной схемы, теперь уже на tiny. Пытаем его прямо в прицепе к программатору.

По поводу кода определения хешей для tiny.

Даже на 10МГц не рискую делать какие-либо вычисления в обработчике прерывания. Кидаю в массив. На борту у 13-го - всего 64 байта (EEPROM пригодится для другого). Значит, нужно сбавить аппетит. Обрабатывать не все изменения, а, допустим, лишь передние фронты. В ардуинном скетче это тоже предусмотрено. Для избранных клавиш будут такие данные:

Код приемника на tiny13 для вычисления хэшей. (EEPROM после разового заполнения приходится чистить вручную).

HEX вряд ли кому пригодится. Лучше скомпилировать по исходнику. Наблюдалось явление, когда значения для разных камней отличались. Правда, в свое время некоторые из них постарадали от "переполюсовки" в панельке, - раскалялись как утюг; возможно, что-то там поджарилось...

Отмечу, что код функции оценки millis (кусочек для двух значений F_CPU) взят из библиотеки core13 - он валялся у меня в закромах с очень куцым комментарием. _delay_ms() весьма условна. Таймер же тикает примерно раз в 27 микросекунд. Посему micros() тут нет. В итоге полученные хэши заведомо не будут соответствовать ардуинным (вычислю их, деля разницу тиков уже на 50).

Что теперь известно. Хеши каждой клавиши. Если быть строже - диапазон, в котором они могут гулять.
Хорошо.
И тут мне захотелось изготовить свой собственный ИК-пульт.
Внезапно...
И изготовил. На том же tiny13. Питание пульта подается лишь по нажатию каждой из кнопок. В качестве излучателя - TSAL5100. Импульсный ток около 200 мА ( ~= (3 В - 0,45 В макс.) / 12 Ом ) - даташитный предел. Питание - "таблетка" 3В (ненадолго ее хватит, чувствую, при таком токе). Все остальное - мелочевка.
Живьем выглядит так:

Схема вот такая:

И ссылка на его проект.

Файл диптрейс и картинки для ЛУТа.
И исходный быдлокод для пульта.

Прежде всего воспроизвел код избранной кнопки пиннакла (по передним фронтам). И к ней добавил еще три, - на свежеобретенном пульте, как вы заметили, их четыре.
Вот тут у меня уже была реальная возможность уйти от псевдохэширования и сделать непосредственное двоичное кодирование кнопок. Допустим, расстояние между фронтами в 2500 мкс - ноль, а в 7500 - единица (наверняка, можно и в разы меньшие значения взять). Но поленился и оставил глупый алгоритм как есть. Жертва совместимости с пиннаклом.
Параметрические задержки у меня выходили плохо( - до сих пор не знаю, как грамотно решить эту напасть, как повторить путь компилятора... А ведь нужно очень точно. Поэтому вы видите то, что видите - подбирал через F_CPU. Для конкретного камня вышло 8980000.
Презирайте меня.

Определив доморощенные "хэши" для клавиш пульта, наконец-то написал основную прошивку. Ради которой все и затевалось.
Управление лампой.
У меня четыре кнопки. Пусть одна будет просто включать-выключать несчастное устройство. Другая - ставить при включении "будильник" на 40 минут, чтобы вставать из-за стола для разминки (по прошествии этого времени лампа должна мигнуть).
Еще две кнопки - в запасе. Вдруг захочется сделать, чтобы лампа мяукала и ходила за мной следом? :) Увы. Облом-с. Код уже впритык к пределу (. Но если взять хотя-бы 45-й, могущество возрастет немыслимо.

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

"Сущая безделица" (если не хуже), скажете вы и будете правы. Но, как уже сказал, в утилитарном виде ее можно приспособить для включения/выключения светильников в прямой видимости пульта. Или - управлять компьютером (как, собственно, делал когда-то пиннакл). Число команд при этом можно увеличить, играя паузами нажатия на кнопки, нажимая несколько сразу и т.д. Можно также изменить пульт - сделать резисторную "клавиатуру" на один вход (АЦП) или взять для пульта tiny2313. Подумайте, прежде чем проектировать пульт, если решитесь...

Схема приемного устройства следующая:

Использованы обычные кнопки с фиксацией, переключающие сразу два контакта. Фоторезистор VT90N2. За кадром - реле JZC-11F (управляющее напряжение - 5В, управляемое - 250AC). Резисторы притяжки контактов кнопки не очень красиво изображены на поле МК. В схеме присутствуют два лишних резистора по 180 Ом. На случай ошибок в коде и вообще - невероятных обстоятельств (однажды бракованный компонент чуть не сжег у меня вход). Считайте их данью паранойи и не используйте. А в остальном - все прозрачно.

Выглядит живьем так:

Схема избыточна; в расчете на другой принцип работы занят лишний пин. И клемники не чистят карму. Хотя, с ними можно будет выбирать вид блока питания (я замыслил использовать в дальнейшем самодельный бестрансформаторный, уже дающий 5В, тогда как тут - от Siemens ME-45 на 8.65В). Об этом позже.

Вообще, если бы я делал схему сейчас, она была бы заметно другой ))

Картинки для ЛУТа и проект в диптрейс (помните об угрозе духовному здоровью).

При выключении реле систему кидало, хотя диод на плате есть. Как только добавил еще один, уже возле самого реле, жизнь сразу же наладилась. Досадная промашка.
Высокостоящий TSOP и кнопки на подставках - с расчетом на появление настоящего (!) корпуса. Внимание! Это будет уже не спичечный коробок. Настоящий самодельный корпус из органического стекла!
Об этом стоит рассказать.
Берем стекло. Не толстое. 1.7 мм. Сперва его нужно разрезать. Выбрал варварский, но быстрый и безинструментный метод. Изобрел практически. Паяльником. Сделал специальное жало-скальпель, вставил в 60-ваттный паяльник и начал аккуратно, по деревянной линейке-смертнице проплавлять канавки, по которым после легко стекло отламывать. Берегите руки!
Долго такой "скальпель" не прослужит, прогорит, но да ладно...

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

В итоге так:

Переходим внутрь волшебной лампы.

Теперь вместо светодиода сигнал через транзистор идет на реле. Как уже сказал, реле выбрано JZC-11F.
Схема разводки провода такая (в обесточенном состоянии реле замкнуто на лампу):

Соединения делал на клемниках, у которых лапки предусмотрительно спаяны. Помимо них там:

- предохранитель 0.5А;
- упомянутое JZC-11F с наспех присобаченным диодом (наплатный, как помните, полностью не спасал); в расслабленном состоянии оно должно замыкать цепь лампы. Когда контроллер включится, он должен лампу погасить и ждать сигналов - от пульта, проверки будильника или от звезды по имени Солнце;
- раритетный блок питания от телефона Siemens ME-45. Подставщик. На нем написано 5В, 420мА. А выдает 8.63В. Это - не брак. У меня их два и оба такие. Китайцы накуролесили... Блок такой взят за компактность. Как раз помещается в основание лампы.
Вилку блока портить не хотелось.
Сделал доморощенные клемники для него, распилив обычные. К клемникам припаиваются провода, а на вилку они просто навинчиваются и изолируются:

В упакованном виде вся эта жесть внутри основания лампы выглядит так:

Если после этого подключить наше устройство и привинтить его к подошве лампы, то пугает не сильно:

Главная его прелесть в том, что оно работает.

Управляется и с пиннакла и с самодельного пульта.
При отключенном устройстве лампа функционирует как обычная.
При включенном - другой кнопкой можно переключать режим: пульт/освещенность.
В режиме пульта лампа помимо включения/выключения может программироваться как "будильник".

Все вполне прилично пашет. Даже если наводить пульт в другую сторону - возникают отражения от стен.

----------

Следующая станция, если доберусь, - безтрансформаторный блок питания...


Файлы:




Архив RAR
Архив RAR


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