26/12/2010 22:13:12
Помните, как кричали мы заветные слова на новогодней елке в детском саду? И, словно по волшебству, но с непосредственным участием воспитательницы тети Гали, уборщицы тети Любы и электрика дяди Васи, вставляющего с кряхтением и оханьями вилку в розетку, елочка загоралась многочисленными разноцветными огоньками, лампочками и перемигивающимися гирляндами...
И вот, с ностальгией вспоминая о своем прошлом, я решил подключить наряженную по поводу новогодних праздников елку, растущую в саду, к сети 1-wire. Применение технологии 1-wire не ограничивается сугубо утилитарными задачами. Управляемая с помощью компьютерной программы елочная гирлянда открывает поистине колоссальные возможности для проведения детских мероприятий. Мечта дедсадовского электрика дяди Васи.
А меня, прежде всего, двигала лень. Ведь в праздничные дни елку нужно включать с наступлением темноты, а выключать тогда, когда все ложатся спать. Нелегкая задача для ленивых, недисциплинированных и забывчивых людей, вроде меня. Поэтому я взял еще один модуль на базе DS2413 и подключил к нему китайскую гирлянду для наружного применения, состоящую из 120 желтых светодиодов.
Логика работы как всегда проста. Каждую минуту по cron'у запускается маленький скрипт, который из базы данных считывает 3 значения: состояние ключа уличного освещения, состояние сигнализации, состояние собственно самой гирлянды и текущее время. Я решил, что гирлянда будет включаться с наступлением темноты. У меня уже работал скрипт, определяющий по камере видеонаблюдения недостаточную освещенность и включающий уличное освещение. Таким образом гирлянда включается автоматически в том случае, если включено уличное освещение. Далее я решил, что негоже жечь светодиоды, когда нас нет дома и запрограммировал, чтобы лампочки на елки выключались, когда сигнализация переведена в режим ОХРАНА и снова включалась в режиме НАБЛЮДЕНИЕ, если выполняется первое условие, а именно включено уличное освещение. Выключение гирлядны происходит ровно в 2 часа ночи. Единственным исключением я сделал ночь с 31 декабря по 1 января и с 6 по 7 января, когда гирлянда выключается только в 8 утра.
Но преимущества компьютерного управления гирляндой не ограничивается только включением или выключением с запрограммированными условиями. Например, я применил одноцветную гирлянду без режимов мигания. Не очень то и хотелось. Свои режими мигания можно запрограммировать самостоятельно! Вдоволь наигравшись с моргающими лампочками я понял, что это безыдейно и нужна какая-то мысль. И тогда я решил, что моя гирлянда будет показывать время. То есть в начале каждого часа моргать столько раз, сколько пробило часов. А в полночь лампочки вспыхнут 12 раз! С Новым 2011 Годом!
<?
// Функции CMS - аналоги обычных SQL-запросов
$keys_id = get_id_cl("keys", 1);
$alarm_mode = show_list($keys_id, "#key_pio#", "", 1, "key_label='gsm_arm'", 1);
$christ = show_list($keys_id, "#key_pio#", "", 1, "key_label='christ'", 1);
$ext_light = show_list($keys_id, "#key_pio#", "", 1, "key_label='ext_light'", 1);
if ( $alarm_mode == 1 && $christ == 1 )
key_sw("christ", 0);
elseif ( $alarm_mode == 0 && $ext_light == 1 && $christ == 0 && date('H') >= 15 )
key_sw("christ", 1);
elseif ( (date('j') == 31 && date('n' == 12) && date('H') > 8 && $christ == 1) || (date('j') == 1 && date('n' == 1) && date('H') && $christ == 1) )
key_sw("christ", 0);
elseif ( $alarm_mode == 0 && $ext_light == 1 && $christ == 1 && date('H') >= 2 && date('H') <= 15 )
key_sw("christ", 0);
$christ = show_list($keys_id, "#key_pio#", "", 1, "key_label='christ'", 1);
if ( $christ == 1 && round(date('i')) == "0" )
{
$my_time = date('g');
if ( $my_time == 0 )
$my_time = 12;
for ( $i = 0; $i < $my_time; $i++ )
{
$no_log = 1;
key_sw("christ", 0);
usleep(50000);
key_sw("christ", 1);
usleep(500000);
}
}
?>
Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.
2010-12-27 00:01:24 | Андрей (Sigma)
Классное решение.