Например TDA7294

РадиоКот > Схемы > Цифровые устройства > Бытовая техника

Умный Будильник, учитывающий фазы сна.

Автор - Pavel_V
Опубликовано 18.09.2010.
Участник Конкурса "Поздравь Кота по-человечески 2010"

Я не открою Америки, если скажу, что все коты, впрочем как и их хозяева, больше всего на свете любят хорошенько поспать. Я не исключение. И если в течение дня еще можно как-то взбодриться и иметь одухотворенное выражение лица, то ранним утром оторвать свою голову от подушки крайне сложно. К счастью, работа позволяла мне избегать ранних подъемов и я был вполне счастлив этому, но жизнь не стоит на месте и все хорошее рано или поздно заканчивается..

И вот, после очередного тяжелого утреннего подъема, я решил изучить эту проблему более детально. Для этого пришлось обратиться к различным научным публикациям, касающимся проблем сна.
Выяснилось, что сон человека имеет определенную цикличность, при этом в каждом из циклов проходит определенная последовательность фаз сна. Всего обычно определяют пять фаз сна:
Первая фаза - дремота. Переход от бодрствования к засыпанию, длится около 5-10 минут. Если в этот период человека разбудить, он будет утверждать, что совсем не спал.
Вторая фаза - медленное засыпание. Температура тела начинает падать, сердечный ритм замедляется.
Третья фаза - глубокий сон. Дыхание глубокое и ровное, пульс медленный, мышцы расслаблены. В этом периоде разбудить человека достаточно сложно.
Четвертая фаза - полное отключение. Это самый глубокий сон, длится около 30 минут. Именно в этом периоде максимально отдыхает мозг. Разбудить человека, находящегося в этой фазе сна крайне тяжело, а после пробуждения он не сразу приходит в себя.
Пятая фаза - сновидение. На этой стадии мы с вами видим сны. По официальной версии сны отражают наши дневные переживания, помогают снять стресс и накопившееся эмоциональное напряжение (ведь именно во сне мы можем с удовольствием набить морду своему недругу). Еще эту фазу называют фазой быстрого движения глаз. Давление поднимается, пульс растет.
Для того, чтобы человек проснулся выспавшимся и полным сил, необходимо, чтобы он прошел последний цикл сна полностью. Именно это обычно и происходит при естественном пробуждении. Мы начинаем ворочаться, открываем глаза, ищем удобное положение в постели (вновь наступает фаза дремоты). Классический будильник, естественно, не учитывает такую потребность организма и пытается нас разбудить в самый неудачный момент.

Как же сделать так, чтобы будильник знал, когда нас лучше разбудить? Пусть я готов проснуться в промежуток с 6:00 до 7:00, но при условии, что разбудят меня именно в правильный момент. Ведь даже проснувшись в 6:00 в первой стадии сна, вы будете чувствовать себя намного лучше, чем проснувшись в 7:00 в стадии глубокого сна.
Можно попытаться детально изучить собственные особенности сна и стараться угадать нужный интервал для пробуждения. Некоторые с этой целью записывают себя во сне на видео, из которого затем получают цикличность.
А можно пойти другим путем. Ведь известно, что самая лучшая фаза для пробуждения - первая, в которой человек начинает шевелиться, поддергивает одеяло, может быть даже бормочет что-то себе под нос. Именно определение движения во сне легло в основу моей разработки.

Представленный будильник принимает в качестве установки время начала возможного пробуждения и время конца. Он имеет батарейное питание и прикрепляется в любом удобном месте (например, на запястье, как часы). Чувствительный элемент в виде MEMS акселерометра определяет двигательную активность человека во сне, и в случае обнаружения таковой в заданном периоде времени, включает сигнал будильника. Если же попытка обнаружения движения оказалась неудачной, будильник в любом случае включает сигнал в конечное время пробуждения.
Основа Умного Будильника - микроконтроллер MSP430F1611, производства TI. Выбрана конкретно эта модель из-за большого объема оперативной памяти на борту, который позволяет хранить логи прямо в самом контроллере, не прибегая к внешним накопителям. Это мне нужно для исследований и экспериментов. По мере выработки идеального алгоритма, легко можно перейти на любой другой контроллер.
Сразу хочу предупредить, что проект хоть и полностью рабочий, но далек от стадии конечного продукта и постоянно дорабатывается.
Схема устройства:

