Началась эта история еще осенью, когда мне вдруг потребовалось небольшое помещение в доме, в котором поддерживалась бы стабильная температура +7 градусов. Ну, почти как серверная, только еще прохладнее.
Зимой это было несложно: поставить термодатчик и обогреватель, который бы включался, когда температура падает. А вот что делать летом? Очевидно, нужна холодильная установка!
Посмотрев на цены на промышленные холодильные установки - подумал, а что если сделать это самому? Нужно всего лишь взять простой ...
Не, простой кондиционер не получается. Оконный - нужно устанавливать в какое-нибудь окно, которого нет. Напольный, с трубой вывода воздуха - можно, но у него особенность: если с одной стороны он воздух выдувает - значит, с другой всасывает, то есть в помещение всегда будет идти поток теплого воздуха снаружи, а это плохо для охлаждения.
Оставалась сплит-система, но это казалось ужасно сложно и непросто.
Однако, если хорошенько поискать информацию - выяснилось, что на самом деле это не так уж и сложно.
По сути, имеем два блока: внешний и внутренний, соединенных между собой трассой из двух медных трубок, по которым бегает фреон.
Воздух, кстати, не бегает: удивительно, но среди офисных жителей довольно распространено мнение, что можно "включить сплит на обдув" чтобы "был свежий воздух". Не будет там никакого свежего воздуха, неоткуда ему взяться.
Внутренний блок, фактически - горизонтальный вентилятор, который гоняет воздух через трубки испарителя.
Он может быть красивым или уродливым, тихим или шумным, с наворотами вроде озонатора и ионизатора - но это всего лишь навороченный вентилятор.
Ах да, еще в нем находится плата управления внешним блоком.
А вот внешний блок, который выглядит "просто как вентилятор" - это как раз самая важная часть сплит-системы: там находится компрессор, который собственно говоря и заставляет всю эту систему холодить.
В простых системах он работает в режиме on|off, в сложных - его мощность управляется инвертором из внутреннего блока.
В общем решил использовать сплит, потому что если всё получится - будет холодильная комната, а если не получится - сейчас потренируюсь, а потом мне есть куда просто сплит поставить.
Был найден недорогой комплект, как раз on|off - потому что дальше потребовалось делать к нему собственную систему управления.
Трассы для сплитов продаются уже готовыми комплектами (спойлер: это НЕ луший вариант, но самый простой).
Оставалось всё это смонтировать.
Установка сплит-системы:
Не буду пытаться описать процесс лучше, чем описано у Каганова, просто в качестве "записки на память": что, как и какие инструменты нужны.
Внутренний блок устанавливается внутри помещения, внешний, внезапно, снаружи.
Соединены они двумя медными трубками, жидкостной (потоньше) и газовой (потолще). Соответственно, трубки необходимо как-то провести сквозь стену, вместе с кабелем питания внешнего блока и (если надо) шлангом вывода конденсата из внутреннего блока.
В бытовом случае тут особых сложностей нет: длина трассы около 5 метров, разница уровней внешнего и внутреннего блоков невелика, достаточно обеспечить уклон шланга для вывода конденсата, потому что вверх вода сама не течет.
Трубки подключаются к блокам, без каких-либо прокладок, просто за счет развальцованных концов, плотно притягиваются гайками.

В готовых комплектах трасс трубки уже развальцованы (и вот тут-то могут быть проблемы - плохая вальцовка потом может давать неплотность).
Настоящие установщики кондиционеров могут обрезать трубку труборезом (специальное устройство), и развальцевать вальцовкой - это тоже всё продается. Главное - максимально чисто и ровно.
Трубки из мягкой меди, и они неплохо гнутся. Настолько неплохо, что их можно случайно сплющить, поэтому для гибки труб нужен трубогиб. Их существует несколько разных видов: пружинные, рычажные, арбалетные - про всё это есть видео на Ютубе.
Я использовал рычажный, работает вполне приемлемо.

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

А вот дальше начинается шаманство:
У газового (где толстая трубка) порта есть специальный сервисный разьем. Он нужен для ваккуумирования системы и заправки фреона. Разьем закрыт ниппелем, типа как на автомобильном колесе, и колпачком сверху. Это важный нюанс: нажатие на ниппель приводит к открыванию клапана.
Первое, что нужно сделать после сборки трассы - ваккуумировать ее. Для этого понадобится вакуумный насос, и манометрический коллектор - такая характерного вида штука с двумя манометрами, синим и красным, и тремя шлангами (можно обойтись и попроще - но такой удобней при заправке потом). Разумеется, это всё тоже продается.

Зачем ваккуумирование: не ради ваккуума, а для того чтобы убрать из трубок остатки воздуха вместе с парами влаги в нем. Чем меньше останется воздуха - тем меньше паров.
Проблема связана с тем, что в современных системах используется фреон R410A, типа "экологичный", для него требуется специальное холодильное масло, а вот оно как раз очень гигроскопичное, впитывает влагу, превращается в кислоту и портит компрессор изнутри.
Именно поэтому и нужно ваккуумирование. Особая мощность насоса не требуется, трасса небольшая, обьем ее маленький, и жестких ограничений по времени работы насоса у нас нет - поэтому достаточно самого простого, из более-менее приличных.

Вакуумный насос подключаем к среднему шлангу блока манометров, краник красного закрываем, он пока не нужен, шланг синего подключаем к сервисному порту ... и обнаруживаем, что он не подходит.
Потому что стандартные размеры гаек шлангов - 1/4 дюйма, как было всегда раньше для фреонов R22, а на новых системах, где R410A - размер резьбы 5/16. Типа, чтобы не путали случайно.
Разумеется, переходники продаются...

Итак подключаем "синий" манометр через переходник (при этом ниппель нажимается пимпочкой в переходнике и открывает клапан), открываем синий кран, включаем вакуумный насос - и смотрим, как стрелка манометра падает ниже нуля.
И ждем: полчаса - час. Вакуума больше не станет, но постепенно вся возможная влага в трубках будет испарена и выведена наружу.
Потом выключаем насос, закручиваем синий кран и смотрим на стрелку: она должна оставаться на месте, в минусе.
Оставляем это всё еще на часик: за это время воздух ниокуда не должен попасть в систему. Если стрелка сдвинулась - где-то неплотность, надо перепротянуть все гайки, и повторить ваккуумирование.
Ну вот, допустим, время прошло, вакуум на месте, всё работает - надо включать фреон. В новом блоке он уже есть внутри, просто закрыты краники.
На портах внешнего блока, куда подключены трубки, есть металлические колпачки - под ними видны вентили под ключ-шестигранник. Открываем вентиль на газовой трубе - против часовой до конца, без фанатизма. Фреон из блока распространяется по системе, манометр что-то покажет.
Потом открываем вентиль на жидкостной трубе - теперь вся система открыта и готова к работе.
А вот потом надо быстро-быстро открутить от сервисного порта переходник с синим шлангом - чтобы клапан успел закрыться раньше, чем фреон под давлением вылетит из трубы.
Но лучше было бы использовать переходник с вентилем - там специальная крутилка, которая нажимает на этот клапан: с ее помощью можно сначала освободить ниппель, потом уже спокойно откручивать гайку.

Останется подключить кабель к разьемам, и можно запускать…
Но в данном случае не всё так просто.
Начать с того, что обычный бытовой кондиционер не умеет холодить ниже 16 градусов. Не то, что "не может" - а просто не рассчитан.
И поэтому повнимательнее смотрим на разъемы внутреннего и внешнего блоков.
Специально был взят простейший on|off кондиционер: в нем нет плавной регулировки мощности, тут компрессор либо работает, либо не работает.
И на внутреннем и на внешнем блоке одинаковые наборы контактов для кабеля: 1, 2N, 3, 4 (и в комплекте "трассы" идет как раз 4-проводной кабель).

