IMA4 2017/2018 P19
Sommaire
Présentation générale
Description
Notre objectif est créer un bijou de type collier combinant art et jeu de lumières réalisé avec des LED. C’est-à-dire il faut ajouter une dimension dynamique, des capteurs pour remonter température et rythme cardiaque et harmoniser l'animation lumineuse et l'humeur du porteur. Pas seulement ça, les LED peuvent être contrôlées par un circuit basé sur un microcontrôleur, et la forme du circuit et le placement des composants doit être étudié pour s'intégrer artistiquement
Objectifs
Créer un bijou de type collier combinant art et jeu de lumières réalisé avec des LEDs.
Analyse du projet
Positionnement par rapport à l'existant
Maintenant, on a trouvé certains produits composant des LEDS. Mais il n'y pas ni de capteurs de température ni de capteurs de rythme cardiaque.
Analyse du concurrent
Bague lumineuse à LED clignotante en silicone
- Effet puissant et couleurs changeantes
- Couleurs Assorties
- Pile incluse
- Bouton on/off
- Durer de vie de la pile 20 h (changeable)
La robe LED
- Télécommande robe LED Vêtements lumineux à LED Robe de mariée Mode double couche robe.
- Utilisez la télécommande pour changer les couleurs de LED : Batterie rechargeable.
- Cette robe lumineuse peut être utilisé à la fois dans la nuit de noce ou en plein jour fête de mariage. En une nuit splendide, il vous fait d'être le centre d'attention!
Collier en or LED
- Collier ras du cou sur support métallique.
- Alimenté par une batterie rechargeable, il peut rester allumé du crépuscule à l’aube.
- Alumé ou éteint, il est magnifique de jour comme de nuit.
- Mini câble de charge USB inclut - batterie rechargeable minuscule.
led&ref=sr_gallery_2 Site du collier
Scénario d'usage du produit ou du concept envisagé
S’il y a une personne qui a notre produit, quand il participe une fête, il va être plus joli. Le collier va changer la luminance selon le changement de température de corps et le rythme de radique. Ce collier a plusieurs couleurs et plusieurs façons d’allumer. Donc ça va être super charment.
Si les jeunes voudraient donner un gâteau pour ses grand-parents, ce collier va être un gâteau parfait, particulièrement pour la grand-mère. Ce collier pourrait surveiller la santé tout le temps. Pace qu’il y a un capteur de température et un capteur de radique pour tester la température de corps et le rythme de radique. Les changements peuvent être trouvé par le changement de brillance de LED.
Notre collier aussi peut être utilisé pour vérifier si quelqu’un ment. Parce que si quelqu’un ment, son rythme de cœur va changer. Donc ce sera facile de trouver.
Le design de collier
Réponse à la question difficile
On a également optimisé le modèle, en utilisant la transmission Bluetooth entre le capteur et le contrôleur, afin d'atteindre l'objectif de la connectivité sans fil.
REX : Pas convaincu. Comment allez-vous implanter Bluetooth sur le capteur et sur le circuit du collier ?
Préparation du projet
Cahier des charges
Choix techniques : matériel et logiciel
Afin de porter pratique, l'ensemble des bijoux ne devrait pas être trop lourd, la puissance ne devrait pas être trop grande. En raison de ça, on a choisi des capteurs légers, des piles bouton et des LED qui ont bonne performance thermique. On a également optimisé le modèle, en utilisant la transmission Bluetooth entre le capteur et le contrôleur, afin d'atteindre l'objectif de la connectivité sans fil.
- 50 LEDs CMS :
- Composants électroniques :
- des résistances ;
- 1 ATMega328p ;
- 1 DS18B20 capteur ;
- 1 Pulsesensor capteur ;
- 2 piles de boutons de 3V ;
- 1 bouton.
- Divers :
- 1 breadboard ;
- 1 ruban isolant ;
- 1 interrupteur bascule ;
- des fils ;
- 1 toile.
Type de LED
Le courant de chaque LED cylindrique à bout arrondi est habituellement inferieur de soixante milliampère, donc la puissance n’est pas grand, son consommation d'énergie est faible, il a bonne performance thermique. Le courant de chaque LED CMS est environ de cinq milliampère à mille milliampère, donc son puissance est de zéro zéro six watt à un watt, la consommation d’énergie est plus petite que l’autre, et de plus, grace à sa forme, elle plus comfort pour le peau. En résumé, on a décidé de choisir LED SMD pour construire notre bijou. Et afin de réaliser la partie principale du collier ne comporterait pas de circuit, on veut utiliser les fils pour souder tous les LEDs.
Capteurs
En raison du sujet nous dit que le collier peut aussi comporter des capteurs à même la peau pour remonter température et rythme cardiaque et harmoniser l'animation lumineuse et l'humeur du porteur. Comme le collier devrait être porté autour du cou, donc nos capteurs doivent être petits et légers.
Capteur de rythme cardiaque
On sait qu’il y a trois méthodes pour tester la fréquence cardiaque : Premièrement, extrait du signal optique ; deuxièmement, l'utilisation de capteurs de pression pour mesurer le pouls ; troisièmement, la méthode du volume photoélectrique. A cause de les deux premières méthodes sont sensibles aux perturbations du mouvement, donc on a décidé d’utiliser la capteur Pulsesensor, qui est capteur analogique à réflexion photoélectrique pour la mesure la fréquence cardiaque. On veut le mettre près de l'artère carotide, mais si le pouls de l'artère carotide est si faible qu'il ne peut pas être détecté, on veut le serrer sur le lobe de l'oreille.
Capteur de température
Pour mesurer la température, on a choisi DS18B20 CMS qui possède une résolution numérique de 12 bits avec une plage de mesure de moins cinquante-cinq dégrée à cent vingt-cinq dégrée. La précision analogique du capteur est de zéro cinq dégrée entre moins dix dégrée et quatre-vingt cinq dégrée, ce qui rend ce capteur très intéressant pour une utilisation "normale". Et le schéma du montage de pulsesensor est comme ça, il est lié directement à Arduino, un fil noir sur la pin GND, un fil rouge sur la pin +5v de l’arduino, un fil bleu sur la pin A0. Pour que le DS18B20 effectue des conversions de température précises, les lignes d'entrée /sortie doivent fournir assez d'énergie pendant la transition de température, donc on a choisi le mode d’alimentation externe, à cause de le mode d’alimentation parasitaire ne peut pas fournir assez de courant résultant en plus grande erreur de mesure de température.
Liste des tâches à effectuer
- On étudie comment utiliser deux capteurs et les tester.
- On constitue le circuit global. On lie les LEDs sur le collier et ajoute deux capteurs et tester le circuit.
- On utilise l'ardunio UNO pour programmer l'Atmega328p pour contrôler les LEDs et les deux capteurs. Et on l'ajoute à circuit complet.
- On teste le circuit complet et on fait des simulations.
- On améliore notre circuit pour faire notre circuit plus esthétique.
Réalisation du Projet
Feuille d'heures
Tâche | Prélude | Heures S1 | Heures S2 | Heures S3 | Heures S4 | Heures S5 | Heures S6 | Heures S7 | Heures S8 | Heures S9 | Heures S10 | Total |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Analyse du projet | 15 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 |
Prologue
Avant de commencer notre projet, d’abord, on analyse notre sujet. Selon le demande de sujet, on décide de faire un collier comme un « choker ». Et on choisit un capteur de température et un capteur de radique pour détecter le changement de température et de rythme de cœur. En considérant la longueur du cou, on va mettre 32 LEDs sur ce collier et il contient quatre couleurs. On va utiliser Atmega328p pour contrôler des LEDs.
Semaine 1 et 2
On a appris comment utiliser la contrôleur TLC5711 et TLC5947 sur internet, la website est ci-dessous:
Et ensuite on a soudé les fils et les interfaces aux TLC5711
alors on a câblé et a connecté V+ et VCC à 5VDC
On a installé Arduino, a téléchargé la bibliothèque TLC5711, l'a ajouté au Library, et on a compilé les codes ci-dessous pour comprendre le function de chaque partie
#include "Adafruit_TLC59711.h" #include <SPI.h> #define NUM_TLC59711 2 #define data 11 #define clock 13 Adafruit_TLC59711 tlc = Adafruit_TLC59711(NUM_TLC59711, clock, data); void setup() { Serial.begin(9600); Serial.println("TLC59711 test"); pinMode(10, OUTPUT); tlc.begin(); tlc.write(); } void loop() { colorWipe(65535, 0, 0, 100); // "Red" (depending on your LED wiring) delay(200); colorWipe(0, 65535, 0, 100); // "Green" (depending on your LED wiring) delay(200); colorWipe(0, 0, 65535, 100); // "Blue" (depending on your LED wiring) delay(200); rainbowCycle(5); } // Fill the dots one after the other with a color void colorWipe(uint16_t r, uint16_t g, uint16_t b, uint8_t wait) { for(uint16_t i=0; i<8*NUM_TLC59711; i++) { tlc.setLED(i, r, g, b); tlc.write(); delay(wait); } } // Slightly different, this makes the rainbow equally distributed throughout void rainbowCycle(uint8_t wait) { uint32_t i, j; for(j=0; j<65535; j+=10) { // 1 cycle of all colors on wheel for(i=0; i < 4*NUM_TLC59711; i++) { Wheel(i, ((i * 65535 / (4*NUM_TLC59711)) + j) & 65535); } tlc.write(); delay(wait); } } // Input a value 0 to 4095 to get a color value. // The colours are a transition r - g - b - back to r. void Wheel(uint8_t ledn, uint16_t WheelPos) { if(WheelPos < 21845) { tlc.setLED(ledn, 3*WheelPos, 65535 - 3*WheelPos, 0); } else if(WheelPos < 43690) { WheelPos -= 21845; tlc.setLED(ledn, 65535 - 3*WheelPos, 0, 3*WheelPos); } else { WheelPos -= 43690; tlc.setLED(ledn, 0, 3*WheelPos, 65535 - 3*WheelPos); } }
On a connecté les LEDs en serie et puis téléchargé les codes, le résultat est comme ci-dessous:
Semaine 3 et 4
Dans ces deux semaines, on a programmé un code du LED selon le code de Adafruit TLC59711. En groupe de deux LEDs, les LEDs qui dans la même groupe sont liés en série, les connexions entre les différents groupes sont en parallèle. Notre LEDs sont rouges, donc chaque groupe a été connecté à la broche Ri. Dans notre code, les LEDs peuvent allumer et éteindre progressivement, mais pas seulement ça, les groupes peut circuler un par un en même temps.
Le code ci-dessous:
#include "TLC59711.h" #include <SPI.h> #define NUM_TLC59711 1 #define data 11 #define clock 13 Adafruit_TLC59711 tlc = Adafruit_TLC59711(NUM_TLC59711, clock, data); void setup() { Serial.begin(9600); Serial.println("test led"); pinMode(10, OUTPUT); tlc.begin(); tlc.write(); } uint8_t i=0; void loop() { rise(i); down(i); i=i+3; if(i>9) i=0; Serial.println(i); delay(200); } void rise(uint8_t chan) { uint32_t j; Serial.println("rise"); for(j=0; j<65535; j+=100){ tlc.setPWM(chan,j); tlc.write(); } } void down(uint8_t chan) { int32_t j; Serial.println("down"); for(j=65535; j>=0; j-=100){ tlc.setPWM(chan,j); tlc.write(); } } // "100" c'est la vitesse de variation de la luminance. Donc on peut accélérer la variation par augmenter "100" à "1000" ou ralentir la variation par diminuer "100" à "10".
En suite on a compilé notre codes et les a téléchargé à Arduino UNO pour les tester.
Le résultat est ci-dessous:
Un autre façon de connexions utilisant la batterie pour l'alimenter est comme ça:
A cause de la puissance de LED qu'on choisissait est très grande et la luminance est trop forcée, on a changé notre désigne de colis et a choisi nouveaux types de LEDs. Mais les nouveaux types de LEDs sont plus petit que les précédents, donc on a augmenté le nombre de LED à 200.
Semaine 5-8
Dans notre premier dessin: On a décidé utiliser deux contrôleurs TLC59711 pour contrôler 48 groups des LEDs et deux boutons de piles à trois volt pour fournir notre coli. Chaque group contient trois LEDs(orange, vert, jaune) ou deux LEDs(bleu), à cause de la tension nominale entre les LEDs bleu est environ trois volt, mais la tension nominale entre les LEDs orange vert ou jaune est environ deux volt. Et on a fait 24 groups de LEDs en série et les deux 24 groups de LEDs en parallèle, ils partagent la même broche. Mais comme le courant maximale de TLC59711 est 0.6A, on ne peut pas mettre deux série de LEDs en parallèle, 1.2A est très grand pour le contrôleur TLC59711
Dans notre deuxième dessin: On a décidé utiliser seulement un contrôleur TLC5947 pour contrôler 24 groups des LEDs et deux bouton de piles à trois volt pour fournir notre coli. Parce que le contrôleur TLC5947 a 24 chanel et puis on peut contrôler toues les LEDs avec un contrôleur, ça c'est propice à diminuer la dimension de la carte PCB. Mais la luminance de ce dessin n'est pas suffisant, et on a deux capteur aussi, donc six volt n'est pas suffisant pour fournir le coli quand même.
Dans notre troisième dessin: On a décidé utiliser deux contrôleur TLC5947 pour contrôler 48 groups des LEDs et trois bouton de piles à trois volt pour fournir notre coli. Chaque group est liée à une broche. Pour diminuer la dimension de notre carte PCB, on a utilise un LilyPad Arduino et une carte USB comme l'interface périphérique USB. Et quand on a désigné la carte PCB, on a choisi les deux couches, on a mis une partie de fil sur le devant et une autre partie de fil est à l'opposé, on a met les trois bouton de piles à l'opposé aussi.
Le schéma du LilyPad Arduino et Carte USB sont comme ci-dessous:
Notre plan final sont comme ci-dessous:
Semaine 9
Dans cette séance de Projet, on redésigne notre collier. Il y a 16 groups de LEDs dans notre collier, et une type de groupe comme [orange vert jeune; bleu bleu; orange vert jeune], une autre type de groupe comme [bleu bleu; orange vert jeune; bleu bleu], les position de capteurs sont à gauche et à droite de 8 centrales groups des LEDs, entre les deux LEDs, on veut utilise les résistance à 0 ohm pour liaison. Le face de collier est comme ci-dessous:
Pour lier les LEDs avec notre PCB, on veut utilise les fils très fines, leurs largeur sont environ 1mm, et on veut les mettre comme trois couches, 16 des fils côte à côte dans une couche. A la position des capteurs, on veut les mettre sur le dessus des capteurs, en raison de les deux capteurs doivent être près du cou pour mesurer la température et la palpitation. Pour les autres positions, on veut les mettre derrière les LEDs, et on veut utilise le tissu ou quelques choses pour séparer les LEDs et les fils. Le verso et le côté de collier sont comme ci-dessous:
Semaine 10
Après le redésigne de notre collier, on soude l'Atmega328p,un reset, deux capacités, des résistances, un LED testé, un connecteur et des fils dans un circuit pour tester le circuit. Le connecteur est lié avec FTDI qui va relier avec la partie USB pour transmettre le programme d'Atmega328p. Quand on finit la soudure, on utilise l'arduino pour le tester. Si le LED testé allume, le circuit est correct. Après on teste l'Atmega328p, on soude autre composants. Par ailleurs, parce que si on soude les LEDs directement, c'est un peu difficile. Donc on fait un PCB pour mettre des LEDs ensemble.
Semaine 11 et 12
parce que notre circuit n'est pas correct, donc on refait le circuit et le PCB. On change le schéma de piles dans un autre PCB. Et pour mieux connecter les PCB avec le collier, on ajoute deux parties vides. Du coup, on peut passer le collier par la partie vide. En attendant d'imprimer les PCBs, on étudie les deux capteurs -- DS18B20U et PulseSensor. PulseSensor est un capteur simple, on peut trouver le code sur Internet. Quand on teste le code, le capteur peut réaliser la fonction d'allumer le LED selon le rythme de cœur. Et après on va essayer de changer la façon d'allumer pour montrer la changement de rythme de cœur. Pour le capteur de température -- DS18B20U, parce que le capteur est trop petit, donc on faire un PCB pour le souder. Et son circuit est simple. Mais on ne trouve pas sa symbol dans l'application Fritzing. Donc on fait sa symbol nous même. D'abord, on trouve sa daille. Et on cherche un composant dans l'application Fritzing qui a la même daille. Ensuite, on export le schéma de ce composant pour le modifier. Finalement, on obtient un symbol qui a la même forme que DS18B20U. Le dernier chose à faire est de modifier les interfaces de ce composant. Selon le datasheet de DS18B20U, on remet toutes les interfaces. Du coup, on obtient le vraiment symbol de DS18B20U.
Le code pour tester PulseSensor est suivant:
- define LED_PIN 6 //led_pin
- define ONE_WIRE_BUS 2 // ds18b20_pin
- define HEART_PIN A0 //pulse_pin
OneWire oneWire(ONE_WIRE_BUS); //define_ds18b20
DallasTemperature sensors(&oneWire); //pass_reference_to_sensor
void setup() {
Serial.begin(9600);
sensors.begin();
}
void loop() {
//get_pulse_value
int heartValue = analogRead(HEART_PIN);
//get_temp_value
int tempCValue=sensors.getTempCByIndex(0);
//filter
int filterValue = filter(heartValue);
Serial.println(filterValue);
//trans_value_to_rgb_value(0-255)
int maphValue = map(constrain(filterValue, 940, 1024), 940, 1024, 0, 255);
int maptValue = map(constrain(tempCValue, 35, 40), 35, 40, 0, 255);
delay(20);
}
//filter
int filter (int input) {
- define FILTER_SIZE 10
static int filterArray[FILTER_SIZE] = {0};
static int fi = 0;
filterArray[fi++] = input;
if (fi >= FILTER_SIZE) {
fi = 0;
} int32_t output = 0;
for (int i = 0; i < FILTER_SIZE; i++) {
output += filterArray[i];
}
return int(output / FILTER_SIZE);
}