[ Войти · Правила форума · Поиск · RSS ]

  • Страница 1 из 1
  • 1
Умный будильник на основе датчика движения или IP-камеры
AnymousДата: Субботу, 29.11.2014, 21:47 | Сообщение # 1
.::Создатель::.
Сообщений: 863
Репутация: 53 ±
Награды: 24 +
Думаю, что многие из вас знают про разные фазы сна и существование умных будильников, про это было уже много статей. Суть в том, что на протяжении ночи происходит смена фаз быстрого и медленного сна. В зависимости от того, в какую из фаз вы проснулись, утро может быть как добрым, так и весьма серым. Во время медленного сна человек постепенно засыпает всё крепче и крепче, будить его в этот момент не стоит, проснуться будет тяжело. Во время быстрой фазы человек спит не так крепко, может ворочаться и переворачиваться с боку на бок. Именно в этот момент легче всего проснуться.

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



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



Датчик движения
Многие спрашивали меня, как же устроены мои датчики, просили дать схему. На самом деле всё проще некуда. Я пошёл в ближайший электромонтажный магазин и купил обычный бытовой датчик движения для включения света, обошлось мне это примерно в 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 скрипт, поэтому будильник можно устанавливать через веб-интерфейс:



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



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


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



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



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

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


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

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

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

habrahabr.ru

Как создать скриншот? | Как создать лог файл HijackThis?
Причины, по которым может тормозить компьютер | Правила сайта!
 
  • Страница 1 из 1
  • 1
Поиск:


Чтобы добавить сообщение или создать новую тему, необходимо зарегистрироваться или зайти под своим ником!
вверх
Файлы для обмена предоставлены пользователями сайта. Администрация не несёт ответственности за их содержание. На сервере хранятся только торрент-файлы. Это значит, что мы не храним никаких нелегальных материалов, а так же материалов охраняемых авторским правом.
RudSOFT © 2010 - 2024 | Карта сайта | Карта форума | Хостинг от uCoz Cвязь с Администрацией | Информация для правообладателей