Table des matières:

Une lumière respiratoire contrôlée par un Raspberry Pi : 5 étapes
Une lumière respiratoire contrôlée par un Raspberry Pi : 5 étapes

Vidéo: Une lumière respiratoire contrôlée par un Raspberry Pi : 5 étapes

Vidéo: Une lumière respiratoire contrôlée par un Raspberry Pi : 5 étapes
Vidéo: Raspberry Pi : Électronique simple (EP. 1 : Contrôler des LEDS avec le GPIO Zero) 2024, Juillet
Anonim
Une lumière respiratoire contrôlée par un Raspberry Pi
Une lumière respiratoire contrôlée par un Raspberry Pi

La « lumière d'exercice respiratoire » décrite ici est une lumière pulsée simple et relativement peu coûteuse qui peut vous aider dans vos exercices de respiration et vous aider à maintenir un rythme respiratoire constant. Il peut également être utilisé, par ex. comme veilleuse apaisante pour les enfants. Au stade actuel, il s'agit plutôt d'un prototype fonctionnel.

Vous pouvez également l'utiliser comme exemple peu coûteux et simple à construire pour "l'informatique physique" avec un Raspberry Pi, par ex. à utiliser comme projet pédagogique au niveau débutant, vous avez ici des entrées analogiques (potentiomètre rotatif) et numériques (bouton poussoir) ainsi que des sorties numériques (LED) et PWM (chaînes LED), et les effets des changements sont directement visibles.

La lumière parcourt des cercles répétitifs constitués de quatre phases: une transition du vert (supérieur) au rouge (inférieur), une phase du rouge uniquement, une transition du rouge au vert et une phase du vert uniquement. La durée de ces phases est définie par des constantes qui peuvent être modifiées par des potentiomètres. Le processus peut être démarré, interrompu, repris et arrêté en appuyant sur des boutons-poussoirs. Des LED indiquent la phase actuelle. Elle est basée sur l'exemple « Firefly Light » de Pimoroni (voir ici). Semblable à la "Firefly Light", il nécessite un Raspberry Pi (Zero), le Pimoroni Explorer pHAT (ou HAT) et deux chaînes lumineuses IKEA SÄRDAL LED. Ces derniers sont connectés aux deux ports PMW/moteur du pHAT. Au lieu d'utiliser un pot, j'ai placé les LED dans un cadre photo IKEA. J'ai essayé d'optimiser un peu le script python original "firefly light", en implémentant une fonction sinus optionnelle pour les changements de luminosité / largeur d'impulsion et j'ai introduit deux phases de "maintien" entre les phases de gradation. Tout en modifiant les paramètres pour trouver un modèle de lumière plus confortable, j'ai découvert que l'appareil peut aider à prendre en charge un modèle de respiration régulier très clairement défini. Ainsi, certains d'entre vous peuvent trouver cette "lumière respiratoire" utile à des fins de méditation ou d'entraînement. Comme l'Explorer pHAT possède quatre entrées numériques et quatre entrées analogiques, il est très facile de régler jusqu'à quatre paramètres différents à l'aide de potentiomètres à glissière ou rotatifs et d'introduire des fonctions de démarrage/redémarrage/arrêt des lumières à l'aide de boutons poussoirs. Cela vous permettra d'utiliser l'appareil et d'optimiser les paramètres selon vos besoins sans qu'un moniteur doive être connecté au Pi.

De plus, l'Explorer pHAT est livré avec quatre ports de sortie numériques, qui permettent d'ajouter des LED ou des buzzers, plus deux ports 5V et deux ports de terre et deux ports de sortie PWM pour moteurs ou appareils similaires. Veuillez vous assurer que vous utilisez les bonnes résistances pour réduire la tension de vos LED.

La bibliothèque python Explorer pHAT de Pimoroni rend extrêmement simple le contrôle de tous ces ports d'E/S.

Dans ce instructable versions de l'appareil avec 0, 2 et 4 potentiomètres et boutons sont décrits. Choisissez celui qui correspond à vos besoins.

Pour faire fonctionner l'appareil de manière autonome, on peut utiliser soit un bloc d'alimentation, soit la combinaison d'une cale Pimoroni LiPo et d'une batterie LiPo, comme décrit pour la "Firefly Light".

Versions mises à jour 28 décembre 2018: ajout de la version « quatre potentiomètres et quatre boutons-poussoirs ». 30: code pour la version 4-poti et images frisantes ajoutées.

Étape 1: Matériaux utilisés / requis

Matériaux utilisés / requis
Matériaux utilisés / requis
Matériaux utilisés / requis
Matériaux utilisés / requis
Matériaux utilisés / requis
Matériaux utilisés / requis

- Raspberry Pi Zero (4,80 GBP chez Pimoroni, Royaume-Uni) et une carte micro SD (>= 8 Go) avec Raspian

- Pimoroni Explorer pHAT (10 GBP à Pimoroni, Royaume-Uni). En option: un en-tête à une rangée, des câbles de démarrage

- Chaînes lumineuses IKEA SÄRDAL LED avec 12 LED (2 x, 3,99 € chacune chez IKEA Allemagne), ou toute chaîne LED similaire 3-5V. - Cadre photo IKEA RIBBA (13 x 18 cm, 2,49 € chez IKEA Allemagne).

- Un morceau de mousse PU (2 x 18 x 13,5 cm), pour tenir les LED. Alternativement, de la mousse de polystyrène peut être utilisée.

- Un morceau de plastique opaque (18 x 13,5 cm), faisant office de diffuseur.

- Deux feuilles de papier transparent coloré (9 x 13,5 cm chacune). J'ai utilisé du rouge et du vert.

- Un morceau de feuille de plastique mince et très opaque (18 x 13,5 cm), faisant office d'écran extérieur. J'ai utilisé une fine feuille de polycarbonate blanc. Facultatif, pour la version accordable:

Pour régler le temps de rampe et la durée du plateau, ou bien d'autres paramètres comme la luminosité. - Potentiomètres de 10, 20 ou 50 kOhm (jusqu'à quatre, j'ai utilisé deux 10 kOhm respectivement quatre 50 Ohm).

En tant que boutons de démarrage/arrêt/pause/reprise: boutons poussoirs (jusqu'à quatre, j'en ai utilisé quatre ou deux)

Comme indicateurs pour les phases du cercle: - Des LED colorées et les résistances nécessaires (dépendront des caractéristiques des LED que vous utiliserez).

  1. environ 140 Ohm pour 5.2 -> 2, 2 V (jaune, orange, rouge; quelques leds vertes),
  2. environ 100 Ohm pour 5,3 -> 3,3 V (certaines LED vertes, bleues, blanches)

- Câbles de démarrage et une planche à pain

En option, pour une version à batterie:

  • Bloc d'alimentation micro-USB 5 V, ou
  • Cale Pimoroni Zero LiPo et batterie LiPo

Etape 2: Lazout et Assemblage

Lazout et Assemblage
Lazout et Assemblage
Lazout et Assemblage
Lazout et Assemblage
Lazout et Assemblage
Lazout et Assemblage

Assemblez l'Explorer pHAT comme décrit par le fabricant. J'ai ajouté un en-tête femelle à une rangée pour la connexion simplifiée des câbles de démarrage aux ports d'E/S du pHAT. Configurez votre Pi et installez la bibliothèque Pimoroni pour Explorer HAT/pHAT, comme décrit par Pimoroni. Éteignez le Pi et fixez le pHAT sur le Pi. Retirez les batteries des chaînes LED en coupant les fils et en étamant l'extrémité des fils. Coupez deux câbles de démarrage mâles 2x au milieu, étamez l'extrémité des fils. Soudez les câbles de démarrage aux chaînes LED et isolez les points de soudure à l'aide de ruban adhésif ou de gaine thermorétractable. Avant de souder, vérifiez quels fils doivent être connectés aux ports plus ou à la terre, et marquez-les en conséquence. J'ai utilisé des fils de liaison de différentes couleurs. Découpez la mousse pour maintenir les LED, le diffuseur et les feuilles d'écran à la taille appropriée. Sur la plaque de maintien des LED, marquez les positions où les LED doivent être placées et percez des trous de 3 à 5 mm dans la mousse. Insérez ensuite les 24 LED aux emplacements indiqués. Placez les papiers colorés et les plaques diffuseurs sur la plaque LED (voir images), placez ensuite le cadre au dessus du pack. Fixez les couches de mousse dans le cadre, par ex. à l'aide de ruban adhésif. Fixez les câbles de la bande LED aux ports « moteur » de l'Explorer pHAT. Pour la version accordable, placez les potentiomètres, les boutons poussoirs, les LED de contrôle (et/ou les buzzers) et les résistances sur la maquette et connectez-les aux ports correspondants de l'Explorer pHAT.

Démarrez votre Pi et installez les bibliothèques requises, comme décrit sur le site Web de Pimoroni, puis exécutez le script Python 3 fourni. Si l'une des chaînes LED ne fonctionne pas, elle peut être connectée dans le mauvais sens. Ensuite, vous pouvez soit modifier les connexions plus/moins sur le pHAT, soit effectuer une modification dans le programme, par ex. remplacez "eh.motor.one.backwards()" par "… forwards()".

Vous trouverez ci-joint des scripts avec des paramètres fixes que vous pouvez modifier dans le programme et un exemple où vous pouvez modifier certains des paramètres avec des potentiomètres, et démarrer et arrêter le cycle lumineux à l'aide de boutons poussoirs. Il ne devrait pas être trop difficile d'adapter les scripts à votre propre disposition de la "lumière qui respire".

Étape 3: Les scripts Python

La bibliothèque Python de Pimoroni pour l'Explorer HAT/pHAT rend extrêmement simple l'adressage des composants attachés aux ports d'E/S des HAT. Deux exemples: "eh.two.motor.backwards(80)" pilote l'appareil connecté au port PWM/moteur 2 avec une intensité maximale de 80% dans le sens inverse, "eh.output.three.flash()" connecte une LED pour produire le flash du port numéro trois jusqu'à ce qu'il soit arrêté. J'ai généré quelques variations de la lumière, ajoutant essentiellement des niveaux de contrôle croissants en ajoutant jusqu'à quatre boutons-poussoirs et potentiomètres. Vous trouverez ci-joint un programme Python appelé "Breathing light fixed lin cosin.py" où les quatre réglages de paramètres doivent être modifiés dans le programme. De plus une version appelée "Breathing light var lin cosin.py" où la durée des deux phases de gradation peut être réglée à l'aide de deux potentiomètres et la version la plus élaborée "Breathing light var lin cosin3.py" pour la version à quatre potentiomètres & boutons poussoirs. Les programmes sont écrits en Python 3.

Dans tous les cas, le processus de cyclage peut être évoqué et arrêté à l'aide de deux boutons poussoirs, dans la version à quatre boutons, vous pouvez également interrompre et redémarrer le processus. De plus, quatre LED (colorées) peuvent être connectées aux ports de sortie numérique, indiquant les phases spécifiques. Un cycle de l'appareil se compose de quatre phases:

- la phase « inhale », où les LED supérieures sont atténuées et les LED inférieures augmentent l'intensité

- la phase "retenez votre souffle", où les LED supérieures sont éteintes et les LED inférieures sont réglées au maximum

- la phase "expirer", où les LED inférieures sont atténuées et les LED supérieures augmentent l'intensité

- la phase "rester expiré", où les leds inférieures s'éteignent et les leds supérieures s'allument au maximum.

La longueur des quatre phases est définie par un paramètre numérique individuel, qui peut être soit fixé dans le programme et/ou peut être ajusté à l'aide d'un potentiomètre.

Un cinquième paramètre définit l'intensité maximale. Il permet de régler la luminosité maximale des LED, ce qui peut être pratique si vous souhaitez l'utiliser comme veilleuse. De plus cela peut vous permettre d'améliorer le processus de gradation, car j'ai l'impression qu'il est difficile de voir une différence entre 80 et 100% d'intensité.

J'ajoutais une fonction (co-)sinus optionnelle pour augmenter/diminuer la luminosité, car elle permet une connexion plus fluide entre les phases. N'hésitez pas à essayer d'autres fonctions. Par exemple. vous pouvez éliminer les pauses et utiliser deux fonctions sinusoïdales différentes (complexes) pour les deux chaînes LED et régler la fréquence et l'amplitude à l'aide de potentiomètres.

# La lampe "respiration": version deux boutons & deux potentiomètres

# une modification de l'exemple de luciole pour le Pimoroni Explorer pHAT # ici: augmentation/diminution du sinoïde des valeurs moteur/PWM # pour la fonction linéaire unmute linear et mute fonction cosin # Cette version "var" lit les entrées analogiques, outrepasse les paramètres prédéfinis # lit entrée numérique, boutons pour démarrer et arrêter """ pour démarrer lors de la mise sous tension du Pi, vous pouvez utiliser Cron: Cron est un programme Unix qui est utilisé pour planifier des tâches, et il a une fonction @reboot pratique qui vous permet d'exécuter un script chaque fois que votre Pi démarre. Ouvrez un terminal et tapez crontab -e pour modifier votre crontab. Faites défiler jusqu'en bas du fichier, dépassez toutes les lignes commençant par # et ajoutez la ligne suivante (en supposant que votre code est à /home/pi/firefly.py): @reboot sudo python /home/pi/filename.py & Fermez et enregistrez votre crontab (si vous utilisez nano, appuyez sur control-x, y et entrez pour quitter et enregistrer). """ import time import explorerhat as eh import math constant values #sinus xmax = 316 step = 5 # step width, par exemple 315/5 donne 63 pas/cycle start_button = 0 # définit l'état d'un bouton-poussoir connecté au port d'entrée n°1 stop_button = 0 # définit l'état d'un bouton-poussoir connecté au port d'entrée n°3 pause_1 = 0,02 # définit la longueur des pauses au sein des étapes de la phase « inspirer », ainsi la vitesse et la durée de la rampe pause_2 = 0,04 # définit la vitesse de la rampe « d'expiration » pause_3 = 1,5 # pause entre les phases d'inspiration et d'expiration (maintenir l'inspiration) pause_4 = 1,2 # pause à la fin de l'expiration phase (garder expiré) max_intens = 0.9 # intensité/luminosité maximale max_intens_100= 100*max_intens # la même en % # Peut permettre d'optimiser l'impression "respiration" des LED et de réduire le scintillement. l_cosin= # liste avec des valeurs dérivées du cosinus (100 >= x >=0) l_lin= # liste avec des valeurs linéaires (100 >= x >=0) # générer une liste de fonctions cosinus pour i dans la plage (0, 316, 3): # 315 est proche de Pi*100, 105 pas # print (i) n_cosin = [(((math.cos (i/100))+1)/2)*100] #generate value # print (n_cosin) l_cosin = l_cosin + n_cosin #ajouter une valeur à la liste # imprimer (l_cosin) # générer une liste linéaire pour i dans la plage (100, -1, -1): # compter à rebours de 100 à zéro n_lin= l_lin=l_lin + n_lin # print (l_lin) # affiche une liste ennuyeuse print () print ("""Pour démarrer les cycles lumineux, appuyez sur le bouton "Start" (Entrée un)""") print () print ("""Pour arrêter la lumière, appuyez et maintenez enfoncé le bouton "Stop" (entrée trois)""") print () # attendez que le bouton Démarrer soit enfoncé pendant que (start_button==0): start_button=eh.input.one.read() # read bouton numéro un eh.output.one.blink() # clignoter la LED numéro une fois.sommeil(0,5) # lire deux fois par seconde #run s'allumer pendant (stop_button==0): # lire les entrées analogiques UN et DEUX, définir les paramètres set_1 =eh.an alog.one.read() # définit le taux de rampe rouge-> vert pause_1=set_1*0.02 # les valeurs seront comprises entre 0 et 0,13 sec/pas d'impression ("set_1:", set_1, " -> pause _1:", pause_1) set_2=eh.analog.two.read() # définit le taux de rampe vert -> rouge pause_2=set_2*0.02 # les valeurs seront comprises entre 0 et 0,13 sec/pas d'impression ("set_2:", set_2, " -> pause _2: ", pause_2) # phase "inhalation" eh.output.one.on() # peut entraîner une LED ou un bip ''' pour x dans la plage (len(l_lin)): fx=max_intens*l_lin [x] # courbe linéaire eh.motor.one.backwards(fx) eh.motor.two.backwards(max_intens_100-fx) time.sleep(pause_1) eh.output.one.off() ''' pour x dans la plage (len(l_cosin)): fx=max_intens*l_cosin [x] # courbe linéaire eh.motor.one.backwards(fx) eh.motor.two.backwards(max_intens_100-fx) time.sleep(pause_1) eh.output.one.off() # vérifiez si le bouton d'arrêt est enfoncé stop_button=eh.input.three.read() # "Gardez votre souffle" pause à la fin de la phase d'inspiration eh.output.two.on() # allume la LED two eh.motor.one.vers l'arrière(0) eh.moteur.deux.vers l'arrière(max_intens_100) time.sleep(pause_3) eh.output.two.off() #vérifier si le bouton Stop est enfoncé stop_button=eh.input.three.read() # phase "expirer" eh.output.three.on() # allumer la LED trois ''' pour x dans la plage (len(l_lin)): fx=max_intens*l_lin [x] # courbe linéaire eh.motor.one.backwards(max_intens_100-fx) eh.motor.two.backwards(fx) time.sleep(pause_2) ''' pour x dans la plage (len(l_cosin)): fx=max_intens*l_cosin [x] # courbe linéaire eh.motor.one.backwards(max_intens_100-fx) eh.motor.two. arrière (fx) time.sleep(pause_2) eh.output.three.off() #vérifier si le bouton Stop est enfoncé stop_button=eh.input.three.read() # pause entre les phases "expirer" et "inspirer" hein. output.four.on() eh.motor.one.backwards(max_intens_100) eh.motor.two.backwards(0) time.sleep(pause_4) eh.output.four.off() #vérifier si le bouton d'arrêt est enfoncé stop_button =eh.input.three.read() # arrêt, désactivation de tous les ports de sortie eh.motor.one.stop() eh.motor.two.stop() eh.output.one.off() eh.output.two.off() eh.output.three.off() eh.output.four.off() imprimer () imprimer ("Au revoir")

Si vous souhaitez utiliser la lumière comme un appareil autonome, par ex. comme lumière de veille ou de réveil, vous pouvez ajouter une source d'alimentation mobile au Pi et faire démarrer le programme après le démarrage et utiliser "Cron" pour l'allumer ou l'éteindre à des moments donnés. Comment utiliser "Cron" a été décrit en détail ailleurs.

Étape 4: Exemples de vidéos

Dans cette étape, vous trouverez un certain nombre de vidéos montrant la lumière dans des conditions normales (c. et pas de rampe (#5 ).;

Étape 5: Quelques remarques

Veuillez vous excuser pour les termes erronés, les fautes de frappe et les erreurs. Je ne suis pas anglophone et je n'ai pas de connaissances approfondies en électricité, électronique ou programmation. Ce qui signifie en fait que j'essaie d'écrire un anglais instructable sur des choses où je connais à peine les termes corrects dans ma propre langue. Ainsi, toutes les astuces, corrections ou idées d'amélioration sont les bienvenues. H

Conseillé: