Умный будильник на основе датчика движения или IP-камеры

от автора

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

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

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

image

Недавно я просматривал логи и заметил, что на истории движения с этого датчика очень чётко видны фазы моего сна, когда я сплю один. Это не удивительно, он очень хорошо фиксирует любое моё движение, даже если я лежу под одеялом. Сразу же возникла мысль — почему бы не сделать мой будильник «умным»?

Датчик движения

Многие спрашивали меня, как же устроены мои датчики, просили дать схему. На самом деле всё проще некуда. Я пошёл в ближайший электромонтажный магазин и купил обычный бытовой датчик движения для включения света, обошлось мне это примерно в 200 рублей. У него было три вывода: общий, питание 220В и выход. Однако, для моих целей коммутация такого напряжения была совсем ни к чему. Я разобрал датчик и обнаружил внутри две платы: мозги и питание. Первая питалась от напряжения около 9В и давала на выходе логическую единицу при наличии движения. Вторая же предоставляла эти самые 9 вольт за счёт конденсаторного питания и коммутировала нагрузку электромагнитным реле. В результате плата с конденсаторным питанием была заменена на мою плату с микроконтроллером:

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

Скрипты будильника

Так как все устройства в доме у меня связаны с моим роутером на базе Linux, и именно он занимается пробуждением, вся оставшиеся махинации сводятся к написанию shell-скриптов.

За будильник у меня отвечает alarm.sh, который в нужный момент запускается через cron, при этом в параметрах передаётся — как именно надо будить. Теперь этот скрипт должен запускаться, когда начинается тот интервал, в течении которого я должен проснуться. Пускай он будет длиться 30 минут. Получается, что если мне надо проснуться не позже 9:30, то будильник надо ставить на 9:00.
Скрипт получился таким:

#!/bin/sh # Максимальное время ожидания движения в секундах MAX_TIME=1800 # Путь к флагу FLAG_FILE=/tmp/motion.flag  # Убираем себя из кронтаба crontab -l | grep -v alarm.sh | crontab -  # Если файл-флаг, который сообщает о движении уже существует, то удаляем его if [ -f $FLAG_FILE ]; then     rm $FLAG_FILE fi  # Ждём в течении заданного времени for i in `seq 1 $MAX_TIME`; do # Если появился флаг, значит есть движение, больше не надо ждать     if [ -f $FLAG_FILE ];     then         break     fi     sleep 1 done  # Если надо, включаем радио if [ "$1" -eq 1 ] then     radio.sh & fi  # Если надо, включаем заданное количество ламп на люстре if [ "$2" -ge 1 ] then     sleep 1     light.sh $2 & fi  # Если надо, включаем компьютер if [ "$3" -eq 1 ] then     /usr/local/sbin/wakemypc fi  # TODO: управление оконными шторами 

В скрипте, который реагирует на пакеты от устройств умного дома, я сделал создание флага:

# $3 - тип команды, 21 - код информации о движении if [ "$3" -eq 21 ] then     touch /tmp/motion.flag fi 

Если интересно, вот так происходит включение радио через radio.sh:

#!/bin/sh # Имитируем нажатие кнопки включения ресивера на пульте-ДУ echo "04040C017A850976">/tmp/clunet.fifo sleep 10 for i in `seq 1 80`; do     # Увеличение громкости на 0.5 dB, имитируем нажатие кнопки увеличения громкости     echo "04040C017A851AE5">/tmp/clunet.fifo     sleep 6 done 

Добавлением alarm.sh в crontab занимается PHP скрипт, поэтому будильник можно устанавливать через веб-интерфейс:

image

Или через приложение для Android:

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

Использование IP-камеры

Теоретически для умного будильника можно использовать и IP-камеру с инфракрасной подсветкой, если направить её на кровать.

Практически в любой такой камере есть возможность отслеживать движение. Админка моей камеры выглядит так:

Да, корявый английский от китайцев 🙂 Как видите, можно указать URL, который запрашивается при обнаружении движения. Дело за малым — написать PHP скрипт, при вызове которого будет создаваться флаг.

Плюс камеры в том, что теоретически она может увидеть движение и под одеялом, ведь оно изолирует тепло, на перемещение которого реагирует обычный датчик. Однако, практика показывает, что общая чувствительность и надёжность гораздо ниже.

Итог

Такие будильники действительно помогают сделать утро добрым. Ощущения бывают весьма своеобразными. Например, я могу во сне переворачиваться с боку на бок, и во время этого включается будильник, в результате чего я просыпаюсь скорее над кроватью, а не на ней 🙂
Увы, такой подход к созданию умного будильника подходит только для людей, которые спят в гордом одиночестве.

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

Пока писал статью, пошёл седьмой час утра. Доброе утро, Хабр 🙂

ссылка на оригинал статьи http://habrahabr.ru/post/229713/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *