ตอนพี่เรียนอยู่ มันไม่มีเครื่องคิดเลขให้ใช้แล้ว พี่เลยตัดสินใจทำเองเลย (แถมบอกให้อีกนิด ไฟเลี้ยง Arduino ใช้แบตเตอรี่ 9V ก็ได้นะ)
บทความนี้จะพาน้องไปดูว่าเครื่องคิดเลขมันประกอบด้วยอะไรบ้าง ตั้งแต่ระบบรับค่าจากปุ่ม (Keypad Matrix) ไปจนถึงตรรกะการคำนวณที่ทำงานอยู่หลังไมโครคอนโทรลเลอร์ตัวจิ๋ว
🛠 อุปกรณ์ที่ต้องใช้
การออกแบบเครื่องคิดเลขนี้เน้นความเรียบง่ายแต่ใช้งานได้จริง ใช้อุปกรณ์ที่หาได้ทั่วไปในแล็บวิศวะ ดังนี้
- ไมโครคอนโทรลเลอร์ (Arduino Uno/Nano): ทำหน้าที่เป็นสมอง ประมวลผลคำสั่ง รับค่าจากปุ่ม และส่งข้อมูลไปแสดงผล
- คีย์แพดเมทริกซ์ 4x4: อุปกรณ์รับค่าหลัก มีปุ่มตัวเลข 0-9 และตัวดำเนินการพื้นฐาน (+, -, *, /) พร้อมปุ่ม '=' และ 'C' สำหรับล้างค่า
- พูดแบบเด็กช่าง: การใช้คีย์แพดแบบเมทริกซ์ช่วยเซฟพิน I/O ของ Arduino ได้เยอะ เพราะใช้เทคนิคสแกนแถวและคอลัมน์ แทนที่จะต่อปุ่มละพิน
- จอ LCD (16x2) พร้อมโมดูล I2C: จอแสดงผล 2 บรรทัด บรรทัดละ 16 ตัวอักษร
- ทำไมต้อง I2C? การใช้ I2C ลดจำนวนสายจาก 6-10 เส้น เหลือแค่ 4 เส้น (VCC, GND, SDA, SCL) ทำให้การเดินสายข้างในดูเนี๊ยบขึ้นมาก
- แหล่งจ่ายไฟ (แบตเตอรี่ 9V): เพื่อให้พกพาสะดวก จ่ายไฟผ่าน DC Jack หรือพิน VIN ของ Arduino ได้เลย
💻 ตรรกะการทำงานของระบบ
เพื่อให้เครื่องคิดเลขทำงานถูกต้อง โปรแกรมข้างในถูกออกแบบด้วยตรรกะแบบ State Machine เพื่อแยกแยะว่าผู้ใช้กำลังพิมพ์ตัวเลขแรก เลือกตัวดำเนินการ หรือรอผลลัพธ์อยู่
1. การรับค่าผ่านการสแกนเมทริกซ์
โปรแกรมใช้ไลบรารี Keypad.h เพื่อตรวจสอบอย่างต่อเนื่องว่าจุดตัดระหว่างแถวและคอลัมน์ไหนมีกระแสไฟฟ้าไหลผ่าน เมื่อตรวจพบแล้ว สัญญาณไฟฟ้าจะถูกแปลงเป็นตัวอักษร (Char) ตามที่เรากำหนดไว้ใน Keymap
2. ตรรกะการประมวลผล (Flow การคำนวณ)
- ขั้นตอนรับค่า: เมื่อกดปุ่มตัวเลข โปรแกรมจะเก็บค่าไว้ในตัวแปรประเภท
StringหรือLongเพื่อต่อเป็นตัวเลขหลายหลัก (เช่น กด 1 แล้วตามด้วย 2 จะกลายเป็น 12) - ขั้นตอนตัวดำเนินการ: เมื่อกดปุ่มตัวดำเนินการ (+, -, *, /) โปรแกรมจะย้ายค่าของตัวเลขแรกไปเก็บในตัวแปรชั่วคราว (เช่น
num1) และเตรียมรับตัวเลขที่สอง (num2) - ขั้นตอนคำนวณ: เมื่อกดปุ่ม '=' ฟังก์ชัน
switch-caseในโค้ดจะตัดสินใจว่าต้องดำเนินการทางคณิตศาสตร์ใดกับnum1และnum2จากนั้นแสดงผลลัพธ์บนหน้าจอ LCD
3. การจัดการทศนิยมและจำนวนลบ
เครื่องคิดเลขที่ดีต้องครบเครื่อง ในโปรเจกต์นี้เราใช้ตัวแปรประเภท float หรือ double ในการคำนวณ เพื่อรองรับผลลัพธ์ที่มีจุดทศนิยมและการหารที่ไม่ลงตัว
🔌 แผนภาพการต่อสาย
- คีย์แพด (8 พิน): ต่อกับพิน Digital ของ Arduino (เช่น 2, 3, 4, 5, 6, 7, 8, 9)
- I2C LCD:
- VCC -> 5V
- GND -> GND
- SDA -> A4 (สำหรับ Uno)
- SCL -> A5 (สำหรับ Uno)
- แหล่งจ่ายไฟ: ขั้วบวกของแบตเตอรี่ 9V ต่อกับพิน VIN ขั้วลบต่อกับ GND
🚀 เริ่มต้นกันเลย
- ประกอบอุปกรณ์ตามแผนภาพการต่อสาย
- ติดตั้งไลบรารีที่จำเป็นใน Arduino IDE:
Keypadโดย Mark StanleyLiquidCrystal_I2Cโดย Frank de Brabander
- อัพโหลดซอร์สโค้ดลงบอร์ด
- ต่อแบตเตอรี่ 9V แล้วเริ่มใช้เครื่องคิดเลขของน้องได้เลย! อย่าลืมสู้งานนะน้อง
📝 สรุปจากคนทำ
การสร้างเครื่องคิดเลขนี้ไม่ใช่แค่แก้ปัญหาไม่มีอุปกรณ์ใช้ในห้องเรียน แต่มันยังเป็นการฝึกฝนที่เจ๋งมากในการเรียนรู้เรื่อง Human-Machine Interface (HMI) และการจัดการหน่วยความจำในระบบ Embedded
ถ้าน้องเพิ่งเริ่มเรียน Arduino โปรเจกต์นี้จะช่วยให้น้องเข้าใจความสัมพันธ์ระหว่างซอฟต์แวร์และฮาร์ดแวร์ได้ชัดเจนที่สุด
หมายเหตุ: สำหรับซอร์สโค้ดหรือรูปภาพประกอบการติดตั้ง สามารถดูได้ในโฟลเดอร์ของ Repository นี้