Утро, лето, жара. Я просыпаюсь в 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)
Adjuster2004
22.05.2022 16:43+15У многих кондиционеров встроена функция вкл /выкл в нужное время.
Статья напомнила случай, когда друг напротив друга стояли 2 компа.
У одного из них дисковод был выставлен на уровне кнопки включения второго, чтобы можно было удаленно перегрузить по кнопке.
Astroscope
22.05.2022 20:36+4У многих кондиционеров встроена функция вкл /выкл в нужное время.
Не припомню ни одного бытового настенного сплита без такой функции за последние лет двадцать или более.
Yuriy_krd
23.05.2022 08:22У многих кондиционеров встроена функция вкл /выкл в нужное время.
У достаточно большого количества — это таймер, т.е. единоразовое действие, и приходится включать данную функцию каждый день. К тому же, опять-таки, идет расчет по времени, т.е. нельзя включить кондюк, если ты приедешь раньше (помещение не успеет нагреться/охладиться) или задержишься (будет излишний перерасход электроэнергии).
akakoychenko
22.05.2022 17:10+8Почему просто не договориться, что последний уходящий из офиса должен включить кондиционер с вечера? Вижу проблему только в избыточном энергопотреблении, но, по факту, ночью температура на улице не будет сильно выше выставленной, поэтому, и поддержка нужной температуры требует ничтожно мало энергии.
pawellrus
22.05.2022 18:55+5А почему бы не установить пластиковый экран на кондиционер, который будет перенаправлять воздух из кондея так, чтобы он не дул ни на кого, а в потолок.
Dolios
23.05.2022 09:24+5Все равно половина будет говорить, что им дует. Даже если незаметно выключить кондиционер, останутся те, кому дует..
SuhoffGV
23.05.2022 16:31Да что уж там. Если установить кондиционер то соседка снизу сразу будет жаловаться что "Ваш внешний блок ужасно мне гудит", несмотря на то что кондей с момента установки ни разу не включали.
ShadowMaster
22.05.2022 19:18+4А зачем все эти приблуды? По закону если в офисе больше 28 градусов, то работать в нем нельзя. Решается через докладные записки и последующую жалобу в рострудинспекцию. Нормальный инверторный кондиционер спокойно поддерживает нужную температуру без лишнего шума и сильных потоков воздуха. Я дома поставил такой, в жаркий сезон включаю, выставляю 27 градусов, далее он работает относительно шумно 10-15 минут, а потом тихо шуршит месяц, выдавая слабый поток чуть холодного воздуха. Выключаю когда жара спадает, даже никаких ночных режимов не нужно.
Astroscope
22.05.2022 20:44+3Нормальный инверторный кондиционер спокойно поддерживает нужную температуру без лишнего шума и сильных потоков воздуха.
Не инверторный тоже. Только стоит дешевле и потенциально менее вероятно будет источником радиопомех.
yoog
22.05.2022 19:51+2у 90% кондиционеров на корпусе есть кнопка включения (включает последний использованный режим) мне кажется вполне бы хватило есп01 и оптопары
Astroscope
22.05.2022 20:42+14Моя убежденность в правильности оценки количества идиотов - 95%, базируется на том, что 95% пользователей бытовых кондиционеров устанавливают температуру как можно ниже для того, чтобы "скорее охладить", вместо того, чтобы установить комфортную температуру.
Rumidu
22.05.2022 22:28+10Читаю " В квартире 27, на улице 21. ", думаю - парень из Нью-Йорка, номер дома пропустил.
sergej_pipets
22.05.2022 23:41+2Чего только не делают, чтобы инструкцию к оборудованию не читать. А можно было просто выставить время включения и время выключения. Или даже вообще не выключать - расход электроэнергии сильно не увеличится, но уменьшатся суточные колебания температуры.
RTFM13
24.05.2022 19:31+1На счет потребления энергии вообще не однозначно. Если ночью энергия существенно дешевле, то возможно имеет экономический смысл охладить комнату (не только воздух в ней но и все предметы и строительные конструкции) заранее по более дешевому тарифу и с меньшим перепадом температуры улица-помещение.
sergej_pipets
24.05.2022 21:12Верно. И ещё из вентиляции и кондиционирования: некоторые вентиляционные контроллеры имеют встроенную процедуру "ночного проветривания" - поскольку ночью обычно заметно прохладнее, чем днём, то вентиляция включается на полную мощность, но без машинного охлаждения (контролируя уличную температуру, чтобы всё-таки не нагревать помещения).
NurKenKaz
23.05.2022 07:23+1Директор пообещал купить новый кондиционер.
Удаленное управление кондиционером
мобильные приложения
Я бы на вашем с директором месте оставил старый.
Если у кондиционера нет удалённого управления (или, как в вашем случае теперь, возможности этого удалённого управления ограничены мехаенически, и эти ограничения контролируете вы) — то вы хотя бы можете быть уверены, что производитель не отключит его удалённо, потому что. И не сломает до полной неремонтопригодности. И не попытается каким-то образом повредить окружающие конструкции здания заодно, потому что «как оказалось, новая версия библиотеки не совместима, но мы всё равно ни за что не отвечаем, потому что эта модель официально больше не поддерживается».
nronnie
23.05.2022 13:31Весной прошлого года купил себе "Eleсtrolux" с заявленным Wi-Fi. Оказалось, что модуль Wi-Fi к нему покупать надо отдельно и в России их в продаже вообще нет. Мне он так-то совсем не нужен, но если кому это важно, то имейте в виду и выясняйте в магазине заранее.
caes
24.05.2022 18:29Я себе так обогреватель купил Electrolux. Сдал обратно, тк модуля нет, а заявлен, как умный.
xSVPx
23.05.2022 20:22Как решается вопрос того, что включение и выключение часто одной кнопкой ?
И если пропадет скажем электричество, то кондей начнет работать наоборот "когда не надо".
malferov
23.05.2022 23:10+2Решение: включить кондиционер в начале жаркого периода и выключить в конце.
Почему-то морозильная камера, винный шкаф или холодильник, которые включены круглый год, никого не парят.
Надо ли пояснять, что поддерживать комфортный уровень температуры воздуха кондиционеру проще в течение всего лета, чем каждый день работать в форсированном режиме, понижая температуру в нагретом до предела помещении.
Youri2021
25.05.2022 10:45В середине 90-х один знакомый принёс самодельные оптроны из светодиодов, фоторезисторов и намотанных на карандаше самодельных картонных трубочек из бумаги. Хотел сделать интерфейс какой-то для компьютера.
Muzzy0
25.05.2022 11:06Проблема решена? Отлично :)
А вот симбиоз решений — дикий. Одновременно из пушки по воробьям и костыли с велосипедами :)
Ничуть не сложнее было бы взять ESP8266/32. На борту уже есть WiFi, для эмуляции пульта есть готовые библиотеки. В результате, у вас бы получился пульт/таймер, которым ещё и удалённо управлять можно. На всё-про всё вы бы потратили меньше времени, чем на одну только механику.
kornerz
Вместо дикой механики можно было ограничиться ИК-светодиодом и софтовой реализацией пульта (Например https://github.com/Arduino-IRremote/Arduino-IRremote, но под другие платформы тоже есть)
Joka
либо купить broadlink univeral control или его аналог. легко программируется на что угодно.
Lyle
BroadLink RM mini 3 - прям вообще ненарадуюсь. Может быть его потенциал не раскрыт, да и умного дома у меня нет. Управляется с телефона через приложение, минут за 15-20 до дома (обычно это вечная пробка на развязке или парковка продуктового магазина) включаю - и прихожу в приятную прохладу.