Sommario:
- Passaggio 1: materiali e parti necessarie:
- Passaggio 2: anelli Neopixel
- Passaggio 3: connessioni
- Passaggio 4: il codice:
- Passaggio 5: mettere tutto insieme:
Video: Occhiali per il relax - ITTT: 5 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:04
Progetto HKU - ITTT (Se questo poi quello) - Julia Berkouwer, 1B
Ti sei mai sentito stressato e non sai come calmarti, allora dovresti provare questi occhiali rilassanti! Li indossi e chiudi gli occhi, quindi verrà riprodotto uno schema di respirazione. Seguendo questo schema di respirazione, il tuo ritmo respiratorio scenderà a inspirare ed espirare 6 volte al minuto. In questo modo si allevia lo stress quotidiano.
Puoi anche monitorare l'intensità della tua respirazione premendo un interruttore, usando un sensore fsr.
Con questo tutorial ti guiderò passo dopo passo nella costruzione dei tuoi occhialini per il relax.
Passaggio 1: materiali e parti necessarie:
Materiali:
1x arduino uno;
1xbreadboard o PCV;
3 resistenze da 10k
Fili (preferibilmente di colori diversi in modo che sia più facile dire quali cose andranno a terra e quali a pin diversi, ecc.);
Alcuni tubi termorestringenti;
2x anello NeoPixel - LED RGB 16 x 5050 con driver integrati;
1x interruttore;
1x sensore FSR;
1x occhiali SteamPunk (puoi acquistarli in un negozio per feste, sono facili da usare perché l'anello in neopixel si adatta perfettamente agli occhiali. Prova sempre a usare altri occhiali o creane uno tuo.);
1x una sorta di elastico (elastico) da mettere intorno al petto.
Strumenti:-Laptop
-Saldatore
-Software Arduino IDE
Vedrai due pulsanti e un interruttore sul mio pvc, uso solo il pulsante sinistro per collegarlo all'interruttore, non uso il secondo pulsante a destra dell'immagine. Ho messo i pulsanti sul pvc prima di rendermi conto che non mi servivano e che invece avevo bisogno di usare un interruttore.
Qui sotto vedrai le immagini di tutto ciò che ho usato:
Passaggio 2: anelli Neopixel
Il filo bianco è collegato a terra sul retro dell'anello neopixel.
Il filo arancione è collegato al 5V.
E il filo marrone è collegato all'ingresso dati
Passaggio 3: connessioni
Questo è l'aspetto della mia breadboard durante la prototipazione, puoi usarlo come riferimento.
Ho anche realizzato un layout del cablaggio di come dovrebbe apparire con un solo pulsante.
Passaggio 4: il codice:
Probabilmente non è il codice più efficiente, ma funziona per me. Sfida te stesso e cerca di renderlo più efficiente;P
#includere
// Quale
pin su Arduino è collegato ai NeoPixel?
#definire
PIN 6
// Quale
pin su Arduino è collegato al pulsante
#definire
BUTTON_PIN 9
// Come
quanti NeoPixel sono collegati ad Arduino?
#definire
NUMPIXELS 16
// Quando
impostiamo la libreria NeoPixel, le diciamo quanti pixel e quale pin usare per inviare i segnali.
// Nota
che per le vecchie strisce NeoPixel potrebbe essere necessario modificare il terzo parametro--guarda lo strandtest
//
esempio per maggiori informazioni sui possibili valori.
Adafruit_NeoPixel
pixel = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int pausa
= 1; //ritardo2
int
pausa2 = 80; //scendo quando si usa fsr
int
pausa3 = 150; // facendo su quando viene utilizzato fsr
int
valore ritardo = 4; // ritardo1
int
fsrPin = 0; // l'FSR e il pulldown 10K sono collegati a a0
int
fsrLettura;
vuoto
impostare() {
pinMode(BUTTON_PIN, INPUT);
Serial.begin(9600);
pixel.begin(); // Questo inizializza il
Libreria NeoPixel.
pixel.mostra();
}
bool
buttonpressed(int pin){
restituisce digitalRead(pin);
}
vuoto
loop() { // legge se l'input del pin è vero o falso
fsrReading = analogRead(fsrPin);
Serial.print("Lettura analogica = ");
Serial.print(fsrReading);
if (pulsante premuto(BUTTON_PIN) == true){
// effetto luce quando si utilizza il sensore 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);
pixel.mostra();
ritardo(pausa3);
}
if (fsrReading < 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);
pixel.mostra();
ritardo(pausa2);
}
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);
pixel.mostra();
ritardo(pausa3);
}
if (fsrReading < 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);
pixel.mostra();
ritardo(pausa2);
}
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);
pixel.mostra();
ritardo(pausa3);
}
if (fsrReading <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);
pixel.mostra();
ritardo(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);
pixel.mostra();
ritardo(pausa3);
}
if (fsrReading <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);
pixel.mostra();
ritardo(20);
}
}
altro{
respiro_blu(20, 100, 0, 1, 1); // normale
effetto
}
}
// Pausa
= ritardo tra le transizioni
// Passi
= numero di passi
// R, G, B = Valori RGB completi
// De void Breath is voor het licht effect als de
fsrsensor niet gebruikt wordt. Deze void wordt in de void loop() weer aangeroepen.
void Breath_blue(int pausa, int passi, byte R, byte G, byte B) {
int
tmpR, tmpG, tmpB; // Valori temporanei
// Dissolvenza
for (int s=1; s<=passi; s++) {
tmpR = (R * s) /
passaggi; // Moltiplica prima per evitare errori di troncamento
tmpG = (G * s) / passi;
tmpB = (B * s) / passi;
per (int i=0;
iopixels.setPixelColor(0, tmpR, tmpG+1, tmpB);
pixels.setPixelColor(15, tmpR, tmpG+1, tmpB);
}
pixel.mostra();
ritardo(4);
}
// Dissolvenza
for (int s=1; s<=passi; s++) {
tmpR = (R * s) /
passaggi; // Moltiplica prima per evitare errori di troncamento
tmpG = (G * s) / passi;
tmpB = (B * s) / passi;
per (int i=0;
iopixels.setPixelColor(1, tmpR, tmpG+1, tmpB);pixels.setPixelColor(14, tmpR, tmpG+1, tmpB);
}
pixel.mostra();
ritardo(4);
}
// Dissolvenza
for (int s=1; s<=passi; s++) {
tmpR = (R * s) /
passaggi; // Moltiplica prima per evitare errori di troncamento
tmpG = (G * s) / passi;
tmpB = (B * s) / passi;
per (int i=0;
iopixels.setPixelColor(2, tmpR, tmpG+2, tmpB);pixels.setPixelColor(13, tmpR, tmpG+2, tmpB);
}
pixel.mostra();
ritardo(3.5);
}
// Dissolvenza
for (int s=1; s<=passi; s++) {
tmpR = (R * s) /
passaggi; // Moltiplica prima per evitare errori di troncamento
tmpG = (G * s) / passi;
tmpB = (B * s) / passi;
per (int i=0;
iopixels.setPixelColor(3, tmpR, tmpG+3, tmpB+5);pixels.setPixelColor(12, tmpR, tmpG+3, tmpB+5);
}
pixel.mostra();
ritardo (3);
}
per (int i=0;
iopixels.setPixelColor(0, 0, 0, 0);pixels.setPixelColor(15, 0, 0, 0);
}
// Dissolvenza
for (int s=1; s<=passi; s++) {
tmpR = (R * s) /
passaggi; // Moltiplica prima per evitare errori di troncamento
tmpG = (G * s) / passi;
tmpB = (B * s) / passi;
per (int i=0;
io
pixels.setPixelColor(4, tmpR, tmpG+3, tmpB+15);pixels.setPixelColor(11, tmpR, tmpG+3, tmpB+15);
}
pixel.mostra();
ritardo (3);
}
// Dissolvenza
for (int s=1; s<=passi; s++) {
tmpR = (R * s) /
passaggi; // Moltiplica prima per evitare errori di troncamento
tmpG = (G * s) / passi;
tmpB = (B * s) / passi;
per (int i=0;
iopixels.setPixelColor(5, tmpR, tmpG+4, tmpB+20);pixels.setPixelColor(10, tmpR, tmpG+4, tmpB+20);
}
pixel.mostra();
ritardo(2);
}
per (int i=0;
iopixels.setPixelColor(1, 0, 0, 0);
pixels.setPixelColor(14, 0, 0, 0);
}
// Dissolvenza
for (int s=1; s<=passi; s++) {
tmpR = (R * s) /
passaggi; // Moltiplica prima per evitare errori di troncamento
tmpG = (G * s) / passi;
tmpB = (B * s) / passi;
per (int i=0;
iopixels.setPixelColor(6, tmpR, tmpG+2, tmpB+40);
pixels.setPixelColor(9, tmpR, tmpG+2, tmpB+40);
}
pixel.mostra();
ritardo(ritardo);
}
per (int i=0;
iopixels.setPixelColor(2, 0, 0, 0);pixels.setPixelColor(13, 0, 0, 0);
}
// Dissolvenza
for (int s=1; s<=passi; s++) {
tmpR = (R * s) /
passaggi; // Moltiplica prima per evitare errori di troncamento
tmpG = (G * s) / passi;
tmpB = (B * s) / passi;
per (int i=0;
io
pixels.setPixelColor(7, tmpR, tmpG, tmpB+44);pixels.setPixelColor(8, tmpR, tmpG, tmpB+44);
}
pixel.mostra();
ritardo(ritardo);
}
// Dissolvenza
for (int s=passi; s>0; s--) {
tmpR = (R * s) / passi; // Moltiplica prima per evitare il troncamento
errori
tmpG = (G * s) / passi;
tmpB = (B * s) / passi;
per (int i=0; i
pixels.setPixelColor(7, tmpR, tmpG, tmpB);
pixels.setPixelColor(8, tmpR, tmpG, tmpB);
}
pixel.mostra();
ritardo(1);
}
// Dissolvenza
for (int s=passi; s>0; s--) {
tmpR = (R * s) / passi; // Moltiplica prima per evitare il troncamento
errori
tmpG = (G * s) / passi;
tmpB = (B * s) / passi;
per (int i=0; i
pixels.setPixelColor(6, tmpR, tmpG, tmpB);
pixels.setPixelColor(9, tmpR, tmpG, tmpB);
}
pixel.mostra();
ritardo(1);
}
// Dissolvenza
for (int s=passi; s>0; s--) {
tmpR = (R * s) / passi; // Moltiplica prima per evitare il troncamento
errori
tmpG = (G * s) / passi;
tmpB = (B * s) / passi;
per (int i=0; i
pixels.setPixelColor(5, tmpR, tmpG, tmpB);
pixels.setPixelColor(10, tmpR, tmpG, tmpB);
}
pixel.mostra();
ritardo(2);
}
// Dissolvenza
for (int s=passi; s>0; s--) {
tmpR = (R * s) / passi; // Moltiplica prima per evitare il troncamento
errori
tmpG = (G * s) / passi;
tmpB = (B * s) / passi;
per (int i=0; i
pixels.setPixelColor(4, tmpR, tmpG, tmpB);
pixels.setPixelColor(11, tmpR, tmpG, tmpB);
}
pixel.mostra();
ritardo(2);
}
// Dissolvenza
for (int s=passi; s>0; s--) {
tmpR = (R * s) / passi; // Moltiplica prima per evitare il troncamento
errori
tmpG = (G * s) / passi;
tmpB = (B * s) / passi;
per (int i=0; i
pixels.setPixelColor(3, tmpR, tmpG, tmpB);
pixels.setPixelColor(12, tmpR, tmpG, tmpB);
}
pixel.mostra();
ritardo (3);
}
// Dissolvenza
for (int s=passi; s>0; s--) {
tmpR = (R * s) / passi; //
Moltiplica prima per evitare errori di troncamento
tmpG = (G * s) / passi;
tmpB = (B * s) / passi;
per (int i=0; i
pixels.setPixelColor(2, tmpR, tmpG, tmpB);
pixels.setPixelColor(13, tmpR, tmpG, tmpB);
}
pixel.mostra();
ritardo (3);
}
// Dissolvenza
for (int s=passi; s>0; s--) {
tmpR = (R * s) / passi; // Moltiplica prima per evitare il troncamento
errori
tmpG = (G * s) / passi;
tmpB = (B * s) / passi;
per (int i=0; i
pixels.setPixelColor(1, tmpR, tmpG, tmpB);
pixels.setPixelColor(14, tmpR, tmpG, tmpB);
}
pixel.mostra();
ritardo(4);
}
// Dissolvenza
for (int s=passi; s>0; s--) {
tmpR = (R * s) / passi; // Moltiplica prima per evitare il troncamento
errori
tmpG = (G * s) / passi;
tmpB = (B * s) / passi;
per (int i=0; i
pixels.setPixelColor(0, tmpR, tmpG, tmpB);
pixels.setPixelColor(15, tmpR, tmpG, tmpB);
}
pixel.mostra();
ritardo(4);
}
}
Passaggio 5: mettere tutto insieme:
Potresti semplicemente lasciare tutti i tuoi fili collegati alla tua breadboard o a un PVC, dipende da te (ho scelto di mettere un PVC sopra l'arduino è bello e pulito in quel modo).
Il prossimo passo è mettere i tubi termorestringenti attorno a tutti i fili in modo che sia meno disordinato.
Se hai scelto di usare un PVC, dovresti aver saldato tutto insieme ormai.
Dopodiché metti gli anelli in neopixel all'esterno degli occhiali (assicurati che i led siano allineati in basso) e fissali in posizione con del nastro adesivo o della colla (io ho usato del nastro adesivo).
Puoi scegliere di attaccare il sensore fsr all'elastico con del nastro adesivo o semplicemente lasciarlo fuori da solo.
Goditi i tuoi occhiali:)
Consigliato:
Occhiali per la visione notturna per Google Cardboard: 10 passaggi (con immagini)
Occhiali per la visione notturna per Google Cardboard: Dichiarazione di non responsabilità: l'uso di questo dispositivo è destinato esclusivamente all'intrattenimento, all'istruzione e all'uso scientifico; non per spionaggio e/o sorveglianza. Il "gadget spia" le funzionalità sono state aggiunte all'app solo per divertimento e non servirebbero a nessuno scopo pratico per
Puntatore laser montato su occhiali per persone con disabilità motorie: 9 passaggi (con immagini)
Puntatore laser montato su occhiali per persone con disabilità locomotorie: le persone con disabilità locomotorie gravi come quelle causate da paralisi cerebrale hanno spesso complesse esigenze di comunicazione. Potrebbe essere richiesto loro di utilizzare schede con l'alfabeto o parole di uso comune stampate su di esse per facilitare la comunicazione. Tuttavia, molti
Occhiali da allenamento per occlusione alternata ad alta tensione [ATtiny13]: 5 passaggi (con immagini)
Occhiali da allenamento per occlusione alternata ad alta tensione [ATtiny13]: Nel mio primo tutorial, ho descritto come costruire un dispositivo che dovrebbe essere molto utile a qualcuno che vuole curare l'ambliopia (occhio pigro). Il design era molto semplicistico e presentava alcuni inconvenienti (richiedeva l'uso di due batterie e liquido
Occhiali a cristalli liquidi per ambliopia (occhiali da allenamento per occlusione alternata) [ATtiny13]: 10 passaggi (con immagini)
Occhiali a cristalli liquidi per ambliopia (occhiali da allenamento per occlusione alternata) [ATtiny13]: ambliopia (occhio pigro), un disturbo della vista che colpisce circa il 3% della popolazione, solitamente trattato con semplici bende o gocce di atropina. Sfortunatamente, quei metodi di trattamento occludono l'occhio più forte per lunghi periodi di tempo ininterrotti, no
Occhiali per realtà virtuale e mista: 15 passaggi (con immagini)
Occhiali per realtà virtuale e mista: Introduzione: Durante il master Technology for Concept Design ci è stato chiesto di esplorare una tecnologia emergente adatta al nostro progetto principale e di testare questa tecnologia realizzando un prototipo. Le tecnologie che abbiamo scelto sono entrambe Reali Virtuali