Оглавление:

Дышащий свет, управляемый Raspberry Pi: 5 шагов
Дышащий свет, управляемый Raspberry Pi: 5 шагов

Видео: Дышащий свет, управляемый Raspberry Pi: 5 шагов

Видео: Дышащий свет, управляемый Raspberry Pi: 5 шагов
Видео: Moes ZLD-RCW - Zigbee контроллер Tuya Smart для RGB+CCT LED лент, работа с Home Assistant 2024, Июль
Anonim
Дышащий свет, управляемый Raspberry Pi
Дышащий свет, управляемый Raspberry Pi

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

Вы также можете использовать его как недорогой и простой в сборке пример для «физических вычислений» с Raspberry Pi, например для использования в качестве образовательного проекта на уровне новичков. Здесь у вас есть аналоговые (поворотный потенциометр) и цифровые входы (кнопка), а также цифровой (светодиодный) и ШИМ-выход (светодиодные цепочки), а эффекты изменений видны непосредственно.

Свет проходит через повторяющиеся круги, состоящие из четырех фаз: переход от зеленого (верхний) к красному (нижний), фаза только красного, переход от красного к зеленому и фаза только зеленого цвета. Длина этих фаз определяется константами, которые можно изменять с помощью потенциометров. Процесс можно запускать, приостанавливать, возобновлять и останавливать нажатием кнопок. Светодиоды показывают текущую фазу. Это основано на примере «Firefly Light» от Пиморони (см. Здесь). Подобно «Firefly Light», для этого требуется Raspberry Pi (Zero), Pimoroni Explorer pHAT (или HAT) и две светодиодные цепочки IKEA SÄRDAL. Последние подключаются к двум портам PMW / двигателя pHAT. Вместо того, чтобы использовать банку, я поместил светодиоды в рамку для фотографий IKEA. Я пытался немного оптимизировать исходный скрипт python «firefly light», реализовав дополнительную синусную функцию для изменения яркости / ширины импульса и ввел две фазы «удержания» между фазами затемнения. Изменяя параметры, чтобы найти более комфортный световой узор, я обнаружил, что устройство может помочь поддерживать очень четко определенный, регулярный паттерн дыхания. Таким образом, некоторые из вас могут найти этот «Дыхательный свет» полезным для медитации или тренировок. Поскольку Explorer pHAT имеет четыре цифровых и четыре аналоговых входа, очень легко регулировать до четырех различных параметров с помощью ползунковых или поворотных потенциометров, а также вводить функции пуска / перезапуска / остановки освещения с помощью кнопок. Это позволит вам использовать устройство и оптимизировать параметры в соответствии с вашими потребностями без подключения монитора к Pi.

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

Библиотека Python Explorer pHAT от Pimoroni упрощает управление всеми этими портами ввода-вывода.

В этом руководстве описаны варианты устройства с 0, 2 и 4 потенциометрами и кнопками. Выберите тот, который соответствует вашим потребностям.

Для автономной работы устройства можно использовать либо блок питания, либо комбинацию прокладки Pimoroni LiPo и батареи LiPo, как описано для «Firefly Light».

Обновленные версии 28 декабря 2018: добавлена версия «четыре потенциометра и четыре кнопки». 30: добавлен код для 4-поти версии и фритзинговые изображения.

Шаг 1. Используемые / требуемые материалы

Используемые / требуемые материалы
Используемые / требуемые материалы
Используемые / требуемые материалы
Используемые / требуемые материалы
Используемые / требуемые материалы
Используемые / требуемые материалы

- Raspberry Pi Zero (4,80 фунта стерлингов в Пиморони, Великобритания) и карта micro SD (> = 8 ГБ) с Raspian

- Pimoroni Explorer pHAT (10 фунтов стерлингов в Пиморони, Великобритания). Дополнительно: однорядный заголовок, соединительные кабели

- Светодиодные цепочки IKEA SÄRDAL с 12 светодиодами (2 x, 3,99 евро каждый в IKEA Germany) или любая аналогичная светодиодная цепочка на 3-5 В. - Рамка для картин IKEA RIBBA (13 x 18 см, 2,49 евро в IKEA Germany).

- Кусок пенополиуретана (2 x 18 x 13,5 см) для размещения светодиодов. В качестве альтернативы можно использовать пенопласт.

- Кусок непрозрачного пластика (18 x 13,5 см), выполняющий роль диффузора.

- Два листа цветной прозрачной бумаги (9 х 13,5 см каждый). Я использовал красный и зеленый.

- Кусок тонкого, непрозрачного пластикового листа (18 x 13,5 см), выполняющий роль внешнего экрана. Я использовал тонкий белый лист поликарбоната. Необязательно для настраиваемой версии:

Для настройки времени нарастания и продолжительности плато или, альтернативно, других параметров, таких как яркость. - потенциометры 10, 20 или 50 кОм (до четырех я использовал два по 10 кОм, соответственно четыре по 50 Ом).

В качестве кнопок запуска / остановки / паузы / возобновления: - Кнопки (до четырех, я использовал четыре или две)

В качестве индикаторов фаз круга: - цветные светодиоды и необходимые резисторы (будет зависеть от характеристик светодиодов, которые вы будете использовать).

  1. около 140 Ом для 5,2 -> 2, 2 В (желтый, оранжевый, красный; несколько зеленых светодиодов),
  2. около 100 Ом для 5,3 -> 3,3 В (некоторые зеленые; синие, белые светодиоды)

- Кабельные перемычки и макетная плата

Дополнительно, для версии с батарейным питанием:

  • Блок питания Micro-USB 5 В или
  • Прокладка Pimoroni Zero LiPo и батарея LiPo

Шаг 2: Лазут и сборка

Лазут и сборка
Лазут и сборка
Лазут и сборка
Лазут и сборка
Лазут и сборка
Лазут и сборка

Соберите Explorer pHAT, как описано производителем. Я добавил однорядный гнездовой разъем для упрощенного подключения соединительных кабелей к портам ввода / вывода pHAT. Настройте свой Pi и установите библиотеку Pimoroni для Explorer HAT / pHAT, как описано Пиморони. Выключите Pi и прикрепите pHAT к Pi. Снимите аккумуляторные блоки со светодиодных цепочек, отрезав провода и залудив их концы. Отрежьте две перемычки «папа» посередине, залудите концы проводов. Припаяйте соединительные кабели к светодиодным цепочкам и изолируйте точки пайки липкой лентой или термоусадочной трубкой. Перед пайкой проверьте, какой из проводов должен быть подключен к плюсовому или заземляющему портам, и пометьте их соответствующим образом. Я использовал перемычки разных цветов и вырезал пену, чтобы удерживать светодиоды, рассеиватель и экран до нужного размера. На пластине для крепления светодиодов отметьте места, где должны быть размещены светодиоды, и проделайте в пенопласте отверстия диаметром 3-5 мм. Затем вставьте 24 светодиода в указанные места. Поместите цветную бумагу и пластины рассеивателя на светодиодную пластину (см. Изображения), поместив рамку над упаковкой. Закрепите слои пенопласта в раме, например. с помощью скотча. Подключите кабели светодиодной ленты к «моторным» портам Explorer pHAT. Для настраиваемой версии разместите потенциометры, кнопки, светодиоды управления (и / или зуммеры) и резисторы на макетной плате и подключите их к соответствующим портам на Explorer pHAT.

Запустите свой Pi и установите необходимые библиотеки, как описано на веб-сайте Pimoroni, затем запустите предоставленный скрипт Python 3. Если одна из светодиодных цепочек не работает, возможно, она подключена в неправильном направлении. Затем вы можете либо изменить соединения плюс / минус на pHAT, либо внести изменения в программу, например измените «eh.motor.one.backwards ()» на «… вперед ()».

В приложении вы найдете сценарии с фиксированными настройками, которые вы можете изменить в программе, и пример, в котором вы можете изменить некоторые настройки с помощью потенциометров, а также запускать и останавливать световой цикл с помощью кнопок. Не должно быть слишком сложно подогнать сценарии под ваш собственный макет «дышащего света».

Шаг 3. Скрипты Python

Библиотека Python Pimoroni для Explorer HAT / pHAT делает чрезвычайно простым обращение к компонентам, подключенным к портам ввода-вывода HAT. Два примера: «eh.two.motor.backwards (80)» управляет устройством, подключенным к порту 2 ШИМ / двигателя, с максимальной интенсивностью 80% в обратном направлении, «eh.output.three.flash ()» подключает светодиод. для вывода мигания порта номер три, пока он не будет остановлен. Я создал несколько вариаций света, в основном добавляя увеличивающиеся уровни контроля, добавляя до четырех кнопок и потенциометров. В приложении вы найдете программу Python под названием «Дыхательный свет с фиксированной линзой»..py , где все четыре настройки параметра должны быть изменены в программе. Кроме того, версия под названием «Дыхательный свет var lin cosin.py», где длину двух фаз затемнения можно регулировать с помощью двух потенциометров, и наиболее продуманная версия «Дыхательный свет var lin cosin3.py» для версии с четырьмя потенциометрами и кнопками.. Программы написаны на Python 3.

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

- фаза «вдох», когда верхние светодиоды гаснут, а нижние светодиоды увеличивают яркость

- фаза «задержи дыхание», когда верхние светодиоды выключены, а нижние светодиоды выставлены на максимум

- фаза «выдох», когда нижние светодиоды гаснут, а верхние светодиоды увеличивают яркость

- фаза «оставаться на выдохе», когда нижние светодиоды выключаются, а верхние светятся максимальным светом.

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

Пятый параметр определяет максимальную интенсивность. Он позволяет вам установить максимальную яркость светодиодов, что может быть удобно, если вы хотите использовать его в качестве ночника. Кроме того, это может позволить вам улучшить процесс затемнения, так как у меня сложилось впечатление, что трудно увидеть разницу между интенсивностью 80 и 100%.

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

# Лампа "дыхания": версия с двумя кнопками и двумя потенциометрами.

# модификация примера светлячка для Pimoroni Explorer pHAT # здесь: синоидное увеличение / уменьшение значений мотора / ШИМ # для линейной функции включение линейной функции и отключение косинуса функции # Эта версия "var" считывает аналоговые входы, отменяет предустановленные настройки # читает цифровой ввод, кнопки для запуска и остановки "" "для запуска при включении Pi. Вы можете использовать Cron: Cron - это программа Unix, которая используется для планирования заданий, и у нее есть удобная функция @reboot, которая позволяет запускать скрипт всякий раз, когда ваш Pi загружается. Откройте терминал и введите crontab -e, чтобы отредактировать crontab. Прокрутите до конца файла, пропустив все строки, начинающиеся с #, и добавьте следующую строку (при условии, что ваш код находится на /home/pi/firefly.py): @reboot sudo python /home/pi/filename.py & Закройте и сохраните ваш crontab (если вы используете nano, нажмите control-x, y и введите, чтобы выйти и сохранить). "" "время импорта import explorerhat as eh import math constant values #sinus xmax = 316 step = 5 # ширина шага, например 315/5 дает 63 шага / цикл start_button = 0 # это определяет состояние кнопки, подключенной к входному порту № 1 stop_button = 0 # это определяет состояние кнопки, подключенной к входному порту № 3 pause_1 = 0,02 # устанавливает длину перерывов в шагах в фазе «вдох», тем самым увеличивая частоту и продолжительность pause_2 = 0,04 # устанавливает скорость нарастания «выдоха» pause_3 = 1,5 # перерыв между фазами вдоха и выдоха (продолжайте вдох) pause_4 = 1,2 # пауза в конце выдоха фаза (продолжайте выдыхать) max_intens = 0.9 # максимальная интенсивность / яркость max_intens_100 = 100 * max_intens # то же самое в% # Может позволить оптимизировать "дыхание" светодиодов и уменьшить мерцание. l_cosin = # список с производными значениями косинуса (100> = x> = 0) l_lin = # список с линейными значениями (100> = x> = 0) # создание списка функций косинуса для i в диапазоне (0, 316, 3): # 315 близко к Pi * 100, 105 шагов # print (i) n_cosin = [(((math.cos (i / 100)) + 1) / 2) * 100] # создать значение # print (n_cosin) l_cosin = l_cosin + n_cosin # добавить значение в список # print (l_cosin) # создать линейный список для i в диапазоне (100, -1, -1): # обратный отсчет от 100 до нуля n_lin = l_lin = l_lin + n_lin # print (l_lin) # показывает скучный список print () print ("" "Чтобы запустить световые циклы, нажмите кнопку" Пуск "(первый вход)" "") print () print ("" "Чтобы остановить свет, нажмите и удерживайте кнопку «Стоп» (ввод 3) «» ") print () # дождитесь нажатия кнопки« Пуск »while (start_button == 0): start_button = eh.input.one.read () # read кнопка номер один eh.output.one.blink () # мигает светодиод номер один раз. сон (0.5) # чтение два раза в секунду # запуск горит, пока (stop_button == 0): # чтение аналоговых входов ОДИН и ДВА, определение настроек set_1 = эх.ан alog.one.read () # определяет скорость перехода красный-> зеленый pause_1 = set_1 * 0,02 # значения будут находиться в диапазоне от 0 до 0,13 сек / шаг print ("set_1:", set_1, "-> pause _1:", pause_1) set_2 = eh.analog.two.read () # определяет зеленый -> красный скорость нарастания pause_2 = set_2 * 0,02 # значения будут находиться в диапазоне от 0 до 0,13 сек / шаг print ("set_2:", set_2, "-> pause _2: ", pause_2) # фаза" вдоха "eh.output.one.on () # может включать светодиод или звуковой сигнал '' 'для x в диапазоне (len (l_lin)): fx = max_intens * l_lin [x] # линейная кривая eh.motor.one.backwards (fx) eh.motor.two.backwards (max_intens_100-fx) time.sleep (pause_1) eh.output.one.off () '' 'для x в диапазоне (len (l_cosin)): fx = max_intens * l_cosin [x] # линейная кривая eh.motor.one.backwards (fx) eh.motor.two.backwards (max_intens_100-fx) time.sleep (pause_1) eh.output.one.off () # проверьте, нажата ли кнопка Stop stop_button = eh.input.three.read () # Пауза "Задержите дыхание" в конце фазы вдоха eh.output.two.on () # включите два светодиода eh.motor.one.backwards (0) eh.motor.two.backwards (max_intens_100) time.sleep (pause_3) eh.output.two.off () # проверить, нажата ли кнопка остановки stop_button = eh.input.three.read () # фаза "выдоха" eh.output.three.on () # включите светодиод три '' 'для x в диапазоне (len (l_lin)): fx = max_intens * l_lin [x] # линейная кривая eh.motor.one.backwards (max_intens_100-fx) eh.motor.two.backwards (fx) time.sleep (pause_2) '' 'для x в диапазоне (len (l_cosin)): fx = max_intens * l_cosin [x] # линейная кривая eh.motor.one.backwards (max_intens_100-fx) eh.motor.two. backwards (fx) time.sleep (pause_2) eh.output.three.off () # проверить, нажата ли кнопка Stop stop_button = eh.input.three.read () # пауза между фазами «выдох» и «вдох» eh. output.four.on () eh.motor.one.backwards (max_intens_100) eh.motor.two.backwards (0) time.sleep (pause_4) eh.output.four.off () # проверить, нажата ли кнопка Stop stop_button = eh.input.three.read () # выключение, выключение всех портов вывода eh.motor.one.stop () eh.motor.two.stop () eh.output.one.off () eh.output.two.off () eh.output.three.off () eh.output.four.off () печать () print ("До свидания")

Если вы хотите использовать свет как автономное устройство, например в качестве индикатора сна или пробуждения вы можете добавить к Pi мобильный источник питания, запустить программу после загрузки и использовать «Cron» для включения или выключения в определенное время. Как пользоваться «Cron» подробно описано в другом месте.

Шаг 4. Примеры видео

На этом шаге вы найдете несколько видеороликов, показывающих свет при нормальных (т.е. все значения> 0, # 1) и экстремальных условиях, когда все значения установлены на ноль (# 2), только с линейным изменением (# 3 и # 4), и без пандуса (№ 5 и № 6).

Шаг 5: несколько замечаний

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

Рекомендуемые: