Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
HKU projekt - ITTT (If This Then That) - Julia Berkouwer, 1B
Jeste li se ikada osjećali pod stresom i jednostavno ne znate kako se smiriti, onda biste trebali isprobati ove naočale za opuštanje! Stavite ih i zatvorite oči, a zatim će se igrati obrazac disanja. Slijedeći ovaj obrazac disanja, vaš će se disanje prenijeti na udisanje i izdisaj 6 puta u minuti. Time se oslobađate svakodnevnog stresa.
Intenzitet disanja možete pratiti i pritiskom na prekidač, pomoću fsr-senzora.
Pomoću ovog toturiala vodit ću vas kroz izgradnju vlastitih naočala za opuštanje korak po korak.
Korak 1: Potrebni materijali i dijelovi:
Materijali:
1x arduino uno;
1xbreadboard ili PCV;
3x 10k otpornici
Žice (po mogućnosti različite boje pa je lakše odrediti koje stvari idu na tlo, a koje na različite igle itd.);
Neke cijevi za skupljanje topline;
2x NeoPixel prsten - 16 x 5050 RGB LED sa integriranim upravljačkim programima;
1x prekidač;
1x FSR senzor;
1x SteamPunk naočale (Ove možete kupiti u party shopu, jednostavne su za upotrebu jer prsten od neopiksela savršeno pristaje na čaše. Uvijek pokušavate koristiti druge naočale ili stvoriti vlastite.);
1x stavite nekakvu (elastičnu) traku oko grudi.
Alati: -Laptop
-Lemilica
-Arduino IDE softver
Vidjet ćete dva gumba i prekidač na mom pvc -u, koristim samo lijevi gumb za spajanje na prekidač, ne koristim drugi gumb desno od slike. Stavio sam gumbe na pvc prije nego što sam shvatio da mi ne trebaju i da sam umjesto toga morao koristiti prekidač.
Ispod ćete vidjeti slike svega što sam koristio:
Korak 2: Neopixel prstenovi
Bijela žica spojena je na masu na stražnjoj strani neopiksela.
Narančasta žica spojena je na 5V.
Smeđa žica spojena je na ulaz podataka
Korak 3: Veze
Ovako je izgledala moja ploča tijekom izrade prototipa, možete je koristiti kao referencu.
Također sam sa samo jednim gumbom napravio raspored ožičenja kako bi trebao izgledati.
Korak 4: Kôd:
To vjerojatno nije najučinkovitiji kod, ali meni radi. Izazovite sebe i pokušajte je učiniti učinkovitijom; P
#uključi
// Koji
pin na Arduinu je spojen na NeoPixels?
#definirati
PIN 6
// Koji
pin na Arduinu povezan je s gumbom
#definirati
BUTTON_PIN 9
// Kako
mnogi NeoPixeli su spojeni na Arduino?
#definirati
BROJEVI 16
// Kada
postavljamo NeoPixel knjižnicu, govorimo joj koliko piksela i koji pin koristiti za slanje signala.
// Bilješka
da ćete za starije NeoPixel trake možda trebati promijeniti treći parametar-pogledajte strandtest
//
primjer za više informacija o mogućim vrijednostima.
Adafruit_NeoPixel
pikseli = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int stanka
= 1; // odgoda2
int
pauza2 = 80; // pada prema dolje kada se koristi fsr
int
pauza3 = 150; // dotjerivanje kada se koristi fsr
int
delayval = 4; // odgoda1
int
fsrPin = 0; // FSR i 10K padajući izbornik povezani su s a0
int
fsrReading;
poništiti
postaviti() {
pinMode (BUTTON_PIN, INPUT);
Serial.begin (9600);
pikseli.begin (); // Ovo inicijalizira
Knjižnica NeoPixel.
pikseli.show ();
}
bool
pritisnuto na gumb (int pin) {
return digitalRead (pin);
}
poništiti
loop () {// čita je li pin input istinit ili false
fsrReading = analogRead (fsrPin);
Serial.print ("Analogno čitanje =");
Serial.print (fsrReading);
if (pritisnuto dugme (BUTTON_PIN) == true) {
// svjetlosni efekt pri upotrebi fsr senzora
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);
pikseli.show ();
odgoda (pauza3);
}
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);
pikseli.show ();
odgoda (pauza2);
}
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);
pikseli.show ();
odgoda (pauza3);
}
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);
pikseli.show ();
odgoda (pauza2);
}
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);
pikseli.show ();
odgoda (pauza3);
}
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);
pikseli.show ();
kašnjenje (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);
pikseli.show ();
odgoda (pauza3);
}
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);
pikseli.show ();
kašnjenje (20);
}
}
drugo{
disati_plavo (20, 100, 0, 1, 1); // normalno
utjecaj
}
}
// Pauza
= kašnjenje između prijelaza
// Koraci
= broj koraka
// R, G, B = Potpune RGB vrijednosti
// De void dishe is voor het licht effect als de
fsrsensor niet gebruikt wordt. Deze void wordt u de void loop () weer aangeroepen.
voidreathe_blue (int pauza, int koraci, byte R, byte G, bajt B) {
int
tmpR, tmpG, tmpB; // Temp vrijednosti
// Fade up
za (int s = 1; s <= koraci; s ++) {
tmpR = (R * s) /
koraci; // Najprije se pomnožite kako biste izbjegli pogreške pri skraćivanju
tmpG = (G * s) / koraci;
tmpB = (B * s) / koraci;
za (int i = 0;
ipixels.setPixelColor (0, tmpR, tmpG+1, tmpB);
pixels.setPixelColor (15, tmpR, tmpG+1, tmpB);
}
pikseli.show ();
kašnjenje (4);
}
// Fade up
za (int s = 1; s <= koraci; s ++) {
tmpR = (R * s) /
koraci; // Najprije se pomnožite kako biste izbjegli pogreške pri skraćivanju
tmpG = (G * s) / koraci;
tmpB = (B * s) / koraci;
za (int i = 0;
ipixels.setPixelColor (1, tmpR, tmpG+1, tmpB);pixels.setPixelColor (14, tmpR, tmpG+1, tmpB);
}
pikseli.show ();
kašnjenje (4);
}
// Fade up
za (int s = 1; s <= koraci; s ++) {
tmpR = (R * s) /
koraci; // Najprije se pomnožite kako biste izbjegli pogreške pri skraćivanju
tmpG = (G * s) / koraci;
tmpB = (B * s) / koraci;
za (int i = 0;
ipixels.setPixelColor (2, tmpR, tmpG+2, tmpB);pixels.setPixelColor (13, tmpR, tmpG+2, tmpB);
}
pikseli.show ();
kašnjenje (3,5);
}
// Fade up
za (int s = 1; s <= koraci; s ++) {
tmpR = (R * s) /
koraci; // Najprije se pomnožite kako biste izbjegli pogreške pri skraćivanju
tmpG = (G * s) / koraci;
tmpB = (B * s) / koraci;
za (int i = 0;
ipixels.setPixelColor (3, tmpR, tmpG+3, tmpB+5);pixels.setPixelColor (12, tmpR, tmpG+3, tmpB+5);
}
pikseli.show ();
kašnjenje (3);
}
za (int i = 0;
ipixels.setPixelColor (0, 0, 0, 0);pixels.setPixelColor (15, 0, 0, 0);
}
// Fade up
za (int s = 1; s <= koraci; s ++) {
tmpR = (R * s) /
koraci; // Najprije se pomnožite kako biste izbjegli pogreške pri skraćivanju
tmpG = (G * s) / koraci;
tmpB = (B * s) / koraci;
za (int i = 0;
i
pixels.setPixelColor (4, tmpR, tmpG+3, tmpB+15);pixels.setPixelColor (11, tmpR, tmpG+3, tmpB+15);
}
pikseli.show ();
kašnjenje (3);
}
// Fade up
za (int s = 1; s <= koraci; s ++) {
tmpR = (R * s) /
koraci; // Najprije se pomnožite kako biste izbjegli pogreške pri skraćivanju
tmpG = (G * s) / koraci;
tmpB = (B * s) / koraci;
za (int i = 0;
ipixels.setPixelColor (5, tmpR, tmpG+4, tmpB+20);pixels.setPixelColor (10, tmpR, tmpG+4, tmpB+20);
}
pikseli.show ();
kašnjenje (2);
}
za (int i = 0;
ipixels.setPixelColor (1, 0, 0, 0);
pixels.setPixelColor (14, 0, 0, 0);
}
// Fade up
za (int s = 1; s <= koraci; s ++) {
tmpR = (R * s) /
koraci; // Najprije se pomnožite kako biste izbjegli pogreške pri skraćivanju
tmpG = (G * s) / koraci;
tmpB = (B * s) / koraci;
za (int i = 0;
ipixels.setPixelColor (6, tmpR, tmpG+2, tmpB+40);
pixels.setPixelColor (9, tmpR, tmpG+2, tmpB+40);
}
pikseli.show ();
odgoda (delayval);
}
za (int i = 0;
ipixels.setPixelColor (2, 0, 0, 0);pixels.setPixelColor (13, 0, 0, 0);
}
// Fade up
za (int s = 1; s <= koraci; s ++) {
tmpR = (R * s) /
koraci; // Najprije se pomnožite kako biste izbjegli pogreške pri skraćivanju
tmpG = (G * s) / koraci;
tmpB = (B * s) / koraci;
za (int i = 0;
i
pixels.setPixelColor (7, tmpR, tmpG, tmpB+44);pixels.setPixelColor (8, tmpR, tmpG, tmpB+44);
}
pikseli.show ();
odgoda (delayval);
}
// Smanjivanje
za (int s = koraci; s> 0; s--) {
tmpR = (R * s) / koraci; // Najprije se pomnožite kako biste izbjegli skraćivanje
pogreške
tmpG = (G * s) / koraci;
tmpB = (B * s) / koraci;
za (int i = 0; i
pixels.setPixelColor (7, tmpR, tmpG, tmpB);
pixels.setPixelColor (8, tmpR, tmpG, tmpB);
}
pikseli.show ();
odgoda (1);
}
// Smanjivanje
za (int s = koraci; s> 0; s--) {
tmpR = (R * s) / koraci; // Najprije se pomnožite kako biste izbjegli skraćivanje
pogreške
tmpG = (G * s) / koraci;
tmpB = (B * s) / koraci;
za (int i = 0; i
pixels.setPixelColor (6, tmpR, tmpG, tmpB);
pixels.setPixelColor (9, tmpR, tmpG, tmpB);
}
pikseli.show ();
odgoda (1);
}
// Smanjivanje
za (int s = koraci; s> 0; s--) {
tmpR = (R * s) / koraci; // Najprije se pomnožite kako biste izbjegli skraćivanje
pogreške
tmpG = (G * s) / koraci;
tmpB = (B * s) / koraci;
za (int i = 0; i
pixels.setPixelColor (5, tmpR, tmpG, tmpB);
pixels.setPixelColor (10, tmpR, tmpG, tmpB);
}
pikseli.show ();
kašnjenje (2);
}
// Smanjivanje
za (int s = koraci; s> 0; s--) {
tmpR = (R * s) / koraci; // Najprije se pomnožite kako biste izbjegli skraćivanje
pogreške
tmpG = (G * s) / koraci;
tmpB = (B * s) / koraci;
za (int i = 0; i
pixels.setPixelColor (4, tmpR, tmpG, tmpB);
pixels.setPixelColor (11, tmpR, tmpG, tmpB);
}
pikseli.show ();
kašnjenje (2);
}
// Smanjivanje
za (int s = koraci; s> 0; s--) {
tmpR = (R * s) / koraci; // Najprije se pomnožite kako biste izbjegli skraćivanje
pogreške
tmpG = (G * s) / koraci;
tmpB = (B * s) / koraci;
za (int i = 0; i
pixels.setPixelColor (3, tmpR, tmpG, tmpB);
pixels.setPixelColor (12, tmpR, tmpG, tmpB);
}
pikseli.show ();
kašnjenje (3);
}
// Smanjivanje
za (int s = koraci; s> 0; s--) {
tmpR = (R * s) / koraci; //
Prvo pomnožite kako biste izbjegli pogreške pri skraćivanju
tmpG = (G * s) / koraci;
tmpB = (B * s) / koraci;
za (int i = 0; i
pixels.setPixelColor (2, tmpR, tmpG, tmpB);
pixels.setPixelColor (13, tmpR, tmpG, tmpB);
}
pikseli.show ();
kašnjenje (3);
}
// Smanjivanje
za (int s = koraci; s> 0; s--) {
tmpR = (R * s) / koraci; // Najprije se pomnožite kako biste izbjegli skraćivanje
pogreške
tmpG = (G * s) / koraci;
tmpB = (B * s) / koraci;
za (int i = 0; i
pixels.setPixelColor (1, tmpR, tmpG, tmpB);
pixels.setPixelColor (14, tmpR, tmpG, tmpB);
}
pikseli.show ();
kašnjenje (4);
}
// Smanjivanje
za (int s = koraci; s> 0; s--) {
tmpR = (R * s) / koraci; // Najprije se pomnožite kako biste izbjegli skraćivanje
pogreške
tmpG = (G * s) / koraci;
tmpB = (B * s) / koraci;
za (int i = 0; i
pixels.setPixelColor (0, tmpR, tmpG, tmpB);
pixels.setPixelColor (15, tmpR, tmpG, tmpB);
}
pikseli.show ();
kašnjenje (4);
}
}
Korak 5: Sve spojite:
Mogli ste jednostavno ostaviti sve svoje žice spojene na vašu matičnu ploču ili PVC, to je na vama (ja sam odlučio staviti PVC na vrh arduina, tako je lijepo i uredno).
Sljedeći korak je staviti cijevi za skupljanje topline oko svih žica tako da bude manje nereda.
Ako ste odlučili koristiti PVC, do sada ste već trebali sve zalemiti.
Nakon toga stavite neopixel prstenove na vanjsku stranu naočala (provjerite jesu li LED diode poravnate na dnu) i pričvrstite ih na mjesto nekom trakom ili ljepilom (ja sam koristila traku).
Možete odabrati da zalijepite fsr-senzor na elastičnu traku nekom vrpcom ili ga samo izostavite.
Uživajte u naočarima:)