Porteurs du projet :
Nous avions au départ deux idées distinctes : utiliser un capteur cardiaque pour percevoir le pouls, et créer un vêtement de lumière qui change selon le mouvement de la personne qui le porte ou selon l'environnement.
Nous avons décidé de combiner ces idées et de créer un vêtement (t-shirt ou veste…, un vêtement unisexe et facile à mettre/enlever) équipé de LED reliées par ARDUINO à un capteur du rythme cardiaque.
Nous avons utilisé ARDUINO, un Base Shield V2 (Seeed studio), une LED et une résistance pour d'abord mesurer le rythme cardiaque, puis allumer la LED et changer son intensité selon le rythme cardiaque.
Programme utilisé :
const int capteur = A0; void setup() { // put your setup code here, to run once: Serial.begin(9600); // initialise l'Arduino pinMode(capteur, INPUT); // initialise le capteur INPUT pinMode(11, OUTPUT); // initialise la LED sur le port 11 } void loop() { // put your main code here, to run repeatedly: int pouls = digitalRead(capteur); // initialise la variable pouls qui aura pour valeur la valeur lue par le capteur (digitalRead = soit 1 soit 0) Serial.print("Valeur capteur : "); // afficher dans le moniteur série "valeur capteur : Serial.print(pouls); Serial.print("\n"); digitalWrite (11, pouls);}
Essais de soudure et test du bandeau de LED, en s'aidant de ce site : http://www.fablabredon.org/wordpress/2017/12/17/lumiere-sur-larduino-avec-de-la-couleur-et-des-led/ et http://www.fablabredon.org/wordpress/2019/01/02/ruban-de-led-le-retour/
Structure de base du programme :
#include <Adafruit_NeoPixel.h> // Charge la librairie Neo Pixel d'Adafruit utilisé pour piloter le ruban de LED #define PIXEL_PIN 6 // On définit le pin où est connecté la patte DATA du bandeau #define PIXEL_COUNT 150 // On définit le nombre de LED compris sur le Ruban de LED soit 150 pour le ruban de 5m50 Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800); // Paramètre l'objet strip qui correspond à toute les LED du ruban void setup() { strip.begin(); // Lance la connection strip.show(); // Initialise toute les led à 'off' } /* Définition des couleurs */ int RED[3] = {255, 0, 0}; // Couleur Rouge int GREEN[3] = {0, 255, 0}; // Couleur Verte int CYAN[3] = {0, 255, 255}; // Couleur Cyan int YELLOW[3] = {255, 125, 0}; // Couleur Jaune int ORANGE[3] = {255, 40, 0}; // Couleur Orange int PURPLE[3] = {255, 0 , 255}; // Couleur Violette int PINK[3] = {255, 0, 100}; // Couleur Rose int BLUE[3] = {0, 0, 255}; // Couleur Bleu int WHITE[3] = {255, 255, 255}; // Couleur Blanche void loop() { strip.setBrightness(100); // Règle la luminosité à 100 % de la luminosité maximale }
On peut ensuite compléter ce code selon l'effet souhaité (“chenillard”, allumage progressif de toutes les LED etc…) Exemple : pour allumer toutes les LED en rouge, on complète avec
void allLeds(int COLOR[]) { for(int i = 0 ; i < PIXEL_COUNT ; i++) { strip.setPixelColor(i, COLOR[0], COLOR[1], COLOR[2]); } strip.show(); } void loop() { strip.setBrightness(100) ; allLeds(RED); }
Après avoir réussi à manipuler la guirlande de LED avec l'Arduino, on a écrit un programme qui permettait de relier la guirlande au capteur de rythme cardiaque. La guirlande s'allume et s'éteint en suivant les données du pouls. Ensuite, on a modifié le programme afin qu'à chaque battement, les lumières changent de couleurs : on a 8 couleurs en tout.
Programme utilisé :
#include <Adafruit_NeoPixel.h> #define PIXEL_PIN 6 #define PIXEL_COUNT 13 const int capteur = A0; Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800); void setup() { Serial.begin(9600); // initialise l'Arduino pinMode(capteur, INPUT); // initialise le capteur INPUT strip.begin(); // Lance la connection strip.show(); // Initialise toute les led à 'off' // put your setup code here, to run once: } int RED[3] = {255, 0, 0}; // Couleur Rouge int GREEN[3] = {0, 255, 0}; // Couleur Verte int CYAN[3] = {0, 255, 255}; // Couleur Cyan int YELLOW[3] = {255, 125, 0}; // Couleur Jaune int ORANGE[3] = {255, 40, 0}; // Couleur Orange int PURPLE[3] = {255, 0 , 255}; // Couleur Violette int PINK[3] = {255, 0, 100}; // Couleur Rose int BLUE[3] = {0, 0, 255}; // Couleur Bleu int WHITE[3] = {255, 255, 255}; // Couleur Blanche int compteur = 0; int valPoulsPrec = 0;
void allLeds(int COLOR[]) { for(int i = 0 ; i < PIXEL_COUNT ; i++) { strip.setPixelColor(i, COLOR[0], COLOR[1], COLOR[2]); } strip.show(); } void turnOff(){ for(int i = 0; i<PIXEL_COUNT; i++){ strip.setPixelColor(i, 0, 0, 0); } strip.show(); } void loop() { strip.setBrightness(100) ; int pouls = digitalRead(capteur); // initialise la variable pouls qui aura pour valeur la valeur lue par le capteur (digitalRead = soit 1 soit 0) Serial.print("Valeur capteur : "); // afficher dans le moniteur série "valeur capteur : Serial.print(pouls); Serial.print("\n"); Serial.print ("Compteur :"); Serial.print (compteur); Serial.print ("\n"); if (valPoulsPrec != pouls ){ compteur ++; } if (pouls == 1){ if (compteur % 9 == 0){ allLeds(RED); } else if (compteur % 8 == 0){ allLeds(GREEN); } else if (compteur % 8 == 1){ allLeds(CYAN); } else if (compteur % 8 == 2){ allLeds(YELLOW); } else if (compteur % 8 == 3){ allLeds(ORANGE); } else if (compteur %8 == 4){ allLeds(PURPLE); } else if (compteur %8 == 5){ allLeds(PINK); } else if (compteur %8 == 6){ allLeds(BLUE); } else if (compteur %8 == 7){ allLeds(WHITE); } valPoulsPrec = 1; } else{ valPoulsPrec = 0; } }
Suite du projet :