СЕЗАМ
Был у меня когда-то давно сенсорный чудо-выключатель СЕЗАМ. Очень он мне нравился. Но времена меняются, перестал вписываться в интерьер, а потом и вовсе оказался не рассчитан на работу со всякими модными энергосберегающими лампами. Нравился мне в нём принцип управления. Короткое касание сенсора включало/выключало свет, а длительное регулировало яркость. Кому интересно — сердцем выключателя была микросхема К145АП2, аналог Siemens S576B (К145АП2 до сих пор продаются).
Под катом мой вариант эмуляции работы этой микросхемы.
Не так давно соорудил я себе над столом подсветку из светодиодной ленты в алюминиевом профиле с рассеивателем и встал вопрос о выключателе. Ставить готовое как то громоздко. Чтоб на проводе болталось — не красиво, обычный выключатель ставить — портит вид, да и особо некуда.
Решил я встроить выключатель, а за одно и регулятор яркости, в торец ДСП 16мм. Сделать его сенсорным, прикрыть наклейкой, которыми мебельщики болты маскируют.
Железо
Начал с сенсора. Попробовал на принципе переноса заряда на ATtiny13A. Вариант рабочий, но мне стало лень заморачиваться с автоподстройкой параметров и тд. Брать готовое тоже не стал.
Далее решил попробовать реализовать сенсор на библиотеке QTouch. В качестве сенсора ATtiny10. Есть готовая утилита, которая превращает ATtiny10 в сенсорную кнопку со всеми плюшками. Но на выходе бинарник и добавить свой код туда сложно. Думал что делать, бороздил просторы Internet и тут мне попалось упоминание о TTP223 — контроллере одной сенсорной кнопки. Этот вариант меня вполне устроил.
В качестве МК выбор пал на ATtiny4. Такая же мелкая как и TTP223, 16-ти битный таймер. Да и давно хотел сделать на этих тиньках что-то полезное.
В качестве ключа — P3055LD со старой материнки.
Печатная плата
При разработке печатной платы исходил из того, что отверстия в торце ДСП нужно минимально возможное, решил что диаметром 7мм будет вполне достаточно. Плата получилась 7х28мм, два слоя.
Уже потом, когда плата была спаяна, стало понятно, что в 7мм отверстие плата не влезет, минимум 9мм — не учёл высоту элементов. Идея с наклейкой как-то тоже перестала нравится. И тут на глаза попалась мебельная заглушка! Рассчитана на отверстие 10мм, а внутренний диаметр ровно 7мм! Всё совпало!
Сам пятачок сенсора на отдельной платке которая паяется в торец основной. На картинках видно.
Программа
Управляющая программа написана на ассемблере. Каждые 32мс (Watchdog Timer) происходит опрос сенсора. В зависимости от текущего состояния и длительности нажатия выполняются те или иные действия. Логика работы немного отличается от прототипа К145АП2
Если свет выключен (состояние после подачи питания):
- Короткое нажатие включает освещение на том же уровне, на котором оно было выключено. При первом включении на максимальной яркости
- Длинное нажатие включает свет на максимальном уровне
Если свет включен:
- Короткое нажатие выключает освещение
- Длинное нажатие изменяет яркость. Направление изменения яркости меняется повторным длительным нажатием
Слишком короткие нажатия (помехи) программой игнорируются. Яркость задаётся коэффициентом ШИМ (16 бит). Частота ШИМ около 122 Гц (8000000 Гц / 216 ? 122 Гц)
Для компенсации психофизиологического восприятия яркости освещения от реальной яркости, изменение последней происходит по участку кубической параболы. Обычно для этого применяют таблицы, но в моём варианте коэффициент вычисляется. Коэффициент меняется с частотой ШИМ, то есть при изменении яркости каждый импульс получается своей длительности. Минимальное значение ШИМ ограничено программно.
Основное время МК спит и вместе с TTP223 потребляет около 16 микроампер. То есть схема вполне пригодна для устройств с автономным питанием.
У ATtiny4 шесть выводов. Два на питание, один по умолчанию на сброс. Два я уже задействовал. Остался один свободный. Думал как можно задействовать и его. И тут мне вспомнился новый ноут друга с трекпадом Force Touch. В качестве эксперимента решил сделать нечто подобное. Особой достоверности отклика мне не нужно, а вибромоторов от старых телефонов валяется много. В результате реализовал в программе такую функцию, что на свободном выводе, при достижении границы регулировки, появляется короткий импульс. В К145АП2 при достижении границы регулировки происходит смена направления регулировки. Поэтому нужна была определённая сноровка, что бы убрать руку от сенсора на максимуме или минимуме. В моей реализации при достижении границы регулировка прекращается. Полное время регулировки от одной границы до другой около 4 секунд.
Код доступен на GitHub
TPI через Ардуину
Отдельно отмечу программирование МК. Мой JTAGICE3 не поддерживает интерфейс программирования TPI. Но, к счастью, добрые люди написали скетч на Ардуину для программирования этой мелочи. Не сразу но у меня всё получилось, прошивка залилась и всё заработало. Кроме ардуины нужно 4 резистора. Весь процесс расписан в скетче.
Итог
Волшебная кнопка установлена и работает как задумано. Потребляемый ток и габариты позволяют встраивать её в устройства с автономным питанием.
Ожидаемого эффекта от вибры я не получил. Тут видимо нужны эксперименты с местом установки.
В прототипе К145АП2 и аналоге Siemens S576B есть вывод "Sleep". Это такой режим, при котором яркость очень медленно падает до полного выключения. По задумке производителя, для этого дополнительный сенсор устанавливается около изголовья кровати. 16 бит таймера ШИМ позволяют реализовать такой режим.
Это из идей на будущее.
Вроде всё.
Всем спасибо!
Комментарии (33)
ClearAirTurbulence
04.04.2018 11:00А не удобнее было бы сделать два сенсора, например, слева и справа от пользователя. Левый — включает свет на последней настройке если тот был выключен, или снижает яркость включенного света. Правый — включает на полную, или увеличивает яркость, соответственно.
Да, больше работы, но однополосные интерфейсы с логикой «нажми-жди-если не то, нажми и жди ещё» невзлюбил ещё с того момента, как НР стал словарь их в принтеры.vovike Автор
04.04.2018 11:15Первоначально, для регулировки яркости, вообще была идея сделать слайдер. Но в итоге я остановился на форм-факторе простой кнопки
Dmitriy62
04.04.2018 11:37Почему не использовали гораздо более дешёвую ATtiny13A?
vovike Автор
04.04.2018 12:07ATtiny4 мне достались в виде сэмплов, о цене я не думал
В ATtiny13A нет 16 битного таймера, а это влияет на плавность регулировки. Особенно при низкой яркости
А главное, просто было интересно попробовать этот микроконтроллер в работеDmitriy62
04.04.2018 12:09Отличный обзор! Отличная работа! Ждём следующих общеполезных поделок. Думаю повторить нечто подобное…
YouHim
04.04.2018 12:42Посмотрел в ближайшем радиомаге, 13 дороже чем 4.
Dmitriy62
04.04.2018 12:53На АлиЭкспресс 10 штук Attiny13A стоит 160 рублей. Сколько у Вас стоит Attiny4?
voted
04.04.2018 15:06Открыл digikey: ATtiny13A — от $0.35 поштучно (20р), ATtiny4 — от $0.34 (19р) и $0.278 за шт от 4500шт.
Как бы если у вас местныебарыгипоставщики немного загибают цены, вероятно не стоит кричать что ATtiny13A гораздо более дешевая
mkc
04.04.2018 12:35Можно поподробнее узнать о принципе работы сенсора на attiny13?
vovike Автор
04.04.2018 12:44Принцип работы сенсора с переносом заряда подробно описан и обсуждается на форуме easyelectronics.ru
vconst
04.04.2018 12:39+1Частота ШИМ около 122 Гц
Не понял… Это реальная частота ШИМ? Всего 100 герц? Это очень мало для комфортного освещения.vovike Автор
04.04.2018 13:50Спасибо за замечание
Можно увеличить в 2n раз за счёт снижения разрядности ШИМ во столько же раз
Немного подправить в кодеvconst
04.04.2018 13:59Увеличивайте обязательно, поберегите свое здоровье. ШИМ на 1 КГц легко проходит «карандашный тест», совершенно не заметен глазами даже периферийным зрением и очень комфортный.
ploop
04.04.2018 15:57Смело оставляйте 8-9 бит — этого достаточно. При 8 битах переключения будут заметны только в самом начале диапазона.
А 100Гц — ужас конечно.
Igrek_L
04.04.2018 12:48Ожидаемого эффекта от вибры я не получил.
Если в конце диапазона регулировке мингуть коротко, на максимуме темнотой, на минимуме небольшой вспышкой это неплохо и достаточно удобно сигнализирует что все, некуда больше!
voxy2
04.04.2018 13:42У кого нет времени или желания возиться рекомендую готовый (поставил на кухне) — SMART Dimmer S-C. Отлично работает. Брал за 600 руб.
tormozedison
05.04.2018 06:19Чем SGL8022W не понравилась?
vovike Автор
05.04.2018 10:11О существовании этой микросхемы я узнал недавно. Да, микросхема интересная. Но, кстати, в даташит нет упоминания о частоте ШИМ. А по обзорам, в похожем на мой режиме, частота тоже низкая — около 130 Гц
Да и интереснее самому сделать
Andronas
05.04.2018 14:33Немного напрягает что это сделано на ассемблере. Хочу попробовать сделать подобное на attiny85 и программа на Си.
Mike-M
05.04.2018 18:31Хорошая работа.
А почему выбрали именно кубический график яркости а не, например, квадратичный?
По поводу основного элемента управления, собрал себе диммер на ATmega тоже с кнопкой (только не сенсорной, а обычной тактовой) и похожим алгоритмом работы. За 10 лет ежедневного использования пришел к выводу, что с точки зрения эргономики ничего лучше нажимного энкодера с фиксированными пределами регулировки человечество ещё не придумало.vovike Автор
05.04.2018 18:45Есть мнение, что сила субъективного ощущения пропорциональна интенсивности раздражителя (стимула) в степени n. Для света показатель степени n=0.33
Поэтому степень 1/0.33, примерно 3
Andy_Big
Отличная идея и реализация, спасибо :)