Inhoudsopgave:
- Stap 1: Benodigde materialen en onderdelen:
- Stap 2: Neopixel-ringen
- Stap 3: Aansluitingen
- Stap 4: De code:
- Stap 5: Alles samenvoegen:
Video: Ontspanningsbril - ITTT - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
HKU-project - ITTT (Als dit dan dat) - Julia Berkouwer, 1B
Heb je je ooit gestrest gevoeld en weet je gewoon niet hoe je jezelf moet kalmeren, dan moet je deze ontspanningsbril eens proberen! Je doet ze aan en sluit je ogen, dan speelt er een ademhalingspatroon. Door dit ademhalingspatroon te volgen, gaat je ademhalingsritme terug naar 6 keer per minuut in- en uitademen. Door dit te doen, wordt de dagelijkse stress verlicht.
Je kunt je ademhalingsintensiteit ook volgen door een schakelaar om te draaien met behulp van een fsr-sensor.
Met deze handleiding begeleid ik je stap voor stap bij het bouwen van je eigen relaxbril.
Stap 1: Benodigde materialen en onderdelen:
Materialen:
1x arduino uno;
1x breadboard of PCV;
3x 10k weerstanden
Draden (bij voorkeur verschillende kleuren, zodat het gemakkelijker is om te zien welke dingen naar de grond gaan en welke naar verschillende pinnen, enz.);
Sommige krimpkousen;
2x NeoPixel Ring - 16 x 5050 RGB LED met geïntegreerde drivers;
1x schakelaar;
1x FSR-sensor;
1x SteamPunk-bril (Deze kun je kopen bij een feestwinkel, ze zijn gemakkelijk te gebruiken omdat de neopixel-ring perfect op de bril past. Je probeert altijd een andere bril te gebruiken of je eigen bril te maken.);
1x een soort (elastiek) bandje om om je borst te doen.
Hulpmiddelen:-Laptop
-Soldeerbout
-Arduino IDE-software
Je ziet twee knoppen en een schakelaar op mijn pvc, ik gebruik alleen de linkerknop om hem aan te sluiten op de schakelaar, ik gebruik niet de tweede knop aan de rechterkant van de foto. Ik plaatste de knoppen op het pvc voordat ik me realiseerde dat ik ze niet nodig had en in plaats daarvan een schakelaar moest gebruiken.
Hieronder zie je foto's van alles wat ik heb gebruikt:
Stap 2: Neopixel-ringen
De witte draad is verbonden met de aarde aan de achterkant van de neopixelring.
De oranje draad is aangesloten op de 5V.
En de bruine draad is verbonden met de data-ingang
Stap 3: Aansluitingen
Dit is hoe mijn breadboard eruit zag tijdens het maken van een prototype, je kunt dit als referentie gebruiken.
Ik heb ook een lay-out gemaakt van de bedrading van hoe het eruit moet zien met slechts één knop.
Stap 4: De code:
Het is waarschijnlijk niet de meest efficiënte code, maar het werkt voor mij. Daag jezelf uit en probeer het efficiënter te maken;P
#erbij betrekken
// Die
pin op de Arduino is verbonden met de NeoPixels?
#definiëren
PIN 6
// Die
pin op de Arduino is verbonden met de knop
#definiëren
BUTTON_PIN 9
// Hoe
veel NeoPixels zijn aangesloten op de Arduino?
#definiëren
NUMPIXELS 16
// Wanneer
we stellen de NeoPixel-bibliotheek in, we vertellen hem hoeveel pixels en welke pin we moeten gebruiken om signalen te verzenden.
// Opmerking
dat u voor oudere NeoPixel-strips mogelijk de derde parameter moet wijzigen - zie de strandtest
//
voorbeeld voor meer informatie over mogelijke waarden.
Adafruit_NeoPixel
pixels = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int pauze
= 1; //vertraging2
int
pauze2 = 80; // naar beneden gaan wanneer fsr wordt gebruikt
int
pauze3 = 150; // omhoog doen wanneer fsr wordt gebruikt
int
vertragingswaarde = 4; // vertraging1
int
fsrPin = 0; // de FSR en 10K pulldown zijn verbonden met a0
int
fsrLezen;
leegte
opstelling() {
pinMode (BUTTON_PIN, INPUT);
Serieel.begin(9600);
pixels.begin(); // Dit initialiseert de
NeoPixel-bibliotheek.
pixels.show();
}
bool
ingedrukt (int pin){
retour digitalRead (pin);
}
leegte
loop () {// leest of pin-invoer waar of onwaar is
fsrReading = analoogRead(fsrPin);
Serial.print("Analoge uitlezing = ");
Serial.print (fsrReading);
if (knop ingedrukt (BUTTON_PIN) == waar){
// lichteffect bij gebruik van fsr-sensor
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);
pixels.show();
vertraging (pauze3);
}
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);
pixels.show();
vertraging (pauze2);
}
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);
pixels.show();
vertraging (pauze3);
}
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);
pixels.show();
vertraging (pauze2);
}
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);
pixels.show();
vertraging (pauze3);
}
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);
pixels.show();
vertraging (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);
pixels.show();
vertraging (pauze3);
}
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);
pixels.show();
vertraging(20);
}
}
anders{
ademen_blauw (20, 100, 0, 1, 1); // normaal
effect
}
}
// Pauze
= vertraging tussen overgangen
// Stappen
= aantal stappen
// R, G, B = Volledige RGB-waarden
// De leegte ademen is voor het licht effect als de
fsrsensor niet gebruikt wordt. Deze void wordt in de void loop() weer aangeroepen.
void breath_blue (int pauze, int stappen, byte R, byte G, byte B) {
int
tmpR, tmpG, tmpB; // Temp-waarden
// Vervagen
voor (int s=1; s<=stappen; s++) {
tmpR = (R * s) /
stappen; // Vermenigvuldig eerst om afbreekfouten te voorkomen
tmpG = (G * s) / stappen;
tmpB = (B * s) / stappen;
voor (int i=0;
lpixels.setPixelColor(0, tmpR, tmpG+1, tmpB);
pixels.setPixelColor(15, tmpR, tmpG+1, tmpB);
}
pixels.show();
vertraging(4);
}
// Vervagen
voor (int s=1; s<=stappen; s++) {
tmpR = (R * s) /
stappen; // Eerst vermenigvuldigen om afbreekfouten te voorkomen
tmpG = (G * s) / stappen;
tmpB = (B * s) / stappen;
voor (int i=0;
lpixels.setPixelColor(1, tmpR, tmpG+1, tmpB);pixels.setPixelColor (14, tmpR, tmpG+1, tmpB);
}
pixels.show();
vertraging(4);
}
// Vervagen
voor (int s=1; s<=stappen; s++) {
tmpR = (R * s) /
stappen; // Eerst vermenigvuldigen om afbreekfouten te voorkomen
tmpG = (G * s) / stappen;
tmpB = (B * s) / stappen;
voor (int i=0;
lpixels.setPixelColor(2, tmpR, tmpG+2, tmpB);pixels.setPixelColor(13, tmpR, tmpG+2, tmpB);
}
pixels.show();
vertraging (3.5);
}
// Vervagen
voor (int s=1; s<=stappen; s++) {
tmpR = (R * s) /
stappen; // Eerst vermenigvuldigen om afbreekfouten te voorkomen
tmpG = (G * s) / stappen;
tmpB = (B * s) / stappen;
voor (int i=0;
lpixels.setPixelColor(3, tmpR, tmpG+3, tmpB+5);pixels.setPixelColor (12, tmpR, tmpG+3, tmpB+5);
}
pixels.show();
vertraging (3);
}
voor (int i=0;
lpixels.setPixelColor(0, 0, 0, 0);pixels.setPixelColor(15, 0, 0, 0);
}
// Vervagen
voor (int s=1; s<=stappen; s++) {
tmpR = (R * s) /
stappen; // Vermenigvuldig eerst om afbreekfouten te voorkomen
tmpG = (G * s) / stappen;
tmpB = (B * s) / stappen;
voor (int i=0;
l
pixels.setPixelColor(4, tmpR, tmpG+3, tmpB+15);pixels.setPixelColor(11, tmpR, tmpG+3, tmpB+15);
}
pixels.show();
vertraging (3);
}
// Vervagen
voor (int s=1; s<=stappen; s++) {
tmpR = (R * s) /
stappen; // Vermenigvuldig eerst om afbreekfouten te voorkomen
tmpG = (G * s) / stappen;
tmpB = (B * s) / stappen;
voor (int i=0;
lpixels.setPixelColor(5, tmpR, tmpG+4, tmpB+20);pixels.setPixelColor(10, tmpR, tmpG+4, tmpB+20);
}
pixels.show();
vertraging(2);
}
voor (int i=0;
lpixels.setPixelColor (1, 0, 0, 0);
pixels.setPixelColor (14, 0, 0, 0);
}
// Vervagen
voor (int s=1; s<=stappen; s++) {
tmpR = (R * s) /
stappen; // Eerst vermenigvuldigen om afbreekfouten te voorkomen
tmpG = (G * s) / stappen;
tmpB = (B * s) / stappen;
voor (int i=0;
lpixels.setPixelColor(6, tmpR, tmpG+2, tmpB+40);
pixels.setPixelColor(9, tmpR, tmpG+2, tmpB+40);
}
pixels.show();
vertraging (vertragingswaarde);
}
voor (int i=0;
lpixels.setPixelColor(2, 0, 0, 0);pixels.setPixelColor(13, 0, 0, 0);
}
// Vervagen
voor (int s=1; s<=stappen; s++) {
tmpR = (R * s) /
stappen; // Eerst vermenigvuldigen om afbreekfouten te voorkomen
tmpG = (G * s) / stappen;
tmpB = (B * s) / stappen;
voor (int i=0;
l
pixels.setPixelColor(7, tmpR, tmpG, tmpB+44);pixels.setPixelColor(8, tmpR, tmpG, tmpB+44);
}
pixels.show();
vertraging (vertragingswaarde);
}
// Vervagen
voor (int s=stappen; s>0; s--) {
tmpR = (R * s) / stappen; // Vermenigvuldig eerst om afkappen te voorkomen
fouten
tmpG = (G * s) / stappen;
tmpB = (B * s) / stappen;
voor (int i=0; i
pixels.setPixelColor(7, tmpR, tmpG, tmpB);
pixels.setPixelColor(8, tmpR, tmpG, tmpB);
}
pixels.show();
vertraging(1);
}
// Vervagen
voor (int s=stappen; s>0; s--) {
tmpR = (R * s) / stappen; // Vermenigvuldig eerst om afkappen te voorkomen
fouten
tmpG = (G * s) / stappen;
tmpB = (B * s) / stappen;
voor (int i=0; i
pixels.setPixelColor(6, tmpR, tmpG, tmpB);
pixels.setPixelColor(9, tmpR, tmpG, tmpB);
}
pixels.show();
vertraging(1);
}
// Vervagen
voor (int s=stappen; s>0; s--) {
tmpR = (R * s) / stappen; // Vermenigvuldig eerst om afkappen te voorkomen
fouten
tmpG = (G * s) / stappen;
tmpB = (B * s) / stappen;
voor (int i=0; i
pixels.setPixelColor(5, tmpR, tmpG, tmpB);
pixels.setPixelColor(10, tmpR, tmpG, tmpB);
}
pixels.show();
vertraging(2);
}
// Vervagen
voor (int s=stappen; s>0; s--) {
tmpR = (R * s) / stappen; // Vermenigvuldig eerst om afkappen te voorkomen
fouten
tmpG = (G * s) / stappen;
tmpB = (B * s) / stappen;
voor (int i=0; i
pixels.setPixelColor(4, tmpR, tmpG, tmpB);
pixels.setPixelColor(11, tmpR, tmpG, tmpB);
}
pixels.show();
vertraging(2);
}
// Vervagen
voor (int s=stappen; s>0; s--) {
tmpR = (R * s) / stappen; // Vermenigvuldig eerst om afkappen te voorkomen
fouten
tmpG = (G * s) / stappen;
tmpB = (B * s) / stappen;
voor (int i=0; i
pixels.setPixelColor(3, tmpR, tmpG, tmpB);
pixels.setPixelColor (12, tmpR, tmpG, tmpB);
}
pixels.show();
vertraging (3);
}
// Vervagen
voor (int s=stappen; s>0; s--) {
tmpR = (R * s) / stappen; //
Vermenigvuldig eerst om afbreekfouten te voorkomen
tmpG = (G * s) / stappen;
tmpB = (B * s) / stappen;
voor (int i=0; i
pixels.setPixelColor(2, tmpR, tmpG, tmpB);
pixels.setPixelColor(13, tmpR, tmpG, tmpB);
}
pixels.show();
vertraging (3);
}
// Vervagen
voor (int s=stappen; s>0; s--) {
tmpR = (R * s) / stappen; // Vermenigvuldig eerst om afkappen te voorkomen
fouten
tmpG = (G * s) / stappen;
tmpB = (B * s) / stappen;
voor (int i=0; i
pixels.setPixelColor(1, tmpR, tmpG, tmpB);
pixels.setPixelColor (14, tmpR, tmpG, tmpB);
}
pixels.show();
vertraging(4);
}
// Vervagen
voor (int s=stappen; s>0; s--) {
tmpR = (R * s) / stappen; // Vermenigvuldig eerst om afkappen te voorkomen
fouten
tmpG = (G * s) / stappen;
tmpB = (B * s) / stappen;
voor (int i=0; i
pixels.setPixelColor(0, tmpR, tmpG, tmpB);
pixels.setPixelColor(15, tmpR, tmpG, tmpB);
}
pixels.show();
vertraging(4);
}
}
Stap 5: Alles samenvoegen:
Je kunt gewoon al je draden aangesloten laten op je breadboard of een PVC, dat is aan jou (ik heb ervoor gekozen om een PVC op de Arduino te plaatsen, het is mooi en netjes op die manier).
De volgende stap is om krimpkousen rond alle draden te plaatsen, zodat het minder rommelig wordt.
Als je ervoor hebt gekozen om een PVC te gebruiken, dan zou je nu alles aan elkaar moeten hebben gesoldeerd.
Daarna plaats je de neopixel ringen aan de buitenkant van de bril (zorg dat de leds aan de onderkant goed uitgelijnd zijn) en zet je ze vast met wat tape of lijm (ik gebruikte tape).
Je kunt ervoor kiezen om de fsr-sensor met wat tape op de elastische band te plakken of hem gewoon los te laten.
Veel plezier met je bril:)