ИК-выключатель мобильного кондиционера за 20 минут

negavoid
Offline
Зарегистрирован: 09.07.2016

Наступает лето, мобильный кондиционер выезжает из кладовки. Давайте немного вмешаемся в заводскую программу и попробуем порулить им с помощью ардуино, который будет эмулировать ИК-пульт.

negavoid
Offline
Зарегистрирован: 09.07.2016

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

Для этого потребуется собрать эмулятор пульта на 2 команды - вкл и выкл. Начертим схему в пейнте и соберём её:

Ик-фотодиод и датчик температуры bmp180 у меня были, а ик-светодиод я выпаял из ненужного игрушечного пульта. Определить анод и катод у выпаянного диода легко - внутри пластмассовой колбы диода один электрод длинный, второй короткий, анод тот, что короткий.

Устанавливаем в IDE библиотеку IRRemote: Sketch - Include library - Manage libraries - пишем в поиск irremote - Install.

Тут первый нюанс - в IDE есть встроенная библиотека RobotIRRemote, которая конфликтует названиями с этой. Моя IDE сообщила мне об этом, и сама разрешила эту проблему - сказала, что будет использовать irremote вместо robota, в вашей IDE может быть не так, может понадобиться удалить родную библиотеку.

Открываем File - Examples - IRRemote - IRRecvDumpV2. Заливаем скетч в ардуину, открываем Serial Monitor. Жмём кнопку power на пульте - и нюанс номер два - библиотека сообщает, что принятая команда длинновата и не влезает в буфер.

>> IR code too long. Edit IRremoteInt.h and increase RAWBUF

Так я и сделал, прописав размер массива в 200 вместо умолчальных 100. Теперь пример принимает сырую команду полностью:

{8650, 4400, 400, .... , 500}

Скопируем строку команды, например, в блокнот. Мне были нужны только вкл и выкл, но в процесссе выяснилось, что команда power_off на пульте есть, а вот power_on, как таковой, нет - пульт запоминает последнюю установленную температуру и шлёт что-то типа power_on25, power_on22, power_on18 и тп. Ну что же, сохраним power_on22, чтобы уж точно охлаждало. Ну, и power_off.

Теперь создаём новый скетч и вставляем в соответствующие места сохранённые команды.

#include <Adafruit_BMP085.h>
#include <IRremote.h>

Adafruit_BMP085 bmp;
IRsend irsend;

#define khz 38
#define DESIRED_TEMP 26.0

unsigned long LOCK_TIME_MS = 180000;
unsigned long WAIT_TIME_MS = 30000;

unsigned int irSignalOn22[] = {8650, 4400, 400, 650, 450, ..., 650, 500};
unsigned int irSignalOff[]  = {8700, 4400, 450, 650, 450, ..., 1700, 550};

bool need_lock = false;
unsigned long unlock_time = millis();

void setup()
{
  Serial.begin(9600);

  Wire.begin();
  bmp.begin( BMP085_ULTRAHIGHRES );
  delay(1000);
}

void loop() {
  float temperature = bmp.readTemperature();

  if ( check_lock() )
  {
    Serial.println(F("compressor lock active"));
    delay(WAIT_TIME_MS);
    return;
  }

  if (temperature < DESIRED_TEMP)
  {
    turnOff();
  }

  if (temperature > DESIRED_TEMP + 1)
  {
    turnOn();
  }

  delay(WAIT_TIME_MS);
}

bool check_lock()
{
  if ( !need_lock )
  {
    return false;
  }

  if ( millis() - unlock_time > LOCK_TIME_MS )
  {
    need_lock = false;
    return false;
  }

  return true;
}

void set_lock()
{
  unlock_time = millis();
  need_lock = true;
}

void turnOn()
{
  irsend.sendRaw(irSignalOn22, sizeof(irSignalOn22) / sizeof(irSignalOn22[0]), khz);
  set_lock();
}

void turnOff()
{
  irsend.sendRaw(irSignalOff, sizeof(irSignalOff) / sizeof(irSignalOff[0]), khz);
  set_lock();
}

Прошиваем ардуину, ставим в какое-нибудь место, где прямо на неё не дует, включаем, и... ничего :) Для ик-светодиода важен угол направления на датчик, а мой диод смотрел прямо в потолок. Поворачиваем всю конструкцию на бок, так, чтобы диод смотрел в сторону кондея, и вуаля, теперь всё работает. И последний нюанс - по мануалу, компрессору после включения/выключения нужно дать поработать/отдохнуть не менее трёх минут перед следующим переключением - за это отвечают set_lock() и check_lock() в коде. Возможно, кондиционер умнее меня и сам включит-выключит защиту, но лучше перебдеть, чем недобдеть.

После того, как всё отладится и заработает, ик-фотодиод для чтения с пульта можно отсоединить от получившегося агрегата.

Вышло, как я и хотел - комната охлаждается до 26 градусов, кондей отключается и ждёт потепления до 27.1 (ну или сколько зададите в desired), затем включается, до тех пор, пока не охладит обратно. Дует где-то 3-5 минут, стоит молчит 10-15.

b707
Offline
Зарегистрирован: 26.05.2017

идея неплохая.

Код интересен тем. что он весь на делеях. Даже процедура check_lock(). которая на первый взгляд, написана с импользованием миллис - на самом деле представляет из себя делей :)

negavoid
Offline
Зарегистрирован: 09.07.2016

Delay() тут в самый раз - быстро, дёшево, сердито, и новичкам понятно :)

b707
Offline
Зарегистрирован: 26.05.2017

negavoid пишет:

Delay() тут в самый раз - быстро, дёшево, сердито, и новичкам понятно :)

ну а зачем тогда миллис, если внутри тот же делей? используйте везде одинаково - код будет проще и понятнее.

negavoid
Offline
Зарегистрирован: 09.07.2016

А можно я в этом проекте не буду этого делать? :) Даже больше, в этом месте ни delay, ни println не нужны, а-а, нее, делей нужен, bmp надо какое-то время подождать перед следующим считыванием, а то он считает чушь, check_lock переключится и чушь уйдёт дальше сравниваться.

sva_khv
Offline
Зарегистрирован: 19.12.2016

Осторожнее с такими экспериментами. Есть подводные камни при частом ВКЛ/ВЫКЛ кондиционера. В зависимости от реализации может быть такое:

Просто при остановке компресора (питание не выкл) давление в системе не выравнивается (между компрессором и испарителем) и при следующем пуске компрессора он просто дожимает давление  до рабочего. А при выключении кондиционера - давление в системе выравнивается и при следующем пуске компрессор начинает работать при низком давлении внутри самого компресора и ему это не очень полезно. Одно дело вы кондей 2-3 раза за день вкл/выкл и совсем другое -  3-5 раз в час.

Не претендую на истину, но осторожность не помешает.

Как рекомендация (все равно будете делать :-)  -  делайте поменьше циклов вкл/выкл (периоды подлинее) . Всеж дольше проработает.

negavoid
Offline
Зарегистрирован: 09.07.2016

Да, я тоже читал про такое, плюс, неспроста же на заводе сделали именно такой режим работы, "неотключающийся"; в другом конце комнаты слышно приемлемо, и даже заснуть можно, но рядом с ним слишком уж громко. Может, эти 3 минуты как раз и нужны на выравнивание давления. Ну, в худшем случае получится сокращение ресурса компрессора раз этак в 10, то есть с 5-10 лет службы до всего одного-двух.

Можно разнести температуры посильнее, например, 25-28, тогда будет 1-2 цикла в час.

Bront
Offline
Зарегистрирован: 05.04.2016

можно вообще так сделать

sva_khv
Offline
Зарегистрирован: 19.12.2016

Bront пишет:

можно вообще так сделать

Я так понимаю в ванночку воду наливают?  :-)

Хорошо если климат сухой. А у нас +30 и влажность 90-100% - тема рабоать не будет.

sva_khv
Offline
Зарегистрирован: 19.12.2016

negavoid пишет:

Можно разнести температуры посильнее, например, 25-28, тогда будет 1-2 цикла в час.

Верной дорогой идете товарищи!  :-)))

negavoid
Offline
Зарегистрирован: 09.07.2016

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

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Переезжайте к нам, страдать от жары не будете - сегодня утра снег выпал.

evgta
Offline
Зарегистрирован: 02.09.2016

странный у Вас какой-то кондей, у меня блочный напольник, он выключается при достижении заданной температуры, и потом его не включить минут 5 (тоже самое если вручную отключал), так что видать защиты есть, и тоже сволочь гудит как тепловоз((

хочу все сплиттер инверторный поставить, но что-то руки не особо доходят, да и не очень у нас в ЛО это актуально.

negavoid
Offline
Зарегистрирован: 09.07.2016

evgta

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

Сплит - он сплит, мне его вешать над тротуаром не хочется - раз, чистить его альпинистами - два, волосяной ком в горле от пересушенного тысячекратно прогнанного воздуха - три, у меня даже в гостиницах от промышленного кондея на всё здание комок образуется противный, фу :), приходится натыкивать баланс между прохладой и комком ))

Но если хотите сплит, то чего это в ЛО-то неактуально-то, в Выборге вон вообще эпидемия спутниковых антенн и наружных блоков кондеев, в Гатчине, Пушкине, Колпино видел и немало, в Кронштадте был на 9 мая - видел, в Ульяновке вот был - висят, родимые, внешние блоки.

evgta
Offline
Зарегистрирован: 02.09.2016

В Выборге Сухова 18 по антеннам вне конкуренции :). ну я внешний блок хочу на балконе поставить и ниже уровня перил, что бы невидно было, да, и стеклопакеты у меня точно в размер родных рам.

по пересушенному воздуху- ведь можно стеклопакет слегка приоткрыть.

negavoid
Offline
Зарегистрирован: 09.07.2016

Специально глянул на яндекс панорамах, тоже хватает, но не, это не тот дом, что я имел в виду, есть ещё один, бело-красный, что ли, или может тоже красный, и улица на холм что ли поднимается, не ровная была вроде, давненько я этот дом видел, так там мне показалось вообще, что на каждую квартиру по две антенны :) У меня теперь с друзьями даже развлечение есть, мы когда приезжаем в Выборг, считаем антенны, если меньше 20-30 на дом, то это вообще не, не Выборгский дом, не любители тв здесь живут :) Интересно, почему так сложилось, никто мне пока не объяснил, друзей из Выборга у меня нет :) И кондеев хватает по стенам :)

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

evgta
Offline
Зарегистрирован: 02.09.2016

относительно зажиточный город в свое время, поздний приход цифрового кабельного(цифра года 4 назад появилась, а на аналоге качество было отстой и вроде 30-40 каналов было), а сейчас лень наверное снять, а может 150 р за 100+ каналов кабельного жаба душит, наверное так.

как вариант, сплит + увлажнитель модный(паровой), или кирпич в ванночке c водой с вентиляторами :-)

negavoid
Offline
Зарегистрирован: 09.07.2016

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

Ну, я уж с мобильным, пока буду так )) 

evgta
Offline
Зарегистрирован: 02.09.2016

лапперанты, там стоит 50КВт передатчикю, что за ништяки? да и мне 11 было когда союз всё

negavoid
Offline
Зарегистрирован: 09.07.2016

Как какие, джинсы, свитера, жвачку, finlandia :) Мне было почти столько же, но почему-то вот такое запомнилось :)

 

negavoid
Offline
Зарегистрирован: 09.07.2016

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

Сделал рабочий прототип, решающий этот вопрос, выглядит интеграция этого дела по-франкенштейнски:

1. Периодически получаю на большом брате картинку с веб-камеры, камеру временно вытянул на usb-удлинителе и направил на ту часть комнаты, куда прибегает кот, в другой пусть сидит, там не дует:

@echo off
ffmpeg -f dshow -i video="Logitech HD Webcam C270" -vframes 1 -y image.jpg

2. Далее передаю картинку на распознавание в нейросеть, сохраняю вывод с распознанными объектами в файл:

python yolo.py image.jpg > detected.txt

3. Мелким скриптиком делаю парсинг файла detected.txt, если нахожу там "cat", то можно слать в com-порт нолик, мол, ахтунг, замораживаем животинку.

$detected_content = file_get_contents("detected.txt");
if ( stristr( $detected_content, "cat" ) !== FALSE )
{
    sendStringToComPort( 17, "0" );    // cat detected :)
}

4. Слегка подправленная программа убердевайса принимает нолик и отдаёт команду на безусловное отключение.

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

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Чего только люди не наворотят, чтобы не использовать детектор движения...

negavoid
Offline
Зарегистрирован: 09.07.2016

Двадцать минут навороты заняли, в соответствии с названием темы :) У меня дольше бы ушло на доставание и прикручивание-припаивание pir-датчика, да и на людей-то кондей выключаться по моей идее не должен.

evgta
Offline
Зарегистрирован: 02.09.2016

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

negavoid
Offline
Зарегистрирован: 09.07.2016

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

b707
Offline
Зарегистрирован: 26.05.2017

negavoid пишет:

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

вот ты мать-тереза прям :)

Наш котик имеет ласковое прозвизе "Кабыздох" и в соответввии с этим я б его от сквозняков защищать не стал :)

negavoid
Offline
Зарегистрирован: 09.07.2016

Каждому своё :)

sva_khv
Offline
Зарегистрирован: 19.12.2016

negavoid - наш человек!

Вместо того чтобы направить холодный воздух в разные стороны (да хоть куском картонки) - делаем электронные устройства (при этом лишая котейтку прохлады!) - основной стимул при этом - унять чесанье рук и мозги развивать!  Молодец, так держать! :-)

Я вот делал жене биосветильник на био-светодиодах включаемый по таймеру. Вместо готового светильника и недельного таймера (они есть у меня) накрутил на ардуино - светодиоды включаются плавно (ШИМ),  часы/таймер, экран 5110, фоторезистор для отключкения если хватает естественного освещения. Есть выбор разных программ включения. Две трети лишнее - зато поразвлекался!