Началась эта история еще осенью, когда мне вдруг потребовалось небольшое помещение в доме, в котором поддерживалась бы стабильная температура +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.

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