Домашняя автоматизация.

Накопил немного информации с инета по схемотехнике, контроллерам, различным примерам. Как подтверждение моему небольшому развивающемуся проекту, решил написать сею статью…
Итак имеем: роутер dir-320( с dd-wrt, процесс установки описан в предыдущей статье про dir-320 + C), контроллер ATmega8535, небольшая схема управления на оптодрайвере, обьект управления ( настольная лампа, усилитель звуковой, домашний водонагреватель ), немного проводов, пОяльник, своб. время.
Что хотелось бы получить: программное управление питанием обьектов, питающихся от сети ~220 В.
Собственно управление объектом производится следующим образом:
Мобильный телефон->мобильный браузер->wifi(мобильный)->wifi(роутера dir-320)-> установленный lightpd->обработчик на perl->uart(роутера)->uart(контроллера mega8535)->управляющий сигнал(+5в контроллера)->управляющий сигнал(+5в оптодрайвера)-> управляемый сигнал(~220в оптодрайвера)->объект управления.
В данной схеме можно заменить «Мобильный телефон->мобильный браузер->wifi(мобильный)->» на ноутбук, рабочий комп и тп.
Также имеется возможность управления через wan порт, подключенный к инет сети, опять же посредством обращения к lightpd.
Какие + данной схемы управления:
  • Не нужно вставать с кровати для включение отключения света, тк управление либо с ноута, либо с мобилы.
  • Есть возможность ӕкономии ӕл. ӕнергии посредством отключения/включения водонагревателя, даже если вы не дома — через инет.
  • Комплекснов включение/отключение устройств(подходя к дому, можно заранее включить например свет везде где нужно. в том числе и ӕл. чайник перед приходом)
  • Часто забываю отключать устройства от сети перед уходом. Ӕто становится возможно в любой момент.
Какие — данный схемы управления:
  • Возможно достаточно не удобно будет доставать или держать каждый раз в руке мобильный телефон для влючения/отключения света. Но ӕто решается путем параллельного влючения оптодрайвера с физ. выключателем. Но опять же будет не отключить удаленно, если включаетель включен.
  • К каждому устройству идет дополнительный провод и устройство на оптодрайвере. Провода нужно както крепить к стене или прятать в стену, что влечет за собой смену обоев ))))) Оптодрайвер же нужно както прятать в розетку, дай бог если там хватит места )
  • Исключительная ситуация, когда мобила села, ноут не включается, а компьютер сломался. Решается лишь параллельным включением физических средств управления.

Какие возможности дополнения данной схемы управления:

  • Поставить датчики движения для включения света. На контроллере сделать регулируемую задержку отключения (3-5минут по усмотрению).
  • Беспроводное управление посредством toshiba микросхем, но придется дополнять схемой питания от ~220в.

Ну собсно на практике будем делать следующее:

Для начала необходимо определиться с ПО роутера.

Поскольку у нас linux на борту dir-320, то работа с утройствами не доставляет никаких проблем — софта полно, можно ставить и юзать.

Наш интерфейс UART роутера с програмной точик зрения витсит на /dev/tts/0.

В него то мы и будем писать данные, которые будут передаваться контроллеру.

Вообще я не кодер и писать проги на Сях для работы с устройствами, имхо есть штатные средства. Например перенаправление вывода в shell:

>echo «данные» > /dev/tts/0

Собственно команда отошлет строку в порт, что нам и нужно.

Перед использованием порта, его необходимо настроить. ( стоповые биты, контроль передачи, скорость )

В данном случае будет использоваться 8 бит дыннх, 1 стоповый бит, 300 бод(а нам больше и не надо).

> stty -crtscts 300 < /dev/tts/0

Для управления был разработан простейший протокол:

Строка начинается с символа !, затем идет слово port, затем указание порта контроллера( в даннмо случае на mega8535 их 4 — A,B,C,D ). Затем номер пина ( их 8 штук, от 0 до 7). Затем байт n или f (n — соответственно подать +5в на пин, f — не подавать на пин +5В )

Прим:

!porta1n — включит второй пин порта А на контроллере.

!portс4f — отключит пятый пин порта С на контроллере.

! — символ означает начала команды, те контроллер будет ждать начало команды только с символа !

port — для контроля данных, мало ли какие навдки будут(хотя оченьмаловероятно!!).

Для ӕтого был написан небольшой скрипт на перле вида:

 #!/opt/usr/bin/perl 

 $cmd=$ARGV[0];

 `echo !port$cmd > /dev/tts/0`;

Запуск его выполняется в формате «do.pl a1n», что включит на контроллере пин 1 порта А.

Сам скрипт do.pl с параметрами будет запускать у нас lighttpd

Ставим lighttpd:

>ipkg-opt update

>ipkg-opt install lighttpd

>ipkg-opt install mod-fastcgi

Далее редактируем /opt/etc/lighttpd/lighttpd.conf (я юзаю vim)

Выставляем настройку порта — 8080 (можете выбрать по своему усмотрению).

!!!МЕНЯЕМ

# server.event-handler = «freebsd-kqueue» # needed on OS X

на

server.event-handler = «poll» # needed on OS X

иначе будет ругаться при запуске.

>/opt/etc/init.d/S80lighttpd start

Корневая директория будет /opt/share/www. Пишем скрипт на пхп для запуска perl скрипта с параметрами. ( ГЕММОР ага? дапох, зато работает!! (с) прим. ред.)

<?php

$do=$_GET['do'];

if (!isset($do)) { print "no command"; exit(0);}

passthru("/opt/bin/perl /opt/home/do.pl do");

?>

ВНИМАНИЕ!!! хочу заметить, что использование данных примеров — удар по безопасности… имхо нужно будет проверять переменную do.

Теперь, обращаясь по адресу http://<IP router>:8080/test.php?do=a1n — отправит данные на контроллер Включиццо 2ой пин порта А.

Теперь рассмотрим физическое подключени роутера с контроллером.

Как видно из изображения — уарт у нас внизу — 5 выводов крайние — приемник и передатчик второй земля средний 3.3 В, но он нам не нужен.
В контроллере же испльзуются для приема/передачи 14 и 15 порты.
Соответственно соединяем RX роутера и TX контроллера, и наоборот TX роутера с RX контроллера.
Если вы питаете контроллер от источника питания роутера(роутер питается от 5 В), то нужно лишь 2 провода. НО! если же вы питаете контроллер от других источников питание, необходимо объединить GND 3им проводом!!!
В итоге у меня получилось следющее.
Кстати, роутер от МТС, беленький ))
Как видим контроллер находится свреху, в крышке сделаны 4 отверстия D=1мм для проводов, 2 -уарт, 2- питание контроллера.
Удобно для модернизации прошивки контроллера, тк контроллер на панельке )))
Также, выводы пинов контроллера подключены к дополнительной плате с клемниками(синенькие), откуда и идет управляющий ток на оптодрайверы.
Итак контроллер.

Собственно здесь только прошивка. Все писалось в CodeVisionStudio.
Пример прошивки на Сях.
В генераторе кода включаем все порты на вывод.
В панели UART включаем прерывание, буфер на 8 символов. Скорость 300 бод, 8 бит данных, 1 стоповый.
Часть программы:
int port(char port,char num,char is)
{

if (port=='a')
{
putchar('A');
if (num=='0') {if ( (PINA.0==0) && (is=='n') ) {putchar('N'); PORTA=PORTA+1;}   if ( (PINA.0==1) && (is=='f') ) {putchar('F'); PORTA=PORTA-1;} }
if (num=='1') {if ( (PINA.1==0) && (is=='n') ) {putchar('N'); PORTA=PORTA+2;}   if ( (PINA.1==1) && (is=='f') ) {putchar('F'); PORTA=PORTA-2;} }
if (num=='2') {if ( (PINA.2==0) && (is=='n') ) {putchar('N'); PORTA=PORTA+4;}   if ( (PINA.2==1) && (is=='f') ) {putchar('F'); PORTA=PORTA-4;} }
if (num=='3') {if ( (PINA.3==0) && (is=='n') ) {putchar('N'); PORTA=PORTA+8;}   if ( (PINA.3==1) && (is=='f') ) {putchar('F'); PORTA=PORTA-8;} }
if (num=='4') {if ( (PINA.4==0) && (is=='n') ) {putchar('N'); PORTA=PORTA+16;}   if ( (PINA.4==1) && (is=='f') ) {putchar('F'); PORTA=PORTA-16;} }
if (num=='5') {if ( (PINA.5==0) && (is=='n') ) {putchar('N'); PORTA=PORTA+32;}   if ( (PINA.5==1) && (is=='f') ) {putchar('F'); PORTA=PORTA-32;} }
if (num=='6') {if ( (PINA.6==0) && (is=='n') ) {putchar('N'); PORTA=PORTA+64;}   if ( (PINA.6==1) && (is=='f') ) {putchar('F'); PORTA=PORTA-64;} }
if (num=='7') {if ( (PINA.7==0) && (is=='n') ) {putchar('N'); PORTA=PORTA+128;}   if ( (PINA.7==1) && (is=='f') ) {putchar('F'); PORTA=PORTA-128;} }
}

if (port=='c')
{
putchar('C');
if (num=='0') {if ( (PINC.0==0) && (is=='n') ) {putchar('N'); PORTC=PORTC+1;}   if ( (PINC.0==1) && (is=='f') ) {putchar('F'); PORTC=PORTC-1;} }
if (num=='1') {if ( (PINC.1==0) && (is=='n') ) {putchar('N'); PORTC=PORTC+2;}   if ( (PINC.1==1) && (is=='f') ) {putchar('F'); PORTC=PORTC-2;} }
if (num=='2') {if ( (PINC.2==0) && (is=='n') ) {putchar('N'); PORTC=PORTC+4;}   if ( (PINC.2==1) && (is=='f') ) {putchar('F'); PORTC=PORTC-4;} }
if (num=='3') {if ( (PINC.3==0) && (is=='n') ) {putchar('N'); PORTC=PORTC+8;}   if ( (PINC.3==1) && (is=='f') ) {putchar('F'); PORTC=PORTC-8;} }
if (num=='4') {if ( (PINC.4==0) && (is=='n') ) {putchar('N'); PORTC=PORTC+16;}   if ( (PINC.4==1) && (is=='f') ) {putchar('F'); PORTC=PORTC-16;} }
if (num=='5') {if ( (PINC.5==0) && (is=='n') ) {putchar('N'); PORTC=PORTC+32;}   if ( (PINC.5==1) && (is=='f') ) {putchar('F'); PORTC=PORTC-32;} }
if (num=='6') {if ( (PINC.6==0) && (is=='n') ) {putchar('N'); PORTC=PORTC+64;}   if ( (PINC.6==1) && (is=='f') ) {putchar('F'); PORTC=PORTC-64;} }
if (num=='7') {if ( (PINC.7==0) && (is=='n') ) {putchar('N'); PORTC=PORTC+128;}   if ( (PINC.7==1) && (is=='f') ) {putchar('F'); PORTC=PORTC-128;} }
}

return 0;
}
В функции main:
while (1) { k = getchar(); if (k=='!') { for (i=0;i<=6;i++) { buf[i]=getchar(); } if ( (buf[0]=='p') && (buf[1]=='o') && (buf[2]=='r') && (buf[3]=='t') ) { port(buf[4],buf[5],buf[6]); } } }
Здесь пример только для портов А и С.
На данном ӕтапе имеем возможность управлять выводами через веб роутера!!
Теперь нам необходимо как-то управлять нагрузкой ~220 в посредством 5В, которые нам дает контроллер.
Конечно можно было бы использовать реле для таких целей + транзистор, тк выходной ток пинов контроллера не способен управлять реле. Опять же нужно было бы использовать дополнительный источник питания для цепи транзитор — реле. Да и не долговечны релюшки.
Ввиду таких обстоятельств пришлось остановиться на оптодрайвере.
Приемущества:
  • Не нужно дополнительного питания.
  • Контакт между цепями 220 и 5 исключительно посредством света ( диод + фотодатчик)
  • Бесшумность
  • Большой ток
