Përmbajtje:
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
Projekti HKU - ITTT (If This Then That) - Julia Berkouwer, 1B
A jeni ndier ndonjëherë i stresuar dhe thjesht nuk dini si të qetësoheni, atëherë duhet të provoni këto syze relaksimi! I vendosni dhe mbyllni sytë, atëherë do të luajë një model frymëmarrjeje. Duke ndjekur këtë model frymëmarrjeje, ritmi juaj i frymëmarrjes do të zbresë në frymëmarrje dhe dalje 6 herë në minutë. Duke e bërë këtë, largoni stresin e përditshëm.
Ju gjithashtu mund të gjurmoni intensitetin tuaj të frymëmarrjes duke rrokullisur një çelës, duke përdorur një sensor fsr.
Me këtë toturial unë do t'ju udhëheq përmes ndërtimit të syzeve tuaja relaksuese hap pas hapi.
Hapi 1: Materialet dhe pjesët e nevojshme:
Materiale:
1x arduino uno;
1xbreadboard ose PCV;
3x rezistente 10k
Tela (Mundësisht ngjyra të ndryshme kështu që është më e lehtë të thuash se cilat gjëra po shkojnë në tokë dhe cilat do të shkojnë në kunja të ndryshme, etj.);
Disa tuba për tkurrjen e nxehtësisë;
2x Unaza NeoPixel - 16 x 5050 RGB LED me Drejtues të Integruar;
Kaloni 1x;
1x sensor FSR;
1x syze SteamPunk (Ju mund t'i blini ato në një dyqan festash, ato janë të lehta për t'u përdorur sepse unaza neopixel i përshtatet në mënyrë të përkryer syzeve. Ju gjithmonë përpiqeni të përdorni syze të tjera ose krijoni tuajën.);
1x një lloj brezi (elastik) për ta vendosur rreth gjoksit tuaj.
Mjetet: -Laptop
-Makine per ngjitjen e metalit
-Arduino IDE software
Do të shihni dy butona dhe një ndërprerës në pvc tim, unë përdor vetëm butonin e majtë për ta lidhur me ndërprerësin, nuk përdor butonin e dytë në të djathtë të figurës. I vura butonat në PVC para se të kuptoja se nuk më duheshin dhe më duhej të përdorja një ndërprerës në vend.
Më poshtë këtu do të shihni fotografi të gjithçkaje që kam përdorur:
Hapi 2: Unazat neopixel
Teli i bardhë është i lidhur me tokën në anën e pasme të unazës neopixel.
Teli portokalli është i lidhur me 5V.
Dhe tela kafe është e lidhur me hyrjen e të dhënave
Hapi 3: Lidhjet
Kështu duket paneli im i bukës gjatë prototipimit, mund ta përdorni si referencë.
Unë gjithashtu bëra një paraqitje të instalimeve elektrike të asaj që supozohet të duket me vetëm një buton.
Hapi 4: Kodi:
Ndoshta nuk është kodi më efikas, por funksionon për mua. Sfidoni veten dhe përpiquni ta bëni atë më efikas; P
#përfshi
// Cila
pin në Arduino është i lidhur me NeoPixels?
#përcakto
PIN 6
// Cila
pin në Arduino është i lidhur me butonin
#përcakto
BUTTON_PIN 9
// Si
shumë NeoPixel janë bashkangjitur në Arduino?
#përcakto
NUMPIXELS 16
// Kur
ne konfigurojmë bibliotekën NeoPixel, i themi sa piksele dhe cilën pin të përdorim për të dërguar sinjale.
// Shënim
se për shiritat më të vjetër NeoPixel ju mund të keni nevojë të ndryshoni parametrin e tretë-shikoni testin më të fuqishëm
//
shembull për më shumë informacion mbi vlerat e mundshme.
Adafruit_NeoPixel
piksele = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int pauzë
= 1; // vonesa2
int
pauzë2 = 80; // zbret kur përdoret fsr
int
pauzë3 = 150; // duke bërë deri kur fsr është duke u përdorur
int
vonesë = 4; // vonesa1
int
fsrPin = 0; // FSR dhe 10K pulldown janë të lidhura me a0
int
fsrLeximi;
i pavlefshëm
setup () {
pinMode (BUTTON_PIN, INPUT);
Serial.filloj (9600);
piksele.filloj (); // Kjo inicializon
Biblioteka NeoPixel.
piksele.shfaq ();
}
bool
i shtypur me buton (int pin) {
kthehu digitalRead (pin);
}
i pavlefshëm
loop () {// lexon nëse hyrja e pin është e vërtetë apo e rreme
fsrReading = analogRead (fsrPin);
Serial.print ("Lexim analog =");
Serial.print (fsrReading);
nëse (shtypur me buton (BUTTON_PIN) == e vërtetë) {
// efekti i dritës kur përdorni sensorin fsr
nëse (fsrR leximi> 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);
piksele.shfaq ();
vonesë (pauzë 3);
}
nëse (fsrR leximi <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);
piksele.shfaq ();
vonesë (pauzë2);
}
nëse (fsrR leximi> 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);
piksele.shfaq ();
vonesë (pauzë 3);
}
nëse (fsrR leximi <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);
piksele.shfaq ();
vonesë (pauzë2);
}
nëse (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);
piksele.shfaq ();
vonesë (pauzë 3);
}
nëse (fsrLeximi <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);
piksele.shfaq ();
vonesa (40);
}
nëse (fsrR leximi> 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);
piksele.shfaq ();
vonesë (pauzë 3);
}
nëse (fsrR leximi <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);
piksele.shfaq ();
vonesa (20);
}
}
tjeter {
bluja e frymëmarrjes (20, 100, 0, 1, 1); // normale
efektit
}
}
// Pusho
= vonesë midis kalimeve
// Hapat
= numri i hapave
// R, G, B = Vlerat e plota të RGB
// Frymëmarrja e pavlefshme është e efektshme ose e pavlefshme
fsrsensor niet gebruikt wordt. Deze void wordt në de void loop () weer aangeroepen.
zbrazëti frymëmarrje_blu (int pauzë, hapa int, bajt R, bajt G, byte B) {
int
tmpR, tmpG, tmpB; // Vlerat e temperaturës
// Zbehet
për (int s = 1; s <= hapa; s ++) {
tmpR = (R * s) /
hapa; // Shumëzoni së pari për të shmangur gabimet e shkurtimit
tmpG = (G * s) / hapa;
tmpB = (B * s) / hapa;
për (int i = 0;
unepixels.setPixelColor (0, tmpR, tmpG+1, tmpB);
pixels.setPixelColor (15, tmpR, tmpG+1, tmpB);
}
piksele.shfaq ();
vonesa (4);
}
// Zbehet
për (int s = 1; s <= hapa; s ++) {
tmpR = (R * s) /
hapa; // Shumëzoni së pari për të shmangur gabimet e shkurtimit
tmpG = (G * s) / hapa;
tmpB = (B * s) / hapa;
për (int i = 0;
unepixels.setPixelColor (1, tmpR, tmpG+1, tmpB);pixels.setPixelColor (14, tmpR, tmpG+1, tmpB);
}
piksele.shfaq ();
vonesa (4);
}
// Zbehet
për (int s = 1; s <= hapa; s ++) {
tmpR = (R * s) /
hapa; // Shumëzoni së pari për të shmangur gabimet e shkurtimit
tmpG = (G * s) / hapa;
tmpB = (B * s) / hapa;
për (int i = 0;
unepixels.setPixelColor (2, tmpR, tmpG+2, tmpB);pixels.setPixelColor (13, tmpR, tmpG+2, tmpB);
}
piksele.shfaq ();
vonesa (3.5);
}
// Zbehet
për (int s = 1; s <= hapa; s ++) {
tmpR = (R * s) /
hapa; // Shumëzoni së pari për të shmangur gabimet e shkurtimit
tmpG = (G * s) / hapa;
tmpB = (B * s) / hapa;
për (int i = 0;
unepixels.setPixelColor (3, tmpR, tmpG+3, tmpB+5);pixels.setPixelColor (12, tmpR, tmpG+3, tmpB+5);
}
piksele.shfaq ();
vonesa (3);
}
për (int i = 0;
unepixels.setPixelColor (0, 0, 0, 0);pixels.setPixelColor (15, 0, 0, 0);
}
// Zbehet
për (int s = 1; s <= hapa; s ++) {
tmpR = (R * s) /
hapa; // Shumëzoni së pari për të shmangur gabimet e shkurtimit
tmpG = (G * s) / hapa;
tmpB = (B * s) / hapa;
për (int i = 0;
une
pixels.setPixelColor (4, tmpR, tmpG+3, tmpB+15);pixels.setPixelColor (11, tmpR, tmpG+3, tmpB+15);
}
piksele.shfaq ();
vonesa (3);
}
// Zbehet
për (int s = 1; s <= hapa; s ++) {
tmpR = (R * s) /
hapa; // Shumëzoni së pari për të shmangur gabimet e shkurtimit
tmpG = (G * s) / hapa;
tmpB = (B * s) / hapa;
për (int i = 0;
unepixels.setPixelColor (5, tmpR, tmpG+4, tmpB+20);pixels.setPixelColor (10, tmpR, tmpG+4, tmpB+20);
}
piksele.shfaq ();
vonesa (2);
}
për (int i = 0;
unepixels.setPixelColor (1, 0, 0, 0);
pixels.setPixelColor (14, 0, 0, 0);
}
// Zbehet
për (int s = 1; s <= hapa; s ++) {
tmpR = (R * s) /
hapa; // Shumëzoni së pari për të shmangur gabimet e shkurtimit
tmpG = (G * s) / hapa;
tmpB = (B * s) / hapa;
për (int i = 0;
unepixels.setPixelColor (6, tmpR, tmpG+2, tmpB+40);
pixels.setPixelColor (9, tmpR, tmpG+2, tmpB+40);
}
piksele.shfaq ();
vonesë (vonesë);
}
për (int i = 0;
unepixels.setPixelColor (2, 0, 0, 0);pixels.setPixelColor (13, 0, 0, 0);
}
// Zbehet
për (int s = 1; s <= hapa; s ++) {
tmpR = (R * s) /
hapa; // Shumëzoni së pari për të shmangur gabimet e shkurtimit
tmpG = (G * s) / hapa;
tmpB = (B * s) / hapa;
për (int i = 0;
une
pixels.setPixelColor (7, tmpR, tmpG, tmpB+44);pixels.setPixelColor (8, tmpR, tmpG, tmpB+44);
}
piksele.shfaq ();
vonesë (vonesë);
}
// Zbehet
për (int s = hapa; s> 0; s--) {
tmpR = (R * s) / hapa; // Shumëzoni së pari për të shmangur shkurtimin
gabimet
tmpG = (G * s) / hapa;
tmpB = (B * s) / hapa;
për (int i = 0; i
pixels.setPixelColor (7, tmpR, tmpG, tmpB);
pixels.setPixelColor (8, tmpR, tmpG, tmpB);
}
piksele.shfaq ();
vonesa (1);
}
// Zbehet
për (int s = hapa; s> 0; s--) {
tmpR = (R * s) / hapa; // Shumëzoni së pari për të shmangur shkurtimin
gabimet
tmpG = (G * s) / hapa;
tmpB = (B * s) / hapa;
për (int i = 0; i
pixels.setPixelColor (6, tmpR, tmpG, tmpB);
pixels.setPixelColor (9, tmpR, tmpG, tmpB);
}
piksele.shfaq ();
vonesa (1);
}
// Zbehet
për (int s = hapa; s> 0; s--) {
tmpR = (R * s) / hapa; // Shumëzoni së pari për të shmangur shkurtimin
gabimet
tmpG = (G * s) / hapa;
tmpB = (B * s) / hapa;
për (int i = 0; i
pixels.setPixelColor (5, tmpR, tmpG, tmpB);
pixels.setPixelColor (10, tmpR, tmpG, tmpB);
}
piksele.shfaq ();
vonesa (2);
}
// Zbehet
për (int s = hapa; s> 0; s--) {
tmpR = (R * s) / hapa; // Shumëzoni së pari për të shmangur shkurtimin
gabimet
tmpG = (G * s) / hapa;
tmpB = (B * s) / hapa;
për (int i = 0; i
pixels.setPixelColor (4, tmpR, tmpG, tmpB);
pixels.setPixelColor (11, tmpR, tmpG, tmpB);
}
piksele.shfaq ();
vonesa (2);
}
// Zbehet
për (int s = hapa; s> 0; s--) {
tmpR = (R * s) / hapa; // Shumëzoni së pari për të shmangur shkurtimin
gabimet
tmpG = (G * s) / hapa;
tmpB = (B * s) / hapa;
për (int i = 0; i
pixels.setPixelColor (3, tmpR, tmpG, tmpB);
pixels.setPixelColor (12, tmpR, tmpG, tmpB);
}
piksele.shfaq ();
vonesa (3);
}
// Zbehet
për (int s = hapa; s> 0; s--) {
tmpR = (R * s) / hapa; //
Shumëzoni së pari për të shmangur gabimet e shkurtimit
tmpG = (G * s) / hapa;
tmpB = (B * s) / hapa;
për (int i = 0; i
pixels.setPixelColor (2, tmpR, tmpG, tmpB);
pixels.setPixelColor (13, tmpR, tmpG, tmpB);
}
piksele.shfaq ();
vonesa (3);
}
// Zbehet
për (int s = hapa; s> 0; s--) {
tmpR = (R * s) / hapa; // Shumëzoni së pari për të shmangur shkurtimin
gabimet
tmpG = (G * s) / hapa;
tmpB = (B * s) / hapa;
për (int i = 0; i
pixels.setPixelColor (1, tmpR, tmpG, tmpB);
pixels.setPixelColor (14, tmpR, tmpG, tmpB);
}
piksele.shfaq ();
vonesa (4);
}
// Zbehet
për (int s = hapa; s> 0; s--) {
tmpR = (R * s) / hapa; // Shumëzoni së pari për të shmangur shkurtimin
gabimet
tmpG = (G * s) / hapa;
tmpB = (B * s) / hapa;
për (int i = 0; i
pixels.setPixelColor (0, tmpR, tmpG, tmpB);
pixels.setPixelColor (15, tmpR, tmpG, tmpB);
}
piksele.shfaq ();
vonesa (4);
}
}
Hapi 5: Vendosja e gjithçkaje së bashku:
Ju thjesht mund t'i lini të gjitha telat tuaja të lidhura me tabelën tuaj të bukës ose një PVC, kjo varet nga ju (unë zgjodha të vendos një PVC në krye të arduino -s është mirë dhe i zoti në atë mënyrë).
Hapi tjetër është vendosja e tubave të tkurrjes së nxehtësisë rreth të gjitha telave në mënyrë që të jetë më pak rrëmujë.
Nëse keni zgjedhur të përdorni një PVC atëherë duhet të keni bashkuar gjithçka së bashku deri tani.
Pas kësaj vendosni unazat neopixel në pjesën e jashtme të syzeve (sigurohuni që led -et të jenë të rreshtuar në pjesën e poshtme) dhe sigurojini ato në vend me ndonjë kasetë ose ngjitës (kam përdorur kasetë).
Ju mund të zgjidhni të ngjitni sensorin fsr në brezin elastik me ndonjë kasetë ose thjesht ta lini atë jashtë.
Shijoni syzet tuaja:)