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

Важно отметить: лампа не совершит чудо, если вы недосыпаете из-за переработок или бесконтрольного просмотра YouTube. Считайте её улучшенной заменой будильника, которая выполняет две основные функции:

  1. Способствует плавному пробуждению. Лампа имитирует восход солнца, постепенно увеличивая яркость. Когда наступает время подъёма, она меняет освещение с тёплого оранжевого на яркий белый, создавая эффект красивого рассвета в течение 5–10 минут.

  2. Выбирает оптимальное время пробуждения. Лампа рассчитывает лучшее время для пробуждения, основываясь на желаемом времени подъёма и фактическом времени засыпания, чтобы разбудить вас в конце цикла сна.

Далее разберём всё подробно.

Необходимые материалы:

  • Плата Xiao ESP32C3

  • Адресные светодиодные ленты WS2813

  • ИК-датчик приближения

  • Экран старого нерабочего ноутбука для переработки диффузионного слоя (или стандартный диффузионный слой)

  • Соединительные провода

  • Паяльник

  • Дерево или пенокартон

  • Краска

Шаг 1: Теория

Чтобы понять, как работает лампа, нужно разобраться в концепции циклов сна.

Когда вы засыпаете, ваш организм проходит через четыре основные стадии сна:

  1. Первая стадия (NREM-1). Это переходная стадия между бодрствованием и сном: мышцы начинают расслабляться, частота сердцебиения и дыхания снижается. Мозговая активность становится менее интенсивной, доминируют альфа- и тета-волны. Обычно длится 5-10 минут, человек легко пробуждается.

  2. Вторая стадия (NREM-2). Это стадия легкого сна, которая занимает около 50% общего времени сна. Температура тела снижается, а сердечный ритм и дыхание становятся более регулярными. 

  3. Третья стадия (NREM-3). Это стадия глубокого или медленного сна, и она особенно важна для физического и психологического восстановления. Организм занимается восстановлением: вырабатывается гормон роста, регенерируются ткани, укрепляется иммунная система. Проснуться на этой стадии сложно, и если это происходит, вы можете чувствовать себя дезориентированным.

  4. Четвёртая стадия (REM). Это фаза быстрого сна, характеризующаяся активным движением глаз под закрытыми веками. Мозговая активность становится почти такой же, как при бодрствовании. В этой стадии человек видит сны. Мышцы тела находятся в состоянии атонии (мышцы полностью расслабленны и даже парализованы), чтобы предотвратить физическое воспроизведение снов. Длится от 10 до 60 минут, увеличиваясь ближе к утру.

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

Например, в работе Власты Бржезиновой изучалась длительность циклов сна у людей разных возрастов. Несмотря на некоторые различия, средняя длительность составила около 90 минут. Другие исследования подтверждают этот результат. Моё исследование собрано в документе Google. Если хотите узнать больше, можете ознакомиться (оригинал, перевод).

Шаг 2: Онлайн-калькуляторы сна

Online Sleep Calculators
Online Sleep Calculators

Онлайн-калькуляторы сна, такие как этот, представляют собой простые инструменты, которые помогают определить, во сколько лучше всего лечь спать или проснуться, основываясь на концепции циклов сна. Как они работают:

  • Обратный расчёт от времени пробуждения: Вы вводите желаемое время, когда вам нужно проснуться.

  • Расчёт оптимального времени для засыпания: Используя среднюю длительность цикла сна (90 минут), калькулятор рассчитывает интервалы по 90 минут в обратном порядке и предлагает несколько возможных вариантов времени для отхода ко сну. Эти периоды рассчитаны так, чтобы вы прошли определённое количество полных циклов сна до пробуждения.

Пример:
Если вам нужно проснуться в 7:00 утра, калькулятор может предложить следующие времена для засыпания:

  • 22:00 (6 полных циклов сна + время для засыпания)

  • 23:30 (5 полных циклов сна + время для засыпания)

  • 1:00 (4 полных цикла сна + время для засыпания)

Мы сделаем то же самое, но в обратном порядке.

Шаг 3: Концепция

The Concept

Как я уже упоминал, лампа определяет оптимальное время для пробуждения на основе вашего желаемого времени подъёма и времени засыпания, тем самым гарантируя, что вы проснётесь в конце цикла сна.

Пример:
Предположим, вы ложитесь спать в 22:30, а хотите проснуться примерно в 6:00. Лампа выполняет расчёты и определяет окончания трёх, четырёх и пяти циклов сна: 3:00, 4:30 и ровно 6:00. В этом случае лампа разбудит вас в 6:00.

Теперь представьте, что вы ложитесь позже, в 23:30. Расчёты будут следующими: окончание третьего цикла — в 4:00, четвёртого — в 5:30, пятого — в 7:00. Так как целевое время подъёма — 6:00, лампа выберет ближайшее окончание цикла, то есть 5:30, и разбудит вас в это время.

Шаг 4: Определение времени засыпания

Figuring Out Sleep Time
Figuring Out Sleep Time

