Tabla de contenido:

Una luz de respiración controlada por una Raspberry Pi: 5 pasos
Una luz de respiración controlada por una Raspberry Pi: 5 pasos

Video: Una luz de respiración controlada por una Raspberry Pi: 5 pasos

Video: Una luz de respiración controlada por una Raspberry Pi: 5 pasos
Video: TODO ESTO PUEDES HACER CON UNA RASPBERRY PI 😈💻 2024, Mes de julio
Anonim
Una luz de respiración controlada por una Raspberry Pi
Una luz de respiración controlada por una Raspberry Pi

La "Luz de ejercicio de respiración" que se describe aquí es una luz pulsante simple y relativamente económica que puede ayudarlo en sus ejercicios de respiración y ayudarlo a mantener un ritmo respiratorio constante. También podría usarse, p. Ej. como luz de noche relajante para niños. En la etapa actual es más un prototipo funcional.

También puede usarlo como un ejemplo económico y simple de construir para "computación física" con una Raspberry Pi, p. Ej. para ser utilizado como un proyecto educativo en el nivel de principiantes, aquí tiene entradas analógicas (potenciómetro giratorio) y digitales (pulsador), así como salidas digitales (LED) y PWM (cadenas de LED), y los efectos de los cambios son directamente visibles.

La luz atraviesa círculos repetitivos que constan de cuatro fases: una transición de verde (superior) a rojo (inferior), una fase de solo rojo, una transición de rojo a verde y una fase de solo verde. La duración de estas fases está definida por constantes que pueden modificarse mediante potenciómetros. El proceso se puede iniciar, pausar, reanudar y detener presionando botones. Los LED indican la fase actual. Se basa en el ejemplo "Firefly Light" de Pimoroni (ver aquí). Similar a la "Firefly Light", requiere una Raspberry Pi (Zero), la Pimoroni Explorer pHAT (o HAT) y dos cadenas de luz LED IKEA SÄRDAL. Los últimos están conectados a los dos puertos PMW / motor del pHAT. En lugar de usar un frasco, coloqué los LED en un marco de imagen IKEA. He estado tratando de optimizar un poco la secuencia de comandos de Python original de "luz de luciérnaga", implementando una función sinusoidal opcional para los cambios de brillo / ancho de pulso y he introducido dos fases de "retención" entre las fases de atenuación. Mientras modificaba los parámetros para encontrar un patrón de luz que se sintiera más cómodo, descubrí que el dispositivo puede ser útil para respaldar un patrón de respiración regular muy claramente definido. Por lo tanto, algunos de ustedes pueden encontrar útil esta "Luz de respiración" para fines de meditación o entrenamiento. Como el Explorer pHAT tiene cuatro entradas digitales y cuatro analógicas, es muy fácil regular hasta cuatro parámetros diferentes usando potenciómetros deslizantes o giratorios, e introducir funciones de arranque / reinicio / parada de las luces usando botones pulsadores. Esto le permitirá utilizar el dispositivo y optimizar los parámetros según sus necesidades sin tener que conectar un monitor al Pi.

Además, el Explorer pHAT viene con cuatro puertos de salida digitales, que permiten agregar LED o zumbadores, además de dos puertos de 5V y dos de tierra y dos puertos de salida PWM para motores o dispositivos similares. Asegúrese de utilizar las resistencias correctas para reducir el voltaje de sus LED.

La biblioteca de Python Explorer pHAT de Pimoroni hace que sea extremadamente simple controlar todos estos puertos de E / S.

En este instructable se describen versiones del dispositivo con 0, 2 y 4 potenciómetros y botones. Elija el que se adapte a sus necesidades.

Para ejecutar el dispositivo de forma autónoma, se puede utilizar un paquete de energía o la combinación de una cuña Pimoroni LiPo y una batería LiPo, como se describe para el "Firefly Light".

Versiones actualizadas 28 de diciembre de 2018: se agregó la versión de 'cuatro potenciómetros y cuatro botones'. 30: código para la versión de 4 poti e imágenes fritzing agregadas.

Paso 1: Materiales utilizados / necesarios

Materiales utilizados / necesarios
Materiales utilizados / necesarios
Materiales utilizados / necesarios
Materiales utilizados / necesarios
Materiales utilizados / necesarios
Materiales utilizados / necesarios

- Raspberry Pi Zero (4,80 GBP en Pimoroni, Reino Unido) y una tarjeta micro SD (> = 8 GB) con Raspian

- Pimoroni Explorer pHAT (10 GBP en Pimoroni, Reino Unido). Opcional: un encabezado de una sola fila, cables de puente

- Cadena de luces LED IKEA SÄRDAL con 12 LED (2 x, 3,99 € cada una en IKEA Alemania), o cualquier cadena LED similar de 3-5V.- Marco de imagen IKEA RIBBA (13 x 18 cm, 2,49 € en IKEA Alemania).

- Un trozo de espuma PU (2 x 18 x 13,5 cm), para sujetar los LED. Alternativamente, se puede utilizar espuma de estireno.

- Una pieza de plástico opaco (18 x 13,5 cm), que actúa como difusor.

- Dos hojas de papel transparente de colores (9 x 13,5 cm cada una). Usé rojo y verde.

- Un trozo de lámina de plástico fina y muy opaca (18 x 13,5 cm), que actúa como pantalla exterior. Usé una fina lámina de policarbonato blanca. Opcional, para la versión sintonizable:

Para ajustar el tiempo de rampa y la duración de la meseta, o alternativamente otros parámetros como el brillo.- Potenciómetros de 10, 20 o 50 kOhm (hasta cuatro, usé dos de 10 kOhm respectivamente cuatro de 50 Ohm).

Como botones de inicio / parada / pausa / reanudar: - Botones pulsadores (hasta cuatro, usé cuatro o dos)

Como indicadores de las fases del círculo: - LEDs de colores y las resistencias necesarias (dependerá de las características de los LEDs que utilice).

  1. aproximadamente 140 ohmios para 5.2 -> 2, 2 V (amarillo, naranja, rojo; algunos LED verdes),
  2. aproximadamente 100 ohmios para 5,3 -> 3,3 V (algunos LED verdes, azules y blancos)

- Cables de puente y una placa de pruebas

Opcional, para una versión con batería:

  • Paquete de alimentación Micro-USB de 5 V, o
  • Cuña Pimoroni Zero LiPo y una batería LiPo

Paso 2: Lazout y ensamblaje

Lazout y montaje
Lazout y montaje
Lazout y montaje
Lazout y montaje
Lazout y montaje
Lazout y montaje

Ensamble el Explorer pHAT como lo describe el fabricante. He agregado un encabezado hembra de una sola fila para la conexión simplificada de cables de puente a los puertos de E / S de pHAT. Configure su Pi e instale la biblioteca Pimoroni para Explorer HAT / pHAT, como lo describe Pimoroni. Apague el Pi y conecte el pHAT al Pi. Retire los paquetes de baterías de las cadenas de LED cortando los cables y estañe el extremo de los cables. Corte dos cables de puente macho 2x en el medio, estañe el extremo de los cables. Suelde los cables de puente a las cadenas de LED y aísle los puntos de soldadura con cinta adhesiva o tubo retráctil. Antes de soldar, verifique cuál de los cables debe conectarse a los puertos positivo o de tierra y márquelos en consecuencia. Utilicé cables de puente de diferentes colores, corté la espuma para sujetar los LED, el difusor y las láminas de la pantalla al tamaño adecuado. En la placa de sujeción de LED, marque las posiciones donde se colocarán los LED y haga agujeros de 3-5 mm en la espuma. Luego inserte los 24 LED en las posiciones indicadas. Coloca los papeles de colores y las placas difusoras sobre la placa LED (ver imágenes), ellos colocan el marco encima del paquete. Fije las capas de espuma en el marco, p. Ej. usando cinta adhesiva. Conecte los cables de la tira de LED a los puertos del "motor" del Explorer pHAT. Para la versión sintonizable, coloque potenciómetros, botones pulsadores, LED de control (y / o zumbadores) y resistencias en la placa de pruebas y conéctelos con los puertos correspondientes en el Explorer pHAT.

Inicie su Pi e instale las bibliotecas necesarias, como se describe en el sitio web de Pimoroni, luego ejecute el script Python 3 proporcionado. Si una de las cadenas de LED no funciona, es posible que esté conectada en la dirección incorrecta. Luego puede cambiar las conexiones más / menos en el pHAT o hacer un cambio en el programa, p. Ej. cambie “eh.motor.one.backwards ()” a “… forwards ()”.

Adjunto encontrará scripts con configuraciones fijas que puede cambiar dentro del programa y un ejemplo donde puede modificar algunas de las configuraciones con potenciómetros, e iniciar y detener el ciclo de luz usando botones. No debería ser demasiado difícil ajustar los scripts para que se ajusten a su propio diseño de la "luz de respiración".

Paso 3: los scripts de Python

La biblioteca Python de Pimoroni para el Explorer HAT / pHAT hace que sea extremadamente simple direccionar los componentes conectados a los puertos de E / S de los HAT. Dos ejemplos: "eh.two.motor.backwards (80)" impulsa el dispositivo conectado al puerto PWM / motor 2 con una intensidad máxima del 80% en dirección hacia atrás, "eh.output.three.flash ()" hace que un LED se conecte al puerto de salida número tres flash hasta que se detiene. He generado algunas variaciones de la luz, básicamente agregando niveles crecientes de control agregando hasta cuatro botones pulsadores y potenciómetros. Adjunto encontrará un programa de Python llamado "Breathing light fixed lin cosin.py "donde los cuatro ajustes de parámetros deben modificarse dentro del programa. Además una versión denominada "Breathing light var lin cosin.py" donde la longitud de las dos fases de regulación se puede ajustar mediante dos potenciómetros y la versión más elaborada "Breathing light var lin cosin3.py" para la versión de cuatro potenciómetros y pulsadores. Los programas están escritos en Python 3.

En todos los casos, el proceso de ciclado se puede evocar y detener mediante dos pulsadores, en la versión de cuatro botones también se puede interrumpir y reiniciar el proceso. Además, se pueden conectar cuatro LED (de colores) a los puertos de salida digital, que indican las fases específicas. Un ciclo del dispositivo consta de cuatro fases:

- la fase de "inhalación", donde los LED superiores se atenúan y los LED inferiores aumentan la intensidad

- la fase de "aguantar la respiración", en la que los LED superiores se apagan y los LED inferiores se ajustan al máximo

- la fase de "exhalación", donde los LED inferiores se atenúan y los LED superiores aumentan la intensidad

- la fase de "permanecer exhalado", donde los LED inferiores se apagan y los LED superiores se encienden al máximo.

La duración de las cuatro fases se define mediante un parámetro numérico individual, que puede fijarse en el programa y / o ajustarse mediante un potenciómetro.

Un quinto parámetro define la intensidad máxima. Te permite configurar el brillo máximo de los LED, lo que podría ser útil si quieres usarlo como luz de noche. Además puede permitirle mejorar el proceso de atenuación, ya que tengo la impresión de que es difícil ver una diferencia entre el 80 y el 100% de intensidad.

Estaba agregando una función (co-) sinusal opcional para el aumento / disminución del brillo, ya que brinda una conexión más suave entre las fases. No dude en probar otras funciones. P.ej. puede eliminar las roturas y utilizar dos funciones sinusales diferentes (complejas) para ambas cadenas de LED y ajustar la frecuencia y amplitud mediante potenciómetros.

# La lámpara de "respiración": versión de dos botones y dos potenciómetros

# una modificación del ejemplo de luciérnaga para el Pimoroni Explorer pHAT # aquí: aumento / disminución sinoidal de los valores del motor / PWM # para la función lineal anular el silencio de la función de coseno lineal y silenciar # Esta versión "var" no lee entradas analógicas, anula los ajustes predefinidos # lee entrada digital, botones para iniciar y detener "" "para comenzar al encender la Pi, puede usar Cron: Cron es un programa Unix que se usa para programar trabajos, y tiene una conveniente función @reboot que le permite ejecutar un script siempre que arranque su Pi. Abra una terminal y escriba crontab -e para editar su crontab. Desplácese hasta el final del archivo, pase todas las líneas que comienzan con # y agregue la siguiente línea (asumiendo que su código está en /home/pi/firefly.py): @reboot sudo python /home/pi/filename.py & Cierre y guarde su crontab (si está usando nano, presione control-x, y e ingrese para salir y guardar). "" "importar tiempo importar explorador que como eh importar valores de constante matemática # sinus xmax = 316 paso = 5 # ancho de paso, por ejemplo 315/5 da 63 pasos / ciclo start_button = 0 # esto define el estado de un pulsador conectado al puerto de entrada no 1 stop_button = 0 # esto define el estado de un pulsador conectado al puerto de entrada no 3 pause_1 = 0.02 # establece la longitud de pausas dentro de los pasos en la fase de "inhalación", por lo tanto la velocidad y la duración de la rampa pause_2 = 0.04 # establece la velocidad de rampa de la "exhalación" pause_3 = 1.5 # descanso entre las fases de inhalación y exhalación (mantener inhalado) pause_4 = 1,2 # descanso al final de la exhalación fase (mantener exhalado) max_intens = 0.9 # intensidad / brillo máximo max_intens_100 = 100 * max_intens # lo mismo en% # Puede permitir optimizar la impresión de "respiración" de los LED y reducir el parpadeo. l_cosin = # lista con valores derivados del coseno (100> = x> = 0) l_lin = # lista con valores lineales (100> = x> = 0) # generar lista de funciones coseno para i en rango (0, 316, 3): # 315 está cerca de Pi * 100, 105 pasos # print (i) n_cosin = [(((math.cos (i / 100)) + 1) / 2) * 100] #generate value # print (n_cosin) l_cosin = l_cosin + n_cosin # agregar valor a la lista # imprimir (l_cosin) # generar lista lineal para i en el rango (100, -1, -1): # cuenta regresiva de 100 a cero n_lin = l_lin = l_lin + n_lin # print (l_lin) # muestra una lista aburrida print () print ("" "Para iniciar los ciclos de luz, presiona el botón" Inicio "(Entrada uno)" "") print () print ("" "Para detener la luz, presione y mantenga presionado el botón "Parar" (Entrada tres) "" ") print () # espere hasta que se presione el botón Inicio mientras (botón_inicio == 0): botón_inicio = eh.input.one.read () # leer botón número uno eh.output.one.blink () # parpadeo LED número uno time.sleep (0.5) # leer dos veces por segundo #run se enciende mientras (stop_button == 0): # leer entradas analógicas UNO y DOS, definir ajustes set_1 = eh.an alog.one.read () # define rojo-> velocidad de rampa verde pause_1 = set_1 * 0.02 # los valores oscilarán entre 0 y 0.13 seg / paso print ("set_1:", set_1, "-> pause _1:", pause_1) set_2 = eh.analog.two.read () # define verde -> velocidad de rampa roja pause_2 = set_2 * 0.02 # los valores oscilarán entre 0 y 0.13 seg / paso print ("set_2:", set_2, "-> pause _2: ", pause_2) # fase de" inhalación "eh.output.one.on () # puede activar un LED o zumbador '' 'para x en el rango (len (l_lin)): fx = max_intens * l_lin [x] # curva lineal eh.motor.one.backwards (fx) eh.motor.two.backwards (max_intens_100-fx) time.sleep (pause_1) eh.output.one.off () '' 'para x en rango (len (l_cosin)): fx = max_intens * l_cosin [x] # curva lineal eh.motor.one.backwards (fx) eh.motor.two.backwards (max_intens_100-fx) time.sleep (pause_1) eh.output.one.off () # compruebe si se presiona el botón Stop stop_button = eh.input.three.read () # "Mantén la respiración" pausa al final de la fase de inhalación eh.output.two.on () # enciende el LED dos eh.motor.one.hacia atrás (0) eh.motor.dos.hacia atrás (max_intens_100) time.sleep (pause_3) eh.output.two.off () # compruebe si se presiona el botón Stop stop_button = eh.input.three.read () # fase "exhale" eh.output.three.on () # encienda el LED tres '' 'para x en rango (len (l_lin)): fx = max_intens * l_lin [x] # curva lineal eh.motor.one.backwards (max_intens_100-fx) eh.motor.two.backwards (fx) time.sleep (pause_2) '' 'para x en el rango (len (l_cosin)): fx = max_intens * l_cosin [x] # curva lineal eh.motor.one.backwards (max_intens_100-fx) eh.motor.two. backwards (fx) time.sleep (pause_2) eh.output.three.off () # compruebe si se presiona el botón Stop stop_button = eh.input.three.read () # pausa entre las fases de "exhalación" e "inhalación" eh. output.four.on () eh.motor.one.backwards (max_intens_100) eh.motor.two.backwards (0) time.sleep (pause_4) eh.output.four.off () # compruebe si el botón de parada está presionado stop_button = eh.input.three.read () # shutdown, turn of all output ports eh.motor.one.stop () eh.motor.two.stop () eh.output.one.off () eh.output.two.off () eh.output.three.off () eh.output.four.off () imprimir () imprimir ("Adiós")

Si desea utilizar la luz como un dispositivo independiente, p. Ej. como luz para dormir o despertar, puede agregar una fuente de energía móvil al Pi y hacer que el programa se inicie después de arrancar y usar "Cron" para encenderlo o apagarlo en momentos determinados. Cómo utilizar "Cron" se ha descrito con gran detalle en otra parte.

Paso 4: Ejemplos de videos

En este paso, encontrará una serie de videos que muestran la luz en condiciones normales (es decir, todos los valores> 0, # 1) y extremas, ya que todos los valores se establecen en cero (# 2), solo en rampa (# 3 y # 4), y sin rampas (n. ° 5 y n. ° 6).

Paso 5: algunas observaciones

Disculpe los términos incorrectos, errores tipográficos y errores. No soy un hablante nativo de inglés, ni tengo conocimientos elaborados en electricidad, electrónica o programación. Lo que en realidad significa que estoy tratando de escribir un instructable en inglés sobre cosas en las que apenas conozco los términos correctos en mi propio idioma. Por lo tanto, cualquier sugerencia, corrección o idea de mejora es bienvenida. H

Recomendado: