[ENG] ฉันได้จัดทำคำอธิบายโปรเจกต์ทั้งภาษาอังกฤษและภาษาฮังการี
[HUN] A projekt leírását elkészítettem angolul és magyarul is.
UGRÁS A MAGYAR NYELVŰ LEÍRÁSHOZ
━━━━━━━━━
ENGLISH VERSION
━━━━━━━━━
STORY
ฉันคิดมานานแล้วว่าคงจะดีถ้าได้สร้างลูกเต๋าดิจิทัลอเนกประสงค์ แต่โปรเจกต์นี้ก็ไม่เคยสำเร็จสักที วันเกิดที่กำลังจะมาถึงของเพื่อนร่วมงานที่ชื่นชอบบอร์ดเกมเป็นแรงจูงใจที่ดีที่จะเริ่มต้นทำให้มันเป็นจริง หลังจากเขียนแนวคิดลงบนกระดาษ ก็ชัดเจนว่านี่จะเป็นโปรเจกต์ที่มีหลายเวอร์ชัน: การปรับปรุง Hardware และ Software คาดว่าจะเกิดขึ้นในอนาคต และกล่องที่พิมพ์ด้วย 3D ก็น่าจะได้รับการปรับเปลี่ยนบางอย่างด้วยเช่นกัน ปัจจุบันโปรเจกต์นี้คือเวอร์ชัน 1.0
INTRODUCTION
คุณสมบัติ (v.1.0):
- การทอยลูกเต๋า 1 ลูก
- การทอยลูกเต๋า 2 ลูก
- การสร้างตัวเลขสุ่มตั้งแต่ 1 ถึง 100 และตั้งแต่ 1 ถึง 9999
- เล่นเอฟเฟกต์เสียง 'Winner' และ 'Loser' เมื่อทอยลูกเต๋า 1 ลูกแล้วได้เลข 1 หรือ 6
- เล่นเอฟเฟกต์เสียง 'Winner' และ 'Loser' เมื่อทอยลูกเต๋า 2 ลูกแล้วได้เลข 2 หรือ 12
- ตัวเลือกเพื่อเปิดและปิดสัญญาณเสียง
- หลังจากการทอยลูกเต๋าและการสร้างตัวเลข คุณสามารถตั้งค่าได้ว่าการควบคุมจะกลับไปยังรายการเมนูโดยอัตโนมัติ หรือคงอยู่ในรายการเมนูนั้น (การออกอัตโนมัติ)
- หากเปิดใช้งานการออกอัตโนมัติ คุณสามารถตั้งค่าเวลา (milliseconds) ที่การออกจากเมนูหรือการกลับไปยังเมนูควรเกิดขึ้นได้
โปรเจกต์นี้แบ่งออกเป็น 3 ส่วน:
- กล่องที่พิมพ์ด้วย 3D
- Hardware
- Software
3D PRINTED BOX
ปัจจุบันฉันไม่มีเครื่องพิมพ์ 3D และทักษะการออกแบบที่จะใช้มันได้ ดังนั้นฉันจึงขอให้เพื่อนร่วมงานอีกคน (keresztpapa ) ผู้ที่มีความเชี่ยวชาญในด้านนี้มาช่วยออกแบบและพิมพ์กล่องลูกเต๋าดิจิทัลของฉัน มันถูกออกแบบใน Shapr3D และพิมพ์ด้วยเครื่องพิมพ์ 3D Creality Ender 3 V2 Neo ส่วนบนของกล่องสามารถถอดเข้าออกได้ มีตัวรองรับที่พิมพ์ด้วย 3D จำนวน 2 ชิ้น และมีช่องบนฝาสำหรับ Hardware ที่จำเป็นทั้งหมด
หลังจากการพิมพ์ ระหว่างขั้นตอนการทดลองประกอบ พบว่าจอแสดงผลจะต้องใช้ตัวรองรับที่พิมพ์ด้วย 3D สองชิ้น ในที่นี้ฉันไม่ต้องการที่จะพิมพ์มัน ดังนั้นตัวรองรับทั้งสองชิ้นนี้จึงถูกติดตั้งเพิ่มเติมโดยการติดกาว
ที่ใส่แบตเตอรี่ 9V ถูกติดกาวเข้ากับด้านข้างของกล่อง โดยสายไฟสองเส้น (9V, GND) ก็ร้อยผ่านช่องที่สร้างขึ้น (พิมพ์ด้วย 3D) ภายในกล่องเช่นกัน



HARDWARE
โครงสร้าง Hardware ในเวอร์ชัน 1.0 นี้ประกอบด้วยอุปกรณ์ดังต่อไปนี้:
- Arduino Nano
- แบตเตอรี่ 9V และที่ยึดแบตเตอรี่
- สวิตช์สไลด์แบบ 2 ตำแหน่ง S6P แบบปิด (6 หน้าสัมผัส, DPDT, ON-ON)
- โมดูลจอแสดงผลดิจิทัล TM1637 4-digit 7-segment
- ปุ่มกด 12x12 จำนวน 2 ปุ่ม
- Buzzer แบบแม่เหล็กไฟฟ้า 1 ตัว ไม่มีวงจรขับ
- ตัวต้านทาน 10 kΩ 2 ตัว
แรงดันไฟฟ้าขาเข้า 7-12V (VIN) ของ Arduino Nano ช่วยให้สามารถใช้แบตเตอรี่ 9V ได้ ซึ่งเหมาะสมอย่างยิ่งสำหรับการทำงานที่เสถียรของ Microcontroller ลูกเต๋าดิจิทัลสามารถเปิดและปิดได้ตลอดเวลาโดยใช้สวิตช์สลับ 2 ตำแหน่ง ปุ่มกดช่วยให้คุณสามารถสลับไปมาระหว่างเมนูที่สร้างขึ้น และใช้ฟังก์ชันต่างๆ ได้
แผนผังการเชื่อมต่อสายไฟของ Hardware ที่ใช้:

การบัดกรี, การประกอบ:
ไม่มีการบัดกรีที่ฝั่ง Arduino Nano โดยใช้เฉพาะสายเคเบิลแบบ 'nut' เท่านั้น GND และ 5V ถูกต่อออกไปยังซ็อกเก็ตทดสอบ ซึ่งส่วนประกอบที่จำเป็นเชื่อมต่อด้วยสายเคเบิลประเภท 'apa' นอกจากนี้ ขา GND และ VCC ของแบตเตอรี่ 9V, ปุ่มกด, สวิตช์สไลด์, Buzzer และขาของจอแสดงผลก็ถูกบัดกรีเข้าด้วยกัน
ฉันทำผิดพลาดไปหนึ่งครั้งในระหว่างกระบวนการบัดกรี คือการหมุนสวิตช์สไลด์สองตำแหน่งผิดทาง ทำให้ฉันบัดกรีขาไปสองขาในฝั่งตรงข้ามแทนที่จะเป็นฝั่งขวา ผลที่ได้คือสถานะเปิดและปิดของปุ่มไม่ได้อยู่ในตำแหน่งปกติ (ด้านซ้าย - ปิด, ด้านขวา - เปิด) แต่กลับกัน
น่าเสียดายที่ฉันลืมถ่ายรูปเมื่อสิ้นสุดการประกอบ ก่อนที่จะปิดผนึก (ติดกาว) กล่อง


SOFTWARE
- DIRECTORY ที่ใช้, HEADER FILES
Library เดียวที่จำเป็นคือตัวควบคุมจอแสดงผล (TM1637 -> v1.2 -> TM1637Display.h) นอกจากนี้ ยังมีการใช้ Header file (pitches.h ) ซึ่งเก็บความถี่ที่จำเป็นในการเล่นท่วงทำนองทั้งสองไว้
- INPUT - OUTPUT
โปรแกรมสามารถควบคุมได้ด้วยปุ่มสองปุ่ม: menuButtonPin (11) และ buttonPin (12) ปุ่มที่ผูกกับ menuButtonPin ใช้สำหรับนำทางระหว่างรายการเมนู ในขณะที่ปุ่มที่ผูกกับ buttonPin ใช้สำหรับเข้าสู่รายการเมนูปัจจุบัน และเพื่อเริ่มการทอยลูกเต๋า การสร้างตัวเลข และเพื่อเปลี่ยนหรือยืนยันตัวเลือกต่างๆ
เมื่อสร้างออบเจกต์ TM1637Display จะต้องป้อน 2 ค่า: หมายเลขและ ID ของขา CLK และ DIO ซึ่งผูกกับขา 8 (CLK ) และ 9 (DIO ) ในโปรเจกต์นี้ Buzzer แบบแม่เหล็กไฟฟ้า (buzzerPin ) เชื่อมต่อกับขา 10
สิ่งสำคัญที่ควรทราบคือ สวิตช์สไลด์ 2 ตำแหน่งไม่ได้ถูกควบคุมทางด้าน Software แต่เป็นเพียงการเชื่อมต่อทางกลไก-ฟังก์ชันกับ Hardware ส่วนที่เหลือของโปรเจกต์ ดังนั้นจึงไม่สามารถพิจารณาว่าเป็นอุปกรณ์ Input ได้: มีหน้าที่เพียงแค่การให้และขัดจังหวะแหล่งจ่ายไฟ Input – โดยการปรับทางกลไก – ผ่านการเชื่อมต่อวงจร
- การทำงานของ SOFTWARE จอแสดงผล
ฉันได้นำการแสดงผลตัวเลขมาใช้ด้วยขั้นตอนในตัว (showNumberDec() ) ในขณะที่การแสดงผลค่าที่ไม่ใช่ตัวเลขทั้งหมด (ขีดสำหรับรายการเมนู, การออกอัตโนมัติเปิดหรือปิด, และการเล่นเมโลดี้) ถูกกำหนดไว้ล่วงหน้าในอาร์เรย์ในระดับ Segment
const byte OFF[] = {
0, 0, 0, 0
};
const byte MENU[] = {
SEG_G,
SEG_G,