Недостатки:
  • Немного дороже, чем реле
  • Симистор греется, нужен радиатор дополнительный
  • Изготовление дольше и сложнее, но ненамного
Итак Оптодрайвер.

Нам понадобятся:
  1. Резистор 380 Ом
  2. Резистор 330 ОМ
  3. Резистор 39 Ом
  4. Резистор 1 кОм
  5. Керамический конденсатор 0.01 пФ !!!! вольт так на 500-600, но не менее 300!!
  6. Симистор BT139
  7. MOC3041
В итоге должно получиться чтото наподобие вот таких плат.
Данная схема выдерживает ток до 16 ампер, что соответствует 3 киловаттам нагрузки.
С учетом того, что мой водонагреватель — самое потребляемое устройство в квартире, и то потребление идет — 2 киловатта. !!!но при нагрузке выше киловатта, нужно ставить радиатор на симистор, имхо греется.
Пока что все… чуть позже прикручу термодатчик к контроллеру + необходимо научить обратной связи контроллер — роутер, почему-то данные на роутер приходят, а как-либо отловить их не получается…
PS: кто может знает в чем трабла? Возможно из-за того что используется системная консоль на ӕтом порту УАРТ? Вобщем рад буду, если кто что-либо подскажет ;)
Реклама
    • alecseyyy
    • 10.11.2010

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

      • Grey
      • 12.11.2010

      Да без проблем, обращайся на icq 440111210.

      • Mike
      • 29.07.2011

      Ну как, ребят, получилось из выключателя сделать переключатель?
      Просто я тоже озадачился этой темой, прошу помощи :)

      • Из возможных решений:
        tail -f /dev/tts/1 > /tmp/cmd
        или
        cat /dev/tts/1 | script.pl

    • qwassir
    • 16.11.2011

    Наверное 0.01 мкФ, а не 0.01 пФ

    • Василий
    • 07.01.2012

    Отличная задумка, а немогли бы поделиться готовой прошивкой на мегу8 и схемой подключения. В программирование я не совсем понимаю (только учусь), а спаять запросто смогу.

    • К сожалению проект давнешний, сейчас поделиться не могу за неимением.

  1. No trackbacks yet.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: