Как включить чайник в России, находясь на Мальдивах?

8 Авг

Холодными зимними вечерами приезжая домой, хочется тепла и уюта. Вот представь, в России минус 30, а ты приезжаешь такой довольный с Мальдивов (+37С), а дома холодрыга и даже чайник никто не поставил. Поэтому появилась идея включать чайник удаленно, через интернет, используя веб интерфейс чайника. Нереально? Да ну! Мы же в будущем господа. Здесь все очень просто =)

Что бы сделать веб-интерфейс для чайника нам понадобиться. Мозг (без него вообще никуда), прямые руки (это по желанию), Arduino или другая плата ввода-вывода, компьютер с интернетом и пара деталюшек для тиристорного выключателя. Самые нетерпеливые сразу же могут листать вниз поста и смотреть видюшку всего этого добра в действии (правда там лампа вместо чайника). А настоящие джедаи читают дальше.

Моргаем светодиодами через веб-интерфейс

Начнем с задачки попроще — поморгать светодиодами на ардуино используя веб интерфейс. Для этого на нужен arduino, компьютер с веб-сервером (php+apache) и немного фантазии.

В общих чертах система состоит из следующих частей:

  • Веб-интерфейс. Эм…..давайте без него, ограничимся красивой надписью «ok», когда все закончиться. Для любителей извращаться — можно сделать два списка с ajax подгрузкой статуса светодиодов и степенью их затухания.
  • Веб-сервер. Простая прокладка между аппаратной частью и веб интерфейсом. Посылает запрос на com порт, на котором висит наша ардуинка.
  • Arduino. В данном случае используется как простой интерфейс для связи компьютера и внешних устройств. Знаю, что это не самый оптимальный вариант, но для нашего случая пойдет. Мы же не за оптимальностью гонимся, а за технологиями.

Самая сложная задача — это заставить php общаться с com портом. Проблем тут масса, но оказывается все уже решено в замечательном классе PHP Serial (для скачивания требует регистрации, директ линк для ленивых). Единственный минус этой библиотеки — она не позволяет читать данные с порта под windows. В части чтения данных в классе красуется строчка /* Do nohting: not implented yet */, так что для удаленного мониторинга продеться поднимать сервер на линуксе (например, на wifi роутере), либо искать другое решение для прослушки порта.

В общем случае механизм выглядит так:

  • Средствами php отправляет на com порт данные (в нашем случае это com3, который представляет собой com-usb эмулятор).
  • В ардуино сидит простой скетч, который периодически опрашивает com порт и включает соответствующий светодиод. Для более сложных задач с мониторингом лучше использовать готовую библиотеку firmata, которая представляет собой удобный протокол для обмена данными с arduino. Но об этом расскажу в будущих постах.

Для начала зальем простой скетч в ардуино, который устанавливает на 9м аналоговом выходе значение от 0 до 255, пришедшее на порт. Тут все предельно ясно.


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

void loop(){

byte brightness;
if(Serial.available()){
brightness = Serial.read();
analogWrite(9, brightness);
}
}

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

Код с комментариями, все предельно ясно.


<?php

require ‘core/php_serial.class.php’;

//Инициализация класса
$serial = new phpSerial();

//Устаналиваем com порт
$serial->deviceSet(«COM3»);

//Немного настроек.
$serial->confBaudRate(9600);
$serial->confParity(‘none’);
$serial->confCharacterLength(8);

//Открываем com порт
$serial->deviceOpen();

/**
* Немного поморгаем
*/
for ($i = 0; $i <= 256; $i++) {
$serial->sendMessage(chr($i), 0.01);

}

for ($i = 255; $i >= 0; $i—) {
$serial->sendMessage(chr($i), 0.01);
}

//Закрываемся
$serial->deviceClose();

//веб-интерфейс =)
echo «ok»;

?>

Как мы видим, все предельно просто. В качестве сервера использую денвер под виндой. Не самое хорошее решение, но я к нему просто уже привык =)

Веб интерфейс для электрочайника.

Когда все стало предельно ясно, предлагаю сделать веб интерфейс для нашего чайника. Для простоты сделаем интерфейс доступный из локальной сети. Что бы его расшарить, можно воспользоваться любым доступным DDNS сервисом (сегодня мы этим заниматься не будем).

Для управления высовольной электроникой воспользуемся простым тиристорным ключом с опто развязкой для надежности. Я собирал свой по этой схеме

По опыту, что бы при включении схемы нагрузка «не моргала», резистор R1 должен быть больше чем R2 (хотя на схеме они одинаковые). Также R1 должен быть достаточно мощным. У меня при нагрузке в 20 Вт резистор на 0,125Вт не выдерживал.

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

К сожалению, электрочайника под рукой не оказалось, поэтому мы будем управлять простой лампочкой на 12 Вт.

Тиристорный выключатель вешаем на 9ую ногу Arduino, подключаем к компьютеру и заливаем скетч из предыдущего примера.

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

В качестве пульта управления нашим псевдо чайником будем использовать HP iPaq с запущенной мобильной оперой.

Видео результат всего этого шаманства

Сырцы проекта:

Примечания:

  • Иногда не закрывается com-порт. В этом случае выдается ошибка записи в com-port при очередном подключении. Валю все на windows и denwer. В ближайшем будущем надеюсь запустить этот интерфейс на роутере или adsl модеме с usb портом.
  • Резистор R1 сильно греется. Его лучше поставить помощней, либо пересмотреть схему.
  • Использую тиристор BT-136-600E (на 12Вт нагрузке почти не греется). Максимальная нагрузка 4А*220В = 880Вт. Но больше 800Вт я бы на него вешать не стал. Таким образом, для управления киловатным чайником нужно подобрать что-то помощнее.
  • Стоимость тиристорного выключателя по деталям — около 60 рублей.

P.S. Буду рад, если подкините интересные идеи по применению этой технологии.

4 комментария to “Как включить чайник в России, находясь на Мальдивах?”

  1. RenderG 21.05.2012 at 00:20 #

    Кстати, давно уже делал чуть другую штуку. Сервер переодически пинговал http://www.ru, и если пинга не было — хардварно релюшкой с LPT порта перегружал роутер. )))

    • k.molochkov 21.05.2012 at 15:11 #

      Да, я помню. Ты рассказывал.

      • Сергей 23.05.2012 at 20:18 #

        http://habrahabr.ru/post/141865/ готовое решение. Собрал работает. Очень удобно, не нужно комп включенным оставлять) на роутере поднимаем самбу для заливки страничек на веб сервер и хоть с кпк управляем ардуинкой и правим код вебстраничек, подключаем сервис no-ip на роутере и удаленно юзаем=)

        • k.molochkov 24.05.2012 at 07:51 #

          Интересный вариант, тоже о таком думал. Кстати, DS18B можно было и без ардуины подключить. Это же 1-wire. Простой 1-wire мастер делается из пары резисторов и транзистора. А для общения с ним есть owfs. Ардуино тут явно лишняя.

Leave a Reply to Сергей