Taula de continguts:
- Pas 1: materials i peces necessàries:
- Pas 2: anells de Neopixel
- Pas 3: connexions
- Pas 4: el codi:
- Pas 5: ajuntar-ho tot:
Vídeo: Ulleres de relaxació - ITTT: 5 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:15
Projecte HKU - ITTT (If This Then That That) - Julia Berkouwer, 1B
Alguna vegada us heu sentit estressats i no sabeu com calmar-vos, proveu aquestes ulleres de relaxació! Els poseu i tanqueu els ulls, i després es reproduirà un patró de respiració. Seguint aquest patró de respiració, el ritme respiratori es reduirà a respirar dins i fora 6 vegades al minut. En fer-ho, alliberarà l’estrès diari.
També podeu fer un seguiment de la intensitat de la respiració girant un interruptor mitjançant un sensor fsr.
Amb aquest toturial us guiaré pas a pas per construir les vostres pròpies ulleres de relaxació.
Pas 1: materials i peces necessàries:
Materials:
1x arduino uno;
1xbreadboard o PCV;
Resistències 3x 10k
Filferros (preferiblement colors diferents, de manera que sigui més fàcil saber quines coses van a terra i quines van a diferents pins, etc.);
Alguns tubs de contracció de calor;
2x anell NeoPixel: LED RGB 16 x 5050 amb controladors integrats;
1x interruptor;
1x sensor FSR;
1x ulleres SteamPunk (les podeu comprar a una botiga de festes, són fàcils d'utilitzar perquè l'anell de neopixel s'adapta perfectament a les ulleres. Sempre proveu d'utilitzar altres ulleres o creeu-ne les vostres).
1x una mena de banda (elastica) per col·locar-la al voltant del pit.
Eines: -Portàtil
-Soldador
-Programari IDE Arduino
Veureu dos botons i un interruptor al meu pvc, només faig servir el botó esquerre per connectar-lo al commutador, no faig servir el segon botó a la dreta de la imatge. Vaig posar els botons del pvc abans d’adonar-me que no els necessitava i que havia d’utilitzar un interruptor.
A continuació veureu imatges de tot el que he utilitzat:
Pas 2: anells de Neopixel
El cable blanc està connectat a terra a la part posterior de l’anell de neopíxels.
El cable taronja està connectat al 5V.
I el cable marró està connectat a l’entrada de dades
Pas 3: connexions
Així és com era la meva taula de treball mentre feia prototips, podeu utilitzar-la com a referència.
També vaig fer un disseny del cablejat del que se suposa que hauria de ser amb només un botó.
Pas 4: el codi:
Probablement no sigui el codi més eficient, però funciona per a mi. Desafieu-vos i intenteu que sigui més eficient; P
#incloure
// Quin
el pin de l'Arduino està connectat als NeoPixels?
# definir
PIN 6
// Quin
el pin de l'Arduino està connectat al botó
# definir
BUTTON_PIN 9
// Com
hi ha molts NeoPixels connectats a l'Arduino?
# definir
NUMPIXELS 16
// Quan
configurem la biblioteca NeoPixel, li indiquem quants píxels i quin pin utilitzar per enviar senyals.
// Nota
que per a tires de NeoPixel més antigues és possible que hagueu de canviar el tercer paràmetre: vegeu la prova de cadena
//
exemple per obtenir més informació sobre possibles valors.
Adafruit_NeoPixel
píxels = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int pausa
= 1; // demora2
int
pausa2 = 80; // baixant quan s’utilitza fsr
int
pausa3 = 150; // recuperant-se quan s’utilitza fsr
int
delayval = 4; // endarrerir1
int
fsrPin = 0; // el menú desplegable FSR i 10K estan connectats a a0
int
fsrLectura;
buit
setup () {
pinMode (BUTTON_PIN, INPUT);
Serial.begin (9600);
pixels.begin (); // Això inicialitza el
Biblioteca NeoPixel.
pixels.show ();
}
bool
premut amb botó (pin int) {
retorn digitalLlegeix (pin);
}
buit
loop () {// llegeix si l'entrada de pin és certa o falsa
fsrReading = analogRead (fsrPin);
Serial.print ("Lectura analògica =");
Serial.print (fsrReading);
if (premut amb el botó (BUTTON_PIN) == true) {
// efecte de llum quan s'utilitza el sensor fsr
if (fsrLectura> 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 (pausa3);
}
if (fsrLectura <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 (pausa2);
}
if (fsrLectura> 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 (pausa3);
}
if (fsrLectura <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 (pausa2);
}
if (fsrLectura> 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 (pausa3);
}
if (fsrLectura <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 (fsrLectura> 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 (pausa3);
}
if (fsrLectura <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);
}
}
més {
breathe_blue (20, 100, 0, 1, 1); // normal
efecte
}
}
// Pausa
= retard entre transicions
// Passos
= nombre de passos
// R, G, B = valors RGB complets
// De void breathe is voor het licht effect als de
fsrsensor niet gebruikt wordt. Deze void wordt in de void loop () weer aangeroepen.
void breathe_blue (int pausa, int passos, byte R, byte G, byte B) {
int
tmpR, tmpG, tmpB; // Valors temporals
// Fade up
for (int s = 1; s <= steps; s ++) {
tmpR = (R * s) /
passos; // Primer es multiplica per evitar errors de truncament
tmpG = (G * s) / passos;
tmpB = (B * s) / passos;
per a (int i = 0;
jopixels.setPixelColor (0, tmpR, tmpG + 1, tmpB);
pixels.setPixelColor (15, tmpR, tmpG + 1, tmpB);
}
pixels.show ();
retard (4);
}
// Fade up
per a (int s = 1; s <= passos; s ++) {
tmpR = (R * s) /
passos; // Primer es multiplica per evitar errors de truncament
tmpG = (G * s) / passos;
tmpB = (B * s) / passos;
per a (int i = 0;
jopixels.setPixelColor (1, tmpR, tmpG + 1, tmpB);pixels.setPixelColor (14, tmpR, tmpG + 1, tmpB);
}
pixels.show ();
retard (4);
}
// Fade up
per a (int s = 1; s <= passos; s ++) {
tmpR = (R * s) /
passos; // Primer es multiplica per evitar errors de truncament
tmpG = (G * s) / passos;
tmpB = (B * s) / passos;
per a (int i = 0;
jopixels.setPixelColor (2, tmpR, tmpG + 2, tmpB);pixels.setPixelColor (13, tmpR, tmpG + 2, tmpB);
}
pixels.show ();
retard (3,5);
}
// Fade up
for (int s = 1; s <= steps; s ++) {
tmpR = (R * s) /
passos; // Primer es multiplica per evitar errors de truncament
tmpG = (G * s) / passos;
tmpB = (B * s) / passos;
per a (int i = 0;
jopixels.setPixelColor (3, tmpR, tmpG + 3, tmpB + 5);pixels.setPixelColor (12, tmpR, tmpG + 3, tmpB + 5);
}
pixels.show ();
retard (3);
}
per a (int i = 0;
jopixels.setPixelColor (0, 0, 0, 0);pixels.setPixelColor (15, 0, 0, 0);
}
// Fade up
per a (int s = 1; s <= passos; s ++) {
tmpR = (R * s) /
passos; // Primer es multiplica per evitar errors de truncament
tmpG = (G * s) / passos;
tmpB = (B * s) / passos;
per a (int i = 0;
jo
pixels.setPixelColor (4, tmpR, tmpG + 3, tmpB + 15);pixels.setPixelColor (11, tmpR, tmpG + 3, tmpB + 15);
}
pixels.show ();
retard (3);
}
// Fade up
per a (int s = 1; s <= passos; s ++) {
tmpR = (R * s) /
passos; // Primer es multiplica per evitar errors de truncament
tmpG = (G * s) / passos;
tmpB = (B * s) / passos;
per a (int i = 0;
jopixels.setPixelColor (5, tmpR, tmpG + 4, tmpB + 20);pixels.setPixelColor (10, tmpR, tmpG + 4, tmpB + 20);
}
pixels.show ();
retard (2);
}
per a (int i = 0;
jopixels.setPixelColor (1, 0, 0, 0);
pixels.setPixelColor (14, 0, 0, 0);
}
// Fade up
per a (int s = 1; s <= passos; s ++) {
tmpR = (R * s) /
passos; // Primer es multiplica per evitar errors de truncament
tmpG = (G * s) / passos;
tmpB = (B * s) / passos;
per a (int i = 0;
jopixels.setPixelColor (6, tmpR, tmpG + 2, tmpB + 40);
pixels.setPixelColor (9, tmpR, tmpG + 2, tmpB + 40);
}
pixels.show ();
delay (delayval);
}
per a (int i = 0;
jopixels.setPixelColor (2, 0, 0, 0);pixels.setPixelColor (13, 0, 0, 0);
}
// Fade up
for (int s = 1; s <= steps; s ++) {
tmpR = (R * s) /
passos; // Primer es multiplica per evitar errors de truncament
tmpG = (G * s) / passos;
tmpB = (B * s) / passos;
per a (int i = 0;
jo
pixels.setPixelColor (7, tmpR, tmpG, tmpB + 44);pixels.setPixelColor (8, tmpR, tmpG, tmpB + 44);
}
pixels.show ();
delay (delayval);
}
// Fade down
per a (int s = passos; s> 0; s--) {
tmpR = (R * s) / passos; // Multiplicar primer per evitar truncaments
errors
tmpG = (G * s) / passos;
tmpB = (B * s) / passos;
per a (int i = 0; i
pixels.setPixelColor (7, tmpR, tmpG, tmpB);
pixels.setPixelColor (8, tmpR, tmpG, tmpB);
}
pixels.show ();
retard (1);
}
// Fade down
per a (int s = passos; s> 0; s--) {
tmpR = (R * s) / passos; // Multiplicar primer per evitar truncaments
errors
tmpG = (G * s) / passos;
tmpB = (B * s) / passos;
per a (int i = 0; i
pixels.setPixelColor (6, tmpR, tmpG, tmpB);
pixels.setPixelColor (9, tmpR, tmpG, tmpB);
}
pixels.show ();
retard (1);
}
// Fade down
per a (int s = passos; s> 0; s--) {
tmpR = (R * s) / passos; // Multiplicar primer per evitar truncaments
errors
tmpG = (G * s) / passos;
tmpB = (B * s) / passos;
per a (int i = 0; i
pixels.setPixelColor (5, tmpR, tmpG, tmpB);
pixels.setPixelColor (10, tmpR, tmpG, tmpB);
}
pixels.show ();
retard (2);
}
// Fade down
per a (int s = passos; s> 0; s--) {
tmpR = (R * s) / passos; // Multiplicar primer per evitar truncaments
errors
tmpG = (G * s) / passos;
tmpB = (B * s) / passos;
per a (int i = 0; i
pixels.setPixelColor (4, tmpR, tmpG, tmpB);
pixels.setPixelColor (11, tmpR, tmpG, tmpB);
}
pixels.show ();
retard (2);
}
// Fade down
per a (int s = passos; s> 0; s--) {
tmpR = (R * s) / passos; // Multiplicar primer per evitar truncaments
errors
tmpG = (G * s) / passos;
tmpB = (B * s) / passos;
per a (int i = 0; i
pixels.setPixelColor (3, tmpR, tmpG, tmpB);
pixels.setPixelColor (12, tmpR, tmpG, tmpB);
}
pixels.show ();
retard (3);
}
// Fade down
per a (int s = passos; s> 0; s--) {
tmpR = (R * s) / passos; //
Multipliqueu primer per evitar errors de truncament
tmpG = (G * s) / passos;
tmpB = (B * s) / passos;
per a (int i = 0; i
pixels.setPixelColor (2, tmpR, tmpG, tmpB);
pixels.setPixelColor (13, tmpR, tmpG, tmpB);
}
pixels.show ();
retard (3);
}
// Fade down
per a (int s = passos; s> 0; s--) {
tmpR = (R * s) / passos; // Multiplicar primer per evitar truncaments
errors
tmpG = (G * s) / passos;
tmpB = (B * s) / passos;
per a (int i = 0; i
pixels.setPixelColor (1, tmpR, tmpG, tmpB);
pixels.setPixelColor (14, tmpR, tmpG, tmpB);
}
pixels.show ();
retard (4);
}
// Fade down
per a (int s = passos; s> 0; s--) {
tmpR = (R * s) / passos; // Multiplicar primer per evitar truncaments
errors
tmpG = (G * s) / passos;
tmpB = (B * s) / passos;
per a (int i = 0; i
pixels.setPixelColor (0, tmpR, tmpG, tmpB);
pixels.setPixelColor (15, tmpR, tmpG, tmpB);
}
pixels.show ();
retard (4);
}
}
Pas 5: ajuntar-ho tot:
Només podríeu deixar tots els cables connectats a la vostra taula de taulers o a un PVC, això depèn de vosaltres (he escollit posar un PVC a la part superior de l’arduino, és bo i ordenat d’aquesta manera).
El següent pas consisteix a col·locar tubs de contracció de calor al voltant de tots els cables de manera que quedi menys desordenat.
Si decidiu utilitzar un PVC, ja hauríeu d'haver soldat tot junt.
Després, poseu els anells de neopíxels a la part exterior de les ulleres (assegureu-vos que els leds estiguin alineats al fons) i assegureu-los al seu lloc amb una mica de cinta o cola (he utilitzat cinta).
Podeu optar per enganxar el sensor fsr a la banda elàstica amb una mica de cinta o simplement deixar-lo sol.
Gaudeix de les teves ulleres:)
Recomanat:
Ulleres intel·ligents (menors de 10 $ !!!): 8 passos (amb imatges)
Ulleres intel·ligents (menors de 10 $ !!!): Hola! Tots coneixem les ulleres intel·ligents com la que es diu E.D.I.T.H. feta pel nostre estimat personatge Tony Stark que després va passar a Peter Parker. Avui fabricaré un vidre tan intel·ligent que també sigui inferior a 10 dòlars. No són gaire
Ulleres de visió nocturna per a Google Cardboard: 10 passos (amb imatges)
Ulleres de visió nocturna per a Google Cardboard: Exempció de responsabilitat: l'ús d'aquest dispositiu està pensat només per a entreteniment, educació i ús científic; no per a espionatge i / o vigilància. El "gadget espia" les funcions es van afegir a l'aplicació només per diversió i no servirien per a cap propòsit pràctic per a
Interruptor de llum controlat per parpellejar amb ulleres de goma d'esborrar de Shota Aizawa (My Hero Academia): 8 passos (amb imatges)
Interruptor de llum controlat per parpelleig amb les ulleres de goma d'esborrar de Shota Aizawa (My Hero Academia): si llegiu el manga del meu hero academia o mireu l'anime del meu hero academia, heu de conèixer un personatge anomenat shota aizawa. Shota Aizawa, també conegut com Eraser Head, és un Pro Hero i el professor de la classe 1-A dels EUA. La Quirk de Shota li dóna l'ab
Punter làser muntat en ulleres per a persones amb discapacitat locomotora: 9 passos (amb imatges)
Punter làser muntat en ulleres per a persones amb discapacitat locomotora: les persones amb discapacitats locomotores greus com les causades per paràlisi cerebral sovint tenen necessitats comunicatives complexes. Pot ser que se’ls demani que utilitzen taulers amb l’alfabet o les paraules d’ús habitual que s’imprimeixen per facilitar la comunicació. No obstant això, molts
Ulleres de vidre líquid per a ambliopia (ulleres de formació d’oclusió alternatives) [ATtiny13]: 10 passos (amb imatges)
Ulleres de vidre líquid per a l’ambliopia (ulleres de formació d’oclusió alternatives) [ATtiny13]: ambliopia (ull mandrós), un trastorn de la vista que afecta aproximadament el 3% de la població, generalment tractat mitjançant pegats oculars simples o gotes d’atropina. Malauradament, aquests mètodes de tractament oclouen un ull més fort durant llargs períodes de temps ininterromputs, no