Печатная плата:

Фото готовой платы без монтажа и с монтажом:

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

Питание устройства у меня сделано от ионистора, но можно использовать батарейку на 3В.
Часы не имеют собственного индикатора и органов управления кроме одной кнопки (о ее назначении расскажу дальше). Все настройки осуществляются с компьютера при помощи специальной программы.
На разъем JP1 выведены сигналы JTAG и BSL для программирования и отладки. Для соединения платы будильника с компьютером служит разъем JP2. Необходимо использовать преобразователь уровней 3V TTL <-> RS232.
Параметры работы UART: 2400b, 8N1.
Протокол обмена данными с ПК заслуживает отдельной статьи, здесь я опишу только вкратце.

SOF - начало фрейма;
ADDRESS - адрес устройства (используется 0x00);
CMD - код команды;
LEN - длина данных;
DATA - данные произвольной длины;
CRC - контрольная сумма CRC8;
CR, EOF - конец фрейма.


Все данные передаются текстом, что позволяет с легкостью использовать простой терминал для отладки. Тем, кому интересна проблема связи микроконтроллерных устройств с "большим" ПК, рекомендую посмотреть исходники протокола, он с легкостью переносится на любую платформу.

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

Будильник позволяет производить следующие настройки:
Получение описания устройства
Команда: 0x03
Возвращает: ASCII строка с описанием и версией прошивки

Получение текущего времени
Команда: 0x10
Возвращает: 3 байта, 1 - часы, 2 - минуты, 3 - секунды, все в формате HEX

Установка текущего времени
Команда: 0x11. Данные: 3 байта, 1 - часы, 2 - минуты, 3 - секунды, все в формате HEX
Возвращает: 0x00

Получение времени начала периода пробуждения
Команда: 0x22
Возвращает: время

Установка времени начала периода пробуждения
Команда: 0x23. Данные: время
Возвращает: 0x00

Получение времени конца периода пробуждения
Команда: 0x20
Возвращает: время

Установка времени конца периода пробуждения
Команда: 0x21. Данные: время
Возвращает: 0x00


Алгоритм работы будильника
Как только текущее время достигает времени начала периода пробуждения, начинает отслеживаться двигательная активность с помощью акселерометра. Если активность зафиксирована, включается сигнал будильника. Если двигательная активность в период пробуждения не зафиксирована, сигнал включается по достижении времени конца периода пробуждения. Отключение сигнала производится нажатием кнопки (ее следует удерживать в течение 1 с).
Также, при обмене данными с компьютером, необходимо держать кнопку нажатой, это действие выводит процессор из спящего режима для возможности коммуникации. Если быть точным, процессор принимает пакеты со стороны ПК, но ответить может только после выхода из спячки (нажатия кнопки).
Прошивку микроконтроллера можно выполнить с помощью JTAG-отладчика, или встроенного загрузчика через COM-порт (ключевые слова для поиска "BSL loader").
Микроконтроллер, использованный в устройстве, проще всего заказать у производителя в качестве образца (за подробностями - на форум), акселерометр можно использовать любой, более-менее подходящий по параметрам (у меня долго валялся ADXL311 в ожидании своего часа). Конденсатор C6 - танталовый, пищалка со встроенным генератором, кварц часовой, на 32768 Гц.

Проект электрической схемы и печатной платы выполнен в программе Eagle, программная часть в IAR for MSP430.
В качестве заключения хочу добавить, что хоть опыт пользования новым Умным Будильникам у меня еще небольшой, но по первым впечатлениям - оно действительно работает!

Какие есть планы по дальнейшему совершенствованию конструкции:
- Доработка программы на стороне ПК для легкой настройки будильника;
- Сбор статистики и корректировка алгоритма обнаружения наилучшего периода для пробуждения;
- Миниатюризация устройства с заменой МК на что-то более простое;


Всем удачи и приятных снов! ;)

Поздравляю любимый сайт с юбилеем! Желаю и дальше оставаться самым интересным сайтом, посвященным электронике!

Файлы:
Печатная плата в формате Eagle.
Прошивка МК с исходниками.
Софт для писюка с исходниками.

Вопросы, как обычно, складываем тут.


ID: 901

Как вам эта статья?

 Нравится
 Так себе
 Не нравится

Заработало ли это устройство у вас?

 Заработало сразу
 Заработало после плясок с бубном
 Не заработало совсем

15