สารบัญ:

Interactive Touchless Light: 7 ขั้นตอน (พร้อมรูปภาพ)
Interactive Touchless Light: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Interactive Touchless Light: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Interactive Touchless Light: 7 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Interactive Kiosk Software: Set up TouchFree 2.0 | Ultraleap 2024, ธันวาคม
Anonim
แสงไร้สัมผัสแบบโต้ตอบ
แสงไร้สัมผัสแบบโต้ตอบ

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

สำหรับผู้เริ่มต้น เมื่อฉันเริ่มโครงการนี้ ฉันไม่รู้อะไรเลยเกี่ยวกับอุปกรณ์อิเล็กทรอนิกส์หรือระบบสัมผัสแบบ capacitive

ปัญหาบางอย่างที่ฉันพบแต่เนิ่นๆ เกิดจากการเข้าใจผิดว่าเกิดอะไรขึ้นจริง คำแนะนำสั้น ๆ จากวิธีที่ฉันเข้าใจ:

เซ็นเซอร์คาปาซิทีฟใช้ส่วนประกอบหลายอย่าง ส่วนใหญ่:

ตัวเก็บประจุ (ในโครงการนี้เราใช้อลูมิเนียมฟอยล์ แต่ยังสามารถใช้ของเหลวที่เป็นสื่อกระแสไฟฟ้า ฯลฯ ได้)

สายไฟ (แน่นอน อุปกรณ์อิเล็กทรอนิกส์)

และตัวต้านทาน สิ่งใดที่ต่ำกว่า 10 MOhm จะมีความต้านทานน้อยเกินกว่าการสัมผัสโดยตรง

วิธีการทำงานคือการวัดความแตกต่างของเวลาระหว่างจุด A และจุด B จากพินเริ่มต้น มันจะส่งสัญญาณไปยังจุดสิ้นสุด เวลาที่ใช้จะถูกวัดด้วยตัวจับเวลา โดยการลดค่าความต้านทาน (โดยการย้ายตัวเก็บประจุ (ในกรณีนี้คือมือของคุณ) ให้เข้าใกล้ตัวเก็บประจุของเซ็นเซอร์มากขึ้น (ฟอยล์อลูมิเนียม) ในเวลานี้สั้นลง ความแตกต่างของเวลาคือสิ่งที่เซ็นเซอร์ให้กลับเป็นค่า

เนื่องจากเซ็นเซอร์ได้รับผลกระทบจากพื้นผิว capacitive ข้อมูลจึงสามารถเอาแน่เอานอนไม่ได้เนื่องจากการรบกวน ส่วนใหญ่สามารถแก้ไขได้โดยฉนวนตัวเก็บประจุอย่างถูกต้องและโดยใช้กราวด์ (ฉันจะแสดงให้เห็นในภายหลัง)

เท่านี้ก็หมดหนทางแล้ว เราสามารถเริ่มจัดทำรายการสิ่งของทั้งหมดที่เราต้องการได้:

ขั้นตอนที่ 1: เราต้องการอะไร

อิเล็กทรอนิกส์:

1. ตัวต้านทาน 2 x 22M Ohm + (ยิ่งค่าความต้านทานมากเท่าไร เซ็นเซอร์ของคุณก็จะยิ่งตอบสนองมากขึ้นเท่านั้น โดยส่วนตัวแล้วฉันใช้ 22M Ohm ขั้นต่ำในการรับข้อมูลที่ใช้งานได้ที่ฉันพบคือ 10M Ohm)

2. ตัวต้านทาน 3x330 โอห์ม

3.สายไฟ

4. เขียงหั่นขนม

5. แผงวงจร (ของฉันมีแถบทองแดงแบบต่อเนื่อง)

6. ไฟ LED แคโทด RGB ทั่วไปหลายตัว (ฉันใช้ 8 แต่คุณสามารถมีมากหรือน้อยขึ้นอยู่กับแสงที่คุณต้องการ)

7.อลูมิเนียมฟอยล์

8. ห่อกันกระแทก

9. Arduino Uno

10. เทป

กรณี:

1. ไม้ที่ฉันใช้ 50 x 50 x 1.8 CM MDF (คุณสามารถใช้อะไรก็ได้จริงๆ ขึ้นอยู่กับเอฟเฟกต์ที่คุณต้องการและเครื่องมือที่คุณมี)

2. ลูกแก้วอะครีลิค ฉันใช้ 50 x 50 x 0.3 ซม. (หรือวัสดุโปร่งแสงอื่นๆ เช่น กระดาษข้าว)

3.กระดาษทราย (กระดาษทรายละเอียด)

4.ไม้กาว

5.ไม้วีเนียร์ (ไม่จำเป็น)

6.กาวอะคริลิก

เครื่องมือ:

เครื่องปอกสายไฟ

หัวแร้ง + ดีบุก

มีดสแตนเลย์

เจาะ

เลื่อย (ฉันใช้เลื่อยโต๊ะ)

ขั้นตอนที่ 2: การสร้างต้นแบบ:

การสร้างต้นแบบ
การสร้างต้นแบบ
การสร้างต้นแบบ
การสร้างต้นแบบ

ตอนนี้เรามีทุกอย่างแล้ว และเริ่มสร้างต้นแบบเพื่อดูว่ามันทำงานอย่างไร:

เตรียมงาน:

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

เพื่อให้แน่ใจว่าอะลูมิเนียมมีฉนวนหุ้มฉนวนอย่างปลอดภัย ฉันห่อด้วยแรปยึดและรีดระหว่างกระดาษ (เพียงไม่กี่วินาทีเพื่อไม่ให้ละลายทั้งหมด)

จากนั้นตั้งค่าวงจรตามที่เห็นในภาพ

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

ใช้การตั้งค่านี้เพื่อจุดประสงค์ในการดีบักก่อนที่จะประสานทุกอย่างเข้าด้วยกัน เพื่อให้แน่ใจว่าทุกอย่างทำงานได้ตามที่ตั้งใจไว้

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

ตอนนี้ เรามีทุกอย่างแล้ว และเราสามารถเริ่มแก้ไขจุดบกพร่องของเซ็นเซอร์ได้

ในการใช้รหัสของฉัน คุณควรดาวน์โหลดไลบรารี่ capacitive sensing จาก Arduino และติดตั้งตามคำแนะนำในหน้าอ้างอิง: คลิกฉัน

รหัส: (ฉันเขียนโค้ดไม่เก่ง ดังนั้นถ้าคุณรู้วิธีทำให้ดีขึ้นโปรดทำ)

#include //นำเข้าไลบรารีโค้ด

CapacitiveSensor cs_4_2 = CapacitiveSensor(4, 2); // ส่งพิน = 4 รับ 2 และ 5 CapacitiveSensor cs_4_5 = CapacitiveSensor (4, 5); const int redPin = 11; const int greenPin = 10; const int bluePin = 9; const int numIndexR = 10; // ขนาดอาร์เรย์ const int numIndexG = 10; int colorR = 0; int colorG = 0; สีลอยB = 0; int indexR [numIndexR]; int posIndexR = 0; รวมยาว R = 0; // ต้องยาวเพราะผลรวมของอาร์เรย์ของฉันใหญ่มากสำหรับจำนวนเต็ม int เฉลี่ยR = 0; int indexG [numIndexG]; int posIndexG = 0; รวมยาวG = 0; int เฉลี่ยG = 0; การตั้งค่าเป็นโมฆะ () {pinMode (redPin, OUTPUT); โหมดพิน (กรีนพิน, เอาต์พุต); โหมดพิน (บลูพิน, เอาต์พุต); สำหรับ (int thisIndexR = 0; thisIndexR < numIndexR; thisIndexR++) {// ตั้งค่าอาร์เรย์เป็น 0 indexR [thisIndexR] = 0; เพื่อ ความต้องการของคุณเอง รวม 1 = 4500; } ถ้า (รวม 2 >= 4500){ ทั้งหมด 2 = 4500; } totalR = totalR - ดัชนีR[posIndexR]; // นี่จะสร้างอาร์เรย์ที่เพิ่มเอาต์พุตเซ็นเซอร์อย่างต่อเนื่องและสร้างค่าเฉลี่ย indexR[posIndexR] = รวม 1; TotalR = TotalR + indexR[posIndexR]; posIndexR = posIndexR + 1; ถ้า (posIndexR >= numIndexR) { posIndexR = 0; } averageR = totalR / numIndexR; // เราใช้ค่าเฉลี่ยแทนข้อมูลดิบเพื่อทำให้เอาต์พุตราบรื่น มันทำให้กระบวนการช้าลงเล็กน้อย แต่ก็สร้างการไหลที่ราบรื่นดีจริงๆ TotalG = TotalG - ดัชนีG[posIndexG]; indexG[posIndexG] = ยอดรวม2; TotalG = TotalG + ดัชนีG[posIndexG]; posIndexG = posIndexG + 1; ถ้า (posIndexG >= numIndexG) { posIndexG = 0; } averageG = totalG / numIndexG; if (averageR >= 2000){ // เราไม่ต้องการให้ไฟ LED เปลี่ยนค่าอย่างต่อเนื่องเว้นแต่จะมีการป้อนข้อมูลจากมือของคุณ ดังนั้นสิ่งนี้จึงทำให้แน่ใจว่าการอ่านสภาพแวดล้อมที่ต่ำกว่าทั้งหมดจะไม่ถูกนำมาพิจารณา colorR = แผนที่(R เฉลี่ย 1000, 4500, 255, 0); analogWrite (redPin, colorR); } else if (averageR = 1000){ colorG = map (averageG, 1000, 4500, 255, 0); analogWrite (greenPin, colorG); } else if (averageG <= 1000){ colorG = 255; analogWrite (greenPin, colorG); } if (colorR <= 125 && colorG <= 125){ //B ทำงานแตกต่างกันเล็กน้อยเพราะฉันใช้เซ็นเซอร์เพียง 2 ตัวเท่านั้นดังนั้นฉันจึงจับคู่ B บนเซ็นเซอร์ทั้งสอง colorB = map (colorR, 255, 125, 0, 127.5) + แผนที่ (colorG, 255, 125, 0, 127.5); analogWrite (บลูพิน, colorB); } อื่น ๆ { colorB = แผนที่ (colorR, 255, 125, 127.5, 0) + แผนที่ (colorG, 255, 125, 127.5, 0); ถ้า (colorB>= 255){ colorB = 255; } if (colorB <= 0){ colorB = 0; } analogWrite (บลูพิน, colorB); } Serial.print(มิลลิส() - เริ่ม); //นี่คือจุดประสงค์ในการดีบัก Serial.print("\t"); Serial.print(colorR); Serial.print("\t"); Serial.print(colorG); Serial.print("\t"); Serial.println(colorB); ล่าช้า(1); }

สิ่งที่รหัสนี้ทำคือการดึงข้อมูลดิบออกจากเซ็นเซอร์ (ข้อมูลนี้มักจะเอาแน่เอานอนไม่ได้เนื่องจากปัจจัยต่าง ๆ ทั้งหมดที่ส่งผลต่อเซ็นเซอร์) และทำให้ข้อมูลดิบต่อเนื่องในอาร์เรย์ เมื่ออาร์เรย์ถึงเป็นค่าสูงสุด (ในกรณีของฉัน 10) จะล้างค่าสุดท้ายและเพิ่มค่าใหม่ ทุกครั้งที่เพิ่มค่า ระบบจะคำนวณค่าเฉลี่ยและใส่ลงในตัวแปรใหม่ ตัวแปรเฉลี่ยนี้ใช้เพื่อจับคู่ค่ากับค่าตั้งแต่ 0 ถึง 255 ซึ่งเป็นค่าที่เราเขียนไปยังหมุด RGB เพื่อเพิ่มความสว่างของแต่ละช่อง (ช่องคือ R G และ B)

ตอนนี้ถ้าคุณอัปโหลดรหัสของคุณไปที่ Arduino และคุณเปิดจอภาพแบบอนุกรม คุณจะเห็นค่า RGB ที่ต่ำกว่าเมื่อคุณวางมือเหนือเซ็นเซอร์แต่ละตัว และสีของไฟ LED ก็ควรเปลี่ยนไปด้วย

ขั้นตอนที่ 4: ตอนนี้สำหรับกรณี:

ตอนนี้สำหรับกรณี
ตอนนี้สำหรับกรณี
ตอนนี้สำหรับกรณี
ตอนนี้สำหรับกรณี
ตอนนี้สำหรับกรณี
ตอนนี้สำหรับกรณี

กรณี: ฉันสร้างเคสโดยใช้เครื่องมือที่มีให้ในมหาวิทยาลัยของฉัน ดังนั้นเวิร์กโฟลว์นี้จึงใช้ไม่ได้กับทุกคน อย่างไรก็ตาม ไม่มีอะไรพิเศษเกี่ยวกับมัน มันต้องมีรูที่ด้านหนึ่งเพื่อให้พอร์ต USB เสียบเข้าไปได้ แต่นอกเหนือจากนั้นมันเป็นแค่กล่องเปิดด้านบนเท่านั้น

มิติข้อมูลมีดังนี้:

15 x 15 CM สำหรับท็อปใส

และ

15 x 8 ซม. สำหรับฐานไม้ (ความหนาของไม้คือ 1.8 ซม. สำหรับฉัน)

ฉันใช้โต๊ะเลื่อยเพื่อตัดแผ่น MDF ให้เป็นขนาดที่ถูกต้องตามที่ฉันต้องการ (ซึ่งเป็นแผงกราวด์ 4 แผง 15 x 8 ซม. และ 1 15 x 15 ซม.) หลังจากนั้นฉันตัดมุมเป็นมุม 45 องศา ชิ้นส่วนทั้งหมดที่ฉันติดเข้าด้วยกันโดยใช้กาวไม้และที่หนีบ (ปล่อยให้แห้งอย่างน้อย 30 นาที) ฉันใช้ขั้นตอนเดียวกันกับ Plexiglas แต่ใช้ใบเลื่อยพิเศษ

ด้านที่เป็นไม้ 1 ด้านควรมีรูตรงกลางที่ความสูงของปลั๊ก Arduino USB เพื่อให้เสียบ Arduino ได้

ฉันทำฐานของด้วยแผ่นไม้อัดเสร็จแล้ว ฉันตัดมันเป็นชิ้นใหญ่กว่าพื้นผิวของแต่ละด้านเล็กน้อย

ฉันติดกาวแล้วหนีบไว้ 30 นาทีสำหรับแต่ละด้าน (ดีกว่าที่จะทำทีละอย่างเพื่อให้แน่ใจว่ามันจะไม่เลื่อนและหลังจากที่แห้งฉันจะตัดสิ่งที่ติดอยู่ออก

หมวกที่ฉันติดกาวเข้าด้วยกันโดยใช้กาวเฉพาะสำหรับ Acryl ที่เรียกว่า Acryfix

โปรดทราบว่าหากคุณใช้ลูกแก้วอะคริลิก กาวจะละลายลูกแก้วเล็กน้อย ดังนั้นต้องแม่นยำและรวดเร็วที่สุดเท่าที่จะทำได้ (แห้งภายในไม่กี่นาที แต่สัมผัสกับอากาศภายในไม่กี่วินาที)

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

เพื่อให้แน่ใจว่าฝาปิดไม่เลื่อนมาก ฉันจึงติดแท่งไม้เล็กๆ สองสามอันที่ขอบของลูกบาศก์ไม้

ขั้นตอนที่ 5: ผลลัพธ์สุดท้ายควรมีลักษณะดังนี้:

ผลลัพธ์สุดท้ายควรมีลักษณะดังนี้
ผลลัพธ์สุดท้ายควรมีลักษณะดังนี้

ขั้นตอนที่ 6: การบัดกรี

บัดกรี!
บัดกรี!
บัดกรี!
บัดกรี!

หากคุณมีแผงวงจร คุณสามารถเริ่มบัดกรีชิ้นส่วนทั้งหมดเข้าด้วยกันโดยใช้การตั้งค่าแบบเดียวกับที่เขียงหั่นขนมของคุณมี

แผงวงจรของฉันมีแถบทองแดงต่อเนื่องเพื่อความสะดวกในการใช้งาน

สำหรับแต่ละเซ็นเซอร์ฉันตัดสี่เหลี่ยมเล็ก ๆ เพื่อประสานตัวต้านทานและสายไฟ

สายส่ง (สายที่ต่อจากพิน 4 ไปยังเซ็นเซอร์แต่ละตัว) จะถูกบัดกรีตามลำดับเป็นสี่เหลี่ยมจัตุรัสแยกกัน โดยมี 1 เส้นที่ต่อเข้ากับพิน 4

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

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

ถึงเวลาที่จะใส่ทุกอย่างลงในฐาน: นี่เป็นขั้นตอนที่ง่ายที่สุดแล้ว Arduino จะต้องวางไว้ก่อนด้วยพอร์ต USB ผ่านรูที่ด้านหลังของเคส ตอนนี้เพิ่มเซ็นเซอร์ ตรวจสอบให้แน่ใจว่าฟอยล์เซ็นเซอร์พอดีกับไม้ทั้งสองด้าน โดยให้ฟอยล์พื้นตั้งตรง เมื่อเข้ากันดีแล้ว ให้เสียบไฟ LED RGB เข้ากับหมุดด้านขวา (9, 10, 11) แล้วปล่อยให้พิงที่ขอบฐาน

ขั้นตอนที่ 7: เสร็จแล้ว

หากคุณได้ปฏิบัติตามทั้งหมดนี้ ตอนนี้คุณควรมีไฟทำงานพร้อมการผสมสีแบบสัมผัสแบบ capacitive มีความสุข!

แนะนำ: