ค้นหาโค้ด

บทที่ 98-5: การหรี่ไฟเมื่อกดปุ่มโดยใช้ Arduino

บทที่ 98-5: การหรี่ไฟเมื่อกดปุ่มโดยใช้ Arduino

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

LED with resistor on breadboard connected to Arduino with a push button
LED with resistor on breadboard connected to Arduino with a push button

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

  • ไฟแสดงสถานะแบบปิดนุ่มนวล — แทนที่หลอดไฟจะดับทันที มันจะหรี่ลงอย่างนุ่มนวลเมื่อคุณกดปุ่ม ซึ่งดูประณีตกว่ามากบนเครื่องใช้ไฟฟ้าและกล่องที่พิมพ์ด้วยเครื่องพิมพ์ 3 มิติ
  • โหมดหลับ / สแตนด์บาย — กดปุ่มแล้ว LED สถานะที่สว่างจะหรี่ลงจนมืดเพื่อไม่รบกวนคุณในเวลากลางคืน ขณะที่วงจรยังคงได้รับไฟ
  • ไฟเวทีหรือไฟโมเดลแบบ "เฟดสู่ความมืด" — ปุ่มเดียวกระตุ้นการหรี่ลงอย่างราบรื่นของแถบ LED หรือแผงไฟ แทนที่จะตัด abruptly
  • การตอบสนองเพื่อประหยัดแบตเตอรี่ — การกดปุ่มชั่วขณะให้การยืนยันแบบแฟลชสว่างที่ค่อยๆ จางหายไป ดังนั้น LED จะสว่างเต็มที่เพียงช่วงสั้นๆ
  • งานศิลปะและพร็อพแบบอินเทอร์แอกทีฟ — เอฟเฟกต์ "หายใจออก" ที่กระตุ้นด้วยการสัมผัส เหมาะสำหรับคอสเพลย์ ไดโอรามา หรือการจัดแสดงในพิพิธภัณฑ์

แนวคิดหลักนั้นง่าย: ปุ่มบอก Arduino ว่า "เริ่มหรี่ตอนนี้" และ Arduino จะลดความสว่างของ LED จาก 255 (เต็ม) ลงไปที่ 0 (ดับ) ทีละขั้นเล็กๆ เพราะขั้นตอนเล็กและเกิดขึ้นอย่างรวดเร็ว ตาของคุณจึงเห็นการหรี่ลงอย่างราบรื่นแทนที่จะกระโดด

หากคุณไม่เคยหรี่ LED มาก่อน การควบคุมความสว่างพื้นฐานมีอธิบายไว้ใน บทเรียน 98-4: การหรี่ไฟ LED ด้วย Arduino: การควบคุมความสว่าง บทเรียนนี้ต่อยอดโดยตรงจากพื้นฐานนั้นด้วยการเพิ่มปุ่มกดเป็นตัวกระตุ้น

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

330_ohm_resistor
330_ohm_resistor

นี่เป็นการสร้างที่ต้นทุนต่ำมาก — ทุกอย่างที่นี่เป็นวัสดุมาตรฐานในชุดเริ่มต้น:

  • บอร์ด Arduino (Uno, Nano, Mega หรือบอร์ดที่เข้ากันได้)
  • LED หนึ่งดวง (5 มม. หรือ 3 มม. สีใดก็ได้)
  • สวิตช์ปุ่มกดหนึ่งตัว (แบบชั่วขณะ ชนิดทัชแอคทีฟ 4 ขาใช้ได้ดี)
  • ตัวต้านทานหนึ่งตัวสำหรับ LED — ตั้งแต่ 200 Ω ถึง 1000 Ω (ค่า 220 Ω หรือ 330 Ω แบบคลาสสิกนั้นสมบูรณ์แบบ)
  • เขียงหั่นขนมและสายจัมเปอร์ดูปองต์
  • สาย USB สำหรับโปรแกรม (และแบตเตอรี่หรืออะแดปเตอร์ 5 V หากคุณต้องการให้ทำงานแบบไม่ต่อสาย)

หมายเหตุสั้นๆ เกี่ยวกับตัวต้านทาน LED: LED ต้องการแรงดันตกคร่อมประมาณ 2 V และกระแสประมาณ 10 mA ด้วยแหล่งจ่าย 5 V ตัวต้านทานต้องลดแรงดันที่เหลือ 3 V ดังนั้นกฎของโอห์มให้ค่าประมาณ 300 Ω ค่าใดก็ได้ตั้งแต่ 300 Ω ขึ้นไปถึง 1000 Ω จะทำงานได้ — ค่าที่สูงขึ้นเพียงทำให้ LED สว่างน้อยลง การใช้ตัวต้านทานไม่ใช่ทางเลือก; หากไม่มีมัน LED จะดึงกระแสมากเกินไปและไหม้

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

Arduino schematic for LED with a push button switch
Arduino schematic for LED with a push button switch
Arduino wiring for LED with a push button switch
Arduino wiring for LED with a push button switch

การต่อสายนั้นตั้งใจให้เรียบง่าย ขาอาโนดของ LED (ขาที่ยาวกว่า) เชื่อมต่อผ่านตัวต้านทานไปยังขอดิจิทัล 3 และแคโทด (ขาที่สั้นกว่า ซึ่งมีด้านแบนบนตัวถัง) ไปยังกราวด์ ปุ่มกดเชื่อมต่อระหว่างขอดิจิทัล 2 และกราวด์ — ไม่จำเป็นต้องใช้ตัวต้านทานพูลอัปภายนอกเพราะโค้ดเปิดใช้งานพูลอัปภายในของ Arduino

ให้ความสนใจกับขั้วของ LED: ด้านแบนของตัวพลาสติกและขาที่สั้นกว่าบ่งบอกถึงแคโทด (ลบ) หากคุณใส่กลับด้าน LED จะไม่สว่าง — ไม่เกิดความเสียหาย เพียงพลิกมันกลับ

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

คำอธิบายโค้ด

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

const int pushButtonPin = 2;//ขาที่สวิตช์ปุ่มกดเชื่อมต่ออยู่
const int LEDPin = 3;//ขาที่ LED เชื่อมต่ออยู่
const int fadeAmount = 10;    // จำนวนจุดที่จะหรี่ LED ลง
const int fadeSpeed = 5;//เวลาหรี่เป็นมิลลิวินาที ยิ่งค่าน้อย การหรี่ก็ยิ่งเร็ว

pushButtonPin และ LEDPin เพียงบอก Arduino ว่าคุณต่อสายอุปกรณ์เข้ากับขาใด หากคุณย้ายปุ่มไปที่ขา 4 หรือย้าย LED ไปที่ขา 9 (ขาที่รองรับ PWM) เพียงเปลี่ยนตัวเลขสองตัวนี้ให้ตรงกับการต่อสายของคุณ โปรดทราบว่าขา LED ต้อง รองรับ PWM — บนบอร์ด Uno นั่นหมายถึงขา 3, 5, 6, 9, 10 หรือ 11 — เพราะการหรี่แสงต้องใช้ analogWrite()

fadeAmount ควบคุมขนาดของแต่ละขั้นความสว่าง ความสว่างมีค่าตั้งแต่ 0 ถึง 255 ดังนั้น fadeAmount เท่ากับ 10 หมายความว่า LED จะหรี่ลงในประมาณ 25 ขั้น ค่าที่มากขึ้นจะทำให้การหรี่หยาบและเร็วขึ้น ค่าที่น้อยลงจะทำให้เนียนและช้าลง

fadeSpeed คือเวลาหน่วงเป็นมิลลิวินาทีระหว่างแต่ละขั้น นี่คือปุ่มปรับที่สำคัญที่สุดเพียงอย่างเดียวสำหรับความรู้สึกของเอฟเฟกต์ ค่า 5 มิลลิวินาทีให้การหรี่ที่รวดเร็วและกระชับ ค่า 30 มิลลิวินาทีหรือมากกว่าให้การหรี่ที่ช้าและนุ่มนวล เมื่อรวมกับ fadeAmount ค่าสองค่านี้ช่วยให้คุณปรับการหรี่ให้ได้ลักษณะที่คุณต้องการพอดี

ยังมีตัวแปรภายในที่น่าสนใจอีกตัวหนึ่ง:

int brightness = 255;    // ความสว่างของ LED
int pushButtonStatus = 0; // ค่าที่อ่านได้จากขา 2

brightness เริ่มต้นที่ 255 หมายความว่า LED เริ่มต้นที่ความสว่างเต็มที่ทุกครั้งที่คุณกดปุ่ม หากคุณต้องการให้การหรี่เริ่มจากจุดที่มืดกว่า — เช่น ครึ่งหนึ่งของความสว่าง — ให้เปลี่ยนค่านี้เป็น 128

ตรรกะทำงานเช่นนี้: ลูปจะอ่านค่าปุ่ม หากปุ่มถูกกด (LOW เนื่องจาก pull-up ภายใน) ลูป while จะทำงานตราบเท่าที่ค่า brightness มากกว่าศูนย์ ภายในลูปนั้น Arduino จะเขียนค่า brightness ปัจจุบันไปยัง LED ลบด้วย fadeAmount รอ fadeSpeed มิลลิวินาที แล้ววนซ้ำ เมื่อปุ่มไม่ถูกกด LED จะถูกเขียนเป็น 0 และดับอยู่

รายละเอียดสำคัญอย่างหนึ่ง: pull-up ภายในหมายความว่าขาจะอ่านค่า HIGH เมื่อปุ่มไม่ถูกกด และ LOW เมื่อปุ่มถูกกด นั่นคือเหตุผลที่โค้ดตรวจสอบ LOW เพื่อตรวจจับการกด หากคุณเปลี่ยนไปใช้ตัวต้านทาน pull-down ภายนอก คุณจะต้องเปลี่ยนการเปรียบเทียบนั้นเป็น HIGH

โปรเจกต์สดและการสาธิต

เมื่ออัปโหลดแล้ว พฤติกรรมจะเกิดขึ้นทันทีและน่าพอใจ กดปุ่มแล้ว LED จะสว่างเต็มที่ทันที จากนั้นจะหรี่ลงจนดับอย่างเห็นได้ชัดในช่วงเวลาที่คุณควบคุม ปล่อยปุ่มแล้ว LED จะดับ กดอีกครั้งแล้วการหรี่จะเริ่มใหม่จากความสว่างเต็มที่

ในวิดีโอ การหรี่ถูกสาธิตที่ค่าต่างๆ เพื่อให้คุณได้ยินและเห็นความแตกต่าง ด้วย fadeAmount = 20 การหรี่จะเร็วและเป็นขั้นๆ — ไปถึงศูนย์ในไม่กี่ขั้นที่มองเห็นได้ ลดลงมาเป็น fadeAmount = 10 จะเนียนขึ้นอย่างเห็นได้ชัด และเมื่อใช้ fadeAmount = 3 การหรี่จะใช้เวลานานขึ้นอย่างเห็นได้ชัดและดูเกือบต่อเนื่อง ค่า fadeSpeed ก็มีผลอย่างมากเช่นกัน: ตั้งเป็น 1 มิลลิวินาทีทำให้การหรี่เกือบทันที ขณะที่ค่าที่มากขึ้นจะยืดเวลาออกไป

ลองทดลองนี้: ตั้ง fadeAmount = 5 และ fadeSpeed = 30 คุณจะได้การหรี่ที่ช้าและนุ่มนวล ดูเหมือนไฟที่กำลังหลับลง จากนั้นตั้ง fadeAmount = 50 และ fadeSpeed = 1 เพื่อการตัดที่แรงและเร็ว ไม่มีค่าใด "ผิด" — มันขึ้นอยู่กับอารมณ์ที่คุณต้องการทั้งหมด

พฤติกรรมการสลับของปุ่มเดียวกันถูกกล่าวถึงแยกใน บทเรียน 98-3: วิธีเปิด/ปิด LED แบบสลับโดยใช้ปุ่มกดกับ Arduino และเวอร์ชันกดแล้วติดที่ง่ายกว่าอยู่ใน บทเรียน 98-2: วิธีเปิดและปิด LED โดยใช้ปุ่มกดกับ Arduino

เนื่องจากการหรี่ถูกกระตุ้นด้วยการสัมผัสชั่วขณะ วงจรเดียวกันนี้จึงเหมาะอย่างยิ่งสำหรับขับรีเลย์หรือ MOSFET แทน LED — คุณสามารถหรี่หลอด 12 V การสตาร์ทแบบนุ่มนวลของมอเตอร์ หรือการอุ่นของขดลวดความร้อน ปุ่มเป็นเพียงตัวกระตุ้น สิ่งที่คุณหรี่นั้นขึ้นอยู่กับคุณ

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

บทต่างๆ

  • [00:00] ภาพรวมของโปรเจกต์ LED 10 โปรเจกต์
  • [01:00] แนะนำหลักสูตร Arduino แบบทีละขั้นตอน
  • [02:29] พื้นฐาน LED: สัญลักษณ์ ขั้ว และกระแสไฟฟ้า
  • [03:49] การคำนวณตัวต้านทาน LED ด้วยกฎของโอห์ม
  • [05:53] โปรเจกต์ 1: การเปิดและปิด LED
  • [12:43] โปรเจกต์ 2: LED กับปุ่มกด
  • [17:13] โปรเจกต์ 3: สลับเปิดปิด LED ด้วยปุ่มกด
  • [20:12] โปรเจกต์ 4: การหรี่แสง LED
  • [23:20] โปรเจกต์ 5: การหรี่แสง LED ด้วยปุ่มกด
  • [27:32] โปรเจกต์ 6: LED กระดกขึ้นลง
  • [30:47] โปรเจกต์ 7: ไฟวิ่ง
  • [36:41] โปรเจกต์ 8: ไฟวิ่งด้วยปุ่มกด
  • [42:25] โปรเจกต์ 9: มิเตอร์วัดระดับแรงดัน LED
  • [49:25] โปรเจกต์ 10: ไฟจราจร Arduino

ภาพ

Arduino wiring for LED with a push button switch
Arduino wiring for LED with a push button switch
Arduino schematic for LED with a push button switch
Arduino schematic for LED with a push button switch
LED-5mm-green
LED-5mm-green
330_ohm_resistor
330_ohm_resistor
LED with resistor on breadboard connected to Arduino with a push button
LED with resistor on breadboard connected to Arduino with a push button
937-Lessson 98-LED-5: Arduino code to fade the LED when push button is pressed
ภาษา: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

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

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

ไฟล์📁

ไลบรารี Arduino (zip)

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