Вы можете спросить: «Как эта лампа узнает, когда я действительно засыпаю?» На самом деле, она не знает этого точно. Однако она делает разумное предположение, опираясь на два ключевых допущения.

  1. Какое-то время занимает подготовка ко сну. Большинство из нас перед сном какое-то время скроллят телефон или читают книгу в постели.

  2. Среднее время засыпания — около 15 минут. Согласно исследованиям, взрослому человеку обычно требуется примерно 15 минут, чтобы заснуть после того, как он лёг в кровать. Это же значение часто используется в онлайн-калькуляторах сна.

Как это работает:

  • Под лампу крепится небольшой датчик приближения.

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

  • Лампа ждёт какой-то промежуток времени, чтобы убедиться, что вы не берёте предмет обратно, и затем выключается.

  • После этого лампа запускает обратный отсчёт в 15 минут, предполагая, что это момент вашего засыпания.

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

Шаг 5: Дизайн лампы

Lamp Design
Lamp Design
Lamp Design

Абажур лампы можно напечатать на 3D-принтере, STL-файлы прилагаю ниже.

Обратите внимание, что у моей лампы красивая деревянная рама и основание. Но это не дерево! Это пенокартон.

Как сделать:

Нам понадобятся две U-образные детали. Каждая из них имеет небольшой выступ снизу, чтобы создать пространство для датчика приближения. В центре каждой детали есть вырез, чтобы соединить их вместе.

Основание я сделал из пустой основы от скотча.

Шаг 6: Диффузионный слой

Diffusion Sheet
Diffusion Sheet
Diffusion Sheet

Для рассеивания света мы будем использовать необычный материал — диффузионный слой из экрана сломанного ноутбука. Их можно легко найти в мастерских по утилизации электроники. Этот материал идеально подходит для нашего проекта, так как он красиво рассеивает свет, придавая эффект матового стекла.

Шаг 7: Реалистичный вид дерева

The Realistic Wood Look
The Realistic Wood Look
The Realistic Wood Look

Теперь я покажу, как придать пенокартону реалистичную текстуру древесины.

  1. Первый слой:
    Смешайте акриловую краску светло-коричневого цвета и покройте все поверхности. Убедитесь, что края деталей также прокрашены равномерно. Дайте краске полностью высохнуть.

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

  3. Финальный слой:
    Смешайте тёмно-коричневую акварель с небольшим количеством чёрной краски. Разбавьте её чуть меньше, чем предыдущий слой. С помощью той же техники губки нанесите мазки, чтобы добавить глубину и детали. После полного высыхания у вас будет красивая отделка под дерево. Никто не догадается, что под ней пенокартон!

Шаг 8: Электроника

Electronics
Electronics
Electronics

Пока детали сохнут, займёмся электроникой.

Компоненты:

  1. ESP32 Xiao S3: Миниатюрная плата, необходимая для получения времени из интернета и передачи сигналов на светодиоды.

  2. Светодиоды WS2813: Высококачественная адресуемая светодиодная лента. Она необходима для точного воспроизведения цветов, особенно для создания расслабляющей атмосферы вечером.

Для обоих компонентов я использовал электронику от Seeed Studio, так как у них надёжные комплектующие и качественные светодиоды.

Мы также будем использовать небольшой ИК-датчик приближения. Необязательно брать дорогой датчик — подойдёт простой и недорогой вариант.

Подготовка:

  • Обрежьте светодиодную ленту до 10 светодиодов.

  • Подключите компоненты согласно схеме соединений.

  • Для тестирования я написал простой код, который воспроизводит мягкий тёплый белый свет. Его можно скачать ниже.

WS2813_warmWhite.ino: скачать

Шаг 9: Соединения

Connections
Connections
Connections
Connections

Теперь подключим всю электронику.

  1. Для Xiao ESP32 создайте небольшой разъём с проводами, припаянными к контактам. Я рассказывал, как это сделать, в предыдущем проекте.

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

  1. Оставьте три разъёма типа “мама” свободными для подключения датчика приближения.

  2. Если у вас нет паяльника, временно используйте соединительные провода.

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

Шаг 10: Сборка

Assemble
Assemble
Assemble
Assemble
  1. Склейка U-образных секций:
    Возьмите резиновый клей и нанесите щедрый слой на пазы обеих U-образных частей. Дайте клею высохнуть на воздухе примерно 5 минут, а затем плотно прижмите части друг к другу. Это создаст более прочное соединение.

  2. Установка диффузионного слоя:
    Аккуратно оберните диффузионный слой вокруг основания. Нанесите немного резинового клея на перекрывающиеся края и склейте их вместе. Повторите тот же процесс для крышки основания.
    Как вы должно быть заметили, диффузионный слой и крышка основания не приклеиваются непосредственно к самому основанию. Это сделано для того, чтобы их можно было легко снять при необходимости обслуживания или доступа к электронике.

  3. Слот для USB-C:
    В основании я сделал небольшой слот для кабеля USB-C. Это позволяет подключать питание к ESP32 и при необходимости перепрограммировать устройство без разборки конструкции.

  4. Сборка:
    Осторожно вставьте всю базовую конструкцию между двумя склеенными U-образными секциями.

  5. Установка датчика приближения:
    Прикрепите датчик приближения снизу с помощью двухстороннего скотча.

