กลับไปหน้ารวมไฟล์
pachinko-arrange-ball-restoration-047d35.md

ชื่อโปรเจกต์: Pachinko Arrange Ball Restoration - การปลุกชีพตู้ปาจิงโกะรุ่นเก๋าด้วย Arduino

พี่นี่มันสาวกตู้เกมอาเขตตัวจริงเลยว่ะน้อง พอดีได้ตู้ Pachinko Arrange Ball สุดแรร์ตัวนี้มา ก็นึกว่าหมูๆ จะซ่อมหาอะไหล่เปลี่ยนได้ง่ายๆ ที่ไหนได้... หน้ามืดเลยครับ! โชคดีที่กลไกเครื่องมันไม่ได้ซับซ้อนมาก พี่เลยกะจะลองวิชาเอาไอ้เจ้า [Arduino](https://s.shopee.co.th/7fUgFAWSki) นี่แหละมาคืนชีพให้มันหน่อย ถึงจะยังทำไม่เสร็จสมบูรณ์ แต่นี่คือ Sketch แรกและโปรเจกต์ Arduino แรกในชีวิตพี่เลยนะเนี่ย อาจจะดูบ้าพลังไปนิด แต่พอลองผิดลองถูกบวกกับได้พวกพี่ๆ ในคอมมูนิตี้ Arduino และ Pachitalk ช่วยไว้ แป๊บเดียว (จริงๆ ก็ล่อไป 12 ชั่วโมงน่ะนะ) พี่ก็คลำทางมาได้ไกลโขเลยว่ะ พี่พอมีพื้นฐาน PLC มาบ้าง แต่เรื่องเขียนโปรแกรมคอมพิวเตอร์นี่บอกเลยว่าแทบไม่มี ตอนนี้ยังมีอุปสรรคเรื่องโครงสร้างนิดหน่อย แต่ที่เหลือก็แค่ไล่เช็ก Troubleshooting ไปเรื่อยๆ ละ จัดไปวัยรุ่น!

กำลังเบิร์นโปรแกรมลงบอร์ด แอบเทสนิดหน่อย

ตรงนี้พี่กำลังเช็ก Board [Relay](https://s.shopee.co.th/3fyXTmWPbL) 8 ช่องแบบ SPDT ที่ซื้อมาอยู่ ตอนแรกนึกว่าจะลองแบบไม่ต่อโหลด (load) โดยดึงไฟตรงจาก Arduino เลยได้ แต่ปรากฏว่าแค่ไฟ LED บน Board Relay มันติดเฉยๆ แต่มันสั่ง Coil ของ Relay ไม่ไหวว่ะน้อง สรุปคือ Arduino จ่ายกระแสไม่พอ พอพี่ลองเอาแหล่งจ่ายไฟแยก (Power supply) มาต่อให้ Board Relay คราวนี้ฉลุยเลย แถมมีตัว OPTO couplers ในตัวช่วยเซฟ Arduino ของเราไม่ให้ช็อตด้วย พี่จริงๆ ใช้แค่ 3 Relays เพื่อคุม Solenoids 110vac 3 ตัวเอง แต่เห็นราคามันต่างกันแค่เหรียญเดียวเลยจัด 8 ช่องมาเลย ที่เหลือเพียบ งานนี้มีอะไหล่สำรองยาวๆ!

โมไฟ LED ใหม่แทนที่บอร์ดคะแนนเก่าที่เน่าไปแล้ว

บอร์ดไฟเดิมมันใช้หลอดไส้อันจิ๋วๆ ซึ่งมันเก่ามากแล้วน้อง ความสว่างก็ไม่เท่ากัน แถมจุดต่อสายไฟก็เปื่อยจนใช้งานแทบไม่ได้ พี่เลยเจอปัญหาไฟติดๆ ดับๆ ตลอด พี่เลยแก้ปัญหาแบบสองเด้งไปเลย: หนึ่งคืออัปเกรดเป็น LED ซะเลย เพราะ Arduino จ่ายไฟตรงได้สบาย และสองคือรื้อระบบการสั่งเปิดปิดไฟใหม่หมด

ของเดิมมันต่อหลอดไฟอนุกรมไว้กับสวิตช์ (Switches) ซึ่งมันก็พอกล้อมแกล้มแหละถ้าเครื่องมันใหม่ๆ แต่ตอนนี้สวิตช์มันเก่าจนสภาพไม่เต็มร้อยแล้วว่ะน้อง อีกอย่างพี่อยากให้มันมีระบบ Lamp Test เหมือนตู้พินบอลด้วย พี่เลยต้องเดินสาย LED แยกจากตัวสวิตช์ ซึ่งโชคดีมากที่ชุดสวิตช์มันเสียบเข้ากับบอร์ดไฟเดิมได้พอดี แถมยังมีระยะ Pin Pitch เท่ากับ Arduino Headers เปี๊ยบ! พี่มี LED ตัวนึงแว้นออกนอกบอร์ดเพราะบอร์ดที่รื้อมามันกว้างสุดแค่นั้น พี่เลยใช้ตัวด้ามปากกาลูกลื่นมาตัดเป็นท่อนๆ เพื่อช่วยรวมแสงให้มันพุ่งๆ หน่อย ส่วน LED ก็ต่อกับ Resistor 220ohm เข้า Arduino ตรงๆ เลย พี่ใส่ Code เทสต์ Output ไว้ในส่วน "setup" ให้มันรันครั้งเดียวตอนเปิดเครื่อง เพื่อเช็กความหล่อของหลอดไฟแต่ละดวง รวมถึงไฟ "Low Coin" กับ "Game Over" ด้วย ตอนแรกนึกว่า LED ดวงเดียวจะเอาอยู่ แต่สุดท้ายต้องจัดไป 3 ดวงต่อจุดถึงจะสว่างสะใจว่ะน้อง แถมพี่ใส่ LED ตรง "Ball Chute" เพิ่มไปอีก 2 ดวง เพราะเวลาลูกเหล็กใกล้หมดมันมองยาก จัดไปอย่าให้เสีย!

ในโหมด Output Test พี่สั่งให้ Relay 3 ตัวทำงานสลับกันด้วย ทั้งตัวหยอดเหรียญ, ตัวปล่อยลูกเหล็ก และตัวจ่ายรางวัล พี่คอมเมนต์ (Comment) ส่วนปล่อยลูกเหล็กทิ้งไว้ก่อน เพราะไม่อยากให้มันคายลูกออกมาหมดทุกครั้งที่เปิดเครื่อง แต่ส่วนจ่ายรางวัลพี่ปล่อยไว้ในเทสต์นะ ให้มันพ่นออกมาสักเหรียญตอนเปิดเครื่อง จะได้มีทุนไว้เล่นไงล่ะน้อง ส่วนระบบคัดเหรียญพี่มันต้องดูแลนิดหน่อย พี่เลยเขียนโปรแกรมดักไว้ว่าถ้าเหรียญในคลังจะหมด มันจะสั่งหยุดเกมด้วย Solenoid และกะพริบไฟเตือนทันที ห้ามช็อตนะตัวนี้!

ลองเอาไปใส่เครื่องดู (เดี๋ยวต้องเก็บสายไฟให้กริบกว่านี้หน่อย)

กลับมาที่เรื่องสวิตช์อีกที สวิตช์ทุกตัวยังใช้งานได้นะน้อง แต่ด้วยน้ำหนักของลูกเหล็กกับสภาพหน้าสัมผัส (Contacts) มันทำให้เชื่อใจไม่ได้ 100% ตอนแรกพี่จะใช้ digitalRead(sw1) แล้วสั่ง digitalWrite(led1) ตรงๆ แต่มันทำให้ไฟสั่นเป็นเจ้าเข้าเลยว่ะ พี่เลยแก้เกมด้วยการประกาศ Variable ชื่อ ss1 (Switch State 1) ให้สวิตช์แต่ละตัว ถ้าสวิตช์ปิดปุ๊บ ให้ค่า Variable เป็น 1 ทันที และถ้า Variable == 1 ไฟดวงนั้นถึงจะติด (มีสวิตช์กับ LED ทั้งหมด 19 ชุดบนกระดาน) พอเริ่มเกมใหม่ พี่ก็แค่ Reset ค่า Variable ให้เป็น 0 ไฟก็ดับหมด วิธีนี้ช่วยเรื่องการนับคะแนนตอนจบเกมด้วย เพราะเราใช้ Variable ชุดเดียวกันเช็กได้เลย ไม่ต้องไปอ่านค่าจากสวิตช์ที่มันแกว่งๆ อีก

ตอนนี้ยังมีอาการเอ๋อๆ (Ghosts) อยู่บ้างนิดหน่อย พี่ว่าน่าจะเป็นเรื่องลำดับเหตุการณ์ (Order of events) หรืออาจจะต้องใส่ Delay เพิ่ม เดี๋ยวพี่ค่อยไปไล่แก้ Code อีกที ตอนนี้ถือว่า Proof of Concept ผ่านฉลุย ใช้งานได้จริงว่ะ!

พี่รู้ว่า Code มันอาจจะยาวเหยียดและดูซ้ำซ้อนไปบ้าง ใครมีไอเดียเจ๋งๆ หรืออยากติชมอะไรจัดมาได้เลยน้อง ตอนแรกพี่กะจะเขียนแบบ Array ให้มันเท่ๆ ไม่เกิน 200 บรรทัด แต่มันดันรันไม่ไปว่ะ พี่อยากเห็นมันทำงานไวๆ เลยเขียนแบบบ้านๆ (Long hand) ไปก่อน...

อัปเดต [01/03/2018]: พี่แก้ Bug ใน Sketch ไปได้เกือบหมดแล้วนะ ตอนนี้เล่นได้ นับคะแนนได้ จ่ายเหรียญได้เหมือนเครื่องออริจินัลเลยว่ะ พี่กะจะใช้โปรเจกต์นี้เป็นที่ลองวิชาเขียนโปรแกรมต่อไป แต่ถ้าคิดว่าเมื่ออาทิตย์ที่แล้วพี่ยังไม่เคยเขียนโปรแกรม Arduino เลย พี่ก็ภูมิใจในตัวเองชะมัด! ต้องขอบคุณตัวอย่างใน Software กับคู่มือดีๆ และแรงสนับสนุนจากคอมมูนิตี้ด้วยนะน้อง สู้งานนะ!

รายละเอียดทางเทคนิคฉบับเจาะลึก

การรื้อฟื้นระบบ Logic ตู้เกมเรโทร

โปรเจกต์นี้ใช้ Arduino รุ่นใหม่มาทำหน้าที่แทน Mechanical Relays เก่าๆ ที่เสื่อมสภาพในตู้ปาจิงโกะ "Arrange Ball" จากญี่ปุ่น

  • Solenoid & Switch Matrix: Arduino จะคอยเฝ้าดูคะแนนจากสวิตช์กลไกที่ถูกลูกเหล็กวิ่งชน จากนั้นมันจะไปสั่งงาน Solenoids ดั้งเดิมของเครื่องผ่าน Relay หรือ MOSFET expansion board
  • Historical Logic: ตัว Firmware ได้จำลองตรรกะการชนะ (Winning-logic) และลำดับ "Bonus" สุดซับซ้อนของเครื่องรุ่นเก๋าเอาไว้เป๊ะๆ เพื่อรักษาอรรถรสการเล่นแบบคลาสสิก แต่ได้ความเสถียรแบบยุคดิจิทัล

ระบบคะแนนแบบดิจิทัล

  • LED/LCD integration: มีการเพิ่มจอแสดงผลที่ซ่อนไว้อย่างเนียนๆ เพื่อโชว์ High-scores และสถิติการเล่น โดยไม่ไปทำลายลุคความคลาสสิกภายนอกของตัวเครื่อง หล่อเท่เลยงานนี้!

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

title: "Pachinko Arrange Ball Restoration"
description: "Trying to revive an older, unique Pachinko whose control board was victim to fire sprinkler (water) damage..."
author: "spiwrx"
category: "Gadgets, Games & Toys"
tags:
  - "pachinko"
  - "arrange ball"
  - "due"
views: 5449
likes: 0
price: 1499
difficulty: "Intermediate"
components:
  - "1x Arduino Due"
  - "1x Soldering iron (generic)"
  - "27x LED (generic)"
  - "1x Pachinko Arrange Ball Machine"
  - "1x Relay Shield for Particle Photon I²C 8-Channel SPDT 10-Amp"
  - "27x Resistor 221 ohm"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles: []
documentationLinks: []
passwordHash: "e297fd55313d2d41beeab8d195e0362c97cf3ff8b331a09351a8888cce60ae33"
encryptedPayload: "U2FsdGVkX18LK5U0H0y4LQR5Eael38tQSkkbZatifZgA9XbpwwWfZi/ig8+BpGVdsaurt2dWXr+N09jilmv2hg+NW6GlVI380ZwmNyPEGFQ="
seoDescription: "Restoring a unique vintage Pachinko Arrange Ball machine after water damage to its control board."
videoLinks:
  - "https://www.youtube.com/embed/R0z71qAkSXA"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/pachinko-arrange-ball-restoration-047d35_cover.jpg"
lang: "th"