Table des matières:
- Étape 1: Matériaux et pièces nécessaires:
- Étape 2: anneaux néopixels
- Étape 3: Connexions
- Étape 4: Le code:
- Étape 5: Tout assembler:
Vidéo: Lunettes de relaxation - ITTT : 5 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:09
Projet HKU - ITTT (If This Then That) - Julia Berkouwer, 1B
Vous êtes-vous déjà senti stressé et vous ne savez tout simplement pas comment vous calmer, alors vous devriez essayer ces lunettes de relaxation ! Vous les mettez et fermez les yeux, puis un schéma de respiration jouera. En suivant ce schéma de respiration, votre rythme respiratoire se réduira à inspirer et expirer 6 fois par minute. En faisant cela, il libère le stress quotidien.
Vous pouvez également suivre l'intensité de votre respiration en appuyant sur un interrupteur à l'aide d'un capteur fsr.
Avec ce didacticiel, je vais vous guider pas à pas dans la construction de vos propres lunettes de relaxation.
Étape 1: Matériaux et pièces nécessaires:
Matériaux:
1x arduino uno;
1 planche à pain ou PCV;
3x 10k résistances
Fils (de préférence des couleurs différentes pour qu'il soit plus facile de dire quelles choses vont au sol et lesquelles vont à différentes broches, etc.);
Certains tubes thermorétractables;
2x Anneau NeoPixel - 16 x 5050 LED RVB avec Pilotes Intégrés;
1x interrupteur;
1x capteur FSR;
1x lunettes SteamPunk (vous pouvez les acheter dans un magasin de fête, elles sont faciles à utiliser car la bague néopixel s'adapte parfaitement aux lunettes. Vous essayez toujours d'utiliser d'autres lunettes ou de créer les vôtres.);
1x une sorte de bande (elastick) à mettre autour de votre poitrine.
Outils:-Ordinateur portable
-Fer à souder
-Logiciel IDE Arduino
Vous verrez deux boutons et un interrupteur sur mon pvc, je n'utilise que le bouton gauche pour le connecter à l'interrupteur, je n'utilise pas le deuxième bouton à droite de la photo. J'ai mis les boutons sur le pvc avant de réaliser que je n'en avais pas besoin et que j'avais besoin d'utiliser un interrupteur à la place.
Ci-dessous, vous verrez des photos de tout ce que j'ai utilisé:
Étape 2: anneaux néopixels
Le fil blanc est relié à la terre à l'arrière de l'anneau néopixel.
Le fil orange est connecté au 5V.
Et le fil marron est connecté à l'entrée de données
Étape 3: Connexions
Voici à quoi ressemblait ma maquette lors du prototypage, vous pouvez l'utiliser comme référence.
J'ai également fait un schéma du câblage de ce à quoi il est censé ressembler avec un seul bouton.
Étape 4: Le code:
Ce n'est probablement pas le code le plus efficace, mais il fonctionne pour moi. Mettez-vous au défi et essayez de le rendre plus efficace;P
#comprendre
// Lequel
broche sur l'Arduino est connectée aux NeoPixels?
#définir
NIP 6
// Lequel
la broche de l'Arduino est connectée au bouton
#définir
BUTTON_PIN 9
// Comment
de nombreux NeoPixels sont attachés à l'Arduino?
#définir
NUMPIXELS 16
// Lorsque
nous configurons la bibliothèque NeoPixel, nous lui indiquons combien de pixels et quelle broche utiliser pour envoyer des signaux.
// Noter
que pour les anciennes bandes NeoPixel, vous devrez peut-être modifier le troisième paramètre - voir le strandtest
//
exemple pour plus d'informations sur les valeurs possibles.
Adafruit_NeoPixel
pixels = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
pause int
= 1; //retard2
entier
pause2 = 80; // baisse lorsque fsr est utilisé
entier
pause3 = 150; // faire quand fsr est utilisé
entier
délaival = 4; // retard1
entier
fsrPin = 0; // le FSR et le pulldown 10K sont connectés à a0
entier
fsrLecture;
annuler
mettre en place() {
pinMode(BUTTON_PIN, INPUT);
Serial.begin(9600);
pixels.begin(); // Ceci initialise le
Bibliothèque NeoPixel.
pixels.show();
}
bool
bouton pressé(int pin){
return digitalRead(pin);
}
annuler
loop() { // lit si l'entrée de la broche est vraie ou fausse
fsrReading = analogRead(fsrPin);
Serial.print("Lecture analogique = ");
Serial.print(fsrReading);
if (bouton pressé (BUTTON_PIN) == vrai){
//effet de lumière lors de l'utilisation du capteur fsr
if (fsrReading > 50){
pixels.setPixelColor(0, 1, 0, 1);
pixels.setPixelColor(15, 1, 0, 1);
pixels.setPixelColor(1, 1, 0, 1);
pixels.setPixelColor(14, 1, 0, 1);
pixels.show();
retard (pause3);
}
if (fsrLecture < 52){
pixels.setPixelColor(0, 0, 0, 0);
pixels.setPixelColor(15, 0, 0, 0);
pixels.setPixelColor(1, 0, 0, 0);
pixels.setPixelColor(14, 0, 0, 0);
pixels.show();
retard (pause2);
}
if (fsrReading > 57){
pixels.setPixelColor(2, 1, 0, 1);
pixels.setPixelColor(13, 1, 0, 1);
pixels.setPixelColor(3, 1, 0, 1);
pixels.setPixelColor(12, 1, 0, 1);
pixels.show();
retard (pause3);
}
if (fsrLecture < 59){
pixels.setPixelColor(2, 0, 0, 0);
pixels.setPixelColor(13, 0, 0, 0);
pixels.setPixelColor(3, 0, 0, 0);
pixels.setPixelColor(12, 0, 0, 0);
pixels.show();
retard(pause2);
}
if (fsrReading > 65){
pixels.setPixelColor(4, 1, 0, 1);
pixels.setPixelColor(11, 1, 0, 1);
pixels.setPixelColor(5, 1, 0, 1);
pixels.setPixelColor(10, 1, 0, 1);
pixels.show();
retard (pause3);
}
if (fsrLecture <67){
pixels.setPixelColor(4, 0, 0, 0);
pixels.setPixelColor(11, 0, 0, 0);
pixels.setPixelColor(5, 0, 0, 0);
pixels.setPixelColor(10, 0, 0, 0);
pixels.show();
retard (40);
}
if (fsrReading > 79){
pixels.setPixelColor(6, 1, 0, 1);
pixels.setPixelColor(9, 1, 0, 1);
pixels.setPixelColor(7, 1, 0, 1);
pixels.setPixelColor(8, 1, 0, 1);
pixels.show();
retard (pause3);
}
if (fsrLecture <85){
pixels.setPixelColor(6, 0, 0, 0);
pixels.setPixelColor(9, 0, 0, 0);
pixels.setPixelColor(7, 0, 0, 0);
pixels.setPixelColor(8, 0, 0, 0);
pixels.show();
retard(20);
}
}
autre{
respirer_bleu (20, 100, 0, 1, 1); // Ordinaire
effet
}
}
// Pause
= délai entre les transitions
// Pas
= nombre de pas
// R, V, B = valeurs RVB complètes
// De void respirer est voor het licht effect als de
fsrsensor niet gebruikt wordt. Deze void wordt in de void loop() weer aangeroepen.
void breathe_blue(int pause, int étapes, octet R, octet G, octet B) {
entier
tmpR, tmpG, tmpB; // Valeurs temporaires
// Fondu vers le haut
for (int s=1; s<=steps; s++) {
tmpR = (R * s) /
pas; // Multipliez d'abord pour éviter les erreurs de troncature
tmpG = (G * s) / pas;
tmpB = (B * s) / pas;
pour (entier i=0;
jepixels.setPixelColor(0, tmpR, tmpG+1, tmpB);
pixels.setPixelColor(15, tmpR, tmpG+1, tmpB);
}
pixels.show();
retard(4);
}
// Fondu vers le haut
for (int s=1; s<=steps; s++) {
tmpR = (R * s) /
pas; // Multipliez d'abord pour éviter les erreurs de troncature
tmpG = (G * s) / pas;
tmpB = (B * s) / pas;
pour (entier i=0;
jepixels.setPixelColor(1, tmpR, tmpG+1, tmpB);pixels.setPixelColor(14, tmpR, tmpG+1, tmpB);
}
pixels.show();
retard(4);
}
// Fondu vers le haut
for (int s=1; s<=steps; s++) {
tmpR = (R * s) /
pas; // Multipliez d'abord pour éviter les erreurs de troncature
tmpG = (G * s) / pas;
tmpB = (B * s) / pas;
pour (entier i=0;
jepixels.setPixelColor(2, tmpR, tmpG+2, tmpB);pixels.setPixelColor(13, tmpR, tmpG+2, tmpB);
}
pixels.show();
retard (3.5);
}
// Fondu vers le haut
for (int s=1; s<=steps; s++) {
tmpR = (R * s) /
pas; // Multipliez d'abord pour éviter les erreurs de troncature
tmpG = (G * s) / pas;
tmpB = (B * s) / pas;
pour (entier i=0;
jepixels.setPixelColor(3, tmpR, tmpG+3, tmpB+5);pixels.setPixelColor(12, tmpR, tmpG+3, tmpB+5);
}
pixels.show();
retard(3);
}
pour (entier i=0;
jepixels.setPixelColor(0, 0, 0, 0);pixels.setPixelColor(15, 0, 0, 0);
}
// Fondu vers le haut
for (int s=1; s<=steps; s++) {
tmpR = (R * s) /
pas; // Multipliez d'abord pour éviter les erreurs de troncature
tmpG = (G * s) / pas;
tmpB = (B * s) / pas;
pour (entier i=0;
je
pixels.setPixelColor(4, tmpR, tmpG+3, tmpB+15);pixels.setPixelColor(11, tmpR, tmpG+3, tmpB+15);
}
pixels.show();
retard(3);
}
// Fondu vers le haut
for (int s=1; s<=steps; s++) {
tmpR = (R * s) /
pas; // Multipliez d'abord pour éviter les erreurs de troncature
tmpG = (G * s) / pas;
tmpB = (B * s) / pas;
pour (entier i=0;
jepixels.setPixelColor(5, tmpR, tmpG+4, tmpB+20);pixels.setPixelColor(10, tmpR, tmpG+4, tmpB+20);
}
pixels.show();
retard(2);
}
pour (entier i=0;
jepixels.setPixelColor(1, 0, 0, 0);
pixels.setPixelColor(14, 0, 0, 0);
}
// Fondu vers le haut
for (int s=1; s<=steps; s++) {
tmpR = (R * s) /
pas; // Multipliez d'abord pour éviter les erreurs de troncature
tmpG = (G * s) / pas;
tmpB = (B * s) / pas;
pour (entier i=0;
jepixels.setPixelColor(6, tmpR, tmpG+2, tmpB+40);
pixels.setPixelColor(9, tmpR, tmpG+2, tmpB+40);
}
pixels.show();
délai (valeur de délai);
}
pour (entier i=0;
jepixels.setPixelColor(2, 0, 0, 0);pixels.setPixelColor(13, 0, 0, 0);
}
// Fondu vers le haut
for (int s=1; s<=steps; s++) {
tmpR = (R * s) /
pas; // Multipliez d'abord pour éviter les erreurs de troncature
tmpG = (G * s) / pas;
tmpB = (B * s) / pas;
pour (entier i=0;
je
pixels.setPixelColor(7, tmpR, tmpG, tmpB+44);pixels.setPixelColor(8, tmpR, tmpG, tmpB+44);
}
pixels.show();
délai (valeur de délai);
}
// Fondu vers le bas
for (int s=steps; s>0; s--) {
tmpR = (R * s) / pas; // Multipliez d'abord pour éviter la troncature
les erreurs
tmpG = (G * s) / pas;
tmpB = (B * s) / pas;
pour (int i=0; i
pixels.setPixelColor(7, tmpR, tmpG, tmpB);
pixels.setPixelColor(8, tmpR, tmpG, tmpB);
}
pixels.show();
retard(1);
}
// Fondu vers le bas
for (int s=steps; s>0; s--) {
tmpR = (R * s) / pas; // Multipliez d'abord pour éviter la troncature
les erreurs
tmpG = (G * s) / pas;
tmpB = (B * s) / pas;
pour (int i=0; i
pixels.setPixelColor(6, tmpR, tmpG, tmpB);
pixels.setPixelColor(9, tmpR, tmpG, tmpB);
}
pixels.show();
retard(1);
}
// Fondu vers le bas
for (int s=steps; s>0; s--) {
tmpR = (R * s) / pas; // Multipliez d'abord pour éviter la troncature
les erreurs
tmpG = (G * s) / pas;
tmpB = (B * s) / pas;
pour (int i=0; i
pixels.setPixelColor(5, tmpR, tmpG, tmpB);
pixels.setPixelColor(10, tmpR, tmpG, tmpB);
}
pixels.show();
retard(2);
}
// Fondu vers le bas
for (int s=steps; s>0; s--) {
tmpR = (R * s) / pas; // Multipliez d'abord pour éviter la troncature
les erreurs
tmpG = (G * s) / pas;
tmpB = (B * s) / pas;
pour (int i=0; i
pixels.setPixelColor(4, tmpR, tmpG, tmpB);
pixels.setPixelColor(11, tmpR, tmpG, tmpB);
}
pixels.show();
retard(2);
}
// Fondu vers le bas
for (int s=steps; s>0; s--) {
tmpR = (R * s) / pas; // Multipliez d'abord pour éviter la troncature
les erreurs
tmpG = (G * s) / pas;
tmpB = (B * s) / pas;
pour (int i=0; i
pixels.setPixelColor(3, tmpR, tmpG, tmpB);
pixels.setPixelColor(12, tmpR, tmpG, tmpB);
}
pixels.show();
retard(3);
}
// Fondu vers le bas
for (int s=steps; s>0; s--) {
tmpR = (R * s) / pas; //
Multipliez d'abord pour éviter les erreurs de troncature
tmpG = (G * s) / pas;
tmpB = (B * s) / pas;
pour (int i=0; i
pixels.setPixelColor(2, tmpR, tmpG, tmpB);
pixels.setPixelColor(13, tmpR, tmpG, tmpB);
}
pixels.show();
retard(3);
}
// Fondu vers le bas
for (int s=steps; s>0; s--) {
tmpR = (R * s) / pas; // Multipliez d'abord pour éviter la troncature
les erreurs
tmpG = (G * s) / pas;
tmpB = (B * s) / pas;
pour (int i=0; i
pixels.setPixelColor(1, tmpR, tmpG, tmpB);
pixels.setPixelColor(14, tmpR, tmpG, tmpB);
}
pixels.show();
retard(4);
}
// Fondu vers le bas
for (int s=steps; s>0; s--) {
tmpR = (R * s) / pas; // Multipliez d'abord pour éviter la troncature
les erreurs
tmpG = (G * s) / pas;
tmpB = (B * s) / pas;
pour (int i=0; i
pixels.setPixelColor(0, tmpR, tmpG, tmpB);
pixels.setPixelColor(15, tmpR, tmpG, tmpB);
}
pixels.show();
retard(4);
}
}
Étape 5: Tout assembler:
Vous pouvez simplement laisser tous vos fils connectés à votre planche à pain ou à un PVC, c'est à vous de décider (j'ai choisi de mettre un PVC sur l'arduino c'est joli et soigné comme ça).
L'étape suivante consiste à mettre des tubes thermorétractables autour de tous les fils afin que ce soit moins de gâchis.
Si vous avez choisi d'utiliser un PVC, vous devriez déjà avoir tout soudé ensemble.
Après cela, vous placez les anneaux néopixels à l'extérieur des lunettes (assurez-vous que les leds sont alignées au fond) et fixez-les en place avec du ruban adhésif ou de la colle (j'ai utilisé du ruban adhésif).
Vous pouvez choisir de coller le capteur fsr à l'élastique avec du ruban adhésif ou de le laisser seul.
Profitez de vos lunettes:)
Conseillé:
Lunettes intelligentes (moins de 10 $ !!!): 8 étapes (avec photos)
Lunettes intelligentes (moins de 10 $ !!!) : Bonjour ! Nous connaissons tous les lunettes intelligentes comme celle nommée E.D.I.T.H. réalisé par notre personnage bien-aimé Tony Stark qui a ensuite été transmis à Peter Parker. Aujourd'hui, je vais construire un verre intelligent à moins de 10 $ ! Ils ne sont pas tout à fait un
Lunettes de vision nocturne pour Google Cardboard : 10 étapes (avec photos)
Lunettes de vision nocturne pour Google Cardboard : Avis de non-responsabilité : l'utilisation de cet appareil est uniquement destinée à un usage ludique, éducatif et scientifique; pas pour l'espionnage et/ou la surveillance. Le "gadget espion" des fonctionnalités ont été ajoutées à l'application juste pour le plaisir et ne serviraient à rien pour
Bricolage - Lunettes RVB : 3 étapes (avec photos)
Bricolage | Lunettes RVB : Hé ! J'ai fabriqué des lunettes RVB à l'aide de LED WS2812B et d'Arduino Nano. Les lunettes ont de nombreuses animations qu'elles peuvent être contrôlées à l'aide d'une application mobile. L'application peut communiquer avec Arduino via le module Bluetooth
Interrupteur de lumière contrôlé par le clignement des yeux à l'aide des lunettes de protection de la tête d'effacement de Shota Aizawa (My Hero Academia): 8 étapes (avec photos)
Interrupteur d'éclairage contrôlé par le clignotement des yeux à l'aide des lunettes de protection de Shota Aizawa (My Hero Academia): Si vous lisez mon manga Hero Academia ou regardez mon anime Hero Aizawa, vous devez connaître un personnage nommé shota aizawa. Shota Aizawa, également connu sous le nom de Eraser Head, est un héros professionnel et le professeur principal de la classe 1-A de U.A. L'alter de Shota lui donne l'ab
Lunettes à cristaux liquides pour l'amblyopie (lunettes d'entraînement à occlusion alternée) [ATtiny13] : 10 étapes (avec photos)
Lunettes à cristaux liquides pour l'amblyopie (lunettes d'entraînement à occlusion alternée) [ATtiny13] : amblyopie (œil paresseux), un trouble de la vue qui affecte environ 3% de la population, généralement traité par de simples cache-œil ou des gouttes d'atropine. Malheureusement, ces méthodes de traitement bloquent un œil plus fort pendant de longues périodes ininterrompues, non