Утро, лето, жара. Я просыпаюсь в 6:00 весь в поту. В квартире 27, на улице 21. Но по дороге на работу солнце возьмет свое, а наш офис находится на солнечной стороне. Каждое утро я вхожу в душное помещение, открываю окна, в надежде хоть немного его проветрить, включаю кондиционер. Как вы понимаете, всем дует в спину и включить кондиционер на полную не получится. Температура немного стабилизируется к обеду. С 14:00 до 17:00 можно жить и работать, а дальше все повторяется сначала.

Удаленное управление кондиционером – дело не новое, есть Smart технологии и мобильные приложения. Но случается, что кондиционер старенький, не smart, а заранее его запустить и прийти утром в прохладное помещение желание есть. Потому и было принято решение – автоматизировать функцию включения при помощи сервопривода и механического нажатия на кнопку.

Идею я позаимствовал у коллеги. Был срочный заказ на печать в типографии, ставить человека в ночную смену накладно. Требовалось нажимать три разные кнопки, что было не по силу компьютеру. Та история закончилась удаленным управлением сервоприводами через Arduino.

Я же с Arduino не работал, потому искал что-нибудь без внутрисхемного программирования. Купил у местных умельцев плату RoboIntellect controller 001 на которой распаяна микросхема PCA9685 и CH341T. Значит, связка USB компьютера с ШИМ контроллером уже есть. В дополнение нам понадобятся двусторонний скотч, малярный скотч, магнитик для упора, стёрка и нитка.

Схема выглядит приблизительно так. Через удаленный рабочий стол заходим на компьютер, к которому подключена наша плата. На первом канале ШИМ висит сервопривод. Через «умную» систему рычагов нажимаем на кнопку пульта. Управляет всем небольшой скрипт на Python.

 

Насколько я понял, плату RoboIntellect применяют в конструкторе, для которого написана библиотека RISDK. Её и будем использовать. После инициализации и создания компонентов нужна только одна функция RI_SDK_exec_ServoDrive_TurnByDutyCycle для вращения оси сервопривода. Вызываем функцию два раза: нажатие кнопки и возврат в начальное положение.

import sys
from ctypes import *

# Подключаем внешнюю библиотеку для работы с SDK
lib = cdll.LoadLibrary("./librisdk.dll")

# Указываем типы аргументов для функций библиотеки RI_SDK
lib.RI_SDK_InitSDK.argtypes = [c_int, c_char_p]
lib.RI_SDK_CreateModelComponent.argtypes = [c_char_p, c_char_p, c_char_p, POINTER(c_int), c_char_p]
lib.RI_SDK_LinkPWMToController.argtypes = [c_int, c_int, c_uint8, c_char_p]
lib.RI_SDK_LinkServodriveToController.argtypes = [c_int, c_int, c_int, c_char_p]
lib.RI_SDK_DestroySDK.argtypes = [c_bool, c_char_p]
lib.RI_SDK_exec_ServoDrive_Turn.argtypes = [c_int, c_int, c_int, c_bool, c_char_p]

