ค้นหาโค้ด

บทที่ 98-8: ไฟเดินด้วยปุ่มกดและ LED ด้วย Arduino

บทที่ 98-8: ไฟเดินด้วยปุ่มกดและ LED ด้วย Arduino

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

5 leds on breadboard with push button shown connected to Arduino UNO
LED 5 ตัวบนเบรดบอร์ดพร้อมปุ่มกดที่เชื่อมต่อกับ Arduino UNO

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

  • ตัวเลือกเมนูบนอุปกรณ์ที่การกดแต่ละครั้งจะไฮไลต์ตัวเลือกถัดไป
  • ตัวบ่งชี้ขั้นตอนตามลำดับสำหรับเครื่องจักรหรือกระบวนการ (ขั้นตอนที่ 1, ขั้นตอนที่ 2, ขั้นตอนที่ 3...)
  • จอแสดงคะแนนหรือระดับที่คุณเลื่อนด้วยตนเองด้วยปุ่ม
  • ตัวบ่งชี้ "ช่องถัดไป" หรือ "โหมดถัดไป" สำหรับตัวควบคุมแสงสว่าง
  • เกมง่าย ๆ หรือกริ่งตอบคำถามที่ผู้เล่นผลัดกันทำให้หลอดถัดไปสว่าง
  • รีเลย์หรือตัวจัดลำดับโหลดที่การกดแต่ละครั้งจะเปิดใช้งานเอาต์พุตถัดไปตามลำดับ

ข้อได้เปรียบสำคัญเหนือไฟวิ่งอัตโนมัติคือการควบคุม: จะไม่มีอะไรเกิดขึ้นจนกว่าคุณจะกด ดังนั้นไฟจะเลื่อนไปข้างหน้าเฉพาะเมื่อคุณตัดสินใจเท่านั้น วิดีโอยังระบุด้วยว่าแนวคิดการสลับและการจัดลำดับแบบเดียวกันนี้สามารถขับเคลื่อนรีเลย์เพื่อสลับไฟ AC หรือควบคุมมอเตอร์ได้ ไม่ใช่แค่ LED (ในวิดีโอที่ 19:52)

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

รายการชิ้นส่วนนั้นสั้นและราคาไม่แพง:

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

หมายเหตุสั้น ๆ เกี่ยวกับ LED: แคโทดคือขาที่สั้นกว่าและด้านที่มีขอบแบน ในขณะที่แอโนดคือขาที่ยาวกว่า (ในวิดีโอที่ 03:13) ค่าตัวต้านทานไม่สำคัญมากนัก — ตัวต้านทานที่สูงกว่าจะทำให้ LED สว่างน้อยลงเท่านั้น ดังนั้นค่าตั้งแต่ประมาณ 300 Ω ขึ้นไปจนถึง 1000 Ω ก็ใช้ได้ดี (ในวิดีโอที่ 05:33)

คู่มือการเดินสาย

Schematic for Arduino walking light LEDs
แผนผังสำหรับ LED ไฟวิ่ง Arduino
wiring for Arduino walking light LEDs with push button
การเดินสายสำหรับ LED ไฟวิ่ง Arduino พร้อมปุ่มกด

การเดินสายโดยพื้นฐานแล้วเหมือนกับไฟวิ่งห้า LED มาตรฐาน โดยเพิ่มปุ่มกดหนึ่งตัว แอโนดของ LED แต่ละตัวเชื่อมต่อกับพิน Arduino ของตัวเอง และแคโทดแต่ละตัวเชื่อมต่อผ่านตัวต้านทานของตัวเองไปยังรางกราวด์ร่วมบนเบรดบอร์ด ในการสร้างนี้ LED เชื่อมต่อกับพิน 3, 4, 5, 6 และ 7 (ในวิดีโอที่ 31:37) ปุ่มกดวางอยู่บนเบรดบอร์ดโดยขาข้างหนึ่งต่อลงกราวด์และขาอีกข้างต่อกับพิน 2 — พินเดียวกับที่โค้ดใช้สำหรับปุ่ม (ในวิดีโอที่ 37:04)

เนื่องจากโค้ดเปิดใช้งานตัวต้านทาน pull-up ภายในของ Arduino จึงไม่จำเป็นต้องใช้ตัวต้านทานภายนอกกับปุ่ม เมื่อไม่ได้กดปุ่ม พินจะอ่านค่าเป็น HIGH และเมื่อคุณกด พินจะถูกดึงลงกราวด์และอ่านค่าเป็น LOW (ในวิดีโอที่ 14:02)

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

โปรแกรมเต็มมีอยู่ด้านล่างบทความนี้ ที่นี่เราจะเน้นส่วนที่คุณจะต้องการแก้ไขจริง ๆ

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

const int pushButtonPin = 2; // push button pin
const int LED1 = 3;
const int LED2 = 4;
const int LED3 = 5;
const int LED4 = 6;
const int LED5 = 7;

int LED_ON = LED1; // which LED is currently lit

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

นอกจากนี้ยังมีความหน่วงเล็กน้อยหลังการกดแต่ละครั้ง:

delay(200); // debounce / give the user time between presses

การหยุด 200 มิลลิวินาทีนี้ป้องกันไม่ให้การกดทางกายภาพครั้งเดียวถูกบันทึกเป็นการกดหลายครั้ง หากนิ้วของคุณสั่นหรือปุ่มรู้สึกไวเกินไป ให้เพิ่มจำนวนนี้ หากคุณต้องการการตอบสนองที่เร็วขึ้น ให้ลดลง โปรดทราบว่าการตั้งค่าต่ำเกินไปอาจทำให้ไฟข้ามไปข้างหน้าอย่างไม่คาดคิด (ในวิดีโอที่ 41:20)

ตรรกะหลักอยู่ใน loop() โดยจะอ่านสถานะปุ่ม และจะเลื่อนไฟก็ต่อเมื่อปุ่มถูกกด (อ่านค่าได้ LOW) เท่านั้น ลำดับการทำงานใช้การตรวจสอบแบบ if / else if ต่อกันเพื่อเลื่อนจาก LED1 ไป LED2 ไป LED3 และต่อไปเรื่อย ๆ แล้ววนกลับมาที่ LED1 หลังจากดวงสุดท้าย หากคุณต้องการเปลี่ยนทิศทางหรือลำดับของ LED นี่คือบล็อกที่ต้องแก้ไข — เพียงกำหนดใหม่ว่าขาใดตามหลังขาใด

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

หลังจากอัปโหลดโค้ด การกดปุ่มจะทำให้ LED ดวงแรกติด; เมื่อปล่อยปุ่ม LED ดวงนั้นจะยังคงติดอยู่ การกดครั้งถัดไปจะเลื่อนไฟไปยัง LED ดวงที่สอง จากนั้นดวงที่สาม สี่ และห้า และการกดครั้งต่อไปจะกลับมาที่ดวงแรก — เป็นการหมุนวนต่อเนื่อง (ในวิดีโอที่ 40:22)

ผลข้างเคียงที่ดีของดีเลย์ 200 มิลลิวินาที คือหากคุณ กดค้าง ปุ่ม ไฟจะเลื่อนไปเรื่อย ๆ ด้วยตัวเองทุก 200 มิลลิวินาที ซึ่ง effectively เปลี่ยนโปรเจกต์ให้เป็นไฟวิ่งอัตโนมัติขณะกดปุ่มค้างไว้ (ในวิดีโอที่ 42:07) ปล่อยปุ่มแล้วมันจะหยุดที่ LED ปัจจุบัน ซึ่งทำให้คุณได้ทั้งการเลื่อนแบบmanualและการทำงานแบบไม่ต้องใช้มือจากปุ่มเดียว

หากคุณต้องการให้ไฟทำงานอัตโนมัติโดยไม่ใช้ปุ่มเลย นั่นเป็นอีกบิลด์หนึ่ง เวอร์ชันอัตโนมัติครอบคลุมอยู่ใน Lesson 98-7: Walking Light Using Arduino and 5 LEDs

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

บทต่าง ๆ

  • [00:00] ภาพรวมของ 10 โปรเจกต์ LED ด้วย Arduino
  • [01:22] แนะนำคอร์ส Arduino แบบทีละขั้นตอน
  • [02:29] ทำความเข้าใจ LED: สัญลักษณ์ ขั้ว และขา
  • [03:49] การคำนวณตัวต้านทานจำกัดกระแสของ LED
  • [30:47] ไฟวิ่งด้วย LED 5 ดวง: การต่อวงจรและหลักการ
  • [32:52] โค้ดไฟวิ่ง: ขา จังหวะเวลา และลูป
  • [36:41] การเลื่อนไฟด้วยปุ่มกด
  • [37:44] ไฟวิ่งด้วยปุ่มกด: อธิบายโค้ดทีละส่วน
  • [40:22] การสาธิตและการปรับดีเลย์การกด
  • [57:16] กล่าวปิดท้ายและบทส่งท้ายของคอร์ส

ภาพ

wiring for Arduino walking light LEDs with push button
wiring for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs
Schematic for Arduino walking light LEDs
5 leds บนเบรดบอร์ดพร้อมปุ่มกดที่แสดงการเชื่อมต่อกับ Arduino UNO
5 leds บนเบรดบอร์ดพร้อมปุ่มกดที่แสดงการเชื่อมต่อกับ Arduino UNO
940-Lessson 98-LED-8: Arduino code walking LED light with push button
ภาษา: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

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

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

ไฟล์📁

ไลบรารี Arduino (zip)

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