Теперь основная структура лампы готова!

Шаг 11: Код

Code

Теперь пришло время загрузить основной код на ESP32. Он в основном следует тем же принципам, которые мы обсуждали в начале.

Основные функции кода:

  • Получение текущего времени: Код подключается к интернету для получения текущего времени. Если вы используете модуль RTC, эту функцию можно отключить.

  • runSunriseAnimation(): Эта функция отвечает за симуляцию анимации восхода солнца, как описано ранее.

  • calculateWakeTime(): Функция рассчитывает время пробуждения на основе текущего времени (времени засыпания). Она предполагает, что на засыпание уходит 15 минут, а продолжительность цикла сна составляет 90 минут. Функция находит ближайшее время для пробуждения относительно заданного целевого времени (в примере это 7:00 утра).

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

Код можно найти ниже.

SClamp_optimized.ino: скачать

Шаг 12: Заключение

Conclusion
Conclusion
Conclusion

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

Использование:

  • Включите лампу перед тем, как начать готовиться ко сну, будь то просмотр телефона или чтение книги.

  • Когда вы будете готовы ко сну, положите телефон на стол перед лампой и спокойно засыпайте.

  • Лампа всё сделает сама: плавно выключится и разбудит вас в оптимальное время, не нарушая ваш цикл сна.

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

Спасибо, что дочитали до конца!

В заключение приглашаем всех желающих, в особенности начинающих тестировщиков, на открытый урок 23 января: «Мнемоники для тестирования в начале пути». Записаться можно по ссылке.

Весь список открытых уроков по всем IT-направлениям можно посмотреть в календаре.

Комментарии (10)


  1. xSVPx
    21.01.2025 16:22

    Неплохо. Но просится какой-нибудь современный радар на 60мгц с помощью которого, наверное, можно фазы сна определять. Хотя это, вероятно будет непросто.

    Всё-таки считать их не очень хорошо, точно фиг посчитаешь.

    Ну и это скорее потолочное освещение должно быть, сдается мне лампа меня не разбудит, а вот потолок может быть...


    1. electrodummy
      21.01.2025 16:22

      можно поподробнее, что за радар вы имеете в виду, и как с его помощью определять фазы сна?


      1. kenomimi
        21.01.2025 16:22

        На али навалом радаров гигагерцового диапазона. Маленькие такие платки с антеннами странной формы. Те, что подороже, баксов 30-50, настолько точны, что довольно точно ловят сердечный ритм и дыхание на приличном расстоянии... Но, насколько понимаю, там будет дичайший матан со статистикой, поскольку датчик выдает сырые данные - остальное считай сам.


        1. vesowoma
          21.01.2025 16:22

          А если рядом спят две головы? А если рядом еще и котик? Как это все обрабатывать?


          1. xSVPx
            21.01.2025 16:22

            Тщательно.

            Одно дело, когда обрабатывать нечего, другое дело когда есть что. В любом случае это какой-то шанс перейти от гадания по времени к изменению реальной ситуации.


  1. Jury_78
    21.01.2025 16:22

    для переработки диффузионного слоя

    По мне так это коряво.. лучше писать матовая/рассеивающая пленка.


  1. shadrap
    21.01.2025 16:22

    Когда вы засыпаете, ваш организм проходит через четыре основные стадии сна:

    а как же "холодильник-брейк"?


  1. nikpnnk
    21.01.2025 16:22

    Хэнд-мейд крутой, исследования приложены интересные, но что касается практики, кмк работать будет, как безголовая курица предсказателем.

    Во-первых, "примерно" 90 минут цикл. Т.е. с погрешностью в 6 минут за ночь накопим 24-30 минут лага. Это 1/3 нашего цикла, мы уже промахнулись. Пусть погрешность ниже. А в время засыпания мы попали? Вот вчера мы среднестатистический человек, а сегодня перехватили кофе попозже или сильно стрессовали вечером. Словом, засыпали на минут 10 дольше. Опять промахнулись.

    По итогу, умная лампа будет "угадывать" чуть чаще, чем мой будильник в 9:30.


  1. vazir
    21.01.2025 16:22

    Фазы только датчиками определяются и никакими рассчетами ибо у всех разные длительности засыпания, чередование фаз и т.д. у меня смотря на датчик часов вообще каждую ночь все по разному и у всех так. Никто не спит плоско. Встает, просыпается и т.д. даже странно что об этом надо писать ибо вроде как совершенно очевидно.


  1. seventhevil
    21.01.2025 16:22

    Очень приятная разработка, но из-за нейросетей текст статьи перенасыщен списками, которые оформлены неверно. Смотрел по картинкам, а текст читать тяжело такой (лично мне), извините. Наверняка, несложно попросить нейросеть в конце пути оформить все хотя бы по ГОСТу или в виде повествования там, где нет смысла в списках.