Índice:
- Etapa 1: Materiais e peças necessários:
- Etapa 2: anéis de neopixel
- Etapa 3: conexões
- Etapa 4: O Código:
- Etapa 5: Juntando tudo:
Vídeo: Óculos de relaxamento - ITTT: 5 etapas (com fotos)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:39
Projeto HKU - ITTT (If This Then That) - Julia Berkouwer, 1B
Você já se sentiu estressado e simplesmente não sabe como se acalmar, então experimente esses óculos de relaxamento! Você os coloca e fecha os olhos, então um padrão de respiração começará. Seguindo esse padrão de respiração, seu ritmo respiratório diminuirá para inspirar e expirar 6 vezes por minuto. Isso alivia o estresse diário.
Você também pode monitorar a intensidade da sua respiração ligando um botão, usando um sensor fsr.
Com este toturial, irei guiá-lo na construção de seus próprios óculos de relaxamento, passo a passo.
Etapa 1: Materiais e peças necessários:
Materiais:
1x arduino uno;
1xbreadboard ou PCV;
3 resistências de 10k
Fios (de preferência em cores diferentes para que seja mais fácil dizer quais coisas vão para o chão e quais vão para pinos diferentes, etc.);
Alguns tubos termorretráteis;
2x anel NeoPixel - LED 16 x 5050 RGB com drivers integrados;
Interruptor 1x;
1 sensor FSR;
Óculos de proteção 1x SteamPunk (Você pode comprar em uma loja de festas, eles são fáceis de usar porque o anel de neopixel se encaixa perfeitamente nos óculos. Você sempre tenta usar outros óculos ou criar o seu próprio);
1x algum tipo de faixa (elástica) para colocar em volta do peito.
Ferramentas: -Laptop
-Ferro de solda
- Software ARduino IDE
Você verá dois botões e um switch no meu pvc, eu só uso o botão esquerdo para conectá-lo ao switch, não uso o segundo botão à direita da imagem. Coloquei os botões no pvc antes de perceber que não precisava deles e precisei usar um switch.
Abaixo aqui você verá fotos de tudo que usei:
Etapa 2: anéis de neopixel
O fio branco é conectado ao aterramento na parte de trás do anel de neopixel.
O fio laranja está conectado ao 5V.
E o fio marrom está conectado à entrada de dados
Etapa 3: conexões
Esta é a aparência da minha placa de ensaio durante a prototipagem, você pode usar isso como uma referência.
Também fiz um layout da fiação de como deve ser a aparência com apenas um botão.
Etapa 4: O Código:
Provavelmente não é o código mais eficiente, mas funciona para mim. Desafie-se e tente torná-lo mais eficiente; P
#incluir
// Que
pino no Arduino está conectado ao NeoPixels?
#definir
PIN 6
// Que
pino no Arduino está conectado ao botão
#definir
BUTTON_PIN 9
// Quão
muitos NeoPixels são anexados ao Arduino?
#definir
NUMPIXELS 16
// Quando
configuramos a biblioteca NeoPixel, informamos quantos pixels e qual pino usar para enviar sinais.
// Observação
que para tiras NeoPixel mais antigas, você pode precisar alterar o terceiro parâmetro - veja o teste de fita
//
exemplo para obter mais informações sobre os valores possíveis.
Adafruit_NeoPixel
pixels = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
pausa interna
= 1; // atraso2
int
pausa2 = 80; // diminuindo quando o fsr está sendo usado
int
pausa3 = 150; // melhorando quando o fsr está sendo usado
int
delayval = 4; // atraso1
int
fsrPin = 0; // o FSR e o menu suspenso 10K estão conectados a a0
int
fsrReading;
vazio
configurar() {
pinMode (BUTTON_PIN, INPUT);
Serial.begin (9600);
pixels.begin (); // Isso inicializa o
Biblioteca NeoPixel.
pixels.show ();
}
bool
buttonpressed (int pin) {
return digitalRead (pin);
}
vazio
loop () {// lê se a entrada do pino é verdadeira ou falsa
fsrReading = analogRead (fsrPin);
Serial.print ("Leitura analógica =");
Serial.print (fsrReading);
if (buttonpressed (BUTTON_PIN) == true) {
// efeito de luz ao usar o sensor 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 ();
atraso (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);
pixels.show ();
atraso (pausa 2);
}
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 ();
atraso (pausa 3);
}
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);
pixels.show ();
atraso (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);
pixels.show ();
atraso (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);
pixels.show ();
atraso (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 ();
atraso (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);
pixels.show ();
atraso (20);
}
}
outro{
respire_blue (20, 100, 0, 1, 1); // normal
efeito
}
}
// Pausa
= atraso entre as transições
// Passos
= número de passos
// R, G, B = valores RGB Full-on
// De void breath is voor het licht effect als de
fsrsensor niet gebruikt wordt. Deze void wordt no de void loop () weer aangeroepen.
void respire_blue (int pausa, int etapas, byte R, byte G, byte B) {
int
tmpR, tmpG, tmpB; // Valores de temperatura
// Desbotar
para (int s = 1; s <= etapas; s ++) {
tmpR = (R * s) /
degraus; // Multiplique primeiro para evitar erros de truncamento
tmpG = (G * s) / etapas;
tmpB = (B * s) / etapas;
para (int i = 0;
eupixels.setPixelColor (0, tmpR, tmpG + 1, tmpB);
pixels.setPixelColor (15, tmpR, tmpG + 1, tmpB);
}
pixels.show ();
atraso (4);
}
// Desbotar
para (int s = 1; s <= etapas; s ++) {
tmpR = (R * s) /
degraus; // Multiplique primeiro para evitar erros de truncamento
tmpG = (G * s) / etapas;
tmpB = (B * s) / etapas;
para (int i = 0;
eupixels.setPixelColor (1, tmpR, tmpG + 1, tmpB);pixels.setPixelColor (14, tmpR, tmpG + 1, tmpB);
}
pixels.show ();
atraso (4);
}
// Desbotar
para (int s = 1; s <= etapas; s ++) {
tmpR = (R * s) /
degraus; // Multiplique primeiro para evitar erros de truncamento
tmpG = (G * s) / etapas;
tmpB = (B * s) / etapas;
para (int i = 0;
eupixels.setPixelColor (2, tmpR, tmpG + 2, tmpB);pixels.setPixelColor (13, tmpR, tmpG + 2, tmpB);
}
pixels.show ();
atraso (3,5);
}
// Desbotar
para (int s = 1; s <= etapas; s ++) {
tmpR = (R * s) /
degraus; // Multiplique primeiro para evitar erros de truncamento
tmpG = (G * s) / etapas;
tmpB = (B * s) / etapas;
para (int i = 0;
eupixels.setPixelColor (3, tmpR, tmpG + 3, tmpB + 5);pixels.setPixelColor (12, tmpR, tmpG + 3, tmpB + 5);
}
pixels.show ();
atraso (3);
}
para (int i = 0;
eupixels.setPixelColor (0, 0, 0, 0);pixels.setPixelColor (15, 0, 0, 0);
}
// Desbotar
para (int s = 1; s <= etapas; s ++) {
tmpR = (R * s) /
degraus; // Multiplique primeiro para evitar erros de truncamento
tmpG = (G * s) / etapas;
tmpB = (B * s) / etapas;
para (int i = 0;
eu
pixels.setPixelColor (4, tmpR, tmpG + 3, tmpB + 15);pixels.setPixelColor (11, tmpR, tmpG + 3, tmpB + 15);
}
pixels.show ();
atraso (3);
}
// Desbotar
para (int s = 1; s <= etapas; s ++) {
tmpR = (R * s) /
degraus; // Multiplique primeiro para evitar erros de truncamento
tmpG = (G * s) / etapas;
tmpB = (B * s) / etapas;
para (int i = 0;
eupixels.setPixelColor (5, tmpR, tmpG + 4, tmpB + 20);pixels.setPixelColor (10, tmpR, tmpG + 4, tmpB + 20);
}
pixels.show ();
atraso (2);
}
para (int i = 0;
eupixels.setPixelColor (1, 0, 0, 0);
pixels.setPixelColor (14, 0, 0, 0);
}
// Desbotar
para (int s = 1; s <= etapas; s ++) {
tmpR = (R * s) /
degraus; // Multiplique primeiro para evitar erros de truncamento
tmpG = (G * s) / etapas;
tmpB = (B * s) / etapas;
para (int i = 0;
eupixels.setPixelColor (6, tmpR, tmpG + 2, tmpB + 40);
pixels.setPixelColor (9, tmpR, tmpG + 2, tmpB + 40);
}
pixels.show ();
atraso (delayval);
}
para (int i = 0;
eupixels.setPixelColor (2, 0, 0, 0);pixels.setPixelColor (13, 0, 0, 0);
}
// Desbotar
para (int s = 1; s <= etapas; s ++) {
tmpR = (R * s) /
degraus; // Multiplique primeiro para evitar erros de truncamento
tmpG = (G * s) / etapas;
tmpB = (B * s) / etapas;
para (int i = 0;
eu
pixels.setPixelColor (7, tmpR, tmpG, tmpB + 44);pixels.setPixelColor (8, tmpR, tmpG, tmpB + 44);
}
pixels.show ();
atraso (delayval);
}
// Fade down
para (int s = etapas; s> 0; s--) {
tmpR = (R * s) / etapas; // Multiplique primeiro para evitar truncamento
erros
tmpG = (G * s) / etapas;
tmpB = (B * s) / etapas;
para (int i = 0; i
pixels.setPixelColor (7, tmpR, tmpG, tmpB);
pixels.setPixelColor (8, tmpR, tmpG, tmpB);
}
pixels.show ();
atraso (1);
}
// Fade down
para (int s = passos; s> 0; s--) {
tmpR = (R * s) / etapas; // Multiplique primeiro para evitar truncamento
erros
tmpG = (G * s) / etapas;
tmpB = (B * s) / etapas;
para (int i = 0; i
pixels.setPixelColor (6, tmpR, tmpG, tmpB);
pixels.setPixelColor (9, tmpR, tmpG, tmpB);
}
pixels.show ();
atraso (1);
}
// Fade down
para (int s = etapas; s> 0; s--) {
tmpR = (R * s) / etapas; // Multiplique primeiro para evitar truncamento
erros
tmpG = (G * s) / etapas;
tmpB = (B * s) / etapas;
para (int i = 0; i
pixels.setPixelColor (5, tmpR, tmpG, tmpB);
pixels.setPixelColor (10, tmpR, tmpG, tmpB);
}
pixels.show ();
atraso (2);
}
// Fade down
para (int s = etapas; s> 0; s--) {
tmpR = (R * s) / etapas; // Multiplique primeiro para evitar truncamento
erros
tmpG = (G * s) / etapas;
tmpB = (B * s) / etapas;
para (int i = 0; i
pixels.setPixelColor (4, tmpR, tmpG, tmpB);
pixels.setPixelColor (11, tmpR, tmpG, tmpB);
}
pixels.show ();
atraso (2);
}
// Fade down
para (int s = etapas; s> 0; s--) {
tmpR = (R * s) / etapas; // Multiplique primeiro para evitar truncamento
erros
tmpG = (G * s) / etapas;
tmpB = (B * s) / etapas;
para (int i = 0; i
pixels.setPixelColor (3, tmpR, tmpG, tmpB);
pixels.setPixelColor (12, tmpR, tmpG, tmpB);
}
pixels.show ();
atraso (3);
}
// Fade down
para (int s = passos; s> 0; s--) {
tmpR = (R * s) / etapas; //
Multiplique primeiro para evitar erros de truncamento
tmpG = (G * s) / etapas;
tmpB = (B * s) / etapas;
para (int i = 0; i
pixels.setPixelColor (2, tmpR, tmpG, tmpB);
pixels.setPixelColor (13, tmpR, tmpG, tmpB);
}
pixels.show ();
atraso (3);
}
// Fade down
para (int s = etapas; s> 0; s--) {
tmpR = (R * s) / etapas; // Multiplique primeiro para evitar truncamento
erros
tmpG = (G * s) / etapas;
tmpB = (B * s) / etapas;
para (int i = 0; i
pixels.setPixelColor (1, tmpR, tmpG, tmpB);
pixels.setPixelColor (14, tmpR, tmpG, tmpB);
}
pixels.show ();
atraso (4);
}
// Fade down
para (int s = passos; s> 0; s--) {
tmpR = (R * s) / etapas; // Multiplique primeiro para evitar truncamento
erros
tmpG = (G * s) / etapas;
tmpB = (B * s) / etapas;
para (int i = 0; i
pixels.setPixelColor (0, tmpR, tmpG, tmpB);
pixels.setPixelColor (15, tmpR, tmpG, tmpB);
}
pixels.show ();
atraso (4);
}
}
Etapa 5: Juntando tudo:
Você poderia apenas deixar todos os seus fios conectados à sua placa de ensaio ou a um PVC, isso é com você (eu escolhi colocar um PVC em cima do arduino, é legal e arrumado dessa forma).
A próxima etapa é colocar tubos termorretráteis ao redor de todos os fios para que haja menos bagunça.
Se você escolheu usar um PVC, você já deveria ter soldado tudo junto.
Depois disso, você coloca os anéis de neopixel na parte externa dos óculos (certifique-se de que os leds estejam alinhados no botão) e fixe-os no lugar com um pouco de fita ou cola (usei fita adesiva).
Você pode escolher colar o sensor fsr no elástico com um pouco de fita adesiva ou simplesmente deixá-lo sozinho.
Aproveite seus óculos:)
Recomendado:
Óculos inteligentes (menos de $ 10 !!!): 8 etapas (com fotos)
Óculos inteligentes (menos de $ 10 !!!): Olá! Todos nós estamos familiarizados com os óculos inteligentes, como aquele chamado E.D.I.T.H. feito pelo nosso querido personagem Tony Stark que mais tarde foi passado para Peter Parker. Hoje vou construir um vidro tão inteligente que custa menos de US $ 10! Eles não são exatamente
Interruptor de luz controlado por piscar de olhos usando os óculos de borracha de cabeça de Shota Aizawa (My Hero Academia): 8 etapas (com fotos)
Interruptor de luz controlado por piscar de olhos usando os óculos de borracha de Shota Aizawa (My Hero Academia): Se você leu meu mangá da academia de heróis ou assistiu ao meu anime de academia de heróis, você deve conhecer um personagem chamado shota aizawa. Shota Aizawa também conhecido como o Eraser Head, é um Pro Hero e professor de sala de aula da U.A.'s Class 1-A. O Quirk de Shota dá a ele o ab
Óculos e fantasias de LED: 4 etapas (com fotos)
Óculos e fantasias de LED: Você gosta de ser visto de longe no escuro? Quer óculos extravagantes como os do Elton? Então, este Instructable é para você !!! Você aprenderá a fazer uma fantasia de LED e óculos de luz animados
Assistindo ao eclipse através de óculos de leitura (e não queimando meus olhos): 4 etapas (com fotos)
Assistindo ao eclipse através de óculos de leitura (e não queimando meus olhos): Olá, percebi sua curiosidade com o meu título? Meu pai também, enquanto caminhávamos no velho Montr é al ontem, ele tirou os óculos e me mostrou como ver o eclipse em seus óculos de leitura. Então, tudo isso
Óculos de cristal líquido para ambliopia (óculos de treinamento de oclusão alternada) [ATtiny13]: 10 etapas (com fotos)
Óculos de cristal líquido para ambliopia (óculos de treinamento de oclusão alternada) [ATtiny13]: Ambliopia (olho preguiçoso), um distúrbio da visão que afeta aproximadamente 3% da população, geralmente tratado com simples colírios ou colírios de atropina. Infelizmente, esses métodos de tratamento obstruem o olho mais forte por longos e ininterruptos períodos de tempo, não