Obsah:
2025 Autor: John Day | [email protected]. Naposledy zmenené: 2025-01-13 06:58
Projekt HKU - ITTT (Ak to potom, potom) - Julia Berkouwer, 1B
Už ste sa niekedy cítili vystresovaní a jednoducho neviete, ako sa upokojiť, potom by ste mali vyskúšať tieto relaxačné okuliare! Nasaďte si ich a zatvorte oči, potom sa spustí dychový vzor. Pri nasledovaní tohto dychového rytmu dýcha váš rytmus 6 krát za minútu. Tým sa uvoľní každodenný stres.
Intenzitu dýchania môžete sledovať aj prepnutím vypínača pomocou senzora fsr.
V tomto príbehu vás krok za krokom prevediem budovaním vlastných relaxačných okuliarov.
Krok 1: Potrebné materiály a diely:
Materiály:
1x arduino uno;
1x chlebová doska alebo PCV;
3x 10k odpory
Drôty (Výhodne rôzne farby, aby bolo jednoduchšie určiť, ktoré veci idú na zem a ktoré na rôzne kolíky atď.);
Niektoré rúrky zmršťujúce teplo;
2x NeoPixel Ring - 16 x 5050 RGB LED s integrovanými ovládačmi;
1x prepínač;
1x snímač FSR;
1x okuliare SteamPunk (Môžete si ich kúpiť v obchode s párty vecami, ich použitie je veľmi jednoduché, pretože neopixel krúžok na okuliare perfektne sedí. Vždy sa snažte použiť iné okuliare alebo si vytvorte vlastné.);
1x nejaký druh (elastickej) pásky, ktorá sa dá okolo hrudníka.
Nástroje: -Laptop
-Spájkovačka
-Software Arduino IDE
Na mojom pvc uvidíte dve tlačidlá a vypínač, na pripojenie k prepínaču používam iba ľavé tlačidlo, druhé tlačidlo na pravej strane obrázku nepoužívam. Umiestnil som tlačidlá na PVC skôr, ako som si uvedomil, že ich nepotrebujem a namiesto toho som potreboval použiť prepínač.
Tu nižšie uvidíte obrázky všetkého, čo som použil:
Krok 2: Neopixelové prstene
Biely drôt je spojený so zemou na zadnej strane neopixelového prstenca.
Oranžový vodič je pripojený k 5V.
A hnedý drôt je pripojený k vstupu údajov
Krok 3: Pripojenia
Takto vyzeral môj breadboard pri prototypovaní, môžete to použiť ako referenciu.
Jedným tlačidlom som tiež urobil rozloženie zapojenia, ako to má vyzerať.
Krok 4: Kód:
Pravdepodobne to nie je najefektívnejší kód, ale funguje to pre mňa. Vyzvite sa a skúste to zefektívniť; P
#zahrnúť
// Ktorý
pin na Arduine je pripojený k NeoPixels?
#definuj
PIN 6
// Ktorý
pin na Arduino je pripojený k tlačidlu
#definuj
BUTTON_PIN 9
// Ako
je k Arduinu pripojených veľa NeoPixelov?
#definuj
NUMPIXELY 16
// Kedy
nastavíme knižnicu NeoPixel, povieme jej, koľko pixelov a ktorý pin použiť na odosielanie signálov.
// Poznámka
že pre staršie pásy NeoPixel budete možno musieť zmeniť tretí parameter-pozrite sa na strandtest
//
príklad pre ďalšie informácie o možných hodnotách.
Adafruit_NeoPixel
pixelov = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int pauza
= 1; // zdržanie2
int
pauza2 = 80; // klesá, keď sa používa fsr
int
pauza3 = 150; // robenie, keď sa používa fsr
int
delayval = 4; // zdržanie1
int
fsrPin = 0; // rozbaľovacia ponuka FSR a 10K sú spojené s a0
int
fsrReading;
prázdny
nastaviť() {
pinMode (BUTTON_PIN, INPUT);
Serial.begin (9600);
pixely.begin (); // Tým sa inicializuje súbor
Knižnica NeoPixel.
pixely.show ();
}
bool
stlačené tlačidlo (vnútorný pin) {
vrátiť digitalRead (pin);
}
prázdny
loop () {// číta, či je pinový vstup pravdivý alebo nepravdivý
fsrReading = analogRead (fsrPin);
Serial.print ("Analógové čítanie =");
Serial.print (fsrReading);
ak (stlačené tlačidlo (BUTTON_PIN) == true) {
// svetelný efekt pri použití snímača fsr
if (fsrReading> 50) {
pixely.setPixelColor (0, 1, 0, 1);
pixelov.setPixelColor (15, 1, 0, 1);
pixely.setPixelColor (1, 1, 0, 1);
pixely.setPixelColor (14, 1, 0, 1);
pixely.show ();
oneskorenie (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 ();
oneskorenie (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 ();
oneskorenie (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 ();
oneskorenie (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 ();
oneskorenie (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 ();
oneskorenie (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 ();
oneskorenie (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 ();
oneskorenie (20);
}
}
inak {
dýchať_modré (20, 100, 0, 1, 1); // normalne
účinok
}
}
// Pauza
= oneskorenie medzi prechodmi
// Kroky
= počet krokov
// R, G, B = Plné hodnoty RGB
// De void dýchanie je váš veľký het licht efekt tiež
fsrsensor niet gebruikt wordt. Deze void wordt in de void loop () weer aangeroepen.
neplatné dýchanie_modrej (int pauza, int kroky, bajt R, bajt G, bajt B) {
int
tmpR, tmpG, tmpB; // Teplotné hodnoty
// Fade up
pre (int s = 1; s <= kroky; s ++) {
tmpR = (R * s) /
kroky; // Najprv vynásobte, aby ste sa vyhli chybám pri skrátení
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pre (int i = 0;
ipixely.setPixelColor (0, tmpR, tmpG+1, tmpB);
pixely.setPixelColor (15, tmpR, tmpG+1, tmpB);
}
pixely.show ();
oneskorenie (4);
}
// Fade up
pre (int s = 1; s <= kroky; s ++) {
tmpR = (R * s) /
kroky; // Najprv vynásobte, aby ste sa vyhli chybám skrátenia
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pre (int i = 0;
ipixely.setPixelColor (1, tmpR, tmpG+1, tmpB);pixely.setPixelColor (14, tmpR, tmpG+1, tmpB);
}
pixely.show ();
oneskorenie (4);
}
// Fade up
pre (int s = 1; s <= kroky; s ++) {
tmpR = (R * s) /
kroky; // Najprv vynásobte, aby ste sa vyhli chybám pri skrátení
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pre (int i = 0;
ipixely.setPixelColor (2, tmpR, tmpG+2, tmpB);pixely.setPixelColor (13, tmpR, tmpG+2, tmpB);
}
pixely.show ();
oneskorenie (3,5);
}
// Fade up
pre (int s = 1; s <= kroky; s ++) {
tmpR = (R * s) /
kroky; // Najprv vynásobte, aby ste sa vyhli chybám pri skrátení
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pre (int i = 0;
ipixely.setPixelColor (3, tmpR, tmpG+3, tmpB+5);pixely.setPixelColor (12, tmpR, tmpG+3, tmpB+5);
}
pixely.show ();
oneskorenie (3);
}
pre (int i = 0;
ipixely.setPixelColor (0, 0, 0, 0);pixely.setPixelColor (15, 0, 0, 0);
}
// Fade up
pre (int s = 1; s <= kroky; s ++) {
tmpR = (R * s) /
kroky; // Najprv vynásobte, aby ste sa vyhli chybám skrátenia
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pre (int i = 0;
i
pixelov.setPixelColor (4, tmpR, tmpG+3, tmpB+15);pixelov.setPixelColor (11, tmpR, tmpG+3, tmpB+15);
}
pixely.show ();
oneskorenie (3);
}
// Fade up
pre (int s = 1; s <= kroky; s ++) {
tmpR = (R * s) /
kroky; // Najprv vynásobte, aby ste sa vyhli chybám pri skrátení
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pre (int i = 0;
ipixelov.setPixelColor (5, tmpR, tmpG+4, tmpB+20);pixelov.setPixelColor (10, tmpR, tmpG+4, tmpB+20);
}
pixely.show ();
oneskorenie (2);
}
pre (int i = 0;
ipixely.setPixelColor (1, 0, 0, 0);
pixely.setPixelColor (14, 0, 0, 0);
}
// Fade up
pre (int s = 1; s <= kroky; s ++) {
tmpR = (R * s) /
kroky; // Najprv vynásobte, aby ste sa vyhli chybám skrátenia
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pre (int i = 0;
ipixelov.setPixelColor (6, tmpR, tmpG+2, tmpB+40);
pixelov.setPixelColor (9, tmpR, tmpG+2, tmpB+40);
}
pixely.show ();
delay (delayval);
}
pre (int i = 0;
ipixely.setPixelColor (2, 0, 0, 0);pixely.setPixelColor (13, 0, 0, 0);
}
// Fade up
pre (int s = 1; s <= kroky; s ++) {
tmpR = (R * s) /
kroky; // Najprv vynásobte, aby ste sa vyhli chybám pri skrátení
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pre (int i = 0;
i
pixely.setPixelColor (7, tmpR, tmpG, tmpB+44);pixely.setPixelColor (8, tmpR, tmpG, tmpB+44);
}
pixely.show ();
delay (delayval);
}
// Zmizne
pre (int s = kroky; s> 0; s--) {
tmpR = (R * s) / kroky; // Najprv vynásobte, aby ste sa vyhli skráteniu
chyby
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pre (int i = 0; i
pixely.setPixelColor (7, tmpR, tmpG, tmpB);
pixely.setPixelColor (8, tmpR, tmpG, tmpB);
}
pixely.show ();
oneskorenie (1);
}
// Zmizne
pre (int s = kroky; s> 0; s--) {
tmpR = (R * s) / kroky; // Najprv vynásobte, aby ste sa vyhli skráteniu
chyby
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pre (int i = 0; i
pixely.setPixelColor (6, tmpR, tmpG, tmpB);
pixely.setPixelColor (9, tmpR, tmpG, tmpB);
}
pixely.show ();
oneskorenie (1);
}
// Zmizne
pre (int s = kroky; s> 0; s--) {
tmpR = (R * s) / kroky; // Najprv vynásobte, aby ste sa vyhli skráteniu
chyby
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pre (int i = 0; i
pixely.setPixelColor (5, tmpR, tmpG, tmpB);
pixely.setPixelColor (10, tmpR, tmpG, tmpB);
}
pixely.show ();
oneskorenie (2);
}
// Zmizne
pre (int s = kroky; s> 0; s--) {
tmpR = (R * s) / kroky; // Najprv vynásobte, aby ste sa vyhli skráteniu
chyby
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pre (int i = 0; i
pixely.setPixelColor (4, tmpR, tmpG, tmpB);
pixely.setPixelColor (11, tmpR, tmpG, tmpB);
}
pixely.show ();
oneskorenie (2);
}
// Zmizne
pre (int s = kroky; s> 0; s--) {
tmpR = (R * s) / kroky; // Najprv vynásobte, aby ste sa vyhli skráteniu
chyby
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pre (int i = 0; i
pixely.setPixelColor (3, tmpR, tmpG, tmpB);
pixely.setPixelColor (12, tmpR, tmpG, tmpB);
}
pixely.show ();
oneskorenie (3);
}
// Zmizne
pre (int s = kroky; s> 0; s--) {
tmpR = (R * s) / kroky; //
Najprv vynásobte, aby ste sa vyhli chybám pri skrátení
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pre (int i = 0; i
pixely.setPixelColor (2, tmpR, tmpG, tmpB);
pixely.setPixelColor (13, tmpR, tmpG, tmpB);
}
pixely.show ();
oneskorenie (3);
}
// Zmizne
pre (int s = kroky; s> 0; s--) {
tmpR = (R * s) / kroky; // Najprv vynásobte, aby ste sa vyhli skráteniu
chyby
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pre (int i = 0; i
pixely.setPixelColor (1, tmpR, tmpG, tmpB);
pixely.setPixelColor (14, tmpR, tmpG, tmpB);
}
pixely.show ();
oneskorenie (4);
}
// Zmizne
pre (int s = kroky; s> 0; s--) {
tmpR = (R * s) / kroky; // Najprv vynásobte, aby ste sa vyhli skráteniu
chyby
tmpG = (G * s) / kroky;
tmpB = (B * s) / kroky;
pre (int i = 0; i
pixely.setPixelColor (0, tmpR, tmpG, tmpB);
pixely.setPixelColor (15, tmpR, tmpG, tmpB);
}
pixely.show ();
oneskorenie (4);
}
}
Krok 5: Spojenie všetkého dohromady:
Môžete nechať všetky svoje káble pripojené k vášmu nepájivému stolu alebo k PVC, to je na vás (rozhodol som sa dať arduino na vrch PVC, je to tak pekné a upravené).
Ďalším krokom je položiť teplom zmrštiteľné trubice okolo všetkých drôtov, aby nevznikol žiadny neporiadok.
Ak ste sa rozhodli použiť PVC, potom by ste už mali všetko spájkovať.
Potom na vonkajšiu stranu okuliarov umiestnite neopixelové krúžky (uistite sa, že sú diódy zarovnané v spodnej časti) a zaistite ich na mieste páskou alebo lepidlom (použil som pásku).
Môžete sa rozhodnúť prilepiť snímač fsr k elastickému pásu pomocou pásky, alebo ho nechajte sami.
Užite si okuliare:)