«Волшебная кнопка» для LED на ATtiny4

СЕЗАМ


Был у меня когда-то давно сенсорный чудо-выключатель СЕЗАМ. Очень он мне нравился. Но времена меняются, перестал вписываться в интерьер, а потом и вовсе оказался не рассчитан на работу со всякими модными энергосберегающими лампами. Нравился мне в нём принцип управления. Короткое касание сенсора включало/выключало свет, а длительное регулировало яркость. Кому интересно — сердцем выключателя была микросхема К145АП2, аналог Siemens S576B (К145АП2 до сих пор продаются).


Под катом мой вариант эмуляции работы этой микросхемы.


Не так давно соорудил я себе над столом подсветку из светодиодной ленты в алюминиевом профиле с рассеивателем и встал вопрос о выключателе. Ставить готовое как то громоздко. Чтоб на проводе болталось — не красиво, обычный выключатель ставить — портит вид, да и особо некуда.


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


Железо


Начал с сенсора. Попробовал на принципе переноса заряда на ATtiny13A. Вариант рабочий, но мне стало лень заморачиваться с автоподстройкой параметров и тд. Брать готовое тоже не стал.


Далее решил попробовать реализовать сенсор на библиотеке QTouch. В качестве сенсора ATtiny10. Есть готовая утилита, которая превращает ATtiny10 в сенсорную кнопку со всеми плюшками. Но на выходе бинарник и добавить свой код туда сложно. Думал что делать, бороздил просторы Internet и тут мне попалось упоминание о TTP223 — контроллере одной сенсорной кнопки. Этот вариант меня вполне устроил.


В качестве МК выбор пал на ATtiny4. Такая же мелкая как и TTP223, 16-ти битный таймер. Да и давно хотел сделать на этих тиньках что-то полезное.


В качестве ключа — P3055LD со старой материнки.


Печатная плата


При разработке печатной платы исходил из того, что отверстия в торце ДСП нужно минимально возможное, решил что диаметром 7мм будет вполне достаточно. Плата получилась 7х28мм, два слоя.


Уже потом, когда плата была спаяна, стало понятно, что в 7мм отверстие плата не влезет, минимум 9мм — не учёл высоту элементов. Идея с наклейкой как-то тоже перестала нравится. И тут на глаза попалась мебельная заглушка! Рассчитана на отверстие 10мм, а внутренний диаметр ровно 7мм! Всё совпало!


Сам пятачок сенсора на отдельной платке которая паяется в торец основной. На картинках видно.


Картинки

cool image
cool image
cool image
cool image


Программа


Управляющая программа написана на ассемблере. Каждые 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 бит таймера ШИМ позволяют реализовать такой режим.


Это из идей на будущее.


Кнопка на месте

cool image


Вроде всё.


Всем спасибо!


UPD: Как и обещал, поднял частоту ШИМ почти до 1kHz. Код на GitHub

