В наши дни, механические клавиатуры — это настоящий тренд! Людям нравятся приятные тактильные ощущения, а некоторые даже из кожи вон лезут, чтобы придать нажатиям отклик на свой вкус. Возникает вопрос: если мы так любим жать на клавиши, почему клавиатуры используются только в компьютерах? При желании можно перечислить довольно много используемых каждый день устройств, которым не помешала бы клавиатура! 20 мая начинается курс по профессии разработчика на C++ — мощном и гибком языке, близком к железу и специально к его старту мы делимся с вами материалом, автор которого попытался снабдить самодельной клавиатурой... СВЧ!
Да-да, вы не ослышались! Вот вам история о том, как мне удалось создать самую прокачанную в мире микроволновку, подключив к ней механическую RGB OLED-клавиатуру с возможностью горячей замены! Видео в высоком разрешении со звуком можно посмотреть ниже:
Предыстория
Год назад я всего за 5 фунтов купил на распродаже подержанную микроволновку "Proline Micro Chef ST44". Кажется, её выпускали в начале 2000-х. Ничем особенным из ряда других микроволновок она не выделяется. Но она обошлась мне недорого, а главное — работала, а мне больше ничего и не нужно было.
Проблема
Прошёл почти год. В один прекрасный день я начал нажимать обычные кнопки, чтобы подогреть еду, но кнопки отказывались реагировать.
Сначала я не мог понять, почему, но, проведя серию экспериментов, понял, что, по всей вероятности, сломалась мембранная клавиатура. Сначала несколько кнопок ещё кое-как работали, но вскоре вообще перестали реагировать.
Я мог бы плюнуть на всё и просто отнести прибор на свалку, ведь свою стоимость он в любом случае оправдал. Но это было бы неразумно, так из строя вышла только дешёвая пластиковая клавиатура, а сам прибор работал нормально. К тому же я смог бы сэкономить пару фунтов — ведь ремонтировать всегда дешевле, чем покупать новое. Я разобрал прибор и посмотрел, можно ли что-нибудь с ним сделать.
Разбираем прибор
Снимаем корпус и видим главную печатную плату:
Микроконтроллер посередине сверху.
Зуммер в правом верхнем углу.
Синий ленточный разъём для клавиатуры в середине слева.
Трансформатор и реле управления в нижней части.
Сквозные отверстия в плате... не знаю, зачем они, но, раз плата работает, не будем обращать на них внимания!
Вот как выглядит плата с лицевой стороны:
Плата хорошо промаркирована, и, кстати, довольно занятно, что на ней установлен вакуумный флуоресцентный дисплей (VFD), который вышел из моды как раз в то время, когда сделали микроволновку.
Я также заметил, что плата, да и вообще все внутренности микроволновки были изготовлены Daewoo, корейской корпорацией, производящей что угодно, вплоть до автомобилей. Она же изготовила и мой прибор.
Но не будем отвлекаться. Сначала я подумал, что можно просто почистить контакты ленточного кабеля и проблема будет решена. Но я не обратил внимания, что контакты в приборе углеродные (графитовые?), а не из обычного металла, и в процессе чистки часть из них стёр под ноль:
Так что если контакт и работал полчаса назад, то теперь он точно никуда не годился. Браво, отличное начало!
Добро пожаловать в матрицу (сканирование)
Но, согласимся, это же не конец света? Для взаимодействия с контроллером клавиатура почти наверняка использовала метод матричного сканирования.
Подробное описание этого метода приведено на платформе Sparkfun. Если вкратце, метод матричного сканирования позволяет считывать большое количество входных данных с ограниченного числа штырьков контроллера.
Например, на нашей компьютерной клавиатуре размещаются более 100 клавиш. Если мы захотим напрямую подключить каждую клавишу к входному штырьку, у микросхемы такого контроллера должно быть более 100 штырьков! Излишне говорить, что это громоздко, дорого в изготовлении, да и просто неудобно. Но, если немного подумать, можно изменить прошивку таким образом, чтобы клавиши были закодированы в виде сетки столбцов и строк. Такую сетку называют матрицей:
Таким образом, сканируя за один раз по одной строке и столбцу, можно определить, какая была нажата клавиша (или клавиши). Естественно, существует множество других способов кодирования клавиш, о них можно почитать здесь.
В любом случае в приведённом выше примере вместо 4 * 4 = 16 контактов нам нужно только 4 + 4 = 8 контактов — уже двойная экономия! А с нашей компьютерной клавиатурой нам потребуются всего лишь около 20 штырьков, а никак не 100! Таким образом, мы видим, что метод матричного сканирования позволяет сократить количество штырьков и снизить сложность конструкции устройств ввода.
Создаём матрицу
Вернёмся, однако, к нашей клавиатуре для микроволновки. Мы видим, что ленточный кабель состоит из двух частей, на каждой из которых размещаются по 5 контактов:
То есть, если мои расчёты верны, матрица будет иметь размер 5x5 = 25 кнопок. Прокрутите страницу чуть вверх и увидите, что на клавиатуре микроволновки как раз 24 кнопки, так что моё предположение подтверждается и я на верном пути!
Теперь мы знаем, что нам нужно 5 столбцов и 5 строк. Давайте теперь выясним, какая комбинация какой клавише соответствует. Для этого я распаял разъём ленточного кабеля и заменил его обычным штырьковым основанием:
Замечу, кстати, что производитель микроконтроллера TMP47C412AN — Toshiba. Это четырёхразрядный процессор с 4 кбайт ROM и 128 байт RAM, который может напрямую управлять работой вакуумных люминесцентных ламп. В общем, мы имеем дело с весьма специализированным чипом для бытовой техники. Его производительность крайне низка по сравнению с Arduinos и STM32. Но, тем не менее, со своей задачей он справляется! Я подсоединил ряд проводов-перемычек:
И обозначил строки и столбцы буквами 1-5 и A-E:
Затем я установил плату на место, включил питание и прозвонил каждую пару проводов, чтобы узнать, на какую кнопку они реагируют.
Это заняло какое-то время, и в итоге я выяснил расположение нужных мне кнопок на матрице:
A | B | C | D | E | |
---|---|---|---|---|---|
1 | NP_4 | NP_1 | |||
2 | NP_5 | NP_2 | NP_7 | ||
3 | NP_6 | NP_3 | POWER | NP_8 | |
4 | STOP | TIME | NP_9 | ||
5 | START | NP_10 |
Что у меня получилось в итоге? 10 клавиатурных кнопок и 4 кнопки управления. Есть ещё много других кнопок, но я не стал с ними заморачиваться, так как всё равно не собираюсь использовать их. Я быстро набросал простую схему:
С её помощью я проводами подсоединил несколько кнопок к перфорированной плате — пока неаккуратно, только чтобы проверить:
Заработало! По крайней мере теперь я мог продолжать греть себе еду! И это не стоило мне ни гроша. Но, как вы видите, конечный продукт получился не очень презентабельным: всё в беспорядке, из корпуса свисают 10 проводов... Я был уверен, что можно сделать лучше.
Прокачиваем СВЧ!
Примерно в то же время я работал над устройством duckyPad — механическим 15-клавишным макропадом с OLED-индикацией, горячей заменой и RGB, а также над сложной схемой автоматизации его работы с применением скрипта duckyScript:
Если интересно, загляните на мою страничку проекта!
Я назвал его "Do-It-All Macropad". Название обязывает, поэтому я решил попробовать его в работе в связке с моей микроволновкой! Если бы мне это удалось, моя скромная 20-летняя микроволновая старушка превратилась бы в единственную во всём мире СВЧ-печь с механическими переключателями и RGB-подсветкой! Вот что я называю... корейскими традициями! Однако всё оказалось не так просто, как представлялось вначале. Возникло несколько проблем:
Мне нужно было использовать существующий duckyPad в неизменном виде, то есть без переделок.
Я хотел, чтобы всё было сделано чисто и аккуратно, поэтому поставил перед собой задачу: чем меньше проводов, тем лучше.
Макропад должен запитываться от самой микроволновки.
Плата PMM
Сейчас из корпуса в мою самодельную клавиатуру выходят 10 проводов, и выглядит вся эта самоделка очень неряшливо. В идеале с duckyPad можно обойтись всего тремя проводами: Питание, Земля и Данные. Проводов будет мало, поэтому я смогу уместить их внутри одного кабеля, что будет гораздо чище и аккуратнее. Но как быть с тем, что в контроллер микроволновки в любом случае должно заходить 10 проводов от матричной клавиатуры? Значит, мне понадобится что-то вроде адаптера. Будем называть такой адаптер платой PMM.
duckyPad будет взаимодействовать с платой PMM, а та, в свою очередь, — с контроллером микроволновки. Получится что-то вроде такой конструкции:
Неплохо для начала! Пойдём ещё дальше и вспомним, что до сих пор в матричной клавиатуре мы использовали реальные физические переключатели. Но мы можем "обмануть" микроволновку! С платой PMM можно управлять матричной клавиатурой электронно, чтобы микроволновка "думала", что нажимаются физические клавиши! Как же это сделать?
Взрыв из прошлого
Я стал просматривать свои старые работы и с удивлением обнаружил, что ещё три года назад меня занимала точно такая же проблема! Тогда я пытался автоматизировать процесс ввода данных с геймпадов Nintendo, и в них для кодирования кнопок также использовалось матричное сканирование. И к какому же решению я тогда пришёл? Я пришёл к аналоговым переключателям! Они похожи на обычные механические переключатели, но управляются не нажатиями пальцев, а электронными сигналами. Я взял чип ADG714 из раздела аналоговых устройств. На одном чипе размещаются 8 переключателей, управление ими осуществляется по простому протоколу SPI:
Я быстро развёл плату PMM:
Плата получилась относительно простой. Я поставил микроконтроллер STM32F042F6P6 и вывел все его контакты на штырьковое основание на случай, если они понадобятся. Кнопок для управления 14, поэтому мне понадобились два переключателя ADG714. С помощью SPI они легко соединяются в последовательную цепь.
На схеме видно, что аналоговые переключатели подключены точно так же, как и моя спаянная вручную клавиатура "на соплях". Только теперь кнопки нажимаются не пальцами, а по командам микроконтроллера. Я изготовил печатную плату и припаял к ней все компоненты:
Затем я выполнил предварительное тестирование с непрерывным зуммером, и, кажется, схема работала нормально. Но окончательный вердикт можно было вынести только после её установки на реальное устройство.
Потолкуем последовательно
Теперь плата PMM может управлять матрицей кнопок. Как с ней будет взаимодействовать duckyPad? Поскольку для передачи данных используется всего один провод, я решил, что организовать простую одностороннюю последовательную связь будет более чем достаточно.
При каждом нажатии клавиши duckyPad будет отправлять простое последовательное сообщение со скоростью 115200 бит/с. Плата PMM получит это сообщение, и, если формат сообщения будет верным, кратковременно замкнёт соответствующий аналоговый переключатель, имитируя нажатие кнопки на микроволновке.
Я добавил к парсеру duckyScript сверхсекретную команду UARTPRINT и создал профиль для клавиатуры моей микроволновки. Клавиши на duckyPad расположены так:
Ты чего такой отрицательный?
Собираем всю конструкцию! И тут же возникает последний вопрос: как на неё подавать питание? Я полагал, что уж этот-то вопрос должен решаться легко. На печатной плате микроволновки уже есть микроконтроллер, поэтому нужно просто подключить его к разъёму питания, и дело сделано! Да, всё, конечно, так. Но не совсем. При детальном изучении печатной платы выяснилось, что вся она работает на отрицательном напряжении.
Мы видим, что она получает -26 В от трансформатора, понижает его до -12 В, а затем до -5 В. В качестве регулятора напряжения используется S7905PIC: фиксированный регулятор отрицательного напряжения.
Мне не вполне понятно, почему эта схема спроектирована именно так. Возможно, потому, что она как-то взаимодействует с преобразователем переменного тока. В любом случае возникшая проблема не так смертельна, просто надо посмотреть на задачу под другим углом. Я подключил два провода питания от печатной платы к разъёму питания платы PMM и через него — к duckyPad:
Обычно мы подсоединяем 0 В к контакту GND, а положительное напряжение — к VCC. Но в нашем случае 0 В фактически имеет больший потенциал. Поэтому всё, что мне нужно, — это подсоединить -5 В к GND, а 0 В — к VCC. Разница потенциалов по-прежнему будет 5 В, поэтому всё должно работать.
Некоторые зоркие читатели, возможно, заметили, что я прикрыл зуммер наклейкой. Он так ревёт!
Вот и мой DuckyPad пригодился!
Я установил обратно печатную плату, подключил всё, что нужно, и провёл быстрый тест — всё отлично заработало!
От отладочного основания duckyPad к плате PMM идут три провода; к плате управления, куда раньше подходил синий ленточный кабель, идут 10 проводов. Я закрепил duckyPad на микроволновку, обрезал конец дешёвого USB-кабеля, взял оттуда четыре провода и всё пропустил через отверстие в нижней части.
Готово! Первая и (возможно) единственная во всей Вселенной СВЧ-печь с механическими переключателями, OLED и RGB-подсветкой!
Вы когда-нибудь испытывали блаженство от хрустяще-кликающего тактильного и звукового совершенства переключателей Gateron Greens, когда в два часа ночи разогреваешь замороженные полуфабрикаты, потому что лень готовить? Я вам отвечу — я испытывал!
Видео в высоком разрешении со звуком смотрите ниже:
Хочу такую!
Если вас заинтересовал duckyPad, почитать о нём можно здесь! Но, если вы захотите повторить мой опыт один в один, это, к сожалению, будет гораздо сложнее.
У разных микроволновых печей разные схемы разводок матричной клавиатуры, поэтому вам придётся разобраться в них и самостоятельно спроектировать и собрать плату PMM. Предупреждаю — придётся постараться, но по крайней мере всю исходную информацию можно найти в этой статье! Захотите пойти по моим стопам — пишите мне, если возникнут вопросы!
Хочу также предупредить: при разборке микроволновки существует опасность поражения током высокого напряжения. Также не надо забывать о микроволновом излучении, поэтому будьте осторожны!
Разумная осторожность нужна и в обращении с С++ — языком, где совсем немного запутавшись или упустив из виду маленькую деталь очень легко выстрелить себе в ногу. На нашем курсе опытные менторы и эксперты в своём деле научат вас технике безопасности программирования на С++, работе с базами данных на этом языке, расскажут о С++11, поделяться знаниями о новом стандарте — С++20, о разработке для десктопа и не только. Приходите — будет сложно, но интересно!
Узнайте, как прокачаться и в других специальностях или освоить их с нуля:
Другие профессии и курсы
ПРОФЕССИИ
КУРСЫ