ค้นหาโค้ด

บทที่ 98-4: การหรี่ไฟ LED ด้วย Arduino: การควบคุมความสว่าง

บทที่ 98-4: การหรี่ไฟ LED ด้วย Arduino: การควบคุมความสว่าง

LED มีอยู่ทุกที่ — ไฟแสดงสถานะ จอแสดงผล แสงสว่างตกแต่ง — แต่ผู้เริ่มต้นส่วนใหญ่หยุดอยู่แค่การเปิดและปิดมันเท่านั้น โครงการนี้จะก้าวไปอีกขั้น: ค่อยๆ เพิ่มและลดความสว่างของ LED อย่างนุ่มนวลโดยใช้ความสามารถ PWM (Pulse Width Modulation) ในตัวของ Arduino แทนที่จะกะพริบอย่างรุนแรง คุณจะได้การเพิ่มและลดความสว่างอย่างค่อยเป็นค่อยไปซึ่งเลียนแบบการหรี่แสงตามธรรมชาติ เอฟเฟกต์การหายใจ และการควบคุมแบบอนาล็อกจากขาแบบดิจิทัลล้วนๆ มันเป็นหนึ่งในโครงการแรกที่น่าพึงพอใจที่สุดเพราะคุณเห็นผลลัพธ์ได้ทันที และเทคนิคเดียวกันนี้เป็นพื้นฐานของการควบคุมความเร็วมอเตอร์ ระดับเสียง และการหรี่ไฟแบ็คไลท์ในผลิตภัณฑ์จริง

LED-5mm-green

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

  • สร้างไฟแสดงสถานะแบบ "หายใจ" บนอุปกรณ์ที่เต้นเป็นจังหวะเบาๆ แทนที่จะกะพริบจนรบกวน
  • หรี่ไฟกลางคืน LED โดยอัตโนมัติตามแสงแวดล้อมหรือเวลาของวัน
  • ควบคุมความสว่างของแบ็คไลท์บนจอ LCD หรือ OLED
  • สร้างไฟสร้างบรรยากาศหรือโคมไฟตกแต่งที่มีการเปลี่ยนผ่านระหว่างระดับความสว่างอย่างนุ่มนวล
  • จำลองนาฬิกาปลุกพระอาทิตย์ขึ้นแบบค่อยเป็นค่อยไปที่สว่างขึ้นเรื่อยๆ เพื่อปลุกคุณอย่างเป็นธรรมชาติ
  • เพิ่มการควบคุมความเร็วให้กับมอเตอร์ DC ขนาดเล็กหรือพัดลม (ใช้หลักการ PWM เดียวกัน)

บทเรียนนี้เป็นส่วนหนึ่งของหลักสูตร Robojax Arduino Step-by-Step และครอบคลุมโดยเฉพาะโครงการที่ 4 จาก 10: การหรี่แสง LED โดยใช้ Arduino โปรแกรมเต็มสามารถดาวน์โหลดได้ด้านล่างบทความ

ฮาร์ดแวร์และส่วนประกอบ

330_ohm_resistor
ตัวต้านทาน 330 โอห์ม 0.25 วัตต์

รายการชิ้นส่วนสำหรับโครงการนี้มีน้อยมาก — หากคุณเคยทำงานกับ 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 สว่างน้อยลง สำหรับการหรี่แสง นี่ถือว่าใช้ได้ เพราะคุณกำลังปรับความสว่างอยู่แล้ว

คู่มือการต่อสาย

Arduino schematic for two LEDs see saw
แผนผัง Arduino สำหรับ LED สองดวงแบบกระดก
Arduino wiring for two LEDs see saw
การต่อสาย Arduino สำหรับ LED สองดวงแบบกระดก

การต่อสายนั้นง่ายที่สุดเท่าที่จะเป็นไปได้ แอโนดของ LED เชื่อมต่อผ่านตัวต้านทานไปยังขาที่รองรับ PWM บน Arduino — ในโครงการนี้คือขา 3 แคโทดเชื่อมต่อกับกราวด์

ทำไมต้องขา 3 โดยเฉพาะ? เพราะไม่ใช่ทุกขาของ Arduino ที่รองรับ PWM บนบอร์ด Arduino ส่วนใหญ่ ขาที่รองรับ PWM จะมีเครื่องหมาย tilde (~) — โดยทั่วไปคือขา 3, 5, 6, 9, 10 และ 11 บน Uno หากคุณใช้ขาที่ไม่รองรับ PWM analogWrite() จะไม่ให้เอาต์พุตแบบแปรผัน LED จะเปิดหรือปิดเท่านั้น

ต่อวงจรดังนี้:

  1. เสียบ LED เข้ากับเขียงหั่นขนม โดยสังเกตว่าขาใดเป็นแอโนด (ยาวกว่า) และขาใดเป็นแคโทด (สั้นกว่า/ด้านแบน)
  2. เชื่อมต่อแอโนดของ LED กับขา 3 ของ Arduino ผ่านตัวต้านทาน
  3. เชื่อมต่อแคโทดของ LED กับขา GND ของ Arduino
  4. เสียบ 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 by
  • led — กำหนดว่าขาใดที่ 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 และการตั้งเวลาทำงานร่วมกันอย่างไร

หากคุณต้องการต่อยอดโดยการกระตุ้นการหรี่ด้วยปุ่มกดแทนที่จะปล่อยให้ทำงานต่อเนื่อง สิ่งนั้นครอบคลุมอยู่ในบทเรียนแยกต่างหาก — ดูส่วนโปรเจกต์ที่เกี่ยวข้องด้านล่าง

โปรเจกต์ที่เกี่ยวข้องจากวิดีโอนี้

บทต่างๆ

  • [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

ภาพ

Arduino wiring for LED  with resistor
Arduino wiring for LED with resistor
Arduino schematic for LED
Arduino schematic for LED
Arduino wiring for two LEDs see saw
Arduino wiring for two LEDs see saw
Arduino schematic for two LEDs see saw
Arduino schematic for two LEDs see saw
LED-5mm-green
LED-5mm-green
330_ohm_resistor
330_ohm_resistor
936-Lessson 98-LED-4: Arduino code to fade the LED light
ภาษา: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

สิ่งที่คุณอาจต้องการ

แหล่งข้อมูลและเอกสารอ้างอิง

ไฟล์📁

ไลบรารี Arduino (zip)

คู่มือผู้ใช้