กลับไปหน้ารวมไฟล์
easy-arduino-digital-dice-53301d.md

ออกแบบและสร้าง "ลูกเต๋าดิจิทัล" ด้วย 7-Segment และเซ็นเซอร์วัดแสง (LDR)

เกี่ยวกับโปรเจกต์นี้:

นี่คือโปรเจกต์ลูกเต๋าดิจิทัลง่ายๆ ที่ใช้จอแสดงผล 7-Segment หลักเดียว ง่ายโคตรๆ เพราะสิ่งที่ต้องทำก็แค่เอานิ้วไปแตะหรือบังตัวต้านทานไวแสง (LDR) ด้านบน มันแสดงให้เห็นหลักการของ Embedded Systems โดยเปลี่ยนจากการกดปุ่มแบบเดิมๆ มาใช้ "เงา" หรือการเอานิ้วไปบัง LDR เพื่อสั่งให้ลูกเต๋าสุ่มตัวเลขแทน

อยากเห็นมันทำงานยังไงเหรอ? ไปดูคลิปตัวอย่างกันเลย!

ลงลึกกับจอแสดงผล 7-Segment 1 หลัก

เจาะลึก 7 segment display 1 หลัก:

การต่อสายของจอแสดงผล

จอแสดงผล 7-Segment ประกอบด้วย LED 7-8 ดวง (รวมจุดทศนิยมหรือ DP) เรียงเป็นรูปเลข 8 การจะแสดงเลขอะไรก็ตาม เราต้องควบคุมสถานะเปิด/ปิดของแต่ละเซ็กเมนต์ LED ตามแพตเทิร์นที่กำหนด แต่ละเซ็กเมนต์จะมีตัวอักษรกำกับและต่อเพื่อให้ LED ดวงนั้นๆ ติด ต่อไปพี่จะอ้างอิงจากรูปนี้เวลาอธิบายการต่อสาย (เช่น ขา C ต่อกับ Pin 5) การเข้าใจโครงสร้างนี้สำคัญมาก เพราะถ้าต่อผิดแม้แต่ขาเดียว ตัวเลขที่แสดงก็จะเพี้ยนทันที

รายละเอียดการต่อวงจรฮาร์ดแวร์

ในโปรเจกต์นี้ เรามีส่วนหลักๆ ที่เชื่อมโยงกันสองส่วนคือ ส่วนรับอินพุต (เซ็นเซอร์) และส่วนแสดงผลเอาต์พุต

1. ส่วนเซ็นเซอร์ LDR (ตัวต้านทานไวแสง)

LDR เป็นเซ็นเซอร์ที่มีค่าความต้านทานเปลี่ยนไปตามความเข้มของแสงที่ตกกระทบ เพื่อให้ Arduino อ่านค่ามันได้ เราต้องตั้งวงจร แบ่งแรงดัน (Voltage Divider) ดังนี้:

  • Photoresistor/LDR ขาแรกต่อกับไฟ 5V
  • Photoresistor/LDR ขาที่สองต่อกับตัวต้านทาน 10 KΩ ลงกราวด์ (GND) และขานี้ก็ต่อกับขา A0 บน Arduino Uno ด้วย

เมื่อเราเอามือไปบัง LDR ค่าความต้านทานของมันจะเพิ่มขึ้น ทำให้แรงดันตกคร่อมตัวต้านทาน 10 KΩ ลดลง Arduino จะตรวจจับการเปลี่ยนแปลงของค่า Analog นี้และใช้มันเป็นสัญญาณทริกเกอร์เพื่อสุ่มตัวเลข

2. ส่วนจอแสดงผล 7-Segment

การจะขับ LED ในจอแสดงผล เราต้องใช้ตัวต้านทานจำกัดกระแส (Current Limiting Resistors) เพื่อป้องกัน LED เสียหาย:

  • The1digit7segmentdisplay ต่อกับตัวต้านทาน 220Ω หลายๆ ตัวไปยังขาต่างๆ ของ Arduino
นี่คือการต่อสายทั้งหมด
  • นี่คือการต่อสายแบบเฉพาะเจาะจง ดูรูปด้านบนเพื่อดูว่าขาที่มีตัวอักษรบนจอแสดงผลหมายถึงเซ็กเมนต์ไหน

การวิเคราะห์ลอจิกซอฟต์แวร์

หัวใจของโปรเจกต์นี้อยู่ที่การแปลงค่า Analog จาก LDR ให้เป็นเหตุการณ์สุ่มตัวเลข

  1. การปรับเทียบ (Calibration): สภาพแสงในแต่ละห้องไม่เหมือนกัน คุณควรปรับค่า Threshold ในโค้ดให้เหมาะ เพื่อให้โปรเจกต์ทำงานได้แม่นยำที่สุด หมายเหตุ: คุณสามารถปรับค่าการตั้งค่าแสงในโค้ดให้ตรงกับสภาพแสงในห้องคุณได้
  2. การสุ่ม (Randomization): เมื่อค่าที่อ่านได้จาก analogRead(A0) ต่ำกว่าค่า Threshold ที่ตั้งไว้ (เพราะมีเงามาบัง) โปรแกรมจะเรียกใช้ฟังก์ชัน random(1, 7) เพื่อสุ่มตัวเลขตั้งแต่ 1 ถึง 6
  3. ลอจิกการแสดงผล: หลังจากได้ตัวเลขสุ่มมาแล้ว โค้ดจะใช้คำสั่ง digitalWrite() ส่งสัญญาณไปยังพอร์ตต่างๆ ตามแพตเทิร์นที่กำหนดไว้ในฟังก์ชันย่อย (เช่น ถ้าสุ่มได้เลข 1 เซ็กเมนต์ B และ C ต้องถูกตั้งค่าเป็น HIGH)

ทิปส์โปรแบบช่างๆ:

  • ประหยัดชิ้นส่วน: ถ้าไม่อยากใช้ตัวต้านทาน 220 Ω ถึง 8 ตัว คุณสามารถเปลี่ยนการสั่ง digitalWrite(_, HIGH); ทั้งหมดในโค้ด เป็นการใช้ค่าเริ่มต้นแบบนี้: digitalWrite(_, DEFAULT); ซึ่งจะอยู่ในคำสั่ง if พวกนี้จะตั้งค่าให้ LED ในแต่ละเซ็กเมนต์อยู่ในระดับกลางๆ จอจะได้ไม่ไหม้ :) หรืออีกวิธีคือ ลดความสว่างของจอเพื่อปกป้อง LED โดยเปลี่ยนจากการใช้สถานะ HIGH ปกติ มาใช้เทคนิค PWM แทน

  • Debouncing (ดีบาวน์ซิ่ง): ในระดับวิศวะ การเพิ่มดีเลย์เล็กน้อยหลังจากตรวจจับแสง ช่วยป้องกันการสุ่มซ้ำซ้อนที่เกิดจากสัญญาณรบกวนของแสง (noise) ได้นะตัวนี้

โปรเจคนี้เป็นจุดเริ่มต้นที่เจ๋งมากสำหรับการเรียนรู้การจัดการอินพุท/เอาท์พุท (Input/Output) และการประยุกต์ใช้เซนเซอร์อย่างสร้างสรรค์ในชีวิตประจำวัน! สู้งานนะน้อง!

ข้อมูล Frontmatter ดั้งเดิม

apps:
  - "1x Arduino IDE"
author: "arduinobot12"
category: ""
components:
  - "1x 7 Segment LED Display, Red"
  - "1x Photo resistor"
  - "8x Resistor 220 ohm"
  - "1x Breadboard (generic)"
  - "1x Jumper wires (generic)"
  - "1x Resistor 10k ohm"
  - "1x Arduino UNO"
description: "โปรเจคนี้จะพาน้องมาสร้างลูกเต๋าดิจิทัลแบบตึงๆ ด้วย 7 Segment Display ตัวเดียว กับเซนเซอร์วัดแสง (Photoresistor) แค่เอามือบังก็สุ่มเลขได้เลย ง่ายเวอร์ วัยรุ่นต้องลอง!"
difficulty: "Easy"
documentationLinks: []
downloadableFiles: []
encryptedPayload: "U2FsdGVkX18lkb24oKY1sCxe4wiw8w8QI9a6dS/Wm4ed14b63X/Yazz1qOApDKyLEyZPZQ1KAHhECyvRQEJQvTBlaBwsRlL6LhKVlPbwVFw="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/easy-arduino-digital-dice-53301d_cover.jpg"
lang: "en"
likes: 3
passwordHash: "d63f86b20245df7540db5f1cba26a84191916d674c713955e1ce85e36f5da0ae"
price: 870
seoDescription: "Build a simple Arduino Digital Dice using a Seven Segment Display and Photoresistor. A perfect DIY guide for Arduino beginners."
tags:
  - "ldr"
  - "display"
  - "dice"
  - "entertainment system"
  - "photoresistor"
title: "วงจรลูกเต๋าดิจิทัล Arduino งานง่ายแต่หล่อ"
tools: []
videoLinks: []
views: 3065