สารบัญ:

แสงแวดล้อมแบบโต้ตอบ: 8 ขั้นตอน
แสงแวดล้อมแบบโต้ตอบ: 8 ขั้นตอน

วีดีโอ: แสงแวดล้อมแบบโต้ตอบ: 8 ขั้นตอน

วีดีโอ: แสงแวดล้อมแบบโต้ตอบ: 8 ขั้นตอน
วีดีโอ: อะไรเอ่ย #สิว #สิวอุดตัน #สิวอักเสบ #สิวเห่อ #รอยสิว #รักษาสิว #เล็บเท้า #satisfying 2024, กรกฎาคม
Anonim
แสงแวดล้อมแบบโต้ตอบ
แสงแวดล้อมแบบโต้ตอบ
แสงแวดล้อมแบบโต้ตอบ
แสงแวดล้อมแบบโต้ตอบ
แสงแวดล้อมแบบโต้ตอบ
แสงแวดล้อมแบบโต้ตอบ

นี่เป็นคำสั่งแรกของฉัน! โปรดอดทนกับฉันในขณะที่ฉันกำลังพยายามเขียนภาษาอังกฤษอย่างเหมาะสม รู้สึกอิสระที่จะแก้ไขฉัน! ฉันเริ่มโครงการนี้หลังจากการแข่งขัน 'ปล่อยให้มันเรืองแสง' เริ่มต้นขึ้น ฉันหวังว่าฉันจะได้ทำมากขึ้นและเสร็จสิ้นสิ่งที่ฉันต้องการจะทำ แต่ระหว่างโรงเรียนและที่ทำงาน ฉันมีเวลาว่างไม่มากเท่าที่ฉันต้องการ อย่างไรก็ตาม ฉันทิ้งรายงานการทดลองของฉันไว้ที่นี่เพื่อให้ทุกคนสามารถลองทำสิ่งที่ฉันทำ คำแนะนำนี้ไม่ได้มีไว้เพื่อใช้เป็นแนวทางและสอนวิธีทำเครื่องมือนี้ ไม่ใช่คู่มือสำหรับผู้เริ่มต้นใช้งานอุปกรณ์อิเล็กทรอนิกส์ เป็นเหมือนการแบ่งปันแนวคิดและวัตถุประสงค์หนึ่งข้อที่ฉันต้องการติดตาม หากคุณเป็นมือใหม่/ไม่มีความรู้ด้านอุปกรณ์อิเล็กทรอนิกส์และต้องการทำสิ่งนี้ ฉันขอโทษ! แต่เราสามารถพยายามช่วยคุณได้เสมอ ดูขั้นตอนสุดท้าย เราได้เห็นโครงการแสงโดยรอบหลายโครงการแล้ว ส่วนใหญ่ใช้ไฟ LED RGB: - เพื่อให้ห้องสว่างด้วยสีเดียว สร้างบรรยากาศให้เข้ากับอารมณ์ของคุณ - เพื่อสร้างเอฟเฟกต์แสงจากสีของทีวี/จอภาพหรือจากเสียง Instrucables.com มีบางส่วนที่เกี่ยวข้อง:DIY Ambient Light SystemsLight Bar Ambient Lightingสร้างแถบแสงสีรอบข้างของคุณเอง โดยใช้การแข่งขันนี้เป็นข้อแก้ตัว ฉันเริ่มโครงการที่อยู่ในใจของฉันมาระยะหนึ่งแล้ว ฉันต้องการสร้างบางสิ่งที่คล้ายกับแสงโดยรอบเหล่านี้และเติมผนังในห้องของฉันด้วยไฟ LED RGB แต่การก้าวไปอีกขั้นทำให้ทุกคนสามารถควบคุมได้ โปรเจ็กต์นี้หวังว่าจะส่งผลให้เกิดชุดอุปกรณ์อิเล็กทรอนิกส์แบบโอเพนซอร์สสำหรับมือสมัครเล่นและช่างซ่อมอุปกรณ์อิเล็กทรอนิกส์ ซึ่งช่วยให้สามารถแฮ็กฮาร์ดแวร์/ซอฟต์แวร์และบูรณาการทางประสาทสัมผัสได้ นี่คือตัวอย่างเล็ก ๆ ของสิ่งที่ฉันทำ:

ขั้นตอนที่ 1: สำรวจไอเดีย

ฉันต้องการเติม RGB LED ให้เต็มผนังในห้องของฉัน ควบคุมสีและความสว่างของไฟ LED แต่ละดวง ฉันจะใช้ไมโครคอนโทรลเลอร์เพื่อความสะดวกในการใช้งานและความยืดหยุ่นที่มีให้ น่าเสียดายที่ฉันไม่สามารถควบคุมไฟ LED ได้หลายร้อยดวงด้วยพินไม่กี่ตัวที่มีอยู่ในไมโครคอนโทรลเลอร์ มันอาจจะยากด้วยซ้ำที่จะเขียนโค้ดการควบคุมของ LEDs จำนวนมาก ดังนั้นฉันตัดสินใจว่าฉันควรแบ่ง LED ทั้งหมดออกเป็นแท่งเล็กๆ หลายๆ แท่ง และสำหรับแต่ละแท่ง ฉันสามารถใช้ไมโครคอนโทรลเลอร์ได้ จากนั้นฉันจะใช้ความสามารถในการสื่อสารของไมโครคอนโทรลเลอร์เพื่อแบ่งปันข้อมูลระหว่างกัน ข้อมูลนี้อาจเป็นสีและความสว่างของ LED, รูปแบบ/ลำดับของสี และข้อมูลทางประสาทสัมผัส สำหรับแต่ละแถบ ฉันตัดสินใจใช้ LED RGB 16 ดวง ส่งผลให้แท่งไม่ใหญ่หรือเล็กเกินไป ด้วยวิธีนี้ ฉันใช้ทรัพยากรจำนวนที่ยอมรับได้สำหรับไฟ LED แต่ละตัว ซึ่งช่วยลดต้นทุนสำหรับแต่ละแถบ อย่างไรก็ตาม ไฟ LED RGB 16 ดวงเป็นไฟ LED 48 ดวง (3*16=48) เพื่อให้ไมโครคอนโทรลเลอร์ควบคุมได้ โดยคำนึงถึงต้นทุนเป็นหลัก ผมจึงตัดสินใจใช้ ไมโครคอนโทรลเลอร์ที่ถูกที่สุดที่ฉันสามารถใช้ได้ ซึ่งหมายความว่าไมโครคอนโทรลเลอร์จะมีพิน I/O สูงสุด 20 พินเท่านั้น ไม่เพียงพอสำหรับไฟ LED 48 ดวง ฉันไม่ต้องการใช้ชาร์ลีเพล็กซ์หรือไดรฟ์แบ่งเวลาบางประเภท เนื่องจากเป้าหมายของโครงการคือการให้แสงสว่างในห้องเท่านั้น ทางเลือกที่ฉันคิดได้คือใช้การลงทะเบียนกะแบบล็อคบางประเภท! ดำเนินการต่อ: - สร้างและแสงแวดล้อมแบบโต้ตอบ - สร้างแถบมาตรฐานของ LED ที่ควบคุมได้ - ความเป็นไปได้ในการเชื่อมต่อหลายแถบเพื่อเติมเต็มห้อง - อนุญาตให้ผู้ใช้ปรับ / กำหนดค่าและการรวมทางประสาทสัมผัส

ขั้นตอนที่ 2: ฮาร์ดแวร์

ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์

ดังที่กล่าวไว้ในขั้นตอนที่แล้ว ฉันต้องการทำแท่งหลายแท่งเพื่อให้ห้องหนึ่งสว่างขึ้น สิ่งนี้ทำให้นึกถึงปัญหาด้านต้นทุน ฉันจะพยายามทำให้แต่ละแท่งเป็นวิธีที่คุ้มค่าที่สุด ไมโครคอนโทรลเลอร์ที่ฉันใช้คือ AVR ATtiny2313 สิ่งเหล่านี้ค่อนข้างถูกและฉันมีสองสามตัวที่โกหก ATtiny2313 ยังมีอินเทอร์เฟซ Universal Serial หนึ่งรายการและอินเทอร์เฟซ USART หนึ่งรายการซึ่งจะใช้งานได้ดีในขั้นตอนต่อไปนี้ ฉันยังมี MCP23016 สามตัว - I2C 16 บิตตัวขยายพอร์ต I / O อยู่รอบ ๆ เพียงนับที่ถูกต้อง! ฉันใช้ตัวขยายพอร์ตแต่ละตัวเพื่อควบคุมไฟ LED 16 ดวงหนึ่งสี ไฟ LED… น่าเสียดายที่ราคาถูกที่สุดที่ฉันหาได้ มี 48 สีแดง สีเขียว และสีน้ำเงิน ~ 10000mcd 5 มม. พร้อมมุม 20 องศา สิ่งนี้ไม่ควรสำคัญสำหรับตอนนี้ เนื่องจากนี่เป็นเพียงต้นแบบเดียวเท่านั้น แม้จะมีข้อเท็จจริงนี้ แต่ผลลัพธ์ก็ค่อนข้างดี! ฉันกำลังเรียกใช้ไมโครคอนโทรลเลอร์ที่ 8 MHz บัส I2C โอเวอร์คล็อกที่ 400 kHz ความถี่การสลับ LED อยู่ที่ประมาณ 400 Hz ด้วยวิธีนี้ หากฉันสามารถขับไฟ LED ได้ 48 ดวงโดยไม่ต้องกดให้ถึงขีดจำกัด ฉันจะมีที่ว่างให้มากขึ้นในภายหลัง!

ขั้นตอนที่ 3: การประกอบ

การประกอบ
การประกอบ
การประกอบ
การประกอบ
การประกอบ
การประกอบ
การประกอบ
การประกอบ

หลังจากออกแบบวงจรแล้ว ฉันก็สร้างมันขึ้นมาในเขียงหั่นขนมหลายอันเพื่อจุดประสงค์ในการสร้างต้นแบบ หลังจากตัดสายไฟและประกอบวงจรเป็นเวลาหลายชั่วโมง ฉันได้ผลลัพธ์นี้: เขียงหั่นขนมขนาดยักษ์หนึ่งตัวพร้อมไฟ LED 48 ดวงและลวดจำนวนมาก!

ขั้นตอนที่ 4: ควบคุม?

ควบคุม?
ควบคุม?

นี่เป็นส่วนที่ท้าทายที่สุดของโปรเจ็กต์ ฉันต้องการสร้างอัลกอริธึมการควบคุมหนึ่งชุดที่เพียงพอสำหรับการจัดการรูปแบบ/ลำดับ และยังควบคุมความสว่างและสีของ LED แต่ละดวงเพื่อควบคุมไฟ LED ฉันต้องส่ง 1 เฟรมขนาด 4 ไบต์ไปยัง MCP23016 (1 ไบต์ = 8 บิต) หนึ่งไบต์ที่มีที่อยู่ของ IC ที่สอดคล้องกับสี 1 ไบต์พร้อมคำสั่ง "เขียน" และ 2 ไบต์ด้วยค่า 16 บิต (LED) IC เชื่อมต่อกับ LED เป็น "จม" ซึ่งหมายความว่าค่าตรรกะหนึ่งค่า 0 ที่ขาจะสว่าง LED และตอนนี้ส่วนที่ท้าทายคือวิธีควบคุม PWM สำหรับ LED 48 LED มาศึกษา PWM สำหรับ LED หนึ่งดวง! PWM อธิบาย @ Wikipedia ถ้าฉันต้องการความสว่างของ LED ที่ 50% ค่า PWM ของฉันคือ 50% ซึ่งหมายความว่า LED ควรอยู่ในระยะเวลาเดียวกับปิด ลองใช้เวลา 1 วินาที PWM 50% หมายความว่าใน 1 วินาทีนี้ เวลาเปิดคือ 0.5 วินาที และเวลาปิดคือ 0.5 วินาที PWM ของ 80%? ลด 0.2 วินาที เปิด 0.8 วินาที! ง่ายใช่ไหม ในโลกดิจิทัล: ด้วยระยะเวลา 10 รอบนาฬิกา 50% หมายความว่า LED จะติด 5 รอบและอีก 5 รอบ LED จะดับ 20%? เปิด 2 รอบ ปิด 8 รอบ 45%? เราไม่สามารถรับ 45% ได้จริงๆ … เนื่องจากระยะเวลาอยู่ในวัฏจักรและเรามีเพียง 10 รอบเท่านั้น เราจึงสามารถแบ่ง PWM เป็นขั้นๆ ได้เพียง 10% ซึ่งหมายความว่าวิวัฒนาการของพินควรเป็น 50%: 1, 1, 1, 1, 1, 0, 0, 0, 0, 0; หรือแม้แต่ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0;ในการเขียนโปรแกรม เราสามารถสร้างลำดับการเปิดและปิดอาร์เรย์ได้ สำหรับแต่ละรอบที่เราส่งออกไปยังพินค่าของดัชนีเป็นวัฏจักร ฉันสมเหตุสมผลหรือไม่ถ้าเราต้องการทำให้ LED0 50% และ LED1 20% เราสามารถเพิ่มอาร์เรย์ทั้งสองได้สำหรับการขับเคลื่อนพิน LED0: 1, 1, 1, 1, 1, 0, 0, 0, 0, 0;สำหรับการขับ LED1 ขา: 2, 2, 0, 0, 0, 0, 0, 0, 0, 0;ส่งผลให้ LED0 +LED0: 3, 3, 1, 1, 1, 0, 0, 0, 0, 0;เอาท์พุทลำดับของตัวเลขใน IC ตัวขยายพอร์ตเราจะได้ LED0 ที่มีความสว่าง 50% และ LED1 ด้วย 20% !! ง่ายสำหรับ 2 LEDs ใช่ไหม? ตอนนี้ เราต้องทำสิ่งนี้สำหรับ LED 16 ดวง สำหรับแต่ละสี! สำหรับแต่ละอาร์เรย์เหล่านี้ เรามีความสว่างร่วมกันสำหรับแต่ละสี (16 LEDs) ทุกครั้งที่เราต้องการผสมสีอื่น เราต้องเปลี่ยนอาร์เรย์นี้

ขั้นตอนที่ 5: ทำให้ง่าย

ทำให้ง่าย!
ทำให้ง่าย!
ทำให้ง่าย!
ทำให้ง่าย!

ขั้นตอนก่อนหน้านี้ทำงานหนักเกินไปสำหรับการสร้างลำดับอย่างง่าย… ดังนั้นฉันจึงตัดสินใจสร้างโปรแกรม โดยที่เราบอกสีของ LED แต่ละดวงในขั้นตอนเดียวของลำดับ และเราจะได้อาร์เรย์สามของขั้นตอน ฉันสร้างโปรแกรมนี้ใน LabView เนื่องจากข้อจำกัดด้านเวลา

ขั้นตอนที่ 6: การทดลองครั้งแรก

การทดลองครั้งแรก
การทดลองครั้งแรก

กำลังโหลดหลายขั้นตอนในไมโครคอนโทรลเลอร์ และเราได้รับสิ่งนี้: ขออภัยเกี่ยวกับคุณภาพวิดีโอที่ไม่ดี! ฉันกำหนดจำนวนขั้นตอนสูงสุดของลำดับเป็น 8 และจำกัดการกระโดด PWM ที่ 20% การตัดสินใจนี้ขึ้นอยู่กับประเภทของการควบคุมที่ฉันใช้และจำนวน EEPROM ที่ ATtiny2313 มี ในการทดลองเหล่านี้ ฉันพยายามดูว่าฉันจะสร้างเอฟเฟกต์ประเภทใดได้บ้าง ฉันต้องบอกว่าฉันพอใจกับผลลัพธ์ที่ได้!

ขั้นตอนที่ 7: การควบคุมแบบเรียลไทม์

การควบคุมตามเวลาจริง
การควบคุมตามเวลาจริง
การควบคุมตามเวลาจริง
การควบคุมตามเวลาจริง
การควบคุมตามเวลาจริง
การควบคุมตามเวลาจริง

ตามที่กล่าวไว้ในขั้นตอนก่อนหน้านี้ ฉันต้องการสื่อสารกับไมโครคอนโทรลเลอร์ทั้งหมดที่ควบคุมไฟ LED ในห้องของฉัน ดังนั้นฉันจึงใช้อินเทอร์เฟซ USART ที่มีอยู่ใน ATtiny2313 และเชื่อมต่อกับคอมพิวเตอร์ของฉัน ฉันยังสร้างโปรแกรมใน LabView เพื่อควบคุมแถบ LED ในโปรแกรมนี้ ฉันสามารถบอกไมโครคอนโทรลเลอร์ว่าลำดับนั้นยาวแค่ไหน สีของ LED แต่ละดวง และเวลาระหว่างขั้นตอนของลำดับ ในวิดีโอหน้าฉันจะ สาธิตวิธีที่ฉันสามารถเปลี่ยนสีของ LED และกำหนดลำดับ

ขั้นตอนที่ 8: บทสรุป

บทสรุป
บทสรุป
บทสรุป
บทสรุป
บทสรุป
บทสรุป
บทสรุป
บทสรุป

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

งานในอนาคต:

หากฉันได้รับการตอบรับเชิงบวกจากผู้คน ฉันอาจพัฒนาแนวคิดนี้ต่อไป และทำ DIY Electronics Kit เต็มรูปแบบ พร้อมแผงวงจรพิมพ์และคำแนะนำในการประกอบ

สำหรับเวอร์ชันถัดไปของฉัน ฉันจะ: - เปลี่ยนไมโครคอนโทรลเลอร์เป็นหนึ่งเดียวกับ ADC - เปลี่ยน MCP23016 สำหรับซีเรียลอินแบบขนานประเภทอื่นที่สามารถดูดกระแสไฟ LED ได้มากขึ้น - สร้างซอฟต์แวร์โอเพ่นซอร์สเพื่อสื่อสารกับไมโครคอนโทรลเลอร์และ ควบคุมไฟ LED -พัฒนาการสื่อสารระหว่างไมโครคอนโทรลเลอร์หลายตัว

คุณมีข้อเสนอแนะหรือคำถามหรือไม่? หรือแสดงความคิดเห็น!

เข้ารอบสุดท้ายในรายการ Let It Glow!

แนะนำ: