INHOUDSOPGAWE:
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-13 06:56
HKU Project - ITTT (If This Then That That) - Julia Berkouwer, 1B
Het u al ooit gespanne gevoel en weet u nie hoe u uself kan kalmeer nie, probeer dan hierdie ontspanningsbril! Jy trek dit aan en maak jou oë toe, dan speel 'n asemhalingspatroon. Deur hierdie asemhalingspatroon te volg, sal u asemhalingsritme 6 keer per minuut in- en uitasem. Deur dit te doen, word die daaglikse spanning verlig.
U kan ook u asemhalingsintensiteit volg deur 'n fsr-sensor aan te skakel.
Met hierdie toturial lei ek u stap vir stap deur u eie ontspanningsbril te bou.
Stap 1: Materiaal en onderdele benodig:
Materiaal:
1x arduino uno;
1x broodbord of PCV;
3x 10k weerstande
Drade (verkieslik verskillende kleure, sodat dit makliker is om te sien watter dinge op die grond gaan en watter na verskillende penne gaan, ens.);
Sommige krimpende buise;
2x NeoPixel -ring - 16 x 5050 RGB LED met geïntegreerde bestuurders;
1x skakelaar;
1x FSR -sensor;
1x SteamPunk -bril (u kan dit by 'n partytjiewinkel koop, dit is maklik om te gebruik, want die neopixelring pas perfek op die bril. U probeer altyd 'n ander bril gebruik of u eie bril skep.);
1x 'n (elastiese) band om jou bors.
Gereedskap: -Laptops
-Soldeerbout
-Arduino IDE sagteware
U sal twee knoppies en 'n skakelaar op my pvc sien; ek gebruik slegs die linkerknoppie om dit aan die skakelaar te koppel; ek gebruik nie die tweede knoppie aan die regterkant van die prentjie nie. Ek het die knoppies op die pvc gesit voordat ek besef dat ek dit nie nodig het nie, en ek moes eerder 'n skakelaar gebruik.
Hieronder sien u foto's van alles wat ek gebruik het:
Stap 2: Neopixel -ringe
Die wit draad is aan die agterkant van die neopixelring met die grond verbind.
Die oranje draad is gekoppel aan die 5V.
En die bruin draad is gekoppel aan die data -invoer
Stap 3: Verbindings
Dit is hoe my broodbord gelyk het tydens prototipering; u kan dit as verwysing gebruik.
Ek het ook 'n uiteensetting gemaak van die bedrading van hoe dit moet lyk met net een knoppie.
Stap 4: Die kode:
Dit is waarskynlik nie die doeltreffendste kode nie, maar dit werk vir my. Daag jouself uit en probeer dit doeltreffender maak; P
#insluit
// Watter
pin op die Arduino gekoppel is aan die NeoPixels?
#definieer
PIN 6
// Watter
pen op die Arduino is aan die knoppie gekoppel
#definieer
BUTTON_PIN 9
// Hoe
is daar baie NeoPixels aan die Arduino gekoppel?
#definieer
NUMPIXELS 16
// Wanneer
ons stel die NeoPixel -biblioteek op, ons vertel hoeveel pixels dit is, en watter pen om te gebruik om seine te stuur.
// Let wel
dat u moontlik die derde parameter vir ouer NeoPixel-stroke moet verander-sien die strengtoets
//
voorbeeld vir meer inligting oor moontlike waardes.
Adafruit_NeoPixel
pixels = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int pouse
= 1; // vertraging2
int
pouse2 = 80; // gaan af wanneer fsr gebruik word
int
pouse3 = 150; // doen op wanneer fsr gebruik word
int
vertragingsval = 4; // vertraging1
int
fsrPin = 0; // die FSR- en 10K -aftreklys is aan a0 gekoppel
int
fsrReading;
nietig
stel op() {
pinMode (BUTTON_PIN, INPUT);
Serial.begin (9600);
pixels.begin (); // Dit initialiseer die
NeoPixel -biblioteek.
pixels.show ();
}
bool
knoppie gedruk (int pin) {
stuur digitalRead (pin) terug;
}
nietig
loop () {// lees of peninvoer waar of onwaar is
fsrReading = analogRead (fsrPin);
Serial.print ("Analoog lees =");
Serial.print (fsrReading);
as (knoppie gedruk (BUTTON_PIN) == waar) {
// lig effek by die gebruik van fsr sensor
as (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 ();
vertraging (pouse3);
}
as (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 ();
vertraging (pouse2);
}
as (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 ();
vertraging (pouse3);
}
as (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 ();
vertraging (pouse2);
}
as (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 ();
vertraging (pouse3);
}
as (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 ();
vertraging (40);
}
as (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 ();
vertraging (pouse3);
}
as (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 ();
vertraging (20);
}
}
anders {
asemblou (20, 100, 0, 1, 1); // normaal
effek
}
}
// Pouse
= vertraging tussen oorgange
// Stappe
= aantal stappe
// R, G, B = Volledige RGB-waardes
// Die leegte asemhaal is vir die ligte effek as die
fsrsensor word nie gebruik nie. Hierdie leemte word in die leegte -lus () weer aangeroepen.
leegte asemblou (int pouse, int stappe, byte R, byte G, greep B) {
int
tmpR, tmpG, tmpB; // Temp waardes
// Vervaag
vir (int s = 1; s <= steps; s ++) {
tmpR = (R * s) /
stappe; // Vermenigvuldig eers om afkappingsfoute te voorkom
tmpG = (G * s) / stappe;
tmpB = (B * s) / stappe;
vir (int i = 0;
ekpixels.setPixelColor (0, tmpR, tmpG+1, tmpB);
pixels.setPixelColor (15, tmpR, tmpG+1, tmpB);
}
pixels.show ();
vertraging (4);
}
// Vervaag
vir (int s = 1; s <= steps; s ++) {
tmpR = (R * s) /
stappe; // Vermenigvuldig eers om afkappingsfoute te voorkom
tmpG = (G * s) / stappe;
tmpB = (B * s) / stappe;
vir (int i = 0;
ekpixels.setPixelColor (1, tmpR, tmpG+1, tmpB);pixels.setPixelColor (14, tmpR, tmpG+1, tmpB);
}
pixels.show ();
vertraging (4);
}
// Vervaag
vir (int s = 1; s <= steps; s ++) {
tmpR = (R * s) /
stappe; // Vermenigvuldig eers om afkappingsfoute te voorkom
tmpG = (G * s) / stappe;
tmpB = (B * s) / stappe;
vir (int i = 0;
ekpixels.setPixelColor (2, tmpR, tmpG+2, tmpB);pixels.setPixelColor (13, tmpR, tmpG+2, tmpB);
}
pixels.show ();
vertraging (3.5);
}
// Vervaag
vir (int s = 1; s <= steps; s ++) {
tmpR = (R * s) /
stappe; // Vermenigvuldig eers om afkappingsfoute te voorkom
tmpG = (G * s) / stappe;
tmpB = (B * s) / stappe;
vir (int i = 0;
ekpixels.setPixelColor (3, tmpR, tmpG+3, tmpB+5);pixels.setPixelColor (12, tmpR, tmpG+3, tmpB+5);
}
pixels.show ();
vertraging (3);
}
vir (int i = 0;
ekpixels.setPixelColor (0, 0, 0, 0);pixels.setPixelColor (15, 0, 0, 0);
}
// Vervaag
vir (int s = 1; s <= steps; s ++) {
tmpR = (R * s) /
stappe; // Vermenigvuldig eers om afkappingsfoute te voorkom
tmpG = (G * s) / stappe;
tmpB = (B * s) / stappe;
vir (int i = 0;
ek
pixels.setPixelColor (4, tmpR, tmpG+3, tmpB+15);pixels.setPixelColor (11, tmpR, tmpG+3, tmpB+15);
}
pixels.show ();
vertraging (3);
}
// Vervaag
vir (int s = 1; s <= steps; s ++) {
tmpR = (R * s) /
stappe; // Vermenigvuldig eers om afkappingsfoute te voorkom
tmpG = (G * s) / stappe;
tmpB = (B * s) / stappe;
vir (int i = 0;
ekpixels.setPixelColor (5, tmpR, tmpG+4, tmpB+20);pixels.setPixelColor (10, tmpR, tmpG+4, tmpB+20);
}
pixels.show ();
vertraging (2);
}
vir (int i = 0;
ekpixels.setPixelColor (1, 0, 0, 0);
pixels.setPixelColor (14, 0, 0, 0);
}
// Vervaag
vir (int s = 1; s <= steps; s ++) {
tmpR = (R * s) /
stappe; // Vermenigvuldig eers om afkappingsfoute te voorkom
tmpG = (G * s) / stappe;
tmpB = (B * s) / stappe;
vir (int i = 0;
ekpixels.setPixelColor (6, tmpR, tmpG+2, tmpB+40);
pixels.setPixelColor (9, tmpR, tmpG+2, tmpB+40);
}
pixels.show ();
vertraging (delayval);
}
vir (int i = 0;
ekpixels.setPixelColor (2, 0, 0, 0);pixels.setPixelColor (13, 0, 0, 0);
}
// Vervaag
vir (int s = 1; s <= steps; s ++) {
tmpR = (R * s) /
stappe; // Vermenigvuldig eers om afkappingsfoute te voorkom
tmpG = (G * s) / stappe;
tmpB = (B * s) / stappe;
vir (int i = 0;
ek
pixels.setPixelColor (7, tmpR, tmpG, tmpB+44);pixels.setPixelColor (8, tmpR, tmpG, tmpB+44);
}
pixels.show ();
vertraging (delayval);
}
// Verdof
vir (int s = stappe; s> 0; s--) {
tmpR = (R * s) / stappe; // Vermenigvuldig eers om afkapping te voorkom
foute
tmpG = (G * s) / stappe;
tmpB = (B * s) / stappe;
vir (int i = 0; i
pixels.setPixelColor (7, tmpR, tmpG, tmpB);
pixels.setPixelColor (8, tmpR, tmpG, tmpB);
}
pixels.show ();
vertraging (1);
}
// Verdof
vir (int s = stappe; s> 0; s--) {
tmpR = (R * s) / stappe; // Vermenigvuldig eers om afkapping te voorkom
foute
tmpG = (G * s) / stappe;
tmpB = (B * s) / stappe;
vir (int i = 0; i
pixels.setPixelColor (6, tmpR, tmpG, tmpB);
pixels.setPixelColor (9, tmpR, tmpG, tmpB);
}
pixels.show ();
vertraging (1);
}
// Verdof
vir (int s = stappe; s> 0; s--) {
tmpR = (R * s) / stappe; // Vermenigvuldig eers om afkapping te voorkom
foute
tmpG = (G * s) / stappe;
tmpB = (B * s) / stappe;
vir (int i = 0; i
pixels.setPixelColor (5, tmpR, tmpG, tmpB);
pixels.setPixelColor (10, tmpR, tmpG, tmpB);
}
pixels.show ();
vertraging (2);
}
// Verdof
vir (int s = stappe; s> 0; s--) {
tmpR = (R * s) / stappe; // Vermenigvuldig eers om afkapping te voorkom
foute
tmpG = (G * s) / stappe;
tmpB = (B * s) / stappe;
vir (int i = 0; i
pixels.setPixelColor (4, tmpR, tmpG, tmpB);
pixels.setPixelColor (11, tmpR, tmpG, tmpB);
}
pixels.show ();
vertraging (2);
}
// Verdof
vir (int s = stappe; s> 0; s--) {
tmpR = (R * s) / stappe; // Vermenigvuldig eers om afkapping te voorkom
foute
tmpG = (G * s) / stappe;
tmpB = (B * s) / stappe;
vir (int i = 0; i
pixels.setPixelColor (3, tmpR, tmpG, tmpB);
pixels.setPixelColor (12, tmpR, tmpG, tmpB);
}
pixels.show ();
vertraging (3);
}
// Verdof
vir (int s = stappe; s> 0; s--) {
tmpR = (R * s) / stappe; //
Vermenigvuldig eers om afkappingsfoute te voorkom
tmpG = (G * s) / stappe;
tmpB = (B * s) / stappe;
vir (int i = 0; i
pixels.setPixelColor (2, tmpR, tmpG, tmpB);
pixels.setPixelColor (13, tmpR, tmpG, tmpB);
}
pixels.show ();
vertraging (3);
}
// Verdof
vir (int s = stappe; s> 0; s--) {
tmpR = (R * s) / stappe; // Vermenigvuldig eers om afkapping te voorkom
foute
tmpG = (G * s) / stappe;
tmpB = (B * s) / stappe;
vir (int i = 0; i
pixels.setPixelColor (1, tmpR, tmpG, tmpB);
pixels.setPixelColor (14, tmpR, tmpG, tmpB);
}
pixels.show ();
vertraging (4);
}
// Verdof
vir (int s = stappe; s> 0; s--) {
tmpR = (R * s) / stappe; // Vermenigvuldig eers om afkapping te voorkom
foute
tmpG = (G * s) / stappe;
tmpB = (B * s) / stappe;
vir (int i = 0; i
pixels.setPixelColor (0, tmpR, tmpG, tmpB);
pixels.setPixelColor (15, tmpR, tmpG, tmpB);
}
pixels.show ();
vertraging (4);
}
}
Stap 5: Alles saamvoeg:
U kan net al u drade aan u broodbord of 'n PVC koppel, dit is u besluit (ek het gekies om 'n PVC bo -op die arduino te plaas, dit is netjies).
Die volgende stap is om krimpende buise om al die drade te plaas, sodat dit minder gemors is.
As u verkies om 'n PVC te gebruik, moes u nou al alles saamgesoldeer het.
Daarna sit u die neopixelringe aan die buitekant van die bril (maak seker dat die LED's in lyn is met die onderkant) en maak dit vas met 'n bietjie band of gom (ek het band gebruik).
U kan kies om die fsr-sensor met 'n band aan die rek vas te plak, of dit net op u eie laat.
Geniet jou bril:)