Можно снять верхнюю крышку внешнего блока и посмотреть, что куда идёт - или можно вместо внешнего блока подключить к проводу что-то типа неоновых лампочек и посмотреть куда и когда подается напряжение.
В данном конкретном случае, назначение контактов следующее:
2N - это 0, нулевой провод
1 - это 220В питания компрессора
3 - 220В для переключения клапана "холодить/греть" (кондиционер хоть и самый дешевый - но умеет греть тоже)
4 - 220В питания вентилятора внешнего блока
Соответственно, если подать 220В на 1 и 4 - кондиционер "холодит", если на 1,3 и 4 - "греет".
В нормальном случае за это отвечает внутренний блок: он отслеживает температуру в помещении, сравнивает ее с заданной, включает и выключает компрессор, клапан и кулер, в зависимости от настроек и режима работы.
Но он не умеет держать температуру ниже 16! Поэтому пришлось делать свой блок управления...
Вариант №1: термореле
Как уже говорилось, если соединить 1 и 4, и подать на них 220 (относительно 0) - включается сразу компрессор и кулер, кондиционер начинает холодить. Если выключить 220 - перестает. Можно отслеживать температуру, включать и выключать. Ну, а чтобы этим было удобнее управлять - поставить ESP8266, чтобы читала температуру с датчика DS1820 и включала реле.
Но выяснилось, что при определенных условиях (низкой температуре на улице, недавнем выключении) включается компрессор как-то странно, с грохотом, как будто клинит. А если постоит сильно подольше - включается нормально.
Но у нас же микроконтроллер, и можно повесить несколько датчиков, на входных и выходных трубках!
Выяснилось, что сразу после выключания компрессора температура в обоих трубках быстро растет, но в жидкостной быстрее и больше.
А значит, и давление в ней получается больше, чем в газовой - и компрессор при запуске бъется за то, чтобы его передавить.
Устранить это можно, если не выключать сразу кулер - температура тоже растет, но не так быстро и не так сильно отличается.
К тому же, как считается, между выключением и включением компрессора надо бы выдержать паузу минимум в три минуты, чтобы давление более-менее выровнялось, даже если термодатчик и говорит, что пора уже включать.
Вариант №2: умное термореле
Был добавлен, как сейчас принято говорить, "период охлаждения" 3 минуты: сразу после выключения компрессора кулер работает еще 3 минуты, и выключается потом.
А если в это время поступает команда на включение компрессора - она будет исполнена только после того как этот период закончится.
Соответственно, компрессор и кулер должны включаться разными реле, заодно добавлено третье, для клапана "обогрева", вдруг понадобится.
Стало значительно лучше, никакого грохота, нормальный старт компрессора.
Система держит заданную температуру в помещении управляя включением-выключением внешнего блока, независимо от внутреннего.
Но теперь возникла другая проблема:
Обычная домашняя техника работает через систему бесперебойного питания, поэтому незначительные проблемы с электричеством мы просто не замечаем, но кондиционер работает прямо от сети, и вот она-то, оказывается, довольно часто "моргает".
Оказалось, что внутренний блок при этом "засыпает", требуется пнуть его с пульта вручную - а вот компрессор работает, пытаясь охлаждать, пока внутренний блок "спит" и обдув не работает.
Значит, нужно его как-то будить.
Лезть в схему не хотелось, поэтому было добавлено IR-управление внутренним блоком.
Вариант №3: добавляем пульт управления
Как вообще работают эти пульты с инфракрасным управлением?
Сам пульт - что-то вроде специализированного микропроцессора, который моргает инфракрасным светодиодом. Светодиод в общем такой же, как в подсветках видеокамер, главное - правильно им моргать.
А вот приемник - сложнее: часто используется специальная микросхема-фотоприемник, настроенная на стандартную частоту модуляции 38 кГц, со встроенным усилителем - она выделяет сигнал среди шумов.
Можно конечно использовать и простой фотодиод - но тогда нужно строить систему усиления и фильтрации сигналов, поэтому чаще просто используют готовое, и тогда всё сводится к передаче последовательности битов кода.
Зачем нужен приемник, если речь идет об отправке команд? Просто для того, чтобы перехватить эти команды от родного пульта, и знать, что именно отправлять.
Пришлось порыться в коробке со сломанными девайсами, найти там плату с фотоприемником, подключить его по быстрому к плате ESP и попытаться поймать сигналы от пульта.

Сложность состояла в том, что в отличии от пультов от обычной бытовой техники, типа ТВ и DVD, у пультов кондиционеров протокол обмена сложнее: вместо отправки простого кода кнопки отправляется большой пакет данных о текущих настройках на пульте - режим, температура, режимы обдува и т.д.
Известная ардуиновская библиотека IRremote определяла лишь, что у пакета данных длина 97 или 98 бит, и всё.
К счастью, нашлась подходящая библиотека, поддерживающая именно такой протокол (хотя можно было бы просто отправлять дампы, скопированные с пульта): IRremoteESP8266.
Протокол определился как Neoclima, что позволило не просто повторять дампы от пульта, но и давать осмысленные команды.
Оставалось подключить к ESP излучающий ИК-диод, вынести его на проводе и расположить напротив внутреннего блока.
Теперь логика работы стала такой:
После подачи питания - "период охлаждения" (вдруг это "свет моргал"?): компрессор выключен, кулер работает, на внутренний блок - команда выключения.
После "периода охлаждения" - кулер выключается.
При включении "холода" - включаем компрессор и кулер, отправляем команду на включение внутреннего блока.
При выключении "холода" - выключаем компрессор, отправляем команду выключения на блок и снова начинается "период охлаждения", когда кулер работает.
... #define IR_SEND_PIN 15 void to_sleep(); void to_cooling(); void to_warming(); // IR control ============================================= #include <IRremoteESP8266.h> #include <IRsend.h> #include <ir_Neoclima.h> IRNeoclimaAc ac(IR_SEND_PIN); // ======================================================== / Controls =============================================== #define PIN_COMPRESSOR 13 #define PIN_VALVE 12 #define PIN_COOLER 14 // Modes #define M_SLEEP 0 #define M_COOLING 1 #define M_WARMING 2 #define M_WAIT 3 int state; int wanted; byte f_cooler; byte f_compressor; byte f_valve; unsigned long wait_timer = 0; #define WAITING_PERIOD 180000 // 3 minutes between change void CtlSetup(){ pinMode(PIN_COMPRESSOR,OUTPUT); pinMode(PIN_VALVE,OUTPUT); pinMode(PIN_COOLER,OUTPUT); state = M_COOLING; f_cooler = 0; f_compressor = 0; f_valve = 0; digitalWrite(PIN_COOLER, HIGH); to_sleep(); } void CtlLoop(){ if(state == M_WAIT && millis() > (wait_timer + WAITING_PERIOD)){ state = M_SLEEP; if(wanted == M_COOLING) { to_cooling(); } else if(wanted == M_WARMING) { to_warming(); } else { digitalWrite(PIN_COOLER, LOW); f_cooler = 0; } } // M_SLEEP - nothing // M_WAIT - waiting } void to_sleep(){ if(state != M_SLEEP && state != M_WAIT){ wait_timer = millis(); state = M_WAIT; wanted = M_SLEEP; } digitalWrite(PIN_COMPRESSOR, LOW); f_compressor = 0; digitalWrite(PIN_VALVE, LOW); f_valve = 0; ac.off(); ac.send(); } void to_cooling(){ if(state == M_SLEEP){ digitalWrite(PIN_VALVE, LOW); f_valve = 0; digitalWrite(PIN_COMPRESSOR, HIGH); f_compressor = 1; digitalWrite(PIN_COOLER, HIGH); f_cooler = 1; state = M_COOLING; ac.setPower(true); ac.setFan(kNeoclimaFanHigh); ac.setMode(kNeoclimaCool); ac.setTemp(16); ac.setSwingV(true); ac.setSwingH(true); ac.setIon(true); ac.setLight(false); ac.send(); }else{ wanted = M_COOLING; } } void to_warming(){ if(state == M_SLEEP){ digitalWrite(PIN_VALVE, HIGH); f_valve = 1; digitalWrite(PIN_COMPRESSOR, HIGH); f_compressor = 1; digitalWrite(PIN_COOLER, HIGH); f_cooler = 1; state = M_WARMING; ac.setPower(true); ac.setFan(kNeoclimaFanHigh); ac.setMode(kNeoclimaHeat); ac.setTemp(16); ac.setSwingV(true); ac.setSwingH(true); ac.setIon(true); ac.setLight(false); ac.send(); }else{ wanted = M_WARMING; } } // ======================================================== ... // MQTT processing void msg_callback(char* topic, byte* payload, unsigned int length) { String str_topic = topic; ... if(!strncmp((char *)payload, "sleep", length)){ to_sleep(); } if(!strncmp((char *)payload, "cooling", length)){ to_cooling(); } if(!strncmp((char *)payload, "warming", length)){ to_warming(); } ... } void setup() { ac.begin(); WifiSetup(); MqttSetup(); TimeSetup(); CtlSetup(); } void loop() { WifiLoop(); MqttLoop(); CtlLoop(); ... delay(100); }
Схема включения:

Разьем J1 - питание 220В и подключение внешнего блока, J2 - датчики DS1820, J3 - ИК-светодиод.
Кстати, про "поддельные" датчики DS1820
Не раз приходилось слышать про то, что сейчас купить настоящие DS1820 можно только в избранных магазина и дорого.
А всё остальное - китайские подделки, которые не работают.
Это и правда, и неправда одновременно.
Дело вот в чем: по самой идее 1-wire устройств, к которым относятся DS1820, все устройства подключаются к двухпроводной шине, то есть одна линия - "земля", и одна линия - данные, она же - питание (поэтому и 1-wire).
При этом питание для устройств передается за счет того, что на этой линии в покое напряжение 5В, а вот данные передаются за счет прижимания ее к "земле": в каждом чипе есть специальный транзистор который коротит сигнальную линию на "землю", передавая код данных.
В момент передачи данных питание этого чипа идет за счет внутреннего конденсатора, который заряжался пока линия была в покое - хотя в принципе у чипа есть третья нога, на которую можно просто подать постоянные 5В.
Это позволяло строить довольно длинные сети 1-wire, подключая к ним много датчиков, экономя на прокладке проводов.
Датчики оказались удобны и востребованы, но сейчас в подавляющем числе случаев они подключаются как раз по трехпроводной схеме, с питанием - да вот взять хотя бы все эти примеры "подключаем DS1820 к ардуино", не говоря уже о всяких термореле с единственным датчиком.
И вот тут видимо сыграла роль экономия: добавить несколько лишних p-n переходов на кристалле несложно, но добавить конденсатор - это уже отдельный дополнительный технологический процесс.
Производство поддельных функционально аналогичных чипов успешно освоили, но раз уж всё равно почти везде используется трехпроводная схема - можно же удешевить производство, выпустив чипы без встроенного конденсатора. И упростили.
В результате такие чипы не работают в двухпроводной схеме.
Но это можно исправить, добавив внешний конденсатор и диод: при этом линию связи можно делать двухпроводной, а конденсатор добавлять только рядом с датчиками, одним или несколькими если они рядом.
И всё будет работать.

Для реле и ESP сделана плата

Поскольку изделие штучное и ждать не хотелось - плату сделал по фоторезистивной технологии.
К слову, вот чем хорош SMD-монтаж - нет той возни со сверлением кучи отверстий под каждый элемент. Надо добавить резисторов или транзисторов - пожалуйста, никаких проблем, это просто картинка на бумаге, а бумага всё стерпит.
Жаль, что силовые реле этого пока не умеют.
Всё закрыто в коробку и убрано с глаз подальше.
Теперь оно работает само, а в "холодильнике" - 7-8 градусов.
Ну и конечно, этим можно управлять через MQTT.

Вон та синяя линия - это температура помещения, сиреневая вверху - уличная, красная - жидкостная труба, зеленая - газовая.
Хорошо видно как при отключении компрессора температура трубок сразу прыгает вверх.
VT100
Обмотки реле надо зашунтировать (обратно включенными диодами, например) от ЭДС самоиндукции. Транзисторы отбладарят длительной работой.
JBFW Автор
Вот да, по всем букварям так, но...
Аналогичное - работает уже лет так, с 2013.