WiFi Cata

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

В итоге был сделан очередной проект на esp8266 для решения этой задачи.

С помощью контроллера решалось несколько вопросов:

  • Возможность включения / выключения вентилятора.
  • Возможность менять его скорость.
  • Контроль состояния: если вентилятор был включен, но не потреблял ток — значит, вылетел; включалась пищалка и отображался статус в веб-интерфейсе.
  • Контроллер должен был сохранять свое состояние между выключениями: если свет «мигнул», то в дальнейшем возвращаемся к тому же режиму, в котором были.

Проект — адаптация упоминавшегося ранее кода — примера веб-сервера для управления светодиодами. Вместо светодиодов используется 2 реле: одно на включение, второе на переключение скоростей; коммутация сделана так, чтобы при типичном использовании (вентилятор включен, скорость малая) реле были выключены. Добавлен использовавшийся ранее код для возможности обновления прошивки по воздуху.

Из нового для себя — использовал EEPROM (точнее, его эмуляцию в esp8266) для хранения состояния реле. В setup’е вычитывается состояние ячеек и задается состояние выходов и внутренних переменных. В дальнейшем в рабочем цикле идет сравнение состояния выхода и состояния ячейки памяти, при отличии — в память заносится новое значение (да, есть место для оптимизации — можно не дергать каждый раз EEPROM.read и не писать в выход, например, HIGH если он уже HIGH, а использовать какую-нибудь дополнительную переменную). Из неожиданных моментов — сначала неправильно сделал сравнение состояния ячейки: делал проверку на равенство значению и записывал противоположное значение. Попался на том, что в ячейке был дефолт «53» и проверка для выполнения условия перезаписи никогда не происходила, в итоге состояние не сохранялось. Сделал проверку на неравенство, все заработало. Из заметок — в EEPROM.begin() указывается число байт для дальнейшей работы, счет с единицы.

Для сигнализации использовал тот же вывод, на котором сидит набортный светодиод; в коде сделал поправку на то, чтобы после подключения wifi на выходе был низкий уровень, чтобы через зуммер не шел ток. В итоге в нормальном режиме светодиод постоянно светится. При подключении к wifi зуммер щелкает :). На момент написания кода в наличии был только пассивный зуммер, поэтому использовал функцию tone(). Условия сигнализации простые — если выключено 1-е реле (т.е., если вентилятор включен) и напряжение на заданном входе ниже порога — сигналим и ставим переменную fan в «FAIL», иначе — «OK».

В качестве микроконтроллера используется модуль ESP-01. GPIO0 и GPIO1 (TX) — выходы на реле, GPIO2 — светодиод и пищалка, GPIO3 (RX) — вход для контроля состояния вентилятора. В качестве источника напряжения использовал трансформатор тока с дохлых PZEM-004t + мост на базе КД522 + конденсатор на 2 мкФ + стабилитрон на 3V. В качестве драйвера для пищалки — КТ817 с резистором на 9,1 КОм в базе. Выход RX пришлось подтянуть резистором на 12 КОм к плюсу, иначе модуль не запускался. Питание ESP-01 — на базе HT7333-1, с парой конденсаторов по 10 мкФ на входе и выходе. Общее питание — от обычного недорогого импульсного БП на 5В.

Код

Одна мысль про “WiFi Cata”

Добавить комментарий