สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
ที่บ้านเรามีของขวัญประดับไฟสองชิ้นซึ่งใช้ในช่วงคริสต์มาส สิ่งเหล่านี้เป็นของขวัญที่ส่องสว่างอย่างเรียบง่ายโดยใช้ LED สีแดง - เขียว 2 สีที่เปลี่ยนสีแบบสุ่มซึ่งจะค่อยๆ จางลงและจางลง อุปกรณ์นี้ใช้พลังงานจากเซลล์ปุ่ม 3 โวลต์ อย่างหลังคือเหตุผลของโครงการนี้ เนื่องจากแบตเตอรี่หมดเร็วมากเมื่อเปิดของขวัญเป็นเวลานาน
เพื่อป้องกันการใช้แบตเตอรี่เซลล์ปุ่มจำนวนมาก ฉันออกแบบรุ่นของตัวเองโดยใช้แบตเตอรี่ AAA แบบชาร์จซ้ำได้สามก้อน เวอร์ชันนี้ใช้ RGB LED ดังนั้นสีน้ำเงินจึงเป็นไปได้ แต่นั่นไม่ใช่ส่วนหนึ่งของการออกแบบดั้งเดิม เวอร์ชันของฉันมีฟังก์ชันต่อไปนี้:
- ตัวควบคุม 2 แสดงพร้อมกันโดยใช้ไมโครคอนโทรลเลอร์ PIC12F617 หนึ่งตัว ซอฟต์แวร์ไมโครคอนโทรลเลอร์เขียนด้วยภาษาโปรแกรม JAL
- เปิดและปิดปัจจุบันโดยใช้ปุ่มกด เวอร์ชันดั้งเดิมใช้สวิตช์เพื่อจุดประสงค์นั้น แต่ปุ่มกดใช้งานได้ง่ายกว่า
- สุ่มเปลี่ยนสีของของขวัญโดยการเฟดอินและเฟด-เอาท์ของสีแดงและสีเขียว
- ปิดของขวัญเมื่อแรงดันแบตเตอรี่ลดลงต่ำกว่า 3.0 โวลต์ วิธีนี้จะป้องกันไม่ให้แบตเตอรี่แบบชาร์จใหม่หมดประจุมากเกินไป
หลังจากจางลงในสีเดียว ไฟ LED จะติดสว่างเป็นเวลาระหว่าง 3 วินาทีถึง 20 วินาที เนื่องจากฉันยังมีไฟ LED สีฟ้าที่ไม่ได้ใช้ ฉันจึงเพิ่มคุณสมบัติที่ทั้งสองแพ็คเกจจะเปลี่ยนเป็นสีน้ำเงินเมื่อเวลาตรงคือ 10 วินาทีพอดี สิ่งนี้ไม่ได้เกิดขึ้นบ่อยนักเนื่องจากเวลาสุ่มถูกสร้างขึ้นในขีดของตัวจับเวลา 40 มิลลิวินาทีตามที่อธิบายไว้ในภายหลัง
ขั้นตอนที่ 1: ทฤษฎีบางอย่างเกี่ยวกับการเฟดอินและเฟดออกโดยใช้การปรับความกว้างพัลส์
วิธีที่ดีที่สุดในการเปลี่ยนความสว่างของ LED ไม่ใช่โดยการเปลี่ยนกระแสที่ไหลผ่าน LED แต่โดยการเปลี่ยนเวลาที่ LED จะติดสว่างภายในช่วงเวลาที่กำหนด วิธีการควบคุมความสว่างของ LED นี้เรียกว่า Pulse Width Modulation (PWM) ซึ่งมีการอธิบายหลายครั้งบนอินเทอร์เน็ต เช่น วิกิพีเดีย.
PIC และ Arduino มีฮาร์ดแวร์ PWM พิเศษบนบอร์ดที่ทำให้ง่ายต่อการสร้างสัญญาณ PWM นี้ แต่มักจะมีเอาต์พุตเดียวสำหรับสิ่งนี้ ดังนั้นคุณจึงสามารถควบคุม LED ได้เพียงดวงเดียวเท่านั้น สำหรับเวอร์ชันนี้ ฉันต้องควบคุม LED 5 ดวง (สีแดง 2 ดวง สีเขียว 2 ดวง และสีน้ำเงินรวมกัน 1 ดวง) ดังนั้นจึงจำเป็นต้องทำ PWM ในซอฟต์แวร์โดยใช้ตัวจับเวลาซึ่งสร้างทั้งความถี่ PWM และรอบการทำงานของ PWM
PIC12F617 มีตัวจับเวลาออนบอร์ดพร้อมความสามารถในการโหลดซ้ำอัตโนมัติ ซึ่งหมายความว่าเมื่อคุณตั้งค่าการโหลดซ้ำของตัวจับเวลา มันจะใช้ค่านั้นทุกครั้งที่หมดเวลาผ่านไป ดังนั้นตัวจับเวลาจะทำงานโดยลำพังที่ความถี่ที่ระบุ เนื่องจากเวลาเป็นสิ่งสำคัญสำหรับสัญญาณ PWM ที่เสถียร ตัวจับเวลาจึงทำงานแบบอินเตอร์รัปต์ โดยไม่ได้รับอิทธิพลจากเวลาที่โปรแกรมหลักจำเป็นต้องควบคุมและกำหนดสุ่มเวลาตรงเวลาสำหรับ LED
ความถี่ PWM ต้องสูงพอที่จะป้องกันไม่ให้เกิดการกะพริบ ดังนั้นฉันจึงเลือกความถี่ PWM ที่ 100 Hz สำหรับเอฟเฟกต์เฟดอินและเฟดออก เราจำเป็นต้องเปลี่ยนรอบการทำงานและดังนั้นความสว่างของ LED ฉันตัดสินใจเพิ่มทีละ 5 ขั้นเพื่อเพิ่มหรือลดความสว่างเพื่อให้ได้เอฟเฟกต์เฟดอินและเฟดเอาต์ และเนื่องจากตัวจับเวลาใช้ช่วง 0 ถึง 255 สำหรับรอบการทำงาน ตัวจับเวลาจึงต้องทำงานที่ 255 / 5 = 51 เท่าของความถี่ปกติหรือ 5100 Hz ส่งผลให้ตัวจับเวลาขัดจังหวะทุกๆ 196 เรา
ขั้นตอนที่ 2: งานเครื่องกล
ในการทำของขวัญ ฉันใช้พลาสติกอะครีลิคสีขาวนม และส่วนที่เหลือของการจัดวาง ฉันใช้ MDF เพื่อป้องกันไม่ให้คุณเห็นรูปร่างของ LED ในแพ็คเกจเมื่อไฟ LED เปิดอยู่ ฉันจึงใส่ฝาครอบที่ด้านบนของ LED ที่กระจายแสงจาก LED ฝานี้มาจากเทียนอิเล็กทรอนิกส์เก่าๆ ที่ฉันมี แต่คุณสามารถสร้างฝาครอบได้โดยใช้พลาสติกอะคริลิกเดียวกัน ในภาพคุณเห็นสิ่งที่ฉันใช้เป็นอุปกรณ์และวัสดุ
ขั้นตอนที่ 3: อุปกรณ์อิเล็กทรอนิกส์
แผนผังแสดงส่วนประกอบอิเล็กทรอนิกส์ที่คุณต้องการ ดังที่กล่าวไว้ก่อนหน้านี้ ไฟ LED 5 ดวงจะถูกควบคุมโดยอิสระเมื่อรวม LED สีน้ำเงินไว้ เนื่องจาก PIC ไม่สามารถขับ LED สองดวงบนพินพอร์ตเดียวได้ ฉันจึงเพิ่มทรานซิสเตอร์เพื่อควบคุมไฟ LED สีน้ำเงินที่รวมกัน อุปกรณ์อิเล็กทรอนิกส์ใช้พลังงานจากแบตเตอรี่ AAA 3 ก้อนและสามารถเปิดหรือปิดได้โดยการกดสวิตช์รีเซ็ต
คุณต้องมีชิ้นส่วนอิเล็กทรอนิกส์ต่อไปนี้สำหรับโครงการนี้:
- 1 ไมโครคอนโทรลเลอร์ PIC 12F617 พร้อมซ็อกเก็ต
- ตัวเก็บประจุเซรามิก 2 ตัว: 2 * 100nF
- ตัวต้านทาน: 1 * 33k, 1 * 4k7, 2 * 68 โอห์ม, 4 * 22 โอห์ม
- ไฟ LED RGB 2 ดวง ความสว่างสูง
- 1 BC557 ทรานซิสเตอร์หรือเทียบเท่า
- สวิตช์ปุ่มกด 1 อัน
คุณสามารถสร้างวงจรบนเขียงหั่นขนมและไม่ต้องใช้พื้นที่มากดังที่เห็นในภาพ คุณอาจสงสัยว่าเหตุใดค่าตัวต้านทานสำหรับควบคุมกระแสสูงสุดผ่าน LED จึงต่ำมาก ทั้งนี้เนื่องจากแรงดันไฟจ่ายต่ำ 3.6 โวลต์ร่วมกับแรงดันตกคร่อมที่ LED แต่ละดวงมี ซึ่งขึ้นอยู่กับสีต่อ LED ให้ดูที่ Wikipedia ค่าตัวต้านทานส่งผลให้กระแสไฟสูงสุดประมาณ 15 mA ต่อ LED โดยที่กระแสสูงสุดของทั้งระบบอยู่ที่ประมาณ 30 mA
ขั้นตอนที่ 4: ซอฟต์แวร์
ซอฟต์แวร์ทำงานดังต่อไปนี้:
เมื่ออุปกรณ์ถูกรีเซ็ตโดยปุ่มกด อุปกรณ์จะเปิดขึ้นหากปิดอยู่หรือปิดเครื่องหากเปิดอยู่ ปิด หมายถึงการวาง PIC12F617 เข้าสู่โหมดสลีปซึ่งแทบจะไม่กินไฟเลย
สร้างสัญญาณ PWM เพื่อควบคุมความสว่างของ LED ทำได้โดยใช้ตัวจับเวลาและรูทีนบริการขัดจังหวะที่ควบคุมพินของ PIC12F617 ที่เปิดและปิดไฟ LED
หรี่ไฟ LED ให้จางลงและเปิดค้างไว้เป็นเวลาสุ่มระหว่าง 3 ถึง 20 วินาที หากเวลาสุ่มเท่ากับ 10 วินาที ไฟ LED ทั้งสองดวงจะเปลี่ยนเป็นสีน้ำเงินเป็นเวลา 10 วินาทีหลังจากนั้นจะใช้รูปแบบการเฟดอินและเฟดเอาต์สีแดง-เขียวตามปกติ
ระหว่างการทำงาน PIC จะวัดแรงดันไฟฟ้าโดยใช้ตัวแปลงอนาล็อกเป็นดิจิตอล (ADC) ออนบอร์ด เมื่อแรงดันไฟฟ้านี้ลดลงต่ำกว่า 3.0 V ไฟ LED จะดับลงและจะทำให้ PIC เข้าสู่โหมดสลีปอีกครั้ง PIC ยังคงทำงานได้ดีที่ 3.0 V แต่ไม่ดีสำหรับแบตเตอรี่แบบชาร์จซ้ำได้จนหมด
ดังที่กล่าวไว้ก่อนหน้านี้ สัญญาณ PWM ถูกสร้างขึ้นโดยใช้ตัวจับเวลาที่ใช้รูทีนบริการขัดจังหวะเพื่อรักษาสัญญาณ PWM ที่เสถียร การเฟดเข้าและซีดจางของไฟ LED รวมถึงเวลาที่ไฟ LED เปิดอยู่นั้นถูกควบคุมโดยโปรแกรมหลัก โปรแกรมหลักนี้ใช้ตัวจับเวลาติ๊ก 40 มิลลิวินาที ซึ่งได้มาจากตัวจับเวลาเดียวกันกับที่สร้างสัญญาณ PWM
เนื่องจากฉันไม่ได้ใช้ไลบรารี JAL เฉพาะสำหรับโปรเจ็กต์นี้ในครั้งนี้ ฉันจึงต้องสร้างตัวสร้างแบบสุ่มโดยใช้รีจิสเตอร์การป้อนกลับเชิงเส้นเพื่อสร้างเวลาสุ่มและเวลาปิดแบบสุ่มของ LED
ขั้นตอนที่ 5: ผลลัพธ์สุดท้าย
มี 2 วิดีโอที่แสดงผลลัพธ์ขั้นกลาง ภรรยาของฉันยังต้องเปลี่ยนลูกบาศก์เป็นของขวัญจริง วิดีโอหนึ่งแสดงผลลัพธ์ในระยะใกล้ โดยอีกวิดีโอหนึ่งแสดงด้วยของขวัญดั้งเดิมซึ่งนำไปสู่โครงการนี้
ตามที่คุณอาจคาดหวังเมื่อคุณคิดว่าคุณทำเสร็จแล้ว ข้อกำหนดใหม่จะปรากฏขึ้น ภรรยาของฉันขอให้ความสว่างของไฟ LED เปลี่ยนไปหลังจากที่จางลงหรือไม่ แน่นอนว่าเป็นไปได้เพราะฉันใช้หน่วยความจำโปรแกรมเพียงครึ่งเดียวของ PIC12F617
มีการแนบไฟล์ต้นฉบับ JAL และไฟล์ Intel Hex สำหรับการเขียนโปรแกรม PIC หากคุณสนใจที่จะใช้ไมโครคอนโทรลเลอร์ PIC กับ JAL ซึ่งเป็นภาษาปาสกาลที่เหมือนกับภาษาการเขียนโปรแกรม ให้ไปที่เว็บไซต์ JAL
ขอให้สนุกกับการสร้างคำแนะนำนี้และรอคอยปฏิกิริยาและผลลัพธ์จากคุณ