Tabla de contenido:
- Paso 1: Materiales y piezas necesarios:
- Paso 2: Anillos de Neopixel
- Paso 3: conexiones
- Paso 4: el código:
- Paso 5: Poner todo junto:
Video: Gafas de relajación - ITTT: 5 pasos (con imágenes)
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:44
Proyecto HKU - ITTT (If This Then That) - Julia Berkouwer, 1B
¿Alguna vez te has sentido estresado y no sabes cómo calmarte, entonces deberías probar estas gafas de relajación? Te los pones y cierras los ojos, luego se reproducirá un patrón de respiración. Siguiendo este patrón de respiración, su ritmo respiratorio se reducirá a inhalar y exhalar 6 veces por minuto. Hacer esto libera el estrés diario.
También puede realizar un seguimiento de la intensidad de su respiración activando un interruptor, utilizando un sensor fsr.
Con este toturial te guiaré paso a paso a través de la construcción de tus propias gafas de relajación.
Paso 1: Materiales y piezas necesarios:
Materiales:
1x arduino uno;
1x tablero o PCV;
3 resistencias de 10k
Cables (Preferiblemente de diferentes colores para que sea más fácil saber qué cosas van al suelo y cuáles van a diferentes clavijas, etc.);
Algunos tubos termocontraíbles;
2x NeoPixel Ring - 16 x 5050 RGB LED con controladores integrados;
1x interruptor;
1x sensor FSR;
1x Gafas SteamPunk (Puedes comprarlas en una tienda de fiestas, son fáciles de usar porque el anillo de neopixel encaja perfectamente en las gafas. Siempre intentas usar otras gafas o crea la tuya propia);
1x una especie de banda (elástica) para poner alrededor de tu pecho.
Herramientas: -Portátil
-Soldador
-Software IDE Arduino
Verá dos botones y un interruptor en mi pvc, solo uso el botón izquierdo para conectarlo al interruptor, no uso el segundo botón a la derecha de la imagen. Puse los botones en el pvc antes de darme cuenta de que no los necesito y necesitaba usar un interruptor en su lugar.
A continuación, verá imágenes de todo lo que usé:
Paso 2: Anillos de Neopixel
El cable blanco está conectado a tierra en la parte posterior del anillo de neopixel.
El cable naranja está conectado a los 5V.
Y el cable marrón está conectado a la entrada de datos.
Paso 3: conexiones
Así es como se veía mi placa de pruebas durante la creación de prototipos, puede usar esto como referencia.
También hice un diseño del cableado de cómo se supone que debe verse con un solo botón.
Paso 4: el código:
Probablemente no sea el código más eficiente, pero me funciona. Desafíese y trate de hacerlo más eficiente; P
#incluir
// Cuales
pin en el Arduino está conectado a los NeoPixels?
#definir
PIN 6
// Cuales
pin en el Arduino está conectado al botón
#definir
BUTTON_PIN 9
// Cómo
¿Cuántos NeoPixels están conectados al Arduino?
#definir
NUMPÍXELES 16
// Cuando
configuramos la biblioteca NeoPixel, le decimos cuántos píxeles y qué pin usar para enviar señales.
// Nota
que para las tiras NeoPixel más antiguas, es posible que deba cambiar el tercer parámetro; consulte la prueba de hebras
//
ejemplo para obtener más información sobre posibles valores.
Adafruit_NeoPixel
píxeles = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
pausa int
= 1; // delay2
En t
pausa2 = 80; // bajando cuando se usa fsr
En t
pausa3 = 150; // haciendo cuando se usa fsr
En t
delayval = 4; // retraso1
En t
fsrPin = 0; // el menú desplegable FSR y 10K están conectados a a0
En t
fsrReading;
vacío
configuración() {
pinMode (BUTTON_PIN, INPUT);
Serial.begin (9600);
pixels.begin (); // Esto inicializa el
Biblioteca NeoPixel.
pixels.show ();
}
bool
botón presionado (pin int) {
return digitalRead (pin);
}
vacío
loop () {// lee si la entrada del pin es verdadera o falsa
fsrReading = analogRead (fsrPin);
Serial.print ("Lectura analógica =");
Serial.print (fsrReading);
si (botón presionado (BUTTON_PIN) == verdadero) {
// efecto de luz cuando se usa el sensor fsr
if (fsrReading> 50) {
píxeles.setPixelColor (0, 1, 0, 1);
píxeles.setPixelColor (15, 1, 0, 1);
píxeles.setPixelColor (1, 1, 0, 1);
píxeles.setPixelColor (14, 1, 0, 1);
pixels.show ();
retraso (pausa3);
}
if (fsrReading <52) {
píxeles.setPixelColor (0, 0, 0, 0);
píxeles.setPixelColor (15, 0, 0, 0);
píxeles.setPixelColor (1, 0, 0, 0);
píxeles.setPixelColor (14, 0, 0, 0);
pixels.show ();
retraso (pausa2);
}
if (fsrReading> 57) {
píxeles.setPixelColor (2, 1, 0, 1);
píxeles.setPixelColor (13, 1, 0, 1);
píxeles.setPixelColor (3, 1, 0, 1);
píxeles.setPixelColor (12, 1, 0, 1);
pixels.show ();
retraso (pausa3);
}
if (fsrReading <59) {
píxeles.setPixelColor (2, 0, 0, 0);
píxeles.setPixelColor (13, 0, 0, 0);
píxeles.setPixelColor (3, 0, 0, 0);
píxeles.setPixelColor (12, 0, 0, 0);
pixels.show ();
retraso (pausa2);
}
if (fsrReading> 65) {
píxeles.setPixelColor (4, 1, 0, 1);
píxeles.setPixelColor (11, 1, 0, 1);
píxeles.setPixelColor (5, 1, 0, 1);
píxeles.setPixelColor (10, 1, 0, 1);
pixels.show ();
retraso (pausa3);
}
if (fsrReading <67) {
píxeles.setPixelColor (4, 0, 0, 0);
píxeles.setPixelColor (11, 0, 0, 0);
píxeles.setPixelColor (5, 0, 0, 0);
píxeles.setPixelColor (10, 0, 0, 0);
pixels.show ();
retraso (40);
}
if (fsrReading> 79) {
píxeles.setPixelColor (6, 1, 0, 1);
píxeles.setPixelColor (9, 1, 0, 1);
píxeles.setPixelColor (7, 1, 0, 1);
píxeles.setPixelColor (8, 1, 0, 1);
pixels.show ();
retraso (pausa3);
}
if (fsrReading <85) {
píxeles.setPixelColor (6, 0, 0, 0);
píxeles.setPixelColor (9, 0, 0, 0);
píxeles.setPixelColor (7, 0, 0, 0);
píxeles.setPixelColor (8, 0, 0, 0);
pixels.show ();
retraso (20);
}
}
demás{
respirar_azul (20, 100, 0, 1, 1); // normal
efecto
}
}
// Pausa
= retraso entre transiciones
// Pasos
= número de pasos
// R, G, B = valores RGB completos
// De void respirar es para su efecto licht als de
fsrsensor niet gebruikt wordt. Deze void wordt en de void loop () weer aangeroepen.
void breathe_blue (pausa int, pasos int, byte R, byte G, byte B) {
En t
tmpR, tmpG, tmpB; // Valores temporales
// Desvanecerse hasta
para (int s = 1; s <= pasos; s ++) {
tmpR = (R * s) /
pasos; // Multiplica primero para evitar errores de truncamiento
tmpG = (G * s) / pasos;
tmpB = (B * s) / pasos;
para (int i = 0;
Ipíxeles.setPixelColor (0, tmpR, tmpG + 1, tmpB);
píxeles.setPixelColor (15, tmpR, tmpG + 1, tmpB);
}
pixels.show ();
retraso (4);
}
// Desvanecerse hasta
para (int s = 1; s <= pasos; s ++) {
tmpR = (R * s) /
pasos; // Multiplica primero para evitar errores de truncamiento
tmpG = (G * s) / pasos;
tmpB = (B * s) / pasos;
para (int i = 0;
Ipíxeles.setPixelColor (1, tmpR, tmpG + 1, tmpB);píxeles.setPixelColor (14, tmpR, tmpG + 1, tmpB);
}
pixels.show ();
retraso (4);
}
// Desvanecerse hasta
para (int s = 1; s <= pasos; s ++) {
tmpR = (R * s) /
pasos; // Multiplica primero para evitar errores de truncamiento
tmpG = (G * s) / pasos;
tmpB = (B * s) / pasos;
para (int i = 0;
Ipíxeles.setPixelColor (2, tmpR, tmpG + 2, tmpB);píxeles.setPixelColor (13, tmpR, tmpG + 2, tmpB);
}
pixels.show ();
retraso (3,5);
}
// Desvanecerse hasta
para (int s = 1; s <= pasos; s ++) {
tmpR = (R * s) /
pasos; // Multiplica primero para evitar errores de truncamiento
tmpG = (G * s) / pasos;
tmpB = (B * s) / pasos;
para (int i = 0;
Ipíxeles.setPixelColor (3, tmpR, tmpG + 3, tmpB + 5);píxeles.setPixelColor (12, tmpR, tmpG + 3, tmpB + 5);
}
pixels.show ();
retraso (3);
}
para (int i = 0;
Ipíxeles.setPixelColor (0, 0, 0, 0);píxeles.setPixelColor (15, 0, 0, 0);
}
// Desvanecerse hasta
para (int s = 1; s <= pasos; s ++) {
tmpR = (R * s) /
pasos; // Multiplica primero para evitar errores de truncamiento
tmpG = (G * s) / pasos;
tmpB = (B * s) / pasos;
para (int i = 0;
I
píxeles.setPixelColor (4, tmpR, tmpG + 3, tmpB + 15);píxeles.setPixelColor (11, tmpR, tmpG + 3, tmpB + 15);
}
pixels.show ();
retraso (3);
}
// Desvanecerse hasta
para (int s = 1; s <= pasos; s ++) {
tmpR = (R * s) /
pasos; // Multiplica primero para evitar errores de truncamiento
tmpG = (G * s) / pasos;
tmpB = (B * s) / pasos;
para (int i = 0;
Ipíxeles.setPixelColor (5, tmpR, tmpG + 4, tmpB + 20);píxeles.setPixelColor (10, tmpR, tmpG + 4, tmpB + 20);
}
pixels.show ();
retraso (2);
}
para (int i = 0;
Ipíxeles.setPixelColor (1, 0, 0, 0);
píxeles.setPixelColor (14, 0, 0, 0);
}
// Desvanecerse hasta
para (int s = 1; s <= pasos; s ++) {
tmpR = (R * s) /
pasos; // Multiplica primero para evitar errores de truncamiento
tmpG = (G * s) / pasos;
tmpB = (B * s) / pasos;
para (int i = 0;
Ipíxeles.setPixelColor (6, tmpR, tmpG + 2, tmpB + 40);
píxeles.setPixelColor (9, tmpR, tmpG + 2, tmpB + 40);
}
pixels.show ();
delay (delayval);
}
para (int i = 0;
Ipíxeles.setPixelColor (2, 0, 0, 0);píxeles.setPixelColor (13, 0, 0, 0);
}
// Desvanecerse hasta
para (int s = 1; s <= pasos; s ++) {
tmpR = (R * s) /
pasos; // Multiplica primero para evitar errores de truncamiento
tmpG = (G * s) / pasos;
tmpB = (B * s) / pasos;
para (int i = 0;
I
píxeles.setPixelColor (7, tmpR, tmpG, tmpB + 44);píxeles.setPixelColor (8, tmpR, tmpG, tmpB + 44);
}
pixels.show ();
delay (delayval);
}
// Desvanecerse
para (int s = pasos; s> 0; s--) {
tmpR = (R * s) / pasos; // Multiplica primero para evitar el truncamiento
errores
tmpG = (G * s) / pasos;
tmpB = (B * s) / pasos;
para (int i = 0; i
píxeles.setPixelColor (7, tmpR, tmpG, tmpB);
píxeles.setPixelColor (8, tmpR, tmpG, tmpB);
}
pixels.show ();
retraso (1);
}
// Desvanecerse
para (int s = pasos; s> 0; s--) {
tmpR = (R * s) / pasos; // Multiplica primero para evitar el truncamiento
errores
tmpG = (G * s) / pasos;
tmpB = (B * s) / pasos;
para (int i = 0; i
píxeles.setPixelColor (6, tmpR, tmpG, tmpB);
píxeles.setPixelColor (9, tmpR, tmpG, tmpB);
}
pixels.show ();
retraso (1);
}
// Desvanecerse
para (int s = pasos; s> 0; s--) {
tmpR = (R * s) / pasos; // Multiplica primero para evitar el truncamiento
errores
tmpG = (G * s) / pasos;
tmpB = (B * s) / pasos;
para (int i = 0; i
píxeles.setPixelColor (5, tmpR, tmpG, tmpB);
píxeles.setPixelColor (10, tmpR, tmpG, tmpB);
}
pixels.show ();
retraso (2);
}
// Desvanecerse
para (int s = pasos; s> 0; s--) {
tmpR = (R * s) / pasos; // Multiplica primero para evitar el truncamiento
errores
tmpG = (G * s) / pasos;
tmpB = (B * s) / pasos;
para (int i = 0; i
píxeles.setPixelColor (4, tmpR, tmpG, tmpB);
píxeles.setPixelColor (11, tmpR, tmpG, tmpB);
}
pixels.show ();
retraso (2);
}
// Desvanecerse
para (int s = pasos; s> 0; s--) {
tmpR = (R * s) / pasos; // Multiplica primero para evitar el truncamiento
errores
tmpG = (G * s) / pasos;
tmpB = (B * s) / pasos;
para (int i = 0; i
píxeles.setPixelColor (3, tmpR, tmpG, tmpB);
píxeles.setPixelColor (12, tmpR, tmpG, tmpB);
}
pixels.show ();
retraso (3);
}
// Desvanecerse
para (int s = pasos; s> 0; s--) {
tmpR = (R * s) / pasos; //
Multiplica primero para evitar errores de truncamiento
tmpG = (G * s) / pasos;
tmpB = (B * s) / pasos;
para (int i = 0; i
píxeles.setPixelColor (2, tmpR, tmpG, tmpB);
píxeles.setPixelColor (13, tmpR, tmpG, tmpB);
}
pixels.show ();
retraso (3);
}
// Desvanecerse
para (int s = pasos; s> 0; s--) {
tmpR = (R * s) / pasos; // Multiplica primero para evitar el truncamiento
errores
tmpG = (G * s) / pasos;
tmpB = (B * s) / pasos;
para (int i = 0; i
píxeles.setPixelColor (1, tmpR, tmpG, tmpB);
píxeles.setPixelColor (14, tmpR, tmpG, tmpB);
}
pixels.show ();
retraso (4);
}
// Desvanecerse
para (int s = pasos; s> 0; s--) {
tmpR = (R * s) / pasos; // Multiplica primero para evitar el truncamiento
errores
tmpG = (G * s) / pasos;
tmpB = (B * s) / pasos;
para (int i = 0; i
píxeles.setPixelColor (0, tmpR, tmpG, tmpB);
píxeles.setPixelColor (15, tmpR, tmpG, tmpB);
}
pixels.show ();
retraso (4);
}
}
Paso 5: Poner todo junto:
Puede dejar todos los cables conectados a su placa de pruebas o PVC, eso depende de usted (elegí poner un PVC en la parte superior del arduino, es agradable y ordenado de esa manera).
El siguiente paso es colocar tubos termorretráctiles alrededor de todos los cables para que sea menos complicado.
Si eligió usar un PVC, entonces ya debería haber soldado todo junto.
Después de eso, coloca los anillos de neopixel en el exterior de las gafas (asegúrese de que los leds estén alineados en el botón) y asegúrelos en su lugar con un poco de cinta o pegamento (yo usé cinta).
Puede optar por pegar el sensor fsr a la banda elástica con un poco de cinta o simplemente dejarlo solo.
Disfruta tus gafas:)
Recomendado:
Gafas inteligentes (¡menos de $ 10!): 8 pasos (con imágenes)
Gafas inteligentes (¡¡¡Menos de $ 10 !!!): ¡Hola! Todos estamos familiarizados con las gafas inteligentes como la llamada E.D.I.T.H. hecho por nuestro querido personaje Tony Stark, que luego pasó a Peter Parker. ¡Hoy voy a construir uno de esos vidrios inteligentes que también cuestan menos de $ 10! No son del todo
Gafas de visión nocturna para Google Cardboard: 10 pasos (con imágenes)
Gafas de visión nocturna para Google Cardboard: Exención de responsabilidad: el uso de este dispositivo está destinado únicamente al entretenimiento, la educación y el uso científico; no para espionaje y / o vigilancia. El " dispositivo espía " se agregaron funciones a la aplicación solo por diversión y no tendrían ningún propósito práctico para
Interruptor de luz controlado por parpadeo con las gafas con cabeza de borrador de Shota Aizawa (My Hero Academia): 8 pasos (con imágenes)
Interruptor de luz controlado por parpadeo con las gafas con cabeza de borrador de Shota Aizawa (My Hero Academia): si lees mi manga hero academia o miras mi anime hero academia, debes conocer a un personaje llamado shota aizawa. Shota Aizawa, también conocido como Eraser Head, es un héroe profesional y el maestro de salón de clase 1-A de la U.A. El Quirk de Shota le da la ab
Puntero láser montado en gafas para personas con discapacidades locomotoras: 9 pasos (con imágenes)
Puntero láser montado en anteojos para personas con discapacidades locomotoras: las personas con discapacidades locomotoras graves, como las causadas por la parálisis cerebral, a menudo tienen necesidades de comunicación complejas. Es posible que se les solicite que utilicen pizarrones con el alfabeto o palabras de uso común impresas en ellos para ayudar en la comunicación. Cuantos sean
Gafas de cristal líquido para ambliopía (gafas de entrenamiento de oclusión alterna) [ATtiny13]: 10 pasos (con imágenes)
Anteojos de cristal líquido para ambliopía (anteojos de entrenamiento de oclusión alterna) [ATtiny13]: ambliopía (ojo vago), un trastorno de la vista que afecta aproximadamente al 3% de la población, generalmente tratado con parches o gotas de atropina simples. Desafortunadamente, esos métodos de tratamiento ocluyen un ojo más fuerte durante períodos de tiempo largos e ininterrumpidos, no