สารบัญ:

แว่นตาเพื่อการผ่อนคลาย - ITTT: 5 ขั้นตอน (พร้อมรูปภาพ)
แว่นตาเพื่อการผ่อนคลาย - ITTT: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: แว่นตาเพื่อการผ่อนคลาย - ITTT: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: แว่นตาเพื่อการผ่อนคลาย - ITTT: 5 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: โรงงานเลนส์แว่นตา Top 5 ของโลก 👓 - ทัศนศึกษา [ENG SUB] 2024, กรกฎาคม
Anonim
แว่นตาพักผ่อน - ITTT
แว่นตาพักผ่อน - ITTT
แว่นตาพักผ่อน - ITTT
แว่นตาพักผ่อน - ITTT
แว่นตาพักผ่อน - ITTT
แว่นตาพักผ่อน - ITTT

โครงการ HKU - ITTT (ถ้าเป็นอย่างนั้น) - Julia Berkouwer, 1B

คุณเคยรู้สึกเครียดแต่ไม่รู้วิธีสงบสติอารมณ์ของตัวเองหรือไม่ ลองสวมแว่นกันลมเหล่านี้ดู! คุณสวมมันและหลับตา จากนั้นรูปแบบการหายใจจะเล่น โดยทำตามรูปแบบการหายใจนี้ จังหวะการหายใจของคุณจะลงไปหายใจเข้าและออก 6 ครั้งต่อนาที การทำเช่นนี้ช่วยคลายความเครียดในแต่ละวัน

คุณยังสามารถติดตามความเข้มข้นของการหายใจด้วยการพลิกสวิตช์โดยใช้เซ็นเซอร์ fsr

ด้วยคำแนะนำนี้ ฉันจะแนะนำคุณเกี่ยวกับการสร้างแว่นตาเพื่อการผ่อนคลายของคุณเองทีละขั้นตอน

ขั้นตอนที่ 1: วัสดุและชิ้นส่วนที่จำเป็น:

วัสดุและชิ้นส่วนที่จำเป็น
วัสดุและชิ้นส่วนที่จำเป็น
วัสดุและชิ้นส่วนที่จำเป็น
วัสดุและชิ้นส่วนที่จำเป็น
วัสดุและชิ้นส่วนที่จำเป็น
วัสดุและชิ้นส่วนที่จำเป็น

วัสดุ:

1x Arduino uno;

1xbreadboard หรือ PCV;

ตัวต้านทาน 3x 10k

สายไฟ (ควรมีสีต่างกัน ดังนั้นจึงง่ายกว่าที่จะบอกได้ว่าสิ่งของใดกำลังจะตกลงสู่พื้นและส่วนใดที่จะไปปักหมุดที่ต่างกัน ฯลฯ);

ท่อหดความร้อนบางชนิด

2x NeoPixel Ring - 16 x 5050 RGB LED พร้อมไดร์เวอร์ในตัว;

สวิตช์ 1x;

1x เซ็นเซอร์ FSR;

แว่นตา SteamPunk 1x (คุณสามารถซื้อได้ที่ร้านปาร์ตี้ ใช้งานง่ายเพราะวงแหวนนีโอพิกเซลพอดีกับแว่นตา คุณลองใช้แว่นตาอื่นหรือสร้างแว่นตาของคุณเองเสมอ)

1x แถบยางยืด (ยางยืด) ที่จะพันรอบหน้าอกของคุณ

เครื่องมือ:-แล็ปท็อป

-หัวแร้ง

- ซอฟต์แวร์ Arduino IDE

คุณจะเห็นปุ่มสองปุ่มและสวิตช์บน pvc ของฉัน ฉันใช้เพียงปุ่มซ้ายเพื่อเชื่อมต่อกับสวิตช์ ฉันไม่ได้ใช้ปุ่มที่สองทางด้านขวาของรูปภาพ ฉันวางปุ่มบนพีวีซีก่อนที่จะรู้ว่าฉันไม่ต้องการมันและฉันจำเป็นต้องใช้สวิตช์แทน

ด้านล่างนี้คุณจะเห็นรูปภาพของทุกสิ่งที่ฉันใช้:

ขั้นตอนที่ 2: Neopixel Rings

แหวน Neopixel
แหวน Neopixel

สายสีขาวเชื่อมต่อกับกราวด์ที่ด้านหลังของวงแหวนนีโอพิกเซล

สายสีส้มเชื่อมต่อกับ 5V

และสายสีน้ำตาลเชื่อมต่อกับอินพุตข้อมูล

ขั้นตอนที่ 3: การเชื่อมต่อ

การเชื่อมต่อ
การเชื่อมต่อ
การเชื่อมต่อ
การเชื่อมต่อ

นี่คือลักษณะของเขียงหั่นขนมของฉันในขณะที่สร้างต้นแบบ คุณสามารถใช้สิ่งนี้เป็นข้อมูลอ้างอิงได้

ฉันยังสร้างเลย์เอาต์ของการเดินสายของสิ่งที่ควรจะเป็นด้วยปุ่มเพียงปุ่มเดียว

ขั้นตอนที่ 4: รหัส:

อาจไม่ใช่รหัสที่มีประสิทธิภาพที่สุด แต่ใช้งานได้สำหรับฉัน ท้าทายตัวเองและพยายามทำให้มีประสิทธิภาพมากขึ้น;P

#รวม

// อย่างไหน

พินบน Arduino เชื่อมต่อกับ NeoPixels หรือไม่

#กำหนด

PIN6

// อย่างไหน

พินบน Arduino เชื่อมต่อกับปุ่ม

#กำหนด

BUTTON_PIN 9

// ยังไง

NeoPixels จำนวนมากติดอยู่กับ Arduino?

#กำหนด

NUMPIXELS 16

// เมื่อไหร่

เราตั้งค่าไลบรารี NeoPixel เราบอกจำนวนพิกเซล และพินที่จะใช้ส่งสัญญาณ

// บันทึก

สำหรับแถบ NeoPixel รุ่นเก่า คุณอาจต้องเปลี่ยนพารามิเตอร์ที่สาม - ดู strandtest

//

ตัวอย่างสำหรับข้อมูลเพิ่มเติมเกี่ยวกับค่าที่เป็นไปได้

Adafruit_NeoPixel

พิกเซล = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

หยุดชั่วคราว

= 1; //delay2

int

หยุดชั่วคราว2 = 80; // ลงไปเมื่อใช้ fsr

int

หยุดชั่วคราว3 = 150; // ทำขึ้นเมื่อใช้ fsr

int

ความล่าช้า = 4; // ดีเลย์1

int

fsrPin = 0; // FSR และ 10K pulldown เชื่อมต่อกับ a0

int

fsrReading;

โมฆะ

ติดตั้ง() {

โหมดพิน (BUTTON_PIN, อินพุต);

Serial.begin(9600);

พิกเซล.begin(); // สิ่งนี้เริ่มต้น

ห้องสมุด NeoPixel

พิกเซล.show();

}

bool

กดปุ่ม (ขา int) {

ส่งคืน digitalRead (พิน);

}

โมฆะ

ลูป () {// อ่านว่าอินพุตพินเป็นจริงหรือเท็จ

fsrReading = analogRead (fsrPin);

Serial.print("การอ่านแบบอนาล็อก = ");

Serial.print(fsrReading);

ถ้า (กดปุ่ม (BUTTON_PIN) == จริง){

//เอฟเฟกต์แสงเมื่อใช้เซ็นเซอร์ fsr

ถ้า (fsrReading > 50){

พิกเซล.setPixelColor(0, 1, 0, 1);

พิกเซล.setPixelColor(15, 1, 0, 1);

พิกเซล.setPixelColor(1, 1, 0, 1);

พิกเซล.setPixelColor(14, 1, 0, 1);

พิกเซล.show();

ล่าช้า(pause3);

}

ถ้า (fsrReading <52){

พิกเซล.setPixelColor(0, 0, 0, 0);

พิกเซล.setPixelColor(15, 0, 0, 0);

พิกเซล.setPixelColor(1, 0, 0, 0);

พิกเซล.setPixelColor(14, 0, 0, 0);

พิกเซล.show();

ล่าช้า(pause2);

}

ถ้า (fsrReading > 57){

พิกเซล.setPixelColor(2, 1, 0, 1);

พิกเซล.setPixelColor(13, 1, 0, 1);

พิกเซล.setPixelColor(3, 1, 0, 1);

พิกเซล.setPixelColor(12, 1, 0, 1);

พิกเซล.show();

ล่าช้า(pause3);

}

ถ้า (fsrReading <59){

พิกเซล.setPixelColor(2, 0, 0, 0);

พิกเซล.setPixelColor(13, 0, 0, 0);

พิกเซล.setPixelColor(3, 0, 0, 0);

พิกเซล.setPixelColor(12, 0, 0, 0);

พิกเซล.show();

ล่าช้า(pause2);

}

ถ้า (fsrReading > 65){

พิกเซล.setPixelColor(4, 1, 0, 1);

พิกเซล.setPixelColor(11, 1, 0, 1);

พิกเซล.setPixelColor(5, 1, 0, 1);

พิกเซล.setPixelColor(10, 1, 0, 1);

พิกเซล.show();

ล่าช้า(pause3);

}

ถ้า (fsrReading <67){

พิกเซล.setPixelColor(4, 0, 0, 0);

พิกเซล.setPixelColor(11, 0, 0, 0);

พิกเซล.setPixelColor(5, 0, 0, 0);

พิกเซล.setPixelColor(10, 0, 0, 0);

พิกเซล.show();

ล่าช้า(40);

}

ถ้า (fsrReading > 79){

พิกเซล.setPixelColor(6, 1, 0, 1);

พิกเซล.setPixelColor(9, 1, 0, 1);

พิกเซล.setPixelColor(7, 1, 0, 1);

พิกเซล.setPixelColor(8, 1, 0, 1);

พิกเซล.show();

ล่าช้า(pause3);

}

ถ้า (fsrReading <85){

พิกเซล.setPixelColor(6, 0, 0, 0);

พิกเซล.setPixelColor(9, 0, 0, 0);

พิกเซล.setPixelColor(7, 0, 0, 0);

พิกเซล.setPixelColor(8, 0, 0, 0);

พิกเซล.show();

ล่าช้า (20);

}

}

อื่น{

Breath_blue(20, 100, 0, 1, 1); // ปกติ

ผล

}

}

// หยุดชั่วคราว

= ความล่าช้าระหว่างช่วงการเปลี่ยนภาพ

// ก้าว

= จำนวนก้าว

// อาร์ จี

B = ค่า RGB แบบเต็มบน

// De void breath is voor het licht effect als de

fsrsensor niet gebruikt wordt. Deze void wordt ใน de void loop() weer aangeroepen

เป็นโมฆะ Breath_blue (int หยุดชั่วคราว, int ขั้นตอน, ไบต์ R, ไบต์ G, ไบต์ B) {

int

tmpR, tmpG, tmpB; // ค่าอุณหภูมิ

// หายไวๆ

สำหรับ (int s=1; s<=steps; s++) {

tmpR = (R * s) /

ขั้นตอน; // คูณก่อนเพื่อหลีกเลี่ยงข้อผิดพลาดในการตัดทอน

tmpG = (G * s) / ขั้นตอน;

tmpB = (B * s) / ขั้นตอน;

สำหรับ (int i=0;

ผมพิกเซล.setPixelColor(0, tmpR, tmpG+1, tmpB);

พิกเซล.setPixelColor(15, tmpR, tmpG+1, tmpB);

}

พิกเซล.show();

ล่าช้า(4);

}

// หายไวๆ

สำหรับ (int s=1; s<=steps; s++) {

tmpR = (R * s) /

ขั้นตอน; // คูณก่อนเพื่อหลีกเลี่ยงข้อผิดพลาดในการตัดทอน

tmpG = (G * s) / ขั้นตอน;

tmpB = (B * s) / ขั้นตอน;

สำหรับ (int i=0;

ผมพิกเซล.setPixelColor (1, tmpR, tmpG+1, tmpB);พิกเซล.setPixelColor(14, tmpR, tmpG+1, tmpB);

}

พิกเซล.show();

ล่าช้า(4);

}

// หายไวๆ

สำหรับ (int s=1; s<=steps; s++) {

tmpR = (R * s) /

ขั้นตอน; // คูณก่อนเพื่อหลีกเลี่ยงข้อผิดพลาดในการตัดทอน

tmpG = (G * s) / ขั้นตอน;

tmpB = (B * s) / ขั้นตอน;

สำหรับ (int i=0;

ผมพิกเซล.setPixelColor(2, tmpR, tmpG+2, tmpB);พิกเซล.setPixelColor(13, tmpR, tmpG+2, tmpB);

}

พิกเซล.show();

ล่าช้า (3.5);

}

// หายไวๆ

สำหรับ (int s=1; s<=steps; s++) {

tmpR = (R * s) /

ขั้นตอน; // คูณก่อนเพื่อหลีกเลี่ยงข้อผิดพลาดในการตัดทอน

tmpG = (G * s) / ขั้นตอน;

tmpB = (B * s) / ขั้นตอน;

สำหรับ (int i=0;

ผมพิกเซล.setPixelColor(3, tmpR, tmpG+3, tmpB+5);พิกเซล.setPixelColor(12, tmpR, tmpG+3, tmpB+5);

}

พิกเซล.show();

ล่าช้า(3);

}

สำหรับ (int i=0;

ผมพิกเซล.setPixelColor(0, 0, 0, 0);พิกเซล.setPixelColor(15, 0, 0, 0);

}

// หายไวๆ

สำหรับ (int s=1; s<=steps; s++) {

tmpR = (R * s) /

ขั้นตอน; // คูณก่อนเพื่อหลีกเลี่ยงข้อผิดพลาดในการตัดทอน

tmpG = (G * s) / ขั้นตอน;

tmpB = (B * s) / ขั้นตอน;

สำหรับ (int i=0;

ผม

พิกเซล.setPixelColor(4, tmpR, tmpG+3, tmpB+15);พิกเซล.setPixelColor(11, tmpR, tmpG+3, tmpB+15);

}

พิกเซล.show();

ล่าช้า(3);

}

// หายไวๆ

สำหรับ (int s=1; s<=steps; s++) {

tmpR = (R * s) /

ขั้นตอน; // คูณก่อนเพื่อหลีกเลี่ยงข้อผิดพลาดในการตัดทอน

tmpG = (G * s) / ขั้นตอน;

tmpB = (B * s) / ขั้นตอน;

สำหรับ (int i=0;

ผมพิกเซล.setPixelColor(5, tmpR, tmpG+4, tmpB+20);พิกเซล.setPixelColor(10, tmpR, tmpG+4, tmpB+20);

}

พิกเซล.show();

ล่าช้า(2);

}

สำหรับ (int i=0;

ผมพิกเซล.setPixelColor(1, 0, 0, 0);

พิกเซล.setPixelColor(14, 0, 0, 0);

}

// หายไวๆ

สำหรับ (int s=1; s<=steps; s++) {

tmpR = (R * s) /

ขั้นตอน; // คูณก่อนเพื่อหลีกเลี่ยงข้อผิดพลาดในการตัดทอน

tmpG = (G * s) / ขั้นตอน;

tmpB = (B * s) / ขั้นตอน;

สำหรับ (int i=0;

ผมพิกเซล.setPixelColor(6, tmpR, tmpG+2, tmpB+40);

พิกเซล.setPixelColor(9, tmpR, tmpG+2, tmpB+40);

}

พิกเซล.show();

ล่าช้า (ล่าช้า);

}

สำหรับ (int i=0;

ผมพิกเซล.setPixelColor(2, 0, 0, 0);พิกเซล.setPixelColor(13, 0, 0, 0);

}

// หายไวๆ

สำหรับ (int s=1; s<=steps; s++) {

tmpR = (R * s) /

ขั้นตอน; // คูณก่อนเพื่อหลีกเลี่ยงข้อผิดพลาดในการตัดทอน

tmpG = (G * s) / ขั้นตอน;

tmpB = (B * s) / ขั้นตอน;

สำหรับ (int i=0;

ผม

พิกเซล.setPixelColor(7, tmpR, tmpG, tmpB+44);พิกเซล.setPixelColor(8, tmpR, tmpG, tmpB+44);

}

พิกเซล.show();

ล่าช้า (ล่าช้า);

}

// จางลง

สำหรับ (int s=steps; s>0; s--) {

tmpR = (R * s) / ขั้นตอน; // คูณก่อนเพื่อหลีกเลี่ยงการตัดทอน

ข้อผิดพลาด

tmpG = (G * s) / ขั้นตอน;

tmpB = (B * s) / ขั้นตอน;

สำหรับ (int i=0; i

พิกเซล.setPixelColor(7, tmpR, tmpG, tmpB);

พิกเซล.setPixelColor(8, tmpR, tmpG, tmpB);

}

พิกเซล.show();

ล่าช้า(1);

}

// จางลง

สำหรับ (int s=steps; s>0; s--) {

tmpR = (R * s) / ขั้นตอน; // คูณก่อนเพื่อหลีกเลี่ยงการตัดทอน

ข้อผิดพลาด

tmpG = (G * s) / ขั้นตอน;

tmpB = (B * s) / ขั้นตอน;

สำหรับ (int i=0; i

พิกเซล.setPixelColor(6, tmpR, tmpG, tmpB);

พิกเซล.setPixelColor(9, tmpR, tmpG, tmpB);

}

พิกเซล.show();

ล่าช้า(1);

}

// จางลง

สำหรับ (int s=steps; s>0; s--) {

tmpR = (R * s) / ขั้นตอน; // คูณก่อนเพื่อหลีกเลี่ยงการตัดทอน

ข้อผิดพลาด

tmpG = (G * s) / ขั้นตอน;

tmpB = (B * s) / ขั้นตอน;

สำหรับ (int i=0; i

พิกเซล.setPixelColor(5, tmpR, tmpG, tmpB);

พิกเซล.setPixelColor(10, tmpR, tmpG, tmpB);

}

พิกเซล.show();

ล่าช้า(2);

}

// จางลง

สำหรับ (int s=steps; s>0; s--) {

tmpR = (R * s) / ขั้นตอน; // คูณก่อนเพื่อหลีกเลี่ยงการตัดทอน

ข้อผิดพลาด

tmpG = (G * s) / ขั้นตอน;

tmpB = (B * s) / ขั้นตอน;

สำหรับ (int i=0; i

พิกเซล.setPixelColor(4, tmpR, tmpG, tmpB);

พิกเซล.setPixelColor(11, tmpR, tmpG, tmpB);

}

พิกเซล.show();

ล่าช้า(2);

}

// จางลง

สำหรับ (int s=steps; s>0; s--) {

tmpR = (R * s) / ขั้นตอน; // คูณก่อนเพื่อหลีกเลี่ยงการตัดทอน

ข้อผิดพลาด

tmpG = (G * s) / ขั้นตอน;

tmpB = (B * s) / ขั้นตอน;

สำหรับ (int i=0; i

พิกเซล.setPixelColor(3, tmpR, tmpG, tmpB);

พิกเซล.setPixelColor(12, tmpR, tmpG, tmpB);

}

พิกเซล.show();

ล่าช้า(3);

}

// จางลง

สำหรับ (int s=steps; s>0; s--) {

tmpR = (R * s) / ขั้นตอน; //

คูณก่อนเพื่อหลีกเลี่ยงข้อผิดพลาดในการตัดทอน

tmpG = (G * s) / ขั้นตอน;

tmpB = (B * s) / ขั้นตอน;

สำหรับ (int i=0; i

พิกเซล.setPixelColor(2, tmpR, tmpG, tmpB);

พิกเซล.setPixelColor(13, tmpR, tmpG, tmpB);

}

พิกเซล.show();

ล่าช้า(3);

}

// จางลง

สำหรับ (int s=steps; s>0; s--) {

tmpR = (R * s) / ขั้นตอน; // คูณก่อนเพื่อหลีกเลี่ยงการตัดทอน

ข้อผิดพลาด

tmpG = (G * s) / ขั้นตอน;

tmpB = (B * s) / ขั้นตอน;

สำหรับ (int i=0; i

พิกเซล.setPixelColor (1, tmpR, tmpG, tmpB);

พิกเซล.setPixelColor(14, tmpR, tmpG, tmpB);

}

พิกเซล.show();

ล่าช้า(4);

}

// จางลง

สำหรับ (int s=steps; s>0; s--) {

tmpR = (R * s) / ขั้นตอน; // คูณก่อนเพื่อหลีกเลี่ยงการตัดทอน

ข้อผิดพลาด

tmpG = (G * s) / ขั้นตอน;

tmpB = (B * s) / ขั้นตอน;

สำหรับ (int i=0; i

พิกเซล.setPixelColor(0, tmpR, tmpG, tmpB);

พิกเซล.setPixelColor(15, tmpR, tmpG, tmpB);

}

พิกเซล.show();

ล่าช้า(4);

}

}

ขั้นตอนที่ 5: รวบรวมทุกอย่างเข้าด้วยกัน:

รวมทุกอย่างเข้าด้วยกัน
รวมทุกอย่างเข้าด้วยกัน

คุณสามารถปล่อยให้สายทั้งหมดของคุณเชื่อมต่อกับเขียงหั่นขนมหรือ PVC ได้ซึ่งขึ้นอยู่กับคุณ (ฉันเลือกที่จะวาง PVC ไว้บน Arduino มันดีและเรียบร้อย)

ขั้นตอนต่อไปคือการวางท่อหดด้วยความร้อนรอบๆ สายไฟทั้งหมด เพื่อไม่ให้เลอะเทอะ

หากคุณเลือกใช้ PVC คุณควรบัดกรีทุกอย่างเข้าด้วยกันในตอนนี้

หลังจากนั้น คุณใส่วงแหวนนีโอพิกเซลที่ด้านนอกของแว่นตา (ตรวจสอบให้แน่ใจว่าไฟ LED อยู่ในแนวเดียวกันที่ก้น) และยึดให้เข้าที่ด้วยเทปหรือกาวบางส่วน (ฉันใช้เทป)

คุณสามารถเลือกติดเซ็นเซอร์ fsr กับแถบยางยืดด้วยเทปบางๆ หรือจะปล่อยทิ้งไว้เฉยๆ ก็ได้

เพลิดเพลินกับแว่นตาของคุณ:)

แนะนำ: