Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Projekt HKU - ITTT (If This Then That) - Julia Berkouwer, 1B
Cítili jste se někdy ve stresu a prostě nevíte, jak se uklidnit, pak byste měli vyzkoušet tyto relaxační brýle! Když si je obléknete a zavřete oči, začne hrát dechový vzor. Při dodržování tohoto dechového schématu se váš dýchací rytmus 6krát za minutu zhluboka nadechne a vydechne. Tím se uvolní každodenní stres.
Intenzitu dýchání můžete také sledovat přepnutím přepínače pomocí senzoru fsr.
S tímto toturiálem vás krok za krokem provedu budováním vlastních relaxačních brýlí.
Krok 1: Potřebné materiály a součásti:
Materiály:
1x arduino uno;
1xbreadboard nebo PCV;
3x 10k odpory
Dráty (nejlépe různé barvy, aby bylo snazší zjistit, které věci směřují k zemi a které do různých kolíků atd.);
Některé trubice smršťující teplo;
2x NeoPixel Ring - 16 x 5050 RGB LED s integrovanými ovladači;
1x přepínač;
1x snímač FSR;
1x brýle SteamPunk (Můžete si je koupit v obchodě s party, snadno se používají, protože neopixel prsten na brýle perfektně sedí. Vždy zkuste použít jiné brýle nebo si vytvořte vlastní.);
1x nějaký druh (elastického) pásku, který si dáte kolem hrudníku.
Nástroje: -Laptop
-Páječka
-Arduino IDE software
Na mém pvc uvidíte dvě tlačítka a přepínač, já k připojení k přepínači používám pouze levé tlačítko, druhé tlačítko na pravé straně obrázku nepoužívám. Dal jsem tlačítka na pvc, než jsem si uvědomil, že je nepotřebuji a místo toho jsem potřeboval použít přepínač.
Níže uvidíte obrázky všeho, co jsem použil:
Krok 2: Neopixelové prsteny
Bílý vodič je připojen k zemi na zadní straně neopixelového prstence.
Oranžový vodič je připojen k 5V.
A hnědý vodič je připojen ke vstupu dat
Krok 3: Připojení
Takto vypadal můj prkénko při prototypování, můžete to použít jako referenci.
Jediným tlačítkem jsem také provedl rozvržení kabeláže, jak to má vypadat.
Krok 4: Kód:
Pravděpodobně to není nejúčinnější kód, ale funguje to pro mě. Vyzvěte se a zkuste to zefektivnit; P
#zahrnout
// Který
je pin na Arduinu připojen k NeoPixels?
#definovat
PIN 6
// Který
pin na Arduinu je připojen k tlačítku
#definovat
BUTTON_PIN 9
// Jak
je k Arduinu připojeno mnoho NeoPixelů?
#definovat
NUMPIXELY 16
// Když
nastavíme knihovnu NeoPixel, řekneme jí, kolik pixelů a jaký pin použít k odesílání signálů.
// Poznámka
že u starších proužků NeoPixel budete možná muset změnit třetí parametr-viz strandtest
//
příklad pro více informací o možných hodnotách.
Adafruit_NeoPixel
pixely = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int pauza
= 1; // zpoždění2
int
pause2 = 80; // jde dolů, když se používá fsr
int
pause3 = 150; // dělá to, když se používá fsr
int
delayval = 4; // zpoždění1
int
fsrPin = 0; // FSR a 10K pulldown jsou připojeny k a0
int
fsrReading;
prázdné
založit() {
pinMode (BUTTON_PIN, INPUT);
Serial.begin (9600);
pixely.begin (); // Tím se inicializuje
Knihovna NeoPixel.
pixely.show ();
}
bool
stisknutí tlačítka (int pin) {
vrátit digitalRead (pin);
}
prázdné
loop () {// čte, zda je pinový vstup true nebo false
fsrReading = analogRead (fsrPin);
Serial.print ("Analogové čtení =");
Serial.print (fsrReading);
if (buttonpressed (BUTTON_PIN) == true) {
// světelný efekt při použití snímače fsr
if (fsrReading> 50) {
pixely.setPixelColor (0, 1, 0, 1);
pixely.setPixelColor (15, 1, 0, 1);
pixely.setPixelColor (1, 1, 0, 1);
pixely.setPixelColor (14, 1, 0, 1);
pixely.show ();
zpoždění (pause3);
}
if (fsrReading <52) {
pixely.setPixelColor (0, 0, 0, 0);
pixely.setPixelColor (15, 0, 0, 0);
pixely.setPixelColor (1, 0, 0, 0);
pixely.setPixelColor (14, 0, 0, 0);
pixely.show ();
zpoždění (pause2);
}
if (fsrReading> 57) {
pixely.setPixelColor (2, 1, 0, 1);
pixely.setPixelColor (13, 1, 0, 1);
pixely.setPixelColor (3, 1, 0, 1);
pixely.setPixelColor (12, 1, 0, 1);
pixely.show ();
zpoždění (pause3);
}
if (fsrReading <59) {
pixely.setPixelColor (2, 0, 0, 0);
pixely.setPixelColor (13, 0, 0, 0);
pixely.setPixelColor (3, 0, 0, 0);
pixely.setPixelColor (12, 0, 0, 0);
pixely.show ();
zpoždění (pause2);
}
if (fsrReading> 65) {
pixely.setPixelColor (4, 1, 0, 1);
pixely.setPixelColor (11, 1, 0, 1);
pixely.setPixelColor (5, 1, 0, 1);
pixely.setPixelColor (10, 1, 0, 1);
pixely.show ();
zpoždění (pause3);
}
if (fsrReading <67) {
pixely.setPixelColor (4, 0, 0, 0);
pixely.setPixelColor (11, 0, 0, 0);
pixely.setPixelColor (5, 0, 0, 0);
pixely.setPixelColor (10, 0, 0, 0);
pixely.show ();
zpoždění (40);
}
if (fsrReading> 79) {
pixely.setPixelColor (6, 1, 0, 1);
pixely.setPixelColor (9, 1, 0, 1);
pixely.setPixelColor (7, 1, 0, 1);
pixely.setPixelColor (8, 1, 0, 1);
pixely.show ();
zpoždění (pause3);
}
if (fsrReading <85) {
pixely.setPixelColor (6, 0, 0, 0);
pixely.setPixelColor (9, 0, 0, 0);
pixely.setPixelColor (7, 0, 0, 0);
pixely.setPixelColor (8, 0, 0, 0);
pixely.show ();
zpoždění (20);
}
}
jiný{
dýchat_modrou (20, 100, 0, 1, 1); // normální
účinek
}
}
// Pauza
= zpoždění mezi přechody
// Kroky
= počet kroků
// R, G, B = Plné hodnoty RGB
// De void dýchání je váš velký het licht účinek také
fsrsensor niet gebruikt wordt. Deze void wordt in de void loop () weer aangeroepen.
neplatné Breathe_blue (int pauza, int kroky, byte R, byte G, byte B) {
int
tmpR, tmpG, tmpB; // Teplotní hodnoty
// Fade up
pro (int s = 1; s <= kroky; s ++) {
tmpR = (R * s) /
kroky; // Nejprve vynásobte, abyste se vyhnuli chybám zkrácení
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pro (int i = 0;
jápixely.setPixelColor (0, tmpR, tmpG+1, tmpB);
pixely.setPixelColor (15, tmpR, tmpG+1, tmpB);
}
pixely.show ();
zpoždění (4);
}
// Fade up
pro (int s = 1; s <= kroky; s ++) {
tmpR = (R * s) /
kroky; // Nejprve vynásobte, abyste se vyhnuli chybám zkrácení
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pro (int i = 0;
jápixely.setPixelColor (1, tmpR, tmpG+1, tmpB);pixely.setPixelColor (14, tmpR, tmpG+1, tmpB);
}
pixely.show ();
zpoždění (4);
}
// Fade up
pro (int s = 1; s <= kroky; s ++) {
tmpR = (R * s) /
kroky; // Nejprve vynásobte, abyste se vyhnuli chybám zkrácení
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pro (int i = 0;
jápixely.setPixelColor (2, tmpR, tmpG+2, tmpB);pixely.setPixelColor (13, tmpR, tmpG+2, tmpB);
}
pixely.show ();
zpoždění (3,5);
}
// Fade up
pro (int s = 1; s <= kroky; s ++) {
tmpR = (R * s) /
kroky; // Nejprve vynásobte, abyste se vyhnuli chybám zkrácení
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pro (int i = 0;
jápixely.setPixelColor (3, tmpR, tmpG+3, tmpB+5);pixely.setPixelColor (12, tmpR, tmpG+3, tmpB+5);
}
pixely.show ();
zpoždění (3);
}
pro (int i = 0;
jápixely.setPixelColor (0, 0, 0, 0);pixely.setPixelColor (15, 0, 0, 0);
}
// Fade up
pro (int s = 1; s <= kroky; s ++) {
tmpR = (R * s) /
kroky; // Nejprve vynásobte, abyste se vyhnuli chybám zkrácení
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pro (int i = 0;
já
pixely.setPixelColor (4, tmpR, tmpG+3, tmpB+15);pixely.setPixelColor (11, tmpR, tmpG+3, tmpB+15);
}
pixely.show ();
zpoždění (3);
}
// Fade up
pro (int s = 1; s <= kroky; s ++) {
tmpR = (R * s) /
kroky; // Nejprve vynásobte, abyste se vyhnuli chybám zkrácení
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pro (int i = 0;
jápixely.setPixelColor (5, tmpR, tmpG+4, tmpB+20);pixely.setPixelColor (10, tmpR, tmpG+4, tmpB+20);
}
pixely.show ();
zpoždění (2);
}
pro (int i = 0;
jápixely.setPixelColor (1, 0, 0, 0);
pixely.setPixelColor (14, 0, 0, 0);
}
// Fade up
pro (int s = 1; s <= kroky; s ++) {
tmpR = (R * s) /
kroky; // Nejprve vynásobte, abyste se vyhnuli chybám zkrácení
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pro (int i = 0;
jápixely.setPixelColor (6, tmpR, tmpG+2, tmpB+40);
pixely.setPixelColor (9, tmpR, tmpG+2, tmpB+40);
}
pixely.show ();
delay (delayval);
}
pro (int i = 0;
jápixely.setPixelColor (2, 0, 0, 0);pixely.setPixelColor (13, 0, 0, 0);
}
// Fade up
pro (int s = 1; s <= kroky; s ++) {
tmpR = (R * s) /
kroky; // Nejprve vynásobte, abyste se vyhnuli chybám zkrácení
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pro (int i = 0;
já
pixely.setPixelColor (7, tmpR, tmpG, tmpB+44);pixely.setPixelColor (8, tmpR, tmpG, tmpB+44);
}
pixely.show ();
delay (delayval);
}
// Zmizí
pro (int s = kroky; s> 0; s--) {
tmpR = (R * s) / kroky; // Nejprve vynásobte, abyste se vyhnuli zkrácení
chyby
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pro (int i = 0; i
pixely.setPixelColor (7, tmpR, tmpG, tmpB);
pixely.setPixelColor (8, tmpR, tmpG, tmpB);
}
pixely.show ();
zpoždění (1);
}
// Zmizí
pro (int s = kroky; s> 0; s--) {
tmpR = (R * s) / kroky; // Nejprve vynásobte, abyste se vyhnuli zkrácení
chyby
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pro (int i = 0; i
pixely.setPixelColor (6, tmpR, tmpG, tmpB);
pixely.setPixelColor (9, tmpR, tmpG, tmpB);
}
pixely.show ();
zpoždění (1);
}
// Zmizí
pro (int s = kroky; s> 0; s--) {
tmpR = (R * s) / kroky; // Nejprve vynásobte, abyste se vyhnuli zkrácení
chyby
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pro (int i = 0; i
pixely.setPixelColor (5, tmpR, tmpG, tmpB);
pixely.setPixelColor (10, tmpR, tmpG, tmpB);
}
pixely.show ();
zpoždění (2);
}
// Zmizí
pro (int s = kroky; s> 0; s--) {
tmpR = (R * s) / kroky; // Nejprve vynásobte, abyste se vyhnuli zkrácení
chyby
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pro (int i = 0; i
pixely.setPixelColor (4, tmpR, tmpG, tmpB);
pixely.setPixelColor (11, tmpR, tmpG, tmpB);
}
pixely.show ();
zpoždění (2);
}
// Zmizí
pro (int s = kroky; s> 0; s--) {
tmpR = (R * s) / kroky; // Nejprve vynásobte, abyste se vyhnuli zkrácení
chyby
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pro (int i = 0; i
pixely.setPixelColor (3, tmpR, tmpG, tmpB);
pixely.setPixelColor (12, tmpR, tmpG, tmpB);
}
pixely.show ();
zpoždění (3);
}
// Zmizí
pro (int s = kroky; s> 0; s--) {
tmpR = (R * s) / kroky; //
Nejprve vynásobte, abyste se vyhnuli chybám zkrácení
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pro (int i = 0; i
pixely.setPixelColor (2, tmpR, tmpG, tmpB);
pixely.setPixelColor (13, tmpR, tmpG, tmpB);
}
pixely.show ();
zpoždění (3);
}
// Zmizí
pro (int s = kroky; s> 0; s--) {
tmpR = (R * s) / kroky; // Nejprve vynásobte, abyste se vyhnuli zkrácení
chyby
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pro (int i = 0; i
pixely.setPixelColor (1, tmpR, tmpG, tmpB);
pixely.setPixelColor (14, tmpR, tmpG, tmpB);
}
pixely.show ();
zpoždění (4);
}
// Zmizí
pro (int s = kroky; s> 0; s--) {
tmpR = (R * s) / kroky; // Nejprve vynásobte, abyste se vyhnuli zkrácení
chyby
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pro (int i = 0; i
pixely.setPixelColor (0, tmpR, tmpG, tmpB);
pixely.setPixelColor (15, tmpR, tmpG, tmpB);
}
pixely.show ();
zpoždění (4);
}
}
Krok 5: Dát vše dohromady:
Můžete nechat všechny své vodiče připojené k prkénku nebo PVC, to je na vás (rozhodl jsem se dát PVC na arduino, je to tak pěkné a čisté).
Dalším krokem je umístit teplem smršťovací bužírky kolem všech vodičů, aby nevznikl žádný nepořádek.
Pokud jste se rozhodli použít PVC, měli byste už nyní pájet vše dohromady.
Poté na vnější stranu brýlí nasadíte neopixelové kroužky (ujistěte se, že jsou diody zarovnané v dolní části) a zajistěte je na místě páskou nebo lepidlem (použil jsem pásku).
Můžete se rozhodnout přilepit snímač fsr k elastickému pásku páskou, nebo jej nechat samostatně.
Užijte si brýle:)