Поделиться публикацией
Комментарии 34
    +1

    Отличная идея и реализация, спасибо :)

      +1
      Очень круто! А главное просто и удобно. Спасибо)
        0
        А не удобнее было бы сделать два сенсора, например, слева и справа от пользователя. Левый — включает свет на последней настройке если тот был выключен, или снижает яркость включенного света. Правый — включает на полную, или увеличивает яркость, соответственно.
        Да, больше работы, но однополосные интерфейсы с логикой «нажми-жди-если не то, нажми и жди ещё» невзлюбил ещё с того момента, как НР стал словарь их в принтеры.
          0
          Первоначально, для регулировки яркости, вообще была идея сделать слайдер. Но в итоге я остановился на форм-факторе простой кнопки
          0
          Посмотрел цену ATtiny4 и офигел.
            0
            35-40 рублей за штуку?
              0

              Да, жесть.

            0
            Почему не использовали гораздо более дешёвую ATtiny13A?
              0
              ATtiny4 мне достались в виде сэмплов, о цене я не думал
              В ATtiny13A нет 16 битного таймера, а это влияет на плавность регулировки. Особенно при низкой яркости
              А главное, просто было интересно попробовать этот микроконтроллер в работе
                0
                Отличный обзор! Отличная работа! Ждём следующих общеполезных поделок. Думаю повторить нечто подобное…
                0
                Посмотрел в ближайшем радиомаге, 13 дороже чем 4.
                  +1
                  На АлиЭкспресс 10 штук Attiny13A стоит 160 рублей. Сколько у Вас стоит Attiny4?
                    0
                    Открыл digikey: ATtiny13A — от $0.35 поштучно (20р), ATtiny4 — от $0.34 (19р) и $0.278 за шт от 4500шт.
                    Как бы если у вас местные барыги поставщики немного загибают цены, вероятно не стоит кричать что ATtiny13A гораздо более дешевая
                0

                Можно поподробнее узнать о принципе работы сенсора на attiny13?

                  +1

                  Принцип работы сенсора с переносом заряда подробно описан и обсуждается на форуме easyelectronics.ru

                  +3
                  Частота ШИМ около 122 Гц
                  Не понял… Это реальная частота ШИМ? Всего 100 герц? Это очень мало для комфортного освещения.
                    0
                    Ужасно мало
                      0

                      Спасибо за замечание
                      Можно увеличить в 2n раз за счёт снижения разрядности ШИМ во столько же раз
                      Немного подправить в коде

                        0
                        Увеличивайте обязательно, поберегите свое здоровье. ШИМ на 1 КГц легко проходит «карандашный тест», совершенно не заметен глазами даже периферийным зрением и очень комфортный.
                          0
                          Смело оставляйте 8-9 бит — этого достаточно. При 8 битах переключения будут заметны только в самом начале диапазона.
                          А 100Гц — ужас конечно.
                            0
                            Исправления в коде будут? На гитхаб
                              0
                              Обязательно!
                                0
                                Поднял частоту до 1kHz. Код на гитхабе, как и обещал
                            +1
                            Ожидаемого эффекта от вибры я не получил.

                            Если в конце диапазона регулировке мингуть коротко, на максимуме темнотой, на минимуме небольшой вспышкой это неплохо и достаточно удобно сигнализирует что все, некуда больше!
                              –1
                              У кого нет времени или желания возиться рекомендую готовый (поставил на кухне) — SMART Dimmer S-C. Отлично работает. Брал за 600 руб.
                                0
                                А сенсорная кнопка в конце платы? Она нормально работает через пластиковую заглушку?
                                  0
                                  Да, сенсор на торце платы. Работает. Мелковат. Наверняка можно сделать лучше. Ещё думаю как
                                  +2
                                  Прикольный «даташит» про К145АП2(http://www.155la3.ru/datafiles/k145ap2.pdf):
                                  image
                                    0

                                    Чем SGL8022W не понравилась?

                                      0
                                      О существовании этой микросхемы я узнал недавно. Да, микросхема интересная. Но, кстати, в даташит нет упоминания о частоте ШИМ. А по обзорам, в похожем на мой режиме, частота тоже низкая — около 130 Гц
                                      Да и интереснее самому сделать
                                      0
                                      Немного напрягает что это сделано на ассемблере. Хочу попробовать сделать подобное на attiny85 и программа на Си.
                                        0
                                        Хорошая работа.
                                        А почему выбрали именно кубический график яркости а не, например, квадратичный?
                                        По поводу основного элемента управления, собрал себе диммер на ATmega тоже с кнопкой (только не сенсорной, а обычной тактовой) и похожим алгоритмом работы. За 10 лет ежедневного использования пришел к выводу, что с точки зрения эргономики ничего лучше нажимного энкодера с фиксированными пределами регулировки человечество ещё не придумало.
                                          0

                                          Есть мнение, что сила субъективного ощущения пропорциональна интенсивности раздражителя (стимула) в степени n. Для света показатель степени n=0.33
                                          Поэтому степень 1/0.33, примерно 3

                                            0
                                            Спасибо за ссылку.
                                            В своём проекте использовал классический «Square Law» от Lutron. Доволен. Работает хорошо, в том числе с современными линейными драйверами светодиодных ламп.

                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                        Самое читаемое