В стародавние времена для упрощения работы (это же вообще не работа должна быть, а сплошное удовольствие) по переключению педалей я сделал себе программируемый переключатель Epic Looper (немного о том что это и зачем было здесь)
Это был готовый проект для сборки, для которого требовалось купить:
1) комплект из печатных плат и запрограммированного микроконтроллера
2) корпус подходящих размеров (называется 1032L)
3) рассыпуху (резисторы/светодиоды/реле/разъемы)
4) кнопки
Вот в последнем пункте мне категорически не нравилось то, что оригинал задумывался на кнопках со щелчком. Да ещё и DPDT, то есть шестиконтактные, притом использовались только две контакта.
То есть переключение осуществляется с помощью реле, кнопки служат только как органы управления. Они нужны без фиксации (momentary), но при этом со щелчком.
Я подумал, что это лишено смысла и поставил обычные двухконтактные нормально разомкнутые кнопки.
И в принципе оно заработало. Но при этом была проблема. Иногда нажатие на кнопку не срабатывало. То есть не производилось никакого действия. А обычно срабатывало. И как правило в это время были слышны щелчки реле. И это было не связано с кнопками. Вернее было, но не то чтобы напрямую. Виновником данного эффекта было явление под названием дребезг контактов. Когда кнопка нажимается, обычно так получается, что контакты не сразу переходят в замкнутое положение, а несколько раз успеют замкнуться и "отпрыгнув назад" разомкнуться. Поскольку считыванием замыкания кнопок занимается микроконтроллер, то у него хватает быстродействия обработать это как несколько быстрых нажатий и отпусканий кнопки. И главным вопросом было - это количество псевдонажатий получается четным или нечетным. Когда оно нечетное, то нажатие кнопки отработает правильно (ну как правильно, итоговый результат будет ожидаемым, но при этом может получиться что система несколько раз быстро включит выключит и ещё раз включит реле). А если число нажатий получалось четным, то быстро включалось то что нужно и выключалось (по итогу производя впечатление что вообще ничего не работает)
Для правильной работы конечно требуется подавлять этот эффект. И наиболее просто с ним бороться программным методом, делая в коде обработку кнопок с соответствующими поправками. Это тема широко расписанная в разных ардуино-форумах. Я обычно именно так и делал, но в данном случае этот способ был мне недоступен, ведь микроконтроллер уже был с готовой прошивкой и надо было либо писать всё с нуля, либо попробовать обратиться к автору за внесением соответствующих изменений.
Я попробовал написать ему и достаточно быстро получил ответ, что программный метод борьбы с дребезгом у него уже применён. Очевидно его алгоритм был рассчитан именно на то что кнопки со щелчком генерируют более чёткий сигнал с меньшим количеством отскоков. Для проверки этой гипотезы я купил и подключил одну такую кнопку. Выводов было два:
1) Нажатие на кнопку заработало правильно. Примененного алгоритма подавления дребезга действительно оказалось достаточно для кнопок с щелчком.
2) Мне категорически не нравилось нажимать кнопки со щелчком. Так что надо было что-то делать.
Раз программный способ был недоступен, то оставались варианты что-то поделать в железе. То есть аппаратным способом.
Тогда я наткнулся на отличную статью на английском языке
Аппаратных вариантов там было несколько
Самый простой - основывался на сглаживании процесса переключения при помощи резисторов и конденсатора.
Чтобы не усложнять всё и сразу я решил попробовать начать с него. И ситуация с переключениями резко улучшилась. Если раньше у меня встречались нечеткие нажатия примерно пару раз из десяти нажатий, то сейчас это стало один раз на несколько десятков нажатий. Так я и прожил некоторое время, постепенно придя к выводу, что наверное этого всё же недостаточно для комфортного опыта.
Второй вариант был в добавлении микросхем, либо специализированных (предназначенных именно для подавления дребезга кнопок, которых нигде особо не купить и стоят дороже, чем всё остальное вместе взятое), либо микросхем стандартной логики, например 74HC14.
В этой схеме также была сглаживающая цепочка из двух резисторов и конденсатора, но теперь она формировала сигнал для микросхемы, которая уже выдавала сигнал свободный от дребезга на микроконтроллер. Правда в процессе работы данная микросхема сигнал этот инвертировала.
Если посмотреть документацию на данную микросхему то окажется, что она содержит в себе шесть нужных мне блоков. И у меня как раз нужно ровно шесть кнопок.
Паззл сошелся, надо только разобраться с инверсией сигнала. Сперва я решил, что поставлю после неё ещё одну микросхему инвертора, например CD4049, она содержит в себе ровно шесть инверторов. Но потом я понял, что переусложняю. И надо просто инвертировать изначальный сигнал с кнопок, подтянув их не к земле (как было предусмотрено изначально), а к питанию +5 вольт.
Оставалось только интегрировать как-то это всё дело в переключатель.
К сожалению у меня не сохранилось никакой более чёткой фотографии, но при некотором желании и на этом фото можно разглядеть, что первый прототип был собран на макетной плате. При этом использовалось только пять преобразователей, поскольку у меня была одна кнопка с фиксацией, которая и так нормально работала. И я как раз хотел сравнить достигаемый эффект.
Эффект выразился в том, что за полтора месяца я убедился в том, что ложные нажатия полностью исчезли. И что кнопка с фиксацией мне всё так же не нравится, поскольку в использовании она была гораздо менее удобна.
Так что я решил увековечить всё в граните печатной плате
Первые попытки трассировки платы поражали громоздкостью в сравнении с макетной платой
Но постепенно получилось что-то более приличное
Так что я решил сделать плату
И дальше они жили долго и счастливо. Без лишних усилий на кнопках, без щелчков и без ложных срабатываний.