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

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

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

image

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

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

Задача микроконтроллера предельно проста: ждать логическую единицу от датчика движения и посылать в сеть умного дома информацию об этом, но делать это не чаще, чем раз в минуту. Питается же всё это теперь от 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:

c6dd342e87d75adca48904aa0417ea23.png

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

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

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

47f8f029b6d9feff1f01ddc54180788b.png

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

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

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

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

© Habrahabr.ru