บทที่ 98-4: การหรี่ไฟ LED ด้วย Arduino: การควบคุมความสว่าง
LED มีอยู่ทุกที่ — ไฟแสดงสถานะ จอแสดงผล แสงสว่างตกแต่ง — แต่ผู้เริ่มต้นส่วนใหญ่หยุดอยู่แค่การเปิดและปิดมันเท่านั้น โครงการนี้จะก้าวไปอีกขั้น: ค่อยๆ เพิ่มและลดความสว่างของ LED อย่างนุ่มนวลโดยใช้ความสามารถ PWM (Pulse Width Modulation) ในตัวของ Arduino แทนที่จะกะพริบอย่างรุนแรง คุณจะได้การเพิ่มและลดความสว่างอย่างค่อยเป็นค่อยไปซึ่งเลียนแบบการหรี่แสงตามธรรมชาติ เอฟเฟกต์การหายใจ และการควบคุมแบบอนาล็อกจากขาแบบดิจิทัลล้วนๆ มันเป็นหนึ่งในโครงการแรกที่น่าพึงพอใจที่สุดเพราะคุณเห็นผลลัพธ์ได้ทันที และเทคนิคเดียวกันนี้เป็นพื้นฐานของการควบคุมความเร็วมอเตอร์ ระดับเสียง และการหรี่ไฟแบ็คไลท์ในผลิตภัณฑ์จริง
เมื่อคุณเข้าใจการหรี่แสงแล้ว คุณสามารถนำไปประยุกต์ใช้กับงานสร้างสรรค์ที่ใช้งานได้จริงหลากหลาย:
- สร้างไฟแสดงสถานะแบบ "หายใจ" บนอุปกรณ์ที่เต้นเป็นจังหวะเบาๆ แทนที่จะกะพริบจนรบกวน
- หรี่ไฟกลางคืน LED โดยอัตโนมัติตามแสงแวดล้อมหรือเวลาของวัน
- ควบคุมความสว่างของแบ็คไลท์บนจอ LCD หรือ OLED
- สร้างไฟสร้างบรรยากาศหรือโคมไฟตกแต่งที่มีการเปลี่ยนผ่านระหว่างระดับความสว่างอย่างนุ่มนวล
- จำลองนาฬิกาปลุกพระอาทิตย์ขึ้นแบบค่อยเป็นค่อยไปที่สว่างขึ้นเรื่อยๆ เพื่อปลุกคุณอย่างเป็นธรรมชาติ
- เพิ่มการควบคุมความเร็วให้กับมอเตอร์ DC ขนาดเล็กหรือพัดลม (ใช้หลักการ PWM เดียวกัน)
บทเรียนนี้เป็นส่วนหนึ่งของหลักสูตร Robojax Arduino Step-by-Step และครอบคลุมโดยเฉพาะโครงการที่ 4 จาก 10: การหรี่แสง LED โดยใช้ Arduino โปรแกรมเต็มสามารถดาวน์โหลดได้ด้านล่างบทความ
ฮาร์ดแวร์และส่วนประกอบ
รายการชิ้นส่วนสำหรับโครงการนี้มีน้อยมาก — หากคุณเคยทำงานกับ Arduino มาก่อน คุณอาจมีทุกสิ่งที่ต้องการอยู่แล้ว:
- บอร์ด Arduino 1× (Uno, Nano, Mega หรือบอร์ดที่เข้ากันได้)
- LED 1× (5 มม. หรือ 3 มม. สีใดก็ได้)
- ตัวต้านทาน 1× (200Ω ถึง 1000Ω — ช่วง 300Ω ถึง 1kΩ ใช้งานได้ดี)
- เขียงหั่นขนมและสายจัมเปอร์ DuPont
- สาย USB สำหรับโปรแกรมและจ่ายไฟ
หมายเหตุสำคัญเกี่ยวกับ LED: ขาที่ยาวกว่าคือแอโนด (บวก) และขาที่สั้นกว่า — หรือด้านที่มีขอบแบนบนตัวพลาสติก — คือแคโทด (ลบ) การต่อกลับด้านหมายความว่า LED จะไม่สว่างขึ้น ดังนั้นตรวจสอบให้ดีก่อนเปิดไฟ
สำหรับค่าตัวต้านทาน บทบรรยายได้อธิบายการคำนวณที่ (ในวิดีโอที่ 03:49): LED ทั่วไปมีแรงดันตกประมาณ 2V และต้องการกระแสประมาณ 10mA ด้วยแหล่งจ่าย 5V แรงดันที่เหลือ 3V ต้องตกคร่อมตัวต้านทาน ทำให้ R = V/I = 3V / 0.01A = 300Ω ในทางปฏิบัติ อะไรก็ได้ตั้งแต่ 300Ω ขึ้นไปถึง 1000Ω จะใช้งานได้ — ค่าที่สูงขึ้นเพียงแค่ทำให้ LED สว่างน้อยลง สำหรับการหรี่แสง นี่ถือว่าใช้ได้ เพราะคุณกำลังปรับความสว่างอยู่แล้ว
คู่มือการต่อสาย
การต่อสายนั้นง่ายที่สุดเท่าที่จะเป็นไปได้ แอโนดของ LED เชื่อมต่อผ่านตัวต้านทานไปยังขาที่รองรับ PWM บน Arduino — ในโครงการนี้คือขา 3 แคโทดเชื่อมต่อกับกราวด์
ทำไมต้องขา 3 โดยเฉพาะ? เพราะไม่ใช่ทุกขาของ Arduino ที่รองรับ PWM บนบอร์ด Arduino ส่วนใหญ่ ขาที่รองรับ PWM จะมีเครื่องหมาย tilde (~) — โดยทั่วไปคือขา 3, 5, 6, 9, 10 และ 11 บน Uno หากคุณใช้ขาที่ไม่รองรับ PWM analogWrite() จะไม่ให้เอาต์พุตแบบแปรผัน LED จะเปิดหรือปิดเท่านั้น
ต่อวงจรดังนี้:
- เสียบ LED เข้ากับเขียงหั่นขนม โดยสังเกตว่าขาใดเป็นแอโนด (ยาวกว่า) และขาใดเป็นแคโทด (สั้นกว่า/ด้านแบน)
- เชื่อมต่อแอโนดของ LED กับขา 3 ของ Arduino ผ่านตัวต้านทาน
- เชื่อมต่อแคโทดของ LED กับขา GND ของ Arduino
- เสียบ Arduino เข้ากับคอมพิวเตอร์ผ่าน USB
คำอธิบายโค้ด
สเก็ตช์สำหรับโครงการนี้อิงจากตัวอย่าง "Fade" คลาสสิกของ Arduino พร้อมการปรับแต่งเล็กน้อย แทนที่จะอธิบายทุกบรรทัด มาเน้นที่ส่วนที่คุณจะต้องการปรับสำหรับการทดลองของคุณเอง
ตัวแปรที่ผู้ใช้กำหนดค่าได้
ที่ด้านบนของโค้ด ตัวแปรสามตัวควบคุมพฤติกรรมทั้งหมด:
int led = 3; // the PWM pin the LED is attached to
int brightness = 0; // how bright the LED is
int fadeAmount = 3; // how many points to fade the LED byled— กำหนดว่าขาใดที่ LED เชื่อมต่ออยู่ ค่าเริ่มต้นคือขา 3 แต่คุณสามารถเปลี่ยนเป็นขาใดก็ได้ที่รองรับ PWM (มีเครื่องหมาย ~ บนบอร์ดของคุณ) หากคุณย้าย LED ไปยังขาอื่น ให้อัปเดตค่านี้ให้ตรงกันbrightness— นี่คือระดับความสว่างปัจจุบัน ตั้งแต่ 0 (ปิด) ถึง 255 (สว่างเต็มที่) โค้ดเริ่มต้นที่ 0 แต่คุณสามารถเริ่มที่ค่าใดก็ได้ในช่วงนี้fadeAmount— นี่คือตัวที่น่าสนใจที่สุดในการทดลอง มันควบคุมว่ามีการเปลี่ยนความสว่างกี่ "ขั้น" ในแต่ละรอบ ค่าน้อยเช่น 3 จะให้การหรี่ที่ช้าและค่อยเป็นค่อยไป ค่ามากเช่น 20 จะทำให้ LED หรี่เข้าและออกอย่างรวดเร็ว วิดีโอสาธิตสิ่งนี้ที่ (ในวิดีโอที่ 22:37) — การเปลี่ยนจาก 5 เป็น 20 ทำให้เอฟเฟกต์เร็วขึ้นอย่างมาก
การหรี่แสงทำงานอย่างไร
แกนหลักของการหรี่แสงเกิดขึ้นในสองบรรทัดภายใน loop():
analogWrite(led, brightness);
brightness = brightness + fadeAmount;
ในแต่ละรอบของลูป ค่าความสว่างปัจจุบันจะถูกเขียนไปยัง LED โดยใช้ analogWrite() จากนั้นความสว่างจะถูกเพิ่มด้วย fadeAmount ฟังก์ชัน analogWrite() ใช้ PWM เพื่อจำลองแรงดันไฟฟ้าแบบอนาล็อก — มันเปิดและปิดขาอย่างรวดเร็ว และอัตราส่วนของเวลาเปิดต่อเวลาปิดเป็นตัวกำหนดความสว่างที่รับรู้ได้
เมื่อความสว่างถึง 0 หรือ 255 โค้ดจะกลับทิศทางโดยการพลิกเครื่องหมายของ fadeAmount:
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount;
}
นี่คือสิ่งที่ทำให้ LED หรี่เข้า แล้วหรี่ออก แล้วหรี่เข้าอีกครั้ง — เป็นวงจรการหายใจต่อเนื่อง delay(30) ที่ท้ายลูปควบคุมความเร็วโดยรวมของแอนิเมชัน delay ที่สั้นลงทำให้การหรี่เร็วขึ้น delay ที่ยาวขึ้นทำให้ช้าลง
การทดลองกับค่า
มีสองตัวแปรที่ให้คุณควบคุมเอฟเฟกต์ภาพได้มากที่สุด:
- เพิ่ม
fadeAmountเพื่อการหรี่ที่เร็วและ dramatic มากขึ้น ลองใช้ 10 หรือ 20 - ลด
fadeAmountเพื่อเอฟเฟกต์การหายใจที่ช้าและนุ่มนวล ลองใช้ 1 หรือ 2 - ปรับค่า
delay()เพื่อเปลี่ยนจังหวะ delay ที่สั้นลงทำให้วงจรทั้งหมดเร็วขึ้น delay ที่ยาวขึ้นทำให้ยืดออก
การรวม fadeAmount น้อยกับ delay สั้นให้การหรี่ที่ราบรื่นมาก แทบจะเหมือนธรรมชาติ — เหมาะสำหรับแสงบรรยากาศ fadeAmount มากกับ delay สั้นสร้างเอฟเฟกต์การเต้นเป็นจังหวะที่เร็ว
การสาธิตโปรเจกต์แบบสด
เมื่ออัปโหลดโค้ดแล้ว คุณจะเห็น LED สว่างขึ้นอย่างช้าๆ จากปิดจนถึงสว่างเต็มที่ แล้วหรี่ลงอีกครั้ง ทำซ้ำไม่สิ้นสุด วิดีโอแสดงพฤติกรรมเริ่มต้นที่ (ในวิดีโอที่ 22:25) — การหรี่ที่ราบรื่นด้วยความเร็วปานกลาง
เมื่อเปลี่ยน fadeAmount เป็น 20 LED จะหรี่เข้าและออกอย่างรวดเร็วมาก — เกือบเหมือนการกะพริบ เมื่อตั้งเป็น 3 การหรี่จะใช้เวลานานขึ้นอย่างเห็นได้ชัด สร้างการเปลี่ยนผ่านที่ผ่อนคลายและค่อยเป็นค่อยไป สิ่งนี้แสดงให้เห็นอย่างชัดเจนในวิดีโอที่ (ในวิดีโอที่ 23:02)
ความสวยงามของโปรเจกต์นี้คือคุณสามารถเห็นผลของการเปลี่ยนแปลงโค้ดได้ทันที — ไม่ต้องเปลี่ยนการเดินสาย แค่แก้ไขตัวแปรและอัปโหลดใหม่ วงจรป้อนกลับที่รวดเร็วนี้ทำให้เป็นวิธีที่ยอดเยี่ยมในการสร้างสัญชาตญาณว่าการ PWM และการตั้งเวลาทำงานร่วมกันอย่างไร
หากคุณต้องการต่อยอดโดยการกระตุ้นการหรี่ด้วยปุ่มกดแทนที่จะปล่อยให้ทำงานต่อเนื่อง สิ่งนั้นครอบคลุมอยู่ในบทเรียนแยกต่างหาก — ดูส่วนโปรเจกต์ที่เกี่ยวข้องด้านล่าง
โปรเจกต์ที่เกี่ยวข้องจากวิดีโอนี้
- บทเรียน 98-1: วิธีเปิดและปิด LED ด้วย Arduino
- บทเรียน 98-2: วิธีเปิดและปิด LED โดยใช้ปุ่มกดกับ Arduino
- บทเรียน 98-3: วิธีเปิด/ปิด LED แบบสลับโดยใช้ปุ่มกดกับ Arduino
- บทเรียน 98-5: หรี่แสงเมื่อกดปุ่มโดยใช้ Arduino
- บทเรียน 98-6: เกม LED กระดานหกกับ Arduino
- บทเรียน 98-7: ไฟวิ่งโดยใช้ Arduino และ LED 5 ดวง
- บทเรียน 98-8: ไฟวิ่งพร้อมปุ่มกดและ LED กับ Arduino
- บทเรียน 98-9: มิเตอร์วัดระดับแรงดัน LED โดยใช้ Arduino หรือไฟวิ่งพร้อมโพเทนชิโอมิเตอร์
- บทเรียน 98-10: ไฟจราจร Arduino
บทต่างๆ
- [00:00] ภาพรวมของโปรเจกต์ LED 10 โปรเจกต์ด้วย Arduino
- [01:22] แนะนำหลักสูตรและส่วนประกอบที่จำเป็น
- [02:29] ทำความเข้าใจ LED: สัญลักษณ์ ขั้ว และประเภท
- [03:49] คำนวณค่าตัวต้านทาน LED โดยใช้กฎของโอห์ม
- [05:53] โปรเจกต์ 1: การเปิดและปิด LED
- [12:43] โปรเจกต์ 2: การควบคุม LED ด้วยปุ่มกด
- [17:13] โปรเจกต์ 3: สลับ LED ด้วยปุ่มกด
- [20:12] โปรเจกต์ 4: การหรี่ LED — อธิบายโค้ด
- [22:25] การสาธิตการหรี่และการปรับความเร็วการหรี่
- [23:20] โปรเจกต์ 5: หรี่ LED ด้วยการกระตุ้นจากปุ่มกด
- [27:32] โปรเจกต์ 6: เอฟเฟกต์ LED กระดานหก
- [30:47] โปรเจกต์ 7: ไฟวิ่งด้วย LED 5 ดวง
- [36:41] โปรเจกต์ 8: ไฟวิ่งควบคุมด้วยปุ่มกด
- [42:25] โปรเจกต์ 9: มิเตอร์วัดระดับแรงดัน LED ด้วยโพเทนชิโอมิเตอร์
- [49:25] โปรเจกต์ 10: ไฟจราจร Arduino
This code has not been parsed yet. Please return to the admin panel to parse it.
สิ่งที่คุณอาจต้องการ
-
อเมซอนSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
อเมซอน
-
อเมซอน
-
อเมซอน
แหล่งข้อมูลและเอกสารอ้างอิง
-
เอกสารDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
ภายนอก
-
ภายนอก
-
ภายนอก
ไฟล์📁
ไลบรารี Arduino (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB
คู่มือผู้ใช้
-
คู่มือการประกอบรถอัจฉริยะ SunFounder 3-in-1 Arduino Smart Carเอกสารนี้แสดงการประกอบ SunFounder 3-in-1 Arduino Smart Car ทีละขั้นตอน
SunFounder_car_assembly_manual.pdf1.20 MB