СЕЗАМ


Был у меня когда-то давно сенсорный чудо-выключатель СЕЗАМ. Очень он мне нравился. Но времена меняются, перестал вписываться в интерьер, а потом и вовсе оказался не рассчитан на работу со всякими модными энергосберегающими лампами. Нравился мне в нём принцип управления. Короткое касание сенсора включало/выключало свет, а длительное регулировало яркость. Кому интересно — сердцем выключателя была микросхема К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


Вроде всё.


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

Комментарии (33)


  1. Andy_Big
    04.04.2018 10:39

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


  1. dmsav
    04.04.2018 10:44

    Очень круто! А главное просто и удобно. Спасибо)


  1. ClearAirTurbulence
    04.04.2018 11:00

    А не удобнее было бы сделать два сенсора, например, слева и справа от пользователя. Левый — включает свет на последней настройке если тот был выключен, или снижает яркость включенного света. Правый — включает на полную, или увеличивает яркость, соответственно.
    Да, больше работы, но однополосные интерфейсы с логикой «нажми-жди-если не то, нажми и жди ещё» невзлюбил ещё с того момента, как НР стал словарь их в принтеры.


    1. vovike Автор
      04.04.2018 11:15

      Первоначально, для регулировки яркости, вообще была идея сделать слайдер. Но в итоге я остановился на форм-факторе простой кнопки


  1. dernuss
    04.04.2018 11:32

    Посмотрел цену ATtiny4 и офигел.


    1. kaSKAdik
      04.04.2018 17:02

      35-40 рублей за штуку?


      1. dernuss
        04.04.2018 17:37

        Да, жесть.


  1. Dmitriy62
    04.04.2018 11:37

    Почему не использовали гораздо более дешёвую ATtiny13A?


    1. vovike Автор
      04.04.2018 12:07

      ATtiny4 мне достались в виде сэмплов, о цене я не думал
      В ATtiny13A нет 16 битного таймера, а это влияет на плавность регулировки. Особенно при низкой яркости
      А главное, просто было интересно попробовать этот микроконтроллер в работе


      1. Dmitriy62
        04.04.2018 12:09

        Отличный обзор! Отличная работа! Ждём следующих общеполезных поделок. Думаю повторить нечто подобное…


    1. YouHim
      04.04.2018 12:42

      Посмотрел в ближайшем радиомаге, 13 дороже чем 4.


      1. Dmitriy62
        04.04.2018 12:53

        На АлиЭкспресс 10 штук Attiny13A стоит 160 рублей. Сколько у Вас стоит Attiny4?


        1. voted
          04.04.2018 15:06

          Открыл digikey: ATtiny13A — от $0.35 поштучно (20р), ATtiny4 — от $0.34 (19р) и $0.278 за шт от 4500шт.
          Как бы если у вас местные барыги поставщики немного загибают цены, вероятно не стоит кричать что ATtiny13A гораздо более дешевая


  1. mkc
    04.04.2018 12:35

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


    1. vovike Автор
      04.04.2018 12:44

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


  1. vconst
    04.04.2018 12:39
    +1

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


    1. dernuss
      04.04.2018 12:41

      Ужасно мало


    1. vovike Автор
      04.04.2018 13:50

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


      1. vconst
        04.04.2018 13:59

        Увеличивайте обязательно, поберегите свое здоровье. ШИМ на 1 КГц легко проходит «карандашный тест», совершенно не заметен глазами даже периферийным зрением и очень комфортный.


      1. ploop
        04.04.2018 15:57

        Смело оставляйте 8-9 бит — этого достаточно. При 8 битах переключения будут заметны только в самом начале диапазона.
        А 100Гц — ужас конечно.


      1. Andronas
        04.04.2018 16:17

        Исправления в коде будут? На гитхаб


        1. vovike Автор
          04.04.2018 16:32

          Обязательно!


  1. Igrek_L
    04.04.2018 12:48

    Ожидаемого эффекта от вибры я не получил.

    Если в конце диапазона регулировке мингуть коротко, на максимуме темнотой, на минимуме небольшой вспышкой это неплохо и достаточно удобно сигнализирует что все, некуда больше!


  1. voxy2
    04.04.2018 13:42

    У кого нет времени или желания возиться рекомендую готовый (поставил на кухне) — SMART Dimmer S-C. Отлично работает. Брал за 600 руб.


  1. Zingfrid
    04.04.2018 14:16

    А сенсорная кнопка в конце платы? Она нормально работает через пластиковую заглушку?


    1. vovike Автор
      04.04.2018 14:22

      Да, сенсор на торце платы. Работает. Мелковат. Наверняка можно сделать лучше. Ещё думаю как


  1. lazil
    04.04.2018 17:26

    Прикольный «даташит» про К145АП2(http://www.155la3.ru/datafiles/k145ap2.pdf):
    image


  1. tormozedison
    05.04.2018 06:19

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


    1. vovike Автор
      05.04.2018 10:11

      О существовании этой микросхемы я узнал недавно. Да, микросхема интересная. Но, кстати, в даташит нет упоминания о частоте ШИМ. А по обзорам, в похожем на мой режиме, частота тоже низкая — около 130 Гц
      Да и интереснее самому сделать


  1. Andronas
    05.04.2018 14:33

    Немного напрягает что это сделано на ассемблере. Хочу попробовать сделать подобное на attiny85 и программа на Си.


  1. Mike-M
    05.04.2018 18:31

    Хорошая работа.
    А почему выбрали именно кубический график яркости а не, например, квадратичный?
    По поводу основного элемента управления, собрал себе диммер на ATmega тоже с кнопкой (только не сенсорной, а обычной тактовой) и похожим алгоритмом работы. За 10 лет ежедневного использования пришел к выводу, что с точки зрения эргономики ничего лучше нажимного энкодера с фиксированными пределами регулировки человечество ещё не придумало.


    1. vovike Автор
      05.04.2018 18:45

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


      1. Mike-M
        05.04.2018 19:29

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