def main():
    errTextC = create_string_buffer(1000)  # Текст ошибки. C type: char*
    i2c = c_int()
    pwm = c_int()
    servo = c_int()

    # Инициализация библиотеки RI SDK с уровнем логирования 3
    errCode = lib.RI_SDK_InitSDK(3, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

    # Создание компонента i2c адаптера модели ch341
    errCode = lib.RI_SDK_CreateModelComponent("connector".encode(), "i2c_adapter".encode(), "ch341".encode(), i2c,
                                              errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

    print("i2c: ", i2c.value)

    # Создание компонента ШИМ модели pca9685
    errCode = lib.RI_SDK_CreateModelComponent("connector".encode(), "pwm".encode(), "pca9685".encode(), pwm, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

    print("pwm: ", pwm.value)

    # Создание компонента сервопривода модели mg90s
    errCode = lib.RI_SDK_CreateModelComponent("executor".encode(), "servodrive".encode(), "mg90s".encode(), servo,
                                              errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

    print("servo: ", servo.value)

    # Связывание i2c с ШИМ
    errCode = lib.RI_SDK_LinkPWMToController(pwm, i2c, 0x40, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

    # Связывание ШИМ с сервоприводом
    errCode = lib.RI_SDK_LinkServodriveToController(servo, pwm, 0, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

    # Моментальный поворот сервопривода к значению угла, соответствующему 500 шагам
    # Диапазон углов 554 - 75
    # Нажатие кнопки
    errCode = lib.RI_SDK_exec_ServoDrive_TurnByDutyCycle(servo, 180, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

    # Возврат в начальную позицию
    errCode = lib.RI_SDK_exec_ServoDrive_TurnByDutyCycle(servo, 80, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

    # Удаление библиотеки со всеми компонентами
    errCode = lib.RI_SDK_DestroySDK(True, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

    print("Success")

main()

 

Сперва все казалось легко и просто. При помощи скотча крепим сервопривод, запускаем скрипт и проблема решена. Но на деле даже в таком развлечении нашлись подводные камни. Движение пальца поступательное, а оси сервопривода - вращательное. Если просто толкать кнопку рычагом, то точка прилагаемого усилия меняется и пульт съезжает набок. Беспрерывная чреда экспериментов с учетом мнения бесконечного числа технических специалистов офиса позволили найти рабочее решение.

Размещаем пульт на столе кнопкой (упором вниз), крепим один конец двусторонним скотчем. С другого конца тянем пульт при помощи нитки. Происходит нажатие.

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

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


  1. kornerz
    22.05.2022 16:14
    +27

    Вместо дикой механики можно было ограничиться ИК-светодиодом и софтовой реализацией пульта (Например https://github.com/Arduino-IRremote/Arduino-IRremote, но под другие платформы тоже есть)


    1. Joka
      22.05.2022 16:43
      +5

      либо купить broadlink univeral control или его аналог. легко программируется на что угодно.


      1. Lyle
        23.05.2022 07:20
        +2

        BroadLink RM mini 3 - прям вообще ненарадуюсь. Может быть его потенциал не раскрыт, да и умного дома у меня нет. Управляется с телефона через приложение, минут за 15-20 до дома (обычно это вечная пробка на развязке или парковка продуктового магазина) включаю - и прихожу в приятную прохладу.


  1. Adjuster2004
    22.05.2022 16:43
    +15

    У многих кондиционеров встроена функция вкл /выкл в нужное время.

    Статья напомнила случай, когда друг напротив друга стояли 2 компа.

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


    1. Astroscope
      22.05.2022 20:36
      +4

      У многих кондиционеров встроена функция вкл /выкл в нужное время.

      Не припомню ни одного бытового настенного сплита без такой функции за последние лет двадцать или более.


    1. Yuriy_krd
      23.05.2022 08:22

      У многих кондиционеров встроена функция вкл /выкл в нужное время.

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


  1. akakoychenko
    22.05.2022 17:10
    +8

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


  1. pawellrus
    22.05.2022 18:55
    +5

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


    1. Dolios
      23.05.2022 09:24
      +5

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


      1. SuhoffGV
        23.05.2022 16:31

        Да что уж там. Если установить кондиционер то соседка снизу сразу будет жаловаться что "Ваш внешний блок ужасно мне гудит", несмотря на то что кондей с момента установки ни разу не включали.


  1. ShadowMaster
    22.05.2022 19:18
    +4

    А зачем все эти приблуды? По закону если в офисе больше 28 градусов, то работать в нем нельзя. Решается через докладные записки и последующую жалобу в рострудинспекцию. Нормальный инверторный кондиционер спокойно поддерживает нужную температуру без лишнего шума и сильных потоков воздуха. Я дома поставил такой, в жаркий сезон включаю, выставляю 27 градусов, далее он работает относительно шумно 10-15 минут, а потом тихо шуршит месяц, выдавая слабый поток чуть холодного воздуха. Выключаю когда жара спадает, даже никаких ночных режимов не нужно.


    1. Astroscope
      22.05.2022 20:44
      +3

      Нормальный инверторный кондиционер спокойно поддерживает нужную температуру без лишнего шума и сильных потоков воздуха.

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


  1. yoog
    22.05.2022 19:51
    +2

    у 90% кондиционеров на корпусе есть кнопка включения (включает последний использованный режим) мне кажется вполне бы хватило есп01 и оптопары


  1. Astroscope
    22.05.2022 20:42
    +14

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


    1. gleb_l
      22.05.2022 22:37
      +5

      Да-да - берут на себя роль ШИМ-ключа с пультом в руках и интегрирующей цепочки на массе своего тела ;)


      1. RTFM13
        24.05.2022 19:26
        +1

        Потом у "ШИМа" замерзает мозг, появляется задержка, затем перерегулирование и система идёт в разнос. )


  1. Rumidu
    22.05.2022 22:28
    +10

    Читаю " В квартире 27, на улице 21. ", думаю - парень из Нью-Йорка, номер дома пропустил.


  1. sergej_pipets
    22.05.2022 23:41
    +2

    Чего только не делают, чтобы инструкцию к оборудованию не читать. А можно было просто выставить время включения и время выключения. Или даже вообще не выключать - расход электроэнергии сильно не увеличится, но уменьшатся суточные колебания температуры.


    1. RTFM13
      24.05.2022 19:31
      +1

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


      1. sergej_pipets
        24.05.2022 21:12

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


  1. NurKenKaz
    23.05.2022 07:23
    +1

    Директор пообещал купить новый кондиционер.
    Удаленное управление кондиционером
    мобильные приложения
    Я бы на вашем с директором месте оставил старый.

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


    1. nronnie
      23.05.2022 13:46

      Бункер с "клеткой Фарадея" себе уже построил? :D


  1. nronnie
    23.05.2022 13:31

    Весной прошлого года купил себе "Eleсtrolux" с заявленным Wi-Fi. Оказалось, что модуль Wi-Fi к нему покупать надо отдельно и в России их в продаже вообще нет. Мне он так-то совсем не нужен, но если кому это важно, то имейте в виду и выясняйте в магазине заранее.


    1. caes
      24.05.2022 18:29

      Я себе так обогреватель купил Electrolux. Сдал обратно, тк модуля нет, а заявлен, как умный.


  1. xSVPx
    23.05.2022 20:22

    Как решается вопрос того, что включение и выключение часто одной кнопкой ?

    И если пропадет скажем электричество, то кондей начнет работать наоборот "когда не надо".


  1. malferov
    23.05.2022 23:10
    +2

    Решение: включить кондиционер в начале жаркого периода и выключить в конце.

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

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


  1. morgoved
    24.05.2022 16:28

    Я бы на месте автора сменил бы работу))


  1. Youri2021
    25.05.2022 10:45

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


  1. Muzzy0
    25.05.2022 11:06

    Проблема решена? Отлично :)
    А вот симбиоз решений — дикий. Одновременно из пушки по воробьям и костыли с велосипедами :)

    Ничуть не сложнее было бы взять ESP8266/32. На борту уже есть WiFi, для эмуляции пульта есть готовые библиотеки. В результате, у вас бы получился пульт/таймер, которым ещё и удалённо управлять можно. На всё-про всё вы бы потратили меньше времени, чем на одну только механику.