[Из песочницы] Цифровая микроволновка из механической
Многие из нас имеют дачи: кто-то растит картошку, кто-то делает ремонт, а кто-то — и то и другое. Но, бесспорно, все стаскивают туда всякий хлам (а вдруг пригодится!). В состав этого разношерстого хлама входит все: от разных тряпок до термоядерных реакторов поломанной бытовой техники. Историю о том, как с помощью Arduino Nano и кучи свободного времени была восстановлена микроволновая печь, можно найти под катом (много фото).
Была поздняя осень и на даче особо делать было нечего — готовились к зимовке. И после переноса разного хлама я наткнулся на микроволновку, которую вывезли туда пару лет назад. Отремонтировать ее было вполне актуально, так как разогревать пищу во время ремонта на плите не очень удобно — гораздо проще вот такой малюткой прокрутить пару раз тарелку и в бой!
Для выяснения поломки пришлось провести опрос родителей на тему того, как и при каких обстоятельствах микроволновка сломалась и почему ее вывезли на дачу. Оказалось, что сломался регулятор с таймером. Разборка показала правдивость такого вывода: в результате постоянных размыканий/замыканий контакт подгорел и начал нагреваться, в итоге сплавил кучу шестеренок, приведя устройство в нерабочее состояние. Вопрос был только один: почему регулятор не был заменен?
Гугление показало, что найти подобный элемент к конкретной модели очень тяжело. Потому на тот момент было принято решение просто временно вывезти ее на дачу. Но мы не ищем легких путей: я не стал искать новый регулятор, а решил запилить свой. С блекджеком и плюшками.
Изучение статей тут и тут по поводу устройства микроволновых печей показало, что механические микроволновки устроены до безобразия просто:
Требования к тому, что должен делать таймер-регулятор (обведен пунктиром на рисунке в центре) весьма просты:
- Регулировать мощность магнетрона;
- Засекать время и отключать печь по истечении времени таймера;
- Издать звук о завершении готовки.
Единственное, что хочу заметить в плане схемы: она приблизительная и может незначительно отличаться от реального положения вещей. К примеру, в моей модели микроволновой печи отсутствует низковольтная часть: там везде 220 В, так что идея использовать просто выпрямитель как источник питания платы отпала.
Разберем каждый пункт по отдельности:
Регулятор мощности
Регулировать мощность магнетрона невозможно в связи с особенностями его устройства, но каким-то магическим образом мощность в микроволновой печи регулируется. Этих способов два:
- регулировка времени работы магнетрона, то есть включение и отключение его на некоторое время. Этот способ используется во всех недорогих микроволновых печах с механическим управлением;
- инверторный, однако мы рассматривать его не будем, так как это относится к дорогим устройствам и в объеме статьи это особо не нужно.
Гугление выдало временные характеристики подобных таймеров:
Как видно из статьи согласно ссылке, а так же временной характеристике, для того, чтобы рассчитать время работы, необходимо разделить полную мощность на 30 секунд и умножить на необходимую мощность на выходе, таким образом получив время работы магнетрона в каждом 30 секундном интервале.
Осталось только подобрать его конкретно для моей модели микроволновки, для чего я обратился к руководству пользователя, причем там все оказалось гораздо проще — давалось процентное соотношение мощности.
И получив соответственно:
Таймер
Тут все просто: отсчитываем время, согласно повороту ручки, и отключаем печь.
Звонок
Без комментариев. Только в электронной версии проще использовать динамик.
Наконец, выяснив все, что необходимо делать с помощью таймера-регулятора, пришел черед разработки. Перебрав несколько вариантов, остановился на использовании Arduino Nano как устройства управления. Многие могут возразить и показать в сторону микроконтроллеров, но я по жизни ленивый и у меня нет ни времени, ни желания заниматься травлей и отмыванием плат, паянием программаторов и т.д., в качестве устройств ввода решено было оставить штатные ручки, чтоб не особо портить внешний вид микроволновой печи. В качестве исполнительного механизма был использован стандартный двухканальный модуль реле для Arduino.
Разработка
Хочу заметить сразу: это было мое первое знакомство с микроконтроллерами и языком программирования семейства «С». Я и раньше писал код, но это был университет, и немного на работе для личных целей (VBA). Также неоднократно читал статьи по микроконтроллерам и приблизительно представлял, что это такое. Но впервые — «руками», так сказать — попробовал здесь.
Самое первое, что я хотел, — это нулевое потребление энергии во время простоя, ведь печь будет стоять на даче, а дергать каждый раз с розетки желания не было.
Потому всякие ждущие режимы и т.д. я отмел сразу. И пришел к такой схеме:
Как видно, здесь имеется реле, которое включается и отключается платой Ардуино, а также кнопка в обход контактной группы. Работает это все просто: при нажатии на кнопку цепь замыкается и начинает питать плату, плата начинает выполнять программу, которая «подхватывает» с помощью реле питание, и ток идет через контактную группу до тех пор, пока реле не отключится программно.
Для регулировки мощности было задумано использовать метод отключения магнетрона от питания с помощью реле. Длительность будет задавать программа в зависимости от выбранного режима.
Далее я подумал о датчиках, с которых будут сниматься данные о задержке таймера, и величине мощности. Всякие кодовые диски с оптопарами я отмел, так как это все для меня сложновато, да и по большому счету — ненужно. Изучив доступную в сети информацию по ардуино, было принято решение использовать аналоговые входы, а в качестве датчиков — обычные переменные резисторы на 10 кОм.
Как в итоге оказалось, они идеально встали после небольшой переделки корпуса от старого таймера. Итоговая схема устройства приблизительно такая:
Реализация
Начал я с поиска платы: купил клон Arduino Nano через интернет, потом заказал модуль реле, остальные компоненты были вытащены из ящика с хламом, который стоит под столом. Решил не сильно портить внутренности микроволновки, так как после осмотра понял, что места в передней панели предостаточно, чтобы разместить все необходимое (блок питания на 12В все же не влез).
Также решил оставить контакты и разъёмы, чтоб было проще демонтировать в итоге. Чтобы закрепить переменные резисторы, с которых снимаются данные, после размышлений решил использовать корпус от сгоревшего регулятора, предварительно вытряхнув содержимое и оставив только самое нужное: контакты, вал ручки таймера и шестерню ручки управления мощности.
Надежно отогнув контакты внутри корпуса, так чтоб они не касались друг друга и металлических частей переменных резисторов, с помощью дремеля просверлил два отверстия напротив ручки таймера и шестерни мощности. В эти отверстия установил резисторы, получилось довольно сносно:
Далее занялся ручкой: рассверлил вал так, чтоб он туго надевался на ручку переменного резистора, ту же процедуру проделал с шестерней мощности. Все в итоге собралось на удивление хорошо и надежно с первого раза.
Далее уствновил кнопку запуска — купил подходящую за 9 грн белого цвета.
Получив на руки плату, сначала зашел в тупик: как ее закрепить? Отверстия по периметру очень маленькие.
Хотелось, чтобы она держалась надежно и при этом ее можно было легко снять. Идею тупо приклеить я откинул, так как мало ли — сожгу ее, а потом отламывай… Пришел к изящному решению с помощью маленьких гвоздей, кусочка мягкого пластика и изоляции от толстого провода:
Всю эту конструкцию я приклеил эпоксидным клеем к панели, напротив отверстия для USB-кабеля, которое я предварительно сделал.
Дальше был черед динамика, который был приклеен к корпусу регулятора. Также был установлен блок реле, который, кстати, пришлось приклеить, так как по-другому закрепить в корпусе его было нереально. После кропотливой разводки и пропайки проводов получилась следующая конструкция:
Так как микроволновка на момент написания статьи находится на даче, показать готовый блок с реле нет возможности. Место установки показано условно.
Далее были добавлены цепи питания и блок питания на 12В, который запитывал плату ардуино, а также через гасящий резистор — блок реле. Их пришлось развести по питанию в связи с тем, что по непонятным причинам плата перезагружалась при попытке подтянуть оба реле одновременно. В итоге я завел питание, отдельно сняв джампер на блоке реле, который запитывал его непосредственно от ардуино.
После теста всей конструкции в сборе выяснилось, что плата блока питания никаким образом не помещается в панель. Отчаявшись и психанув, я ее замотал волшебной синей изолентой и положил на дно микроволновки. Закрепил дополнительно скотчем, чтобы при переноске не болтался. Блок питания был взят от старого свича 12В 1А, он был исправен, но с перебитым проводом слегка и разломанным корпусом. Ни то, ни другое мне нужно не было, потому он пришелся как нельзя кстати.
Посмотреть на все в сборе можно ниже (блок с реле в кадр так и не попал):
Программная часть
Программировать я толком не умею, потому если кто может оптимизировать код программы, мною написанный, милости прошу. Буду рад послушать ваши идеи, но, как говориться: «Я художник — я так вижу».
Так как о языках симейства Си я знал только то, что там есть слова void, #include и много скобок, то поначалу у меня получалось с трудом.
Все же текст программы родился, и микроволновка заработала как положено. Углубляться в текст программы не буду: ее можно скачать здесь. Поясню лишь принципы.
Поначалу, ознакомившись с синтаксисом, подумал, что все можно будет написать в 4 строчки через задержку delay (), однако в последствии оказалось, что это плохая идея, так как задержка действительно останавливала программу и не реагировала на внешние раздражители, а мне хотелось, чтоб в процессе в любой момент можно было выключить микроволновку поворотом ручки в положение »0». Потому я придумал способ похитрее.
Я использовал функцию millis (), которая возвращает количество миллисекунд с начала работы программы. Замеряя время с начала работы программы в каждой итерации, это время сравнивалось несколько раз с заданными значениями, которые в свою очередь задавались положениями ручек управления. Причем для таймера и мощности эти значения берутся единожды при включении питания, а в цикле самой программы постоянно отслеживается положение ручки таймера: если разряд становятся равным значению от 0 до 4, что близко к нулевому положению ручки, питание выключается.
В цикле отключения по таймеру, при превышении времени работы программы над заданным значением, сначала подается звуковой сигнал, а потом отключается питание.
В цикле работы регулятора мощности к значению времени в начале работы прибавляется 30 секунд, и полученное значение постоянно сравнивается с текущим временем. При превышении опять прибавляется 30 секунд и выполняется включение/отключение магнетрона в зависимости от положения, после чего все повторяется снова. Таким образом реализуются 30-секундные интервалы, в которых уже ручка мощности регулирует длительность работы магнетрона.
В результате эксплуатации замечен такой момент: от нажатия на кнопку до «подхватывания» платой питания проходит примерно 2 секунды. Чтоб точно знать, когда можно отпустить кнопку, в начале программы был введен звуковой сигнал после включения реле.
В заключение хочу заметить следующее:
Достоинства подобной конструкции:
— Надежность: минимальное количество движущихся частей способствует тому, что все будет работать долго и надежно.
— Гибкость: в любой момент можно улучшить прошивку и залить ее, просто подключив USB-кабель.
— Ремонтопригодность: все запчасти можно приобрести без особых проблем и недорого.
— Практика в программировании микроконтроллеров.
— Простота конструкции для повторения.
Недостатки:
— Надо тратить время: для кого это хобби, тому этот пункт не покажется особо важным.
— Скорее всего через некоторое время выйдут из строя реле: нагрузка индуктивная, само собой будет искрить и подгорать со временем, но найти реле за 40 грн куда проще, чем механический таймер, который к тому же стоит около 150 грн.
— Запоздалый запуск: при нажатии нужно пару секунд подождать, пока реле «подхватит» питание, при этом тарелка уже крутиться, но это плата за то, что в простое печь ничего не потребляет.
— Нелинейная характеристика переменных резисторов: использовал то, что было в наличии, в итоге пришлось для каждого интервала положений ручки таймера вручную прописывать значения.
— Ручка таймера не возвращается в исходное положение сама: нельзя оценить время, оставшееся до завершения разогрева.
Жду критики в комментариях и предложений для улучшения системы управления микроволновой печью.