Для начала определим, чем умный будильник отличается от обычного. Правильно: обычный будильник будит нас, когда мы этого не хотим, а умный – когда мы и сами не прочь проснуться. Чтобы поприветствовать нас бодрой песней, пожелать доброго дня и т.д. Т.е. если начал ворочаться, значит уже не очень спит и можно будить. Конечно, контроль ворочаний должен начинаться в заданный час. А то, встанешь ночью по нужде, а будильник радостно заорет на весь дом. Определить ворочанья можно разными способами: надеть на руку ВТ браслет с акселерометром, прикрепить к кровати пьезодатчик, установить внешний датчик движения и т.д.
Остановимся на внешнем датчике, как наиболее универсальном варианте. За основу будильника возьмем смартфон, заодно поучимся его программить. В качестве сенсора движения можно использовать камеру смартфона, но это не наш путь, поскольку телефон придется позиционировать перед каждым сном, что не удобно. К тому же запрограммировать такой датчик не очень то легко и явно не для начинающих. Готовый софт на эту тему я не искал. Это опять же не путь самоделкина.
И так сформулируем ТЗ с минимальными требованиями:
- Программа для «андроидного смартфона» должна выполнять функции обычного будильника с проигрыванием какой-нибудь мелодии в заданное время;
- Так же будет отключаемая функция ожидания срабатывания внешнего датчика движения, подключаемого по ВТ, после срабатывания обычного будильника;
- В добавок, мелодия не должна сразу орать, а воспроизводиться с нарастающей громкостью.
Пока все требования.
Т.к. от внешнего датчика нам требуется всего 1 бит информации (есть или нет движение), то МК не понадобиться. Достаточно будет 2х основных элементов: какой-нибудь датчик движения и какой-нибудь ВТ модуль. Получится вот такая схема…
Т.е. когда срабатывает сенсор, то на ВТ модуль подается питание, и он «выходит в эфир». Паузу перед повторным срабатыванием на сенсоре надо выставить не менее 10 секунд, чтобы выход «не дергался». Наша программка сначала ждет времени срабатывания будильника, потом периодически пробует подключиться к ВТ модулю. Понятно, что последний д.б. предварительно «спарен» с телефоном. И устройство, с которым будем соединяться, предварительно выбрано в нашей программке. Если подключение удалось – значит есть движение и можно включать приветственную мелодию с нарастающей громкостью.
Программку напишем с помощью приложения MIT App Inventor, специально разработанного, чтобы ни дети, ни домохозяйки не остались в стороне от увлекательного процесса программирования смартфонов. Я опробовал его впервые. Впечатление двоякое. С одной стороны, необходимость собирать такие..
.. конструкции, для простейших выражений весьма утомляет. Навигация по проекту затруднительна, а сложные проекты в графическом редакторе будут выглядеть весьма громоздко.
С другой стороны, запросто можно написать простую программку управления роботом по ВТ без всякого гемора и не перечитывая описания синтаксиса языка и API телефона, т.к. все весьма просто и наглядно. Изменения программы в окне редактора, сразу отображаются в подключенном по вай-фай телефоне, что удобно. А, после компиляции, получается настоящий APK. В общем, хотя возможности Инвентора пока весьма ограничены, для начинающих андроид-программеров (а ваш покорный слуга тоже из их числа) он вполне подходит. Я бы посоветовал разработчикам предусмотреть возможность переключаться в текстовое представление проекта. Впрочем, инструмент все еще в бета версии.
Получилась вот такое простецкое приложение:
Файл проекта прилагается, если у кого будет интерес повторить.
Понятно, что это пробная версия для проверки работоспособности устройства, и нуждается в доработке. Выбор мелодий, голосовое приветствие с сообщением времени и курса доллара и т.п. Все это легко делается в Инвенторе.
Пара замечаний, которые могут быть не очевидны:
Левая функция перехватывает сообщения системы. Если ее не вставить, то будут появляться назойливые предупреждения при неудачных попытках ВТ соединений, хотя для спящего человека это не очень важно
Правая функция перехватывает нажатие кнопки «возврат» для остановки воспроизведения. Т.о. для выхода из программы ее использовать уже не получиться. Выход пока только через меню. Конечно это легко исправить,но это уже домашнее задание А, если в вашем смартфоне есть аксель, то лучше сделать отключение музыки при повороте телефона.