Многие из нас имеют дачи: кто-то растит картошку, кто-то делает ремонт, а кто-то — и то и другое. Но, бесспорно, все стаскивают туда всякий хлам (а вдруг пригодится!). В состав этого разношерстого хлама входит все: от разных тряпок до термоядерных реакторов поломанной бытовой техники. Историю о том, как с помощью 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 грн.
— Запоздалый запуск: при нажатии нужно пару секунд подождать, пока реле «подхватит» питание, при этом тарелка уже крутиться, но это плата за то, что в простое печь ничего не потребляет.
— Нелинейная характеристика переменных резисторов: использовал то, что было в наличии, в итоге пришлось для каждого интервала положений ручки таймера вручную прописывать значения.
— Ручка таймера не возвращается в исходное положение сама: нельзя оценить время, оставшееся до завершения разогрева.

Жду критики в комментариях и предложений для улучшения системы управления микроволновой печью.

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


  1. DMGarikk
    28.12.2015 12:18
    +1

    Прикольно.
    Было бы здорово ещё сделать контроль температуры блюда, в его центре… и как вариант в центре снизу тарелки и в зависимости от этого увеличивать время разогрева. А то бывает суп поставишь, вытаскиваешь ппц горячий… а в глубине чутьли не лёд (по дну тарелки можно опередлить)

    P.S. По теме, в схемах не увидел, надеюсь защитные схемы магнетрона которые с дверцей связаны, не зависят от электронных компонентов?


    1. DrPass
      28.12.2015 13:05
      +1

      Это будет проблематично. Электронный датчик температуры в камеру микроволновки ведь не поместишь… Опять же-таки, тут проблема исключительно физики, микроволны эффективно проникают в глубину на несколько сантиметров, и середина блюда нагревается за счёт конвекции и теплообмена. Если микроволновка будет увеличивать время разогрева, ориентируясь на температуру середины блюда, во многих случаях края просто изжарятся до состояния сухаря.


      1. DMGarikk
        28.12.2015 13:34

        про механический датчик безусловно его не получится, но поизобретать тоже можно, есть же бесконтактные датчики
        про неравномерность согласен, но например можно сделать отдельным режимом для тех блюд которым это не особо критично


        1. Zzzuhell
          28.12.2015 14:28

          ИК камеру!!! Чтобы включалась в моменты неактивности магнетрона и снимала температурную картину! :)


    1. Rumlin
      28.12.2015 13:19

      А то бывает суп поставишь, вытаскиваешь ппц горячий… а в глубине чутьли не лёд

      Сталкивался с таким при использовании некоторых тарелок. Решил, что керамика сильно поглощает излучение. В пластике и стекле греет лучше.


      1. qbertych
        28.12.2015 13:41

        А мне казалось, что это зависит от размера микроволновки: у одних в центре пучность поля, у других — минимум. Лет 10 назад этим особенно грешили LG: лично ел пиццу, ледяную (в прямом смысле слова) в центре и обгоревшую по краям. Сейчас все крупные производители вроде научились делать нормальные размеры печек.

        К слову, еда из микроволновки еще и остывает невероятно быстро.


        1. Rumlin
          28.12.2015 13:52

          Скорость остывания не знаю, чем объяснить. Может нагрев до разной температуры.


          1. LuckyStarr
            28.12.2015 14:42

            Микроволновка «раскачивает» диполи в пище(вода в основном) за счёт чего нагревает. Из за этого к примеру жидкая часть супа уже кипит, а остальные компоненты недостаточно прогреты. Ну а потом за счет теплообмена температура выравнивается. Поэтому суп грею в несколько заходов, давая пару минут на выравнивание и повторному нагреву.


            1. qbertych
              28.12.2015 15:23

              Насчет супа я понял, что его надо греть теплым ламповым способом — в ковшике на плите =).


    1. tolkach88
      28.12.2015 20:48

      P.S. По теме, в схемах не увидел, надеюсь защитные схемы магнетрона которые с дверцей связаны, не зависят от электронных компонентов?


      Нет ни как не зависят — все концевики и термодатчики работают штатно.


  1. laphroaig
    28.12.2015 12:49
    +6

    Из заголовка я подумал, что механическая микроволновка — это которая разогревает картоху механическими волнами )


    1. IgorGolov
      28.12.2015 15:29

      Механическая — значит с крутилками


  1. valis
    28.12.2015 13:04
    +3

    Молодец.
    У самого была идея реанимировать старую стиралку Indesit при помощи arduino (там сдохла управляющая плата), уже даже примерную блок схему устройства накинул, которая выходила в 3 раза дешевле оригинальной платы и начинал думать над реализацией алгоритмов стирки, но оказалось что родители стиралку разобрали и выбросили.


    1. Rumlin
      28.12.2015 13:16
      +1

      А кстати говоря актуальная тема. Не часто можно найти доноров управляющей платы. А новая что-то около 100$.


  1. Rumlin
    28.12.2015 13:14
    +2

    нельзя оценить время, оставшееся до завершения разогрева.

    Проще всего мигать светодиодом — тем чаще, чем меньше времени осталось. Секунд за 15 зажечь постоянно.

    На отверстие USB я бы поставил бы заглушку — жир разъедает сильно.


  1. wolowizard
    28.12.2015 13:31

    можно было бы использовать энкодеры вместо резисторов и добавить экранчик — получилась бы «классическая» микроволновка с электронным управлением. Ну и напрашивается еще остановка таймера по открытию дверцы. Потом, как сказано выше, добавить датчик температуры блюда и реализовать адаптивное время включения. Интересный проект, если нечем себя занять )


  1. qbertych
    28.12.2015 13:36

    Давно догадывался по звукам микроволновки, что она регулирует мощность ШИМом с нечеловечески огромным периодом импульсов (~30 сек). В чем тогда смысл использовать низкую мощность, если можно быстрее нагреть на максимальной и подождать, пока тепло распределится?


    1. AndreyNagih
      28.12.2015 13:40
      +1

      Чтобы не подгорело в тех местах, куда раньше доберутся волны.


      1. LuckyStarr
        28.12.2015 14:36
        +1

        Там скорее не подгорает, а подсыхает. Вода нагревшись до точки кипения начинает испаряться с поверхностного слоя пищи и появляются подсохшие места.


    1. 0lympian
      28.12.2015 14:28

      Почему пирожки не пекут при температуре адского пламени за пару секунд? :)

      При той же разморозке мяса в микроволновке, на стандартных программах там все на «малой мощности», т.е. с узкими импульсами происходит, все равно получается неравномерность. Тепло не успевает распределяться в глубину. Так что получается, что верх (особенно уголки) уже начинает вариться, а внутри еще остается лед.

      Ну а для разогрева бутербродов — согласен с вами, режимы пониженной мощности в принципе не нужны.


      1. qbertych
        28.12.2015 15:25

        Дело не в адском пламени. Микроволновка в любом режиме либо выключена, либо включена на полную. Чудо-ШИМ с импульсами по 10 секунд все равно успевает испарить воду, при этом высушив и не нагрев пищу.


        1. LuckyStarr
          29.12.2015 07:12

          Есть 2 типа микроволновок:

          1) Обычные — магнетрон либо включен на полную мощность, либо выключен;
          2) Инверторные — в них установлен блок управления мощностью магнетрона; магнетрон работает постоянно, но мощность регулируемая.

          Вторые дороже, но прогревают равномернее.


  1. bougakov
    28.12.2015 15:57

    Имел аналогичный опыт с «воскрешением» посудомоечной машины, у которой погорела управляющая электроника.

    Мучал «стюардессу» долго. Самой важной проблемой оказалась надёжность. Когда рядом мощные источники помех (в моём случае — насос помпы и электромагнитные вентили подачи воды) Arduino легко ловит помехи и затейливо сходит с ума. Если вы не хотите, чтобы из-за «глюка» микроконтроллер завис, включив ТЭН, приходится обвешивать систему watchdog-таймерами (у меня, кстати, проблема с ТЭН была на самом деле — до сих пор помню его ярко-малиновый цвет).

    Поэтому крайне рекомендую соорудить хотя-бы примитивный watchdog на базе, например, недорогого таймера 555. Логика простая — в коде Ардуино нужно предусмотреть постоянную подачу сигнала в loop() на один из пинов, это будет сигналом «я жив ещё, в ясном уме и в твёрдой памяти». Watchdog при каждом получении сигнала обнуляет таймер. Если сигналов не приходило 5-10 секунд, watchdog через реле ненадолго обесточивает Ардуину и этим её перезагружает.


    1. isden
      28.12.2015 16:38
      +2

      А если ардуину поместить в закрытый металлический корпус? Еще добавить оптическую развязку сигнальных линий, фильтры на питании и т.п.


      1. tolkach88
        28.12.2015 20:41

        Кстати я отработал и этот вариант — вырезав из консервной банки развертку и сложив коробочку — но сколько не тестировал без экрана, все было отлично. Потому городить не стал.


    1. custos
      28.12.2015 19:24

      соорудить хотя-бы примитивный watchdog на базе, например, недорогого таймера 555

      У AVR свой WDT (WhatchDog Timer), включается просто:
      #include <avr/wdt.h>
      wdt_enable(WDTO_2S); // установить таймер (диапазон 15ms - 8s)
      wdt_reset(); // в цикле и при длительных операциях сбрасывать, иначе перезагрузка
      

      Проблема в том, что загрузчики китайских клонов редко поддерживают WDT, чтобы это исправить нужно прошить OptiBoot, но это в любом случае проще, чем вешать на ардуину внешний watchdog.

      В остальном поддерживаю предыдущего оратора, нужно экранировать!


      1. tolkach88
        28.12.2015 20:36

        По поводу watchdog — попробовал провести эксперименты, но блин плата ушла в циклическую перезагрузку. Не помню на каком сайте я читал инструкцию по его включению. Но я очень сильно ржал когда пройдя все этапы в конце было написано — что может произойти такой конфуз и единственный выход перепрошивка платы:)
        Но гугл помог — и все обошлось)) В тот момент вспомнился анекдот про торт у которого на дне коробки если перевернуть было написано «не переворачивать»)


      1. bougakov
        28.12.2015 21:15

        В ряде случаев надо именно что отрубать ненадолго питание — например, чтобы вразумить подключенные к МК датчики.


    1. tolkach88
      28.12.2015 20:44

      Как видите по схеме это не возможно — сброс платы отключит питание от реле, в итоге микроволновка просто отключится. А так идея интересная.


      1. custos
        29.12.2015 07:45

        сброс платы отключит питание от реле

        В данном случае это и есть цель watchdog — вырубить если зависло. Хуже если магнетрон останется включенным. Так что прошить Arduino и включить WDT будет не лишним. Кстати, чтобы далеко не ходить у меня про это было написано в первой статье раздел «Boot-loop (циклическая перезагрузка) при работе с WDT».


    1. Arezus
      29.12.2015 11:42

      соорудить хотя-бы примитивный watchdog на базе, например, недорогого таймера 555.

      К слову сказать, 555 тоже некисло ловит помехи, например в присловутых USB-паяльниках он влуплен в моностабильном режиме, а перезапускается как раз статикой тела, у меня при первом включении из-за импульсного БП жало разогрелось до прозрачно-алого состояния, тк он постоянно запускался. Пришлось влепить подтяжку 2,2МОм на плюс, а в планах вообще заменить 555 на тиньку и накатать нормальную программу, Все-таки как полевой паяльник он имеет право на жизнь.


  1. sav13
    28.12.2015 17:10

    Сразу вместо Arduino воткнуть ESP8266 и получится Интернет-микроволновка


  1. Atxmega
    29.12.2015 11:30
    +3

    Делал абсолютно то же самое, лет 6 назад. Только независимо мощность — NE555 и Таймер — PIC16F84A


    Еще картинки






  1. ra3vdx
    30.12.2015 18:51
    +1

    Я как-то купил по острой необходимости б/у СВЧ-печку (как я считал). Фактически — карусель с лампочкой).
    Но — магнетрон цел, его обвязка жива. Микроконтроллер выдавать сигналы на ключи, управляющие реле, не мог, заказывать на Алике и программировать самому — мне показалось, что это не путь Джедая…
    Как настоящий рукожоп, я поступил более сурово и решительно:


    1. tolkach88
      30.12.2015 20:08
      +1

      Эта идея посетила меня первой — не из-за рукожопости, а из лени :D но отец забраковал идею — сказал бегать и выключать он не хочет в моменты творческого шпаклевания стен)).
      Я хотел поставить тумблер с двумя парами контактов и использовать только максимальную мощность.


  1. ra3vdx
    30.12.2015 20:20

    Тут получился ручной ШИМ — одна пара контактов управляет магнетроном. Такая себе регулировка мощности)
    Ещё был нерабочий холодильник с исправным компрессором. Термостат нашёлся там же…

    Ну, Вы поняли


    1. tolkach88
      30.12.2015 20:49
      +1

      Прошу прощения за минус — хотел плюсануть но блин у меня комп лагает — со старого ноутбука сейчас(


      1. Equin0x
        31.12.2015 09:10

        fixed


  1. Equin0x
    31.12.2015 09:09

    На свободный вход ардуины можно еще повесить датчик влажности, чтобы в режиме разогрева точно определять момент, когда закипело и пошел пар. Так делается в моем любимом панасоник-инвертор, что неимоверно облегчает жизнь.


  1. Yurich
    31.12.2015 09:45
    +1

    Прикрутите дисплейчик из 4 семисегментных индикаторов — будете видеть, сколько времени установлено в режиме задатчика и сколько осталось в режиме работы