สารบัญ:

Capacitive Touch Mood / Ambilight: 8 ขั้นตอน
Capacitive Touch Mood / Ambilight: 8 ขั้นตอน

วีดีโอ: Capacitive Touch Mood / Ambilight: 8 ขั้นตอน

วีดีโอ: Capacitive Touch Mood / Ambilight: 8 ขั้นตอน
วีดีโอ: How to Make an Arduino Capacitance Meter 2024, กรกฎาคม
Anonim
Capacitive Touch Mood / Ambilight
Capacitive Touch Mood / Ambilight

คำแนะนำนี้เป็นการเขียนอย่างรวดเร็วเกี่ยวกับประสบการณ์ของฉันในการสร้างมู้ดไลท์แบบมัลติฟังก์ชั่น คาดว่าจะมีความรู้พื้นฐานเกี่ยวกับวงจรอิเล็กทรอนิกส์บ้าง โปรเจ็กต์ยังไม่เสร็จสิ้น จำเป็นต้องเพิ่มฟังก์ชันการทำงานและการปรับแต่งบางอย่าง แต่ใช้งานได้แล้ว หากพวกคุณกระตือรือร้นเกี่ยวกับคำแนะนำนี้ฉันจะอัปเดต หัวใจสำคัญของระบบคือ Arduino มันจะประมวลผลอินพุตจาก USB หรืออินพุตสัมผัสแบบ Capacitive แต่ละอันและควบคุมไฟ RGB คำแนะนำนี้แบ่งออกเป็นสามส่วน:- ส่วนสัมผัส capacitive ครอบคลุมปุ่มอินพุตที่มองไม่เห็น- ส่วนมูดไลท์ครอบคลุมการควบคุมของมู้ดไลท์- ส่วน ambilight ครอบคลุมอินพุตโดยพอร์ตอนุกรม การประมวลผลค่า RGB ที่สร้างโดยโปรแกรมคอมพิวเตอร์เพื่อควบคุมไฟ.ข้อจำกัดความรับผิดชอบ: อุปกรณ์อิเล็กทรอนิกส์อาจเป็นอันตรายได้ คุณต้องรับผิดชอบต่อความเสียหายที่เกิดขึ้นเอง รหัสบางส่วนถูกรวบรวมจากฟอรัมและอาจไม่มีชื่อเจ้าของ กรุณาแจ้งให้เราทราบและฉันจะเพิ่มชื่อของคุณ

ขั้นตอนที่ 1: รายการสินค้า

ส่วนประกอบต่อไปนี้จำเป็นสำหรับคำแนะนำนี้: - สายเคเบิล Arduino+USB- เขียงหั่นขนม- แหล่งจ่ายไฟของคอมพิวเตอร์- แถบ RGB 3x ตรวจสอบ dealextreme.com.- 3x TIP120 FET เช่น https://uk.farnell.com/stmicroelectronics/tip120 /darlington-transistor-to-220/dp/9804005- ตัวต้านทานจำนวนหนึ่ง (6* 10 กิโลโอห์ม, 3 * 2 เมกะโอห์ม)- ลวดจำนวนมาก - เครื่องมือ Capacitive touch - วงแหวนโลหะสำหรับ groundplates - ลวดทองแดงหรือแผ่น - บางสิ่งบางอย่างที่จะสร้างเป็น (เช่นชั้นวางหนังสือ:)

ขั้นตอนที่ 2: Capacitive Touch - พื้นฐาน & วงจร

Capacitive Touch - พื้นฐาน & วงจร
Capacitive Touch - พื้นฐาน & วงจร
Capacitive Touch - พื้นฐาน & วงจร
Capacitive Touch - พื้นฐาน & วงจร
Capacitive Touch - พื้นฐาน & วงจร
Capacitive Touch - พื้นฐาน & วงจร

เนื่องจากฉันกำลังทาสีชั้นวางหนังสือ ฉันจึงมีโอกาส 'อัปเกรด' ชั้นวางหนังสือเหล่านั้นเช่นกัน ฉันต้องการควบคุมแสงแห่งอารมณ์ด้วยการสัมผัสที่มองไม่เห็น ตอนแรก แผนของฉันคือการใช้ IC เฉพาะสำหรับสิ่งนี้ (เช่น Atmel QT240) แต่แล้วฉันก็สะดุดกับหน้าที่อธิบายว่า Arduino สามารถจำลองเซ็นเซอร์แบบ capacitive โดยใช้ซอฟต์แวร์ วงจรอิเล็กทรอนิกส์สามารถพบได้ในภาพ เซ็นเซอร์เป็นลวดทองแดงแบบเกลียว (แสดงเพียงอันเดียวเท่านั้นเพื่อความเรียบง่าย) ความไวจะถูกควบคุมโดยตัวต้านทานที่พบก่อนทุกพิน พวกเขาสามารถอยู่ในช่วงตั้งแต่ 1 เมกะโอห์ม (สัมผัสสัมบูรณ์) ถึง 40 เมกะโอห์ม (ห่างออกไป 12-24 นิ้ว) ขึ้นอยู่กับว่าจำเป็นต้องสัมผัสแบบสัมบูรณ์หรือใกล้เคียง (ฉันลงเอยด้วยตัวต้านทาน 2M Ohm) ทดลองกับค่าต่างๆ จนกว่าเซ็นเซอร์จะทำงานตามที่ต้องการ เป็นความคิดที่ดีที่จะติดตั้งพื้นผิวนำไฟฟ้าบางส่วน (คั่นด้วยชิ้นส่วนที่ไม่นำไฟฟ้าบาง) ที่เชื่อมต่อกับกราวด์ของวงจรที่ด้านหลังของเกลียวแต่ละอัน วิธีนี้จะทำให้เซ็นเซอร์มีความเสถียรมากขึ้นและได้รับอิทธิพลจากสัญญาณรบกวนน้อยลง รูปภาพเพิ่มเติมเกี่ยวกับการติดตั้งเซ็นเซอร์ในชั้นวางหนังสือ มีการติดตั้งปลั๊กเพื่อให้เชื่อมต่อกับวงจรได้ง่ายในภายหลัง ฟิลเลอร์ใช้เพื่อปกปิดทุกอย่างและหลังจากนั้นก็พร้อมที่จะทาสี

ขั้นตอนที่ 3: Capacitive Touch - รหัสและการทดสอบ

Capacitive Touch - รหัสและการทดสอบ
Capacitive Touch - รหัสและการทดสอบ

ซอร์สโค้ดต่อไปนี้สามารถใช้กับ Arduino สำหรับการดีบัก ตรวจสอบค่าด้วยจอภาพอนุกรมของ Arduino มีการสร้างค่าหกค่า ประการแรกคือการวัดประสิทธิภาพของระบบ วินาทีถึงหกคือค่าที่สัมผัสได้ในทุกพิน ค่าควรเพิ่มขึ้นเมื่ออยู่ใกล้นิ้วของคุณ หากไม่เป็นเช่นนั้น ให้ตรวจสอบการเชื่อมต่อและการรบกวนที่ไม่ดี ค่าตัวต้านทานสามารถเปลี่ยนแปลงได้เพื่อกำหนดความไว ด้วยการใช้โครงสร้างแบบ if-then ซึ่งเปิดใช้งานที่ treshold แบบลอจิคัลบางอย่าง สวิตช์ก็สามารถทำได้ ซึ่งจะใช้ในโค้ด Arduino สุดท้าย ข้อมูลเพิ่มเติม แนะนำให้อ่าน: https://www.arduino.cc/playground/Main/CapSense--- Arduino CapTouch Debugging Code ---#include void setup() {CapSense cs_2_3 = CapSense(2, 4); // 10M ตัวต้านทานระหว่างพิน 2 และ 4, พิน 4 คือพินเซ็นเซอร์, เพิ่มลวด, foilCapSense cs_2_4 = CapSense (2, 7); // 10M ตัวต้านทานระหว่างพิน 2 และ 7, พิน 7 คือพินเซ็นเซอร์, เพิ่มลวด, foilCapSense cs_2_5 = CapSense (2, 8); // 10M ตัวต้านทานระหว่างพิน 2 และ 8, พิน 8 คือพินเซ็นเซอร์, เพิ่มลวด, foilCapSense cs_2_6 = CapSense (2, 12); // 10M ตัวต้านทานระหว่างพิน 2 & 12, พิน 12 คือพินเซ็นเซอร์, เพิ่มลวด, foilCapSense cs_2_7 = CapSense (2, 13); // ตัวต้านทาน 10M ระหว่างพิน 2 และ 13, พิน 13 คือพินเซ็นเซอร์, เพิ่มลวด, การตั้งค่าฟอยด์โมฆะ () { Serial.begin (9600);} วงเป็นโมฆะ () { เริ่มต้นนาน = มิลลิวินาที (); รวมยาว 1 = cs_2_3.capSense (30); รวมยาว2 = cs_2_4.capSense(30); รวมยาว3 = cs_2_5.capSense(30); ยาว total4 = cs_2_6.capSense(30); รวมยาว 5 = cs_2_7.capSense(30); Serial.print(มิลลิวินาที() - เริ่มต้น); // ตรวจสอบประสิทธิภาพในหน่วยมิลลิวินาที Serial.print("\t"); // อักขระแท็บสำหรับระยะห่างระหว่างหน้าต่างดีบัก Serial.print(total1); // เอาต์พุตเซ็นเซอร์การพิมพ์ 1 Serial.print("\t"); Serial.print(รวม2); // เอาต์พุตเซ็นเซอร์การพิมพ์ 2 Serial.print("\t"); Serial.print(รวม3); // เอาต์พุตเซ็นเซอร์การพิมพ์ 3 Serial.print("\t"); Serial.print(total4); // เอาต์พุตเซ็นเซอร์การพิมพ์ 4 Serial.print("\t"); Serial.println (รวม 5); // เอาต์พุตเซ็นเซอร์พิมพ์ 5 ล่าช้า (10); // หน่วงเวลาโดยพลการเพื่อจำกัดข้อมูลไว้ที่พอร์ตอนุกรม }--- END ---

ขั้นตอนที่ 4: Mood Light - พื้นฐาน & วงจร

Mood Light - พื้นฐาน & วงจร
Mood Light - พื้นฐาน & วงจร
Mood Light - พื้นฐาน & วงจร
Mood Light - พื้นฐาน & วงจร
Mood Light - พื้นฐาน & วงจร
Mood Light - พื้นฐาน & วงจร

ตอนนี้ได้เวลาสร้างส่วนเอาต์พุตของระบบแล้ว หมุด PWM ของ Arduino จะถูกนำมาใช้เพื่อควบคุมแต่ละสี PWM หมายถึง การปรับความกว้างของพัลส์ โดยการเปิดและปิดพินอย่างรวดเร็ว ไฟ LED จะหรี่ลงจาก 0 ถึง 255 พินทุกอันจะถูกขยายโดย FET สำหรับตอนนี้ ระบบมีเพียงหนึ่งช่องต่อสี ซึ่งหมายความว่าแถบ RGB ทั้งหมดจะถูกควบคุมในครั้งเดียวและต้องใช้พิน PWM 3 อัน (หนึ่งอันสำหรับทุกสี) ในอนาคต ฉันต้องการควบคุมแถบ RGB สี่แถบแต่ละแถบ นั่นหมายถึง 4*3=12 พิน PWM (และอาจเป็น Arduino Mega) เอาล่ะ ถึงเวลาสำหรับแผนงานแล้ว! นี่ (ดูรูป) เป็นตัวแทนพื้นฐานของวงจร (จะทำให้ดีกว่านี้เร็ว ๆ นี้) รวมเซ็นเซอร์ capacitive ด้วย (ส่วนสีเขียว) โดยทั่วไปมีสามองค์ประกอบที่ต้องอธิบาย:- FETนี่คือแอมพลิฟายเออร์ที่ฉันกำลังพูดถึง มันมีประตู แหล่ง และท่อระบายน้ำ มันขยายความรู้สึกกระแสเล็ก ๆ บนเกต (เชื่อมต่อกับ Arduino) และเปิดทางสำหรับแถบ RGB ที่ขับเคลื่อนด้วย 12 โวลต์ แหล่งที่มาควรอยู่ที่ +12V ระบายบน GND (กราวด์) ตรวจสอบแผ่นข้อมูลจำเพาะของ FET ของคุณสำหรับ pinout ที่แน่นอน ช่อง RGB ทุกช่องควรอยู่ในตำแหน่งก่อน FET ของตัวเอง ในแง่นี้ มันทำหน้าที่เหมือนสวิตช์ควบคุม Arduino- แถบ RGB แถบ RGB ขนาด 12 โวลต์นี้เป็นประเภทแอโนดทั่วไป (+) หมายความว่าควรต่อสายสามัญกับ +12V และกระแสไฟจะจมผ่านช่องสีแยกแต่ละช่อง แถบนี้มีตัวต้านทานรวมอยู่ด้วย ดังนั้นไม่ต้องกังวล!- ตัวต้านทานตัวต้านทาน 10k สามตัวจะทำให้แน่ใจว่า FET จะไม่เปิดขึ้นเมื่อไม่ควรเปิด อีกสามคนจะจำกัดกระแสสูงสุดที่ FET จะระบายออก ตัวต้านทานสามตัวบนมีอยู่แล้วในแถบ RGB ฉันบัดกรีสาย USB เข้ากับแถบ RGB เพื่อให้สามารถเชื่อมต่อแบบแยกส่วนได้อย่างง่ายดาย ปลั๊กจากฮับเก่าวางอยู่บนเขียงหั่นขนมของฉัน ใช้แหล่งจ่ายไฟคอมพิวเตอร์เครื่องเก่าสำหรับน้ำผลไม้ 12V สำหรับจ่ายไฟให้กับแถบ RGB และสุดท้ายคือ 5V สำหรับวงจร หากคุณต้องการให้ทำงานโดยไม่ต้องใช้สาย USB

ขั้นตอนที่ 5: Mood Light - รหัสและการควบคุม

ไฟแสดงอารมณ์ถูกควบคุมโดยเซ็นเซอร์คาปาซิทีฟ ตอนนี้ฉันตั้งโปรแกรมเซ็นเซอร์ 2 และ 3 ไว้สำหรับการเปลี่ยนสีเท่านั้น เซ็นเซอร์อื่นๆ ยังไม่ทำงาน นี่คือรหัส:--- Arduino Mood Control Code ---#include const boolean invert = true;const long timeout = 10000; // Capacitive sensor declarationCapSense In1 = CapSense(2, 4); // ตัวต้านทาน 2M ระหว่างพิน 4 & 2, พิน 2 คือพินเซ็นเซอร์, เพิ่มลวด, foilCapSense In2 = CapSense (2, 7); // ตัวต้านทาน 2M ระหว่างพิน 4 และ 6, พิน 6 คือพินเซ็นเซอร์, เพิ่มลวด, foilCapSense In3 = CapSense (2, 8); // ตัวต้านทาน 2M ระหว่างพิน 4 และ 8, พิน 8 คือพินเซ็นเซอร์, เพิ่มลวด, foilCapSense In4 = CapSense (2, 12); // ตัวต้านทาน 2M ระหว่างพิน 4 และ 8, พิน 8 คือพินเซ็นเซอร์, เพิ่มลวด, foilCapSense In5 = CapSense (2, 13); // ตัวต้านทาน 2M ระหว่างพิน 4 & 8, พิน 8 คือพินเซ็นเซอร์, เพิ่มลวด, ฟอยล์ // PWM ประกาศพิน PinR1 = 3; int PinG1 = 5; int PinB1 = 6;// ตัวแปรอื่นๆsint Color1 = 128; // เริ่มต้นที่สีแดงเช่น colourint Brightness1 = 255; // เริ่มต้นที่ความสว่างเต็ม RedValue1, GreenValue1, BlueValue1; // การตั้งค่าส่วนประกอบ RGB โมฆะ () { // ตั้งค่าการหมดเวลาของเซ็นเซอร์ In1.set_CS_AutocaL_Millis (หมดเวลา); In2.set_CS_AutocaL_Millis(หมดเวลา); In3.set_CS_AutocaL_Millis(หมดเวลา); In4.set_CS_AutocaL_Millis(หมดเวลา); In5.set_CS_AutocaL_Millis (หมดเวลา);} วงเป็นโมฆะ () { เริ่มต้นนาน = มิลลิวินาที (); รวมยาว 1 = In1.capSense (30); ยาว total2 = In2.capSense(30); รวมยาว 3 = In3.capSense (30); ยาว total4 = In4.capSense(30); รวมยาว 5 = In5.capSense (30); ถ้า (รวม 2 > 150) { สี 1 ++; // เพิ่มสีถ้า (Color1 > 255) { // Color1 = 0; } } else if (total3 > 200) { Color1--; // ลดสีถ้า (Color1 < 0) { // Color1 = 255; } // แปลง hue เป็น rgb hueToRGB(Color1, Brightness1); // เขียนสีไปยังหมุด PWM analogWrite (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // ฟังก์ชันเพื่อแปลงสีเป็นส่วนประกอบสีแดง สีเขียว และสีน้ำเงิน void hueToRGB (สี int ความสว่าง int){ unsigned int scaledHue = (hue * 6); ส่วน int ที่ไม่ได้ลงนาม = scaledHue / 256; // เซ็กเมนต์ 0 ถึง 5 รอบวงล้อสี unsigned int เซ็กเมนต์Offset = scaledHue - (เซ็กเมนต์ * 256); // ตำแหน่งภายในเซ็กเมนต์ unsigned int คำชมเชย = 0; unsigned int prev = (ความสว่าง * (255 - segmentOffset)) / 256; unsigned int next = (ความสว่าง * segmentOffset) / 256; ถ้า (กลับด้าน) { ความสว่าง = 255- ความสว่าง; ชมเชย = 255; ก่อนหน้า = 255-ก่อนหน้า; ถัดไป = 255 ถัดไป; } สวิตช์ (ส่วน) { กรณี 0: // สีแดง RedValue1 = ความสว่าง; GreenValue1 = ถัดไป; BlueValue1 = ชมเชย; หยุดพัก; กรณีที่ 1: // สีเหลือง RedValue1 = ก่อนหน้า; GreenValue1 = ความสว่าง; BlueValue1 = ชมเชย; หยุดพัก; กรณีที่ 2: // สีเขียว RedValue1 = ชมเชย; GreenValue1 = ความสว่าง; BlueValue1 = ถัดไป; หยุดพัก; กรณีที่ 3: // cyan RedValue1 = ชมเชย; GreenValue1 = ก่อนหน้า; BlueValue1 = ความสว่าง; หยุดพัก; กรณีที่ 4: // สีน้ำเงิน RedValue1 = ถัดไป; GreenValue1 = ชมเชย; BlueValue1 = ความสว่าง; หยุดพัก; กรณีที่ 5: // ค่าเริ่มต้นสีม่วงแดง: RedValue1 = ความสว่าง; GreenValue1 = ชมเชย; BlueValue1 = ก่อนหน้า; หยุดพัก; }}--- จบ ---

ขั้นตอนที่ 6: Ambi Light - Arduino Side

แน่นอนว่าการควบคุมแสงตามอารมณ์จากคอมพิวเตอร์ของคุณเป็นเรื่องที่เจ๋งมาก ตัวอย่างเช่นเพื่อสร้าง Ambilight หรือดิสโก้ควบคุมเสียง ส่วนนี้เน้นที่ส่วน ambilight ในอนาคตฉันจะเพิ่มฟังก์ชันการทำงานเพิ่มเติม ไม่มีวงจรเพิ่มเติมเพราะทั้งหมดนี้มีอยู่ใน Arduino สิ่งที่เราจะใช้คือความสามารถในการสื่อสารแบบอนุกรมและซอฟต์แวร์ 'กำลังประมวลผล 1.0' บางตัว เชื่อมต่อ Arduino กับคอมพิวเตอร์โดยใช้สาย USB (หากคุณกำลังอัปโหลดภาพสเก็ตช์ไป แสดงว่ามีอยู่แล้ว) สำหรับ Arduino ต้องเพิ่มรหัสพิเศษสำหรับการสื่อสารแบบอนุกรม รหัสจะเปลี่ยนเป็นโหมดฟังโดยเปลี่ยนเซ็นเซอร์ capacitive ตราบใดที่ได้รับค่า RGB จากคอมพิวเตอร์ จากนั้นตั้งค่า RGB เป็นพิน PWM นี่คือรหัสสุดท้ายของฉันในตอนนี้ ตรวจสอบการเปลี่ยนแปลงด้วยตัวเอง:--- Arduino Ambilight Code ---#include const boolean invert = true;const long timeout = 10000;long commStart = 0;char val;// Capacitive sensor declarationCapSense In1 = CapSense(2, 4); // ตัวต้านทาน 2M ระหว่างพิน 4 & 2, พิน 2 คือพินเซ็นเซอร์, เพิ่มลวด, foilCapSense In2 = CapSense (2, 7); // ตัวต้านทาน 2M ระหว่างพิน 4 และ 6, พิน 6 คือพินเซ็นเซอร์, เพิ่มลวด, foilCapSense In3 = CapSense (2, 8); // ตัวต้านทาน 2M ระหว่างพิน 4 และ 8, พิน 8 คือพินเซ็นเซอร์, เพิ่มลวด, foilCapSense In4 = CapSense (2, 12); // ตัวต้านทาน 2M ระหว่างพิน 4 และ 8, พิน 8 คือพินเซ็นเซอร์, เพิ่มลวด, foilCapSense In5 = CapSense (2, 13); // ตัวต้านทาน 2M ระหว่างพิน 4 & 8, พิน 8 คือพินเซ็นเซอร์, เพิ่มลวด, ฟอยล์ // PWM ประกาศพิน PinR1 = 3; int PinG1 = 5; int PinB1 = 6;// ตัวแปรอื่นๆsint Color1 = 128; // เริ่มต้นที่สีแดงเช่น colourint Brightness1 = 255; // เริ่มต้นที่ความสว่างเต็ม RedValue1, GreenValue1, BlueValue1; // การติดตั้งส่วนประกอบ RGB เป็นโมฆะ () { Serial.begin (9600); // เริ่มการสื่อสารแบบอนุกรม// ตั้งค่าระยะหมดเวลาของเซ็นเซอร์ In1.set_CS_AutocaL_Millis (หมดเวลา); In2.set_CS_AutocaL_Millis(หมดเวลา); In3.set_CS_AutocaL_Millis(หมดเวลา); In4.set_CS_AutocaL_Millis(หมดเวลา); In5.set_CS_AutocaL_Millis (หมดเวลา);} วงเป็นโมฆะ () { เริ่มต้นนาน = มิลลิวินาที (); รวมยาว 1 = In1.capSense (30); ยาว total2 = In2.capSense(30); รวมยาว 3 = In3.capSense (30); ยาว total4 = In4.capSense(30); รวมยาว 5 = In5.capSense (30); if (Serial.available ()) { // หากข้อมูลมีให้อ่าน val = Serial.read (); // อ่านแล้วเก็บไว้ใน val commStart = millis(); if (val == 'S') { //หากได้รับ start char ในขณะที่ (!Serial.available()) {} // รอจนกว่าจะถึงค่าถัดไป RedValue1 = Serial.read (); // เมื่อว่างแล้ว มอบหมาย while (!Serial.available()) {} //เหมือนกับข้างบน GreenValue1 = Serial.read (); ในขณะที่ (!Serial.available()) {} BlueValue1 = Serial.read(); } Serial.print (RedValue1); Serial.print (GreenValue1); Serial.println (BlueValue1); } else if ((millis() - commStart) > 1,000) { if (total2 > 150) { Color1++; // เพิ่มสีถ้า (Color1 > 255) { // Color1 = 0; } } else if (total3 > 200) { Color1--; // ลดสีถ้า (Color1 < 0) {// Color1 = 255; } } hueToRGB(สี1, ความสว่าง1); } analogWrite (PinR1, RedValue1); analogWrite (PinG1, GreenValue1); analogWrite (PinB1, BlueValue1);} // ฟังก์ชันเพื่อแปลงสีเป็นส่วนประกอบสีแดง สีเขียว และสีน้ำเงิน void hueToRGB (สี int ความสว่าง int){ unsigned int scaledHue = (hue * 6); ส่วน int ที่ไม่ได้ลงนาม = scaledHue / 256; // เซ็กเมนต์ 0 ถึง 5 รอบวงล้อสี unsigned int เซ็กเมนต์Offset = scaledHue - (เซ็กเมนต์ * 256); // ตำแหน่งภายในเซ็กเมนต์ unsigned int คำชมเชย = 0; unsigned int prev = (ความสว่าง * (255 - segmentOffset)) / 256; unsigned int next = (ความสว่าง * segmentOffset) / 256; ถ้า (กลับด้าน) { ความสว่าง = 255- ความสว่าง; ชมเชย = 255; ก่อนหน้า = 255-ก่อนหน้า; ถัดไป = 255 ถัดไป; } สวิตช์ (ส่วน) { กรณี 0: // สีแดง RedValue1 = ความสว่าง; GreenValue1 = ถัดไป; BlueValue1 = ชมเชย; หยุดพัก; กรณีที่ 1: // สีเหลือง RedValue1 = ก่อนหน้า; GreenValue1 = ความสว่าง; BlueValue1 = ชมเชย; หยุดพัก; กรณีที่ 2: // สีเขียว RedValue1 = ชมเชย; GreenValue1 = ความสว่าง; BlueValue1 = ถัดไป; หยุดพัก; กรณีที่ 3: // cyan RedValue1 = ชมเชย; GreenValue1 = ก่อนหน้า; BlueValue1 = ความสว่าง; หยุดพัก; กรณีที่ 4: // สีน้ำเงิน RedValue1 = ถัดไป; GreenValue1 = ชมเชย; BlueValue1 = ความสว่าง; หยุดพัก; กรณีที่ 5: // ค่าเริ่มต้นสีม่วงแดง: RedValue1 = ความสว่าง; GreenValue1 = ชมเชย; BlueValue1 = ก่อนหน้า; หยุดพัก; }}--- จบ ---

ขั้นตอนที่ 7: แสง Ambi - ด้านคอมพิวเตอร์

ที่ด้านข้างของคอมพิวเตอร์มีการรันสเก็ตช์ Processing 1.0 ให้ดูที่ processing.org โปรแกรมเล็กน้อย (ค่อนข้างยุ่ง) นี้จะคำนวณสีหน้าจอเฉลี่ยทุก ๆ ชั่วพริบตา และส่งสิ่งนี้ไปยังพอร์ตอนุกรม เป็นพื้นฐานมาก ณ ตอนนี้และสามารถใช้การปรับแต่งบางอย่างได้ แต่ทำงานได้ดีมาก! ฉันจะอัปเดตในอนาคตสำหรับแถบ RGB และส่วนหน้าจอแยกหลายส่วน คุณสามารถทำได้ด้วยตัวเอง ภาษาค่อนข้างตรงไปตรงมา นี่คือรหัส:--- กำลังประมวลผล 1.0 รหัส ---import processing.serial.*;import java.awt. AWTException;import java.awt. Robot;import java.awt. Rectangle;import java.awt.image. BufferedImage;PImage screenShot;Serial myPort;static public void main(String args) { PApplet.main(new String { "--present", "shooter" });} void setup() { size (100, 100)); //ขนาด(screen.width, screen.height); // พิมพ์รายการพอร์ตอนุกรมเพื่อการดีบัก: println(Serial.list()); // ฉันรู้ว่าพอร์ตแรกในรายการอนุกรมบน mac ของฉัน // เป็นอะแดปเตอร์ FTDI ของฉันเสมอ ดังนั้นฉันจึงเปิด Serial.list()[0] // บนเครื่อง Windows โดยทั่วไปจะเปิด COM1 // เปิดพอร์ตที่คุณใช้อยู่ สตริง portName = Serial.list()[0]; myPort = ใหม่ Serial (นี้, portName, 9600);} void draw () { //image (screenShot, 0, 0, width, height); screenShot = getScreen(); kleur สี = สี (0, 0, 0); kleur = สี (สกรีนช็อต); //myPort.write(int(red(kleur))+', '+int(green(kleur))+', '+int(blue(kleur))+13); //myPort.write(int(สีแดง(kleur))); //myPort.write(','); //myPort.write(int(สีเขียว(kleur))); //myPort.write(','); //myPort.write(int(สีน้ำเงิน(kleur)))); //myPort.write(13); เติม(เคลียร์); rect (30, 20, 55, 55);} สี (รูปภาพ img) { int cols = (img.width); แถว int = (img.height); ขนาด int = (img.width*img.height); int r = 0; int ก. = 0; int b = 0; img.loadPixels();// Ga elke pixel langs (มิติ) สำหรับ (int i = 0; i < (dimension/2); i++) { r = r + ((img.pixels >> 16) & 0xFF); g = g + ((img.pixels >> 8) & 0xFF); b = b + (img.pixels & 0xFF);}int mean_r = r/(dimension/2);int mean_g = g/(dimension/2);int mean_b = b/(dimension/2);color mean_clr = สี (mean_r, mean_g, mean_b); myPort.write('S'); myPort.write(mean_r); myPort.write(mean_g); myPort.write (mean_b);return (mean_clr);}PImage getScreen () { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); GraphicsDevice gs = ge.getScreenDevices(); โหมด DisplayMode = gs[0].getDisplayMode(); ขอบเขตของสี่เหลี่ยมผืนผ้า = สี่เหลี่ยมผืนผ้าใหม่ (0, 0, mode.getWidth(), mode.getHeight()); เดสก์ท็อป BufferedImage = ใหม่ BufferedImage (mode.getWidth (), mode.getHeight (), BufferedImage. TYPE_INT_RGB); ลอง { desktop = new Robot(gs[0]).createScreenCapture(bounds); } catch (AWTException e) { System.err.println ("การจับภาพหน้าจอล้มเหลว"); } return (ภาพใหม่ (เดสก์ท็อป));}--- END ---

ขั้นตอนที่ 8: ผลลัพธ์

ผลลัพธ์
ผลลัพธ์
ผลลัพธ์
ผลลัพธ์

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

แนะนำ: