สารบัญ:
- ขั้นตอนที่ 1: วัสดุและชิ้นส่วนที่จำเป็น:
- ขั้นตอนที่ 2: Neopixel Rings
- ขั้นตอนที่ 3: การเชื่อมต่อ
- ขั้นตอนที่ 4: รหัส:
- ขั้นตอนที่ 5: รวบรวมทุกอย่างเข้าด้วยกัน:
วีดีโอ: แว่นตาเพื่อการผ่อนคลาย - ITTT: 5 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
โครงการ 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
สายสีขาวเชื่อมต่อกับกราวด์ที่ด้านหลังของวงแหวนนีโอพิกเซล
สายสีส้มเชื่อมต่อกับ 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 กับแถบยางยืดด้วยเทปบางๆ หรือจะปล่อยทิ้งไว้เฉยๆ ก็ได้
เพลิดเพลินกับแว่นตาของคุณ:)
แนะนำ:
DIY 37 Leds เกมรูเล็ต Arduino: 3 ขั้นตอน (พร้อมรูปภาพ)
DIY 37 Leds เกมรูเล็ต Arduino: รูเล็ตเป็นเกมคาสิโนที่ตั้งชื่อตามคำภาษาฝรั่งเศสหมายถึงวงล้อเล็ก
หมวกนิรภัย Covid ส่วนที่ 1: บทนำสู่ Tinkercad Circuits!: 20 ขั้นตอน (พร้อมรูปภาพ)
Covid Safety Helmet ตอนที่ 1: บทนำสู่ Tinkercad Circuits!: สวัสดีเพื่อน ๆ ในชุดสองตอนนี้ เราจะเรียนรู้วิธีใช้วงจรของ Tinkercad - เครื่องมือที่สนุก ทรงพลัง และให้ความรู้สำหรับการเรียนรู้เกี่ยวกับวิธีการทำงานของวงจร! หนึ่งในวิธีที่ดีที่สุดในการเรียนรู้คือการทำ ดังนั้น อันดับแรก เราจะออกแบบโครงการของเราเอง: th
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): 6 ขั้นตอน (พร้อมรูปภาพ)
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): การชาร์จแบบเหนี่ยวนำ (เรียกอีกอย่างว่าการชาร์จแบบไร้สายหรือการชาร์จแบบไร้สาย) เป็นการถ่ายโอนพลังงานแบบไร้สาย ใช้การเหนี่ยวนำแม่เหล็กไฟฟ้าเพื่อจ่ายกระแสไฟฟ้าให้กับอุปกรณ์พกพา แอปพลิเคชั่นที่พบบ่อยที่สุดคือ Qi Wireless Charging st
4 ขั้นตอน Digital Sequencer: 19 ขั้นตอน (พร้อมรูปภาพ)
4 ขั้นตอน Digital Sequencer: CPE 133, Cal Poly San Luis Obispo ผู้สร้างโปรเจ็กต์: Jayson Johnston และ Bjorn Nelson ในอุตสาหกรรมเพลงในปัจจุบัน ซึ่งเป็นหนึ่งใน “instruments” เป็นเครื่องสังเคราะห์เสียงดิจิตอล ดนตรีทุกประเภท ตั้งแต่ฮิปฮอป ป๊อป และอีฟ
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: 13 ขั้นตอน (พร้อมรูปภาพ)
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: ทำป้ายโฆษณาแบบพกพาราคาถูกด้วยตัวเอง ด้วยป้ายนี้ คุณสามารถแสดงข้อความหรือโลโก้ของคุณได้ทุกที่ทั่วทั้งเมือง คำแนะนำนี้เป็นการตอบสนองต่อ/ปรับปรุง/เปลี่ยนแปลงของ: https://www.instructables.com/id/Low-Cost-Illuminated-