โปรเจกต์ Arduino Arcade LEGO Games Box
สร้าง arcade game แบบ 4-button จาก LEGO
สร้าง arcade game แบบ 4-button จาก LEGO
▶ กดเพื่อดูวิดีโอสาธิตโปรเจกต์
หากคุณมีลูก คุณอาจจะกำลังเจอกับปัญหาเดียวกันกับเราเกี่ยวกับชุด Lego ที่คุณซื้อให้พวกเขา หลังจากประกอบและเล่นไปสักพัก ชุดเหล่านั้นมักจะกลายเป็นกองตัวต่อกองใหญ่ เมื่อเด็กๆ โตขึ้น คุณก็ไม่รู้ว่าจะทำอย่างไรกับกองตัวต่อเหล่านี้ดี
พวกเราจึงตัดสินใจนำตัวต่อ Lego ที่ไม่ใช้แล้วมา Recycle และสร้างเป็นเกม Arcade
คู่มือแบบ Step by step นี้เป็นผลจากการทำงานหลายเดือนเพื่อให้โปรเจกต์นี้สามารถทำซ้ำได้ง่ายและมีต้นทุนที่ต่ำมาก แทบทุกคนสามารถทำโปรเจกต์นี้ตามได้! Code ถูกเขียนขึ้นในลักษณะที่ไม่มี Dependencies และสามารถ Compile ลงบน Arduino Board รุ่นใดก็ได้ และแน่นอนว่าเกมเหล่านี้ผ่านการทดสอบอย่างหนักหน่วงโดยลูกๆ ของเราเรียบร้อยแล้ว :-)
เกมนี้แตกต่างจากเกมอื่นๆ ที่เคยมีการเผยแพร่มาก่อนหน้านี้อย่างไร?
อย่างแรกเลย มีเกมในตัวถึง 5 เกมด้วยกัน:
อย่างที่สอง มันมีการออกแบบที่ยอดเยี่ยม (ในมุมมองของเรา) และสามารถทำตามได้ง่าย
และอย่างที่สาม มันเป็นมิตรต่อโลกเพราะช่วยให้คุณได้ Recycle พลาสติก
ที่ส่วนท้ายของคู่มือนี้ยังมีวิดีโอสอนแบบทีละขั้นตอนในกรณีที่คุณชอบดูในรูปแบบวิดีโอมากกว่า


หากคุณชอบโปรเจกต์นี้แต่ไม่มีกองตัวต่อ Lego เหลือใช้ วิธีที่ง่ายที่สุดคือซื้อชุด Lego Classic 10704 ที่มี 900 ชิ้นอยู่ข้างใน
นี่คือรายการสิ่งของที่คุณต้องใช้ในโปรเจกต์นี้:



นี่คือส่วนที่ง่ายที่สุดของโปรเจกต์ซึ่งคุณสามารถมอบหมายให้ลูกๆ ทำได้
นำ Lego 32x32 point baseplate มาวางเป็นฐานแล้วก่อกำแพงโดยใช้ชิ้นส่วน Recycle คุณควรต่อขึ้นไปประมาณ 9 ชั้น เราเลือกสีเทาอ่อนสำหรับฐานเพื่อให้กำแพงที่มีสีสันหลากหลายดูโดดเด่นขึ้น
ไม่มีกล่องใบไหนที่จะเหมือนกัน จงใช้ความคิดสร้างสรรค์ในการสร้างแต่ละชั้น Recycle แม้กระทั่งชิ้นส่วนเล็กๆ เพราะมันจะดูเท่มาก รูปทรงที่ไม่สม่ำเสมอก็ดูดีเช่นกัน ลองเพิ่มหน้าต่าง, กระจกหน้ารถ, ประตู หรือกล่องต่างๆ เข้าไป
กล่องต้องมีประตู Lego ขนาดมาตรฐานอย่างน้อยหนึ่งบาน เพื่อใช้สำหรับติดตั้ง Rocker switch ไว้ที่ผนัง




ฝาครอบด้านบนทำจาก Plexiglass หนา 5 หรือ 6 มม. (แผ่นอะคริลิกใส) ให้ดาวน์โหลดแบบแปลน CAD ใส่ลงใน USB stick แล้วไปที่ร้าน CNC ที่ใกล้ที่สุด พวกเขาจะตัดมันให้คุณ ในแบบแปลน CAD ยังรวมแผ่นยึด Rocker switch ไว้ด้วย (ดูรูป)
คุณจะต้องเก็บงานแผ่นด้านบนเล็กน้อย ลบมุมขอบด้วยกระดาษทรายและบล็อกไม้ นอกจากนี้ให้เจาะรูเพื่อยึดลำโพงและจอ 1602 display ส่วนจอ 1602 display ยังต้องมีการปาดมุมรูปสามเหลี่ยมเล็กๆ ที่ด้านข้างของช่อง LCD บนแผ่นอะคริลิก (ดูรูปถ่าย) ผมทำสิ่งนี้ที่ความลึกครึ่งหนึ่งโดยใช้เครื่องมือหมุน (dremel) และหัวเราเตอร์ขนาดเล็ก



ติดตั้ง Arcade buttons ขนาดใหญ่ 4 ปุ่ม, ปุ่มเลือก/เปลี่ยนเกม 2 ปุ่ม, ลำโพง 2 ตัว และ Module 1602 LCD+I2C ทุกอย่างยึดด้วยสกรู M3 + แหวนรอง M3 และตัวเมียที่ด้านหลัง
ก่อนจะติดตั้ง Arcade buttons ให้ถอดตัวยึดหลอด LED ออกก่อน คุณจะต้องดัดแปลงพวกมันเล็กน้อย - ดูในขั้นตอนถัดไป



Arcade buttons เหล่านี้ถูกออกแบบมาให้ทำงานที่ 12V พวกมันสามารถทำงานร่วมกับแรงดัน 5V ซึ่งเป็นแรงดันเริ่มต้นของโปรเจกต์นี้ได้ แต่แสงจะหรี่เกินไป ดังนั้นผมจึงถอดขั้ว LED ออกจากปุ่ม ดึงตัวยึด LED ออก และถอด LED พร้อม Resistors เดิมออก ต้องบัดกรี Resistors ขนาด 460 ohm ออกแล้วเปลี่ยนเป็น 100 ohm เมื่อเสร็จแล้ว ผมก็ประกอบทุกอย่างกลับคืนและติดตั้ง LED พร้อมตัวยึดเข้าไปในปุ่มตามเดิม
คุณอาจสังเกตเห็นป้ายชื่อบนปุ่มควบคุม 2 ปุ่ม ในเวอร์ชันแรกที่เราสร้างขึ้นไม่มีสิ่งนี้ แต่ผมตัดสินใจเพิ่มเข้าไปเมื่อทำซ้ำในเวอร์ชันที่สอง
ปุ่มทั้งสองมีหลายหน้าที่ขึ้นอยู่กับสถานะของเกม ปุ่มสีขาวใช้เพื่อเริ่มเกมที่เลือกหรือยืนยันการเลือกในบางเกม ส่วนปุ่มสีดำใช้เปลี่ยนเกมที่เลือกหรือออกจากเกมระหว่างเล่น

ในการสร้างป้ายชื่อทรงกลม คุณต้องมีแผ่นอลูมิเนียมบางๆ (หนาไม่เกิน 1 มม.), ดอกสว่าน Hole-saw, ดอกสว่าน Stepped bit และชุดตอกตัวอักษร (ดูรูป) ขั้นแรกให้ตัดวงกลมด้วย Hole-saw จากนั้นขยายขนาดเส้นผ่านศูนย์กลางภายในด้วย Stepped bit แล้วใช้ตัวตอกสร้างชื่อป้าย และเพื่อให้ตัวอักษรชัดเจนขึ้น ให้ใช้ปากกาเคมีสีดำ (sharpie) ทาลงไป
คุณมีทางเลือกสองทางตรงนี้ คือใช้ Breadboard และต่อสาย Arduino ด้วยสายจัมเปอร์ผ่าน Breadboard หรือจะติดตั้ง Breakout ขนาดเล็กไว้ที่ด้านหลังของแผง LCD

สำหรับการสร้างครั้งแรก เราใช้ Breadboard (ดูรูป) สำหรับครั้งที่สอง เราตัดสินใจใช้เวลาสร้าง Breakout board การทำงานยังคงเหมือนเดิม แต่สายไฟจะน้อยลงและ Breakout จะถูกซ่อนไว้ใต้แผง LCD
หากคุณเลือกใช้ Breakout board ให้นำ Prototype board ขนาด 8x6 มาตัดตามรูป ส่วนที่ใหญ่กว่าจะใช้สำหรับ Breakout และส่วนที่เล็กกว่าจะใช้สำหรับสร้างภาคจ่ายไฟ

บัดกรี Arduino Nano ลงบน Proto board นี้

เตรียมสายไฟและเชื่อมต่ออุปกรณ์ต่างๆ ทั้งสวิตช์และส่วนเชื่อมต่อเข้ากับ Nano ตามแผนผัง

ตั้งแต่ผมเริ่มใช้สาย Ethernet แบบตีเกลียว (twisted pair) ผมก็ลืมความปวดหัวเรื่องการหาแหล่งสายไฟสำหรับโปรเจกต์ไปเลย พวกมันมีหลายสีและเป็นแบบหลายแกนจึงไม่ขาดง่าย สิ่งเดียวที่ต้องระวังเวลาใช้งานคือต้องบัดกรีให้เร็วมากๆ เพื่อไม่ให้ฉนวนละลาย

สังเกตวิธีการต่อ Resistors ขนาด 100 ohm สำหรับการเชื่อมต่อกับลำโพง
หมายเหตุเล็กน้อยสำหรับการเชื่อมต่อ:


Arcade Buttons ทั้งหมดถูกเชื่อมต่อกับ Pin A1 เพียงพินเดียวผ่านชุดของ Resistors โดยที่ A1 ถูกตั้งค่าเป็น Internal Analog Pull-up นี่เป็นหนึ่งในฟีเจอร์ที่ไม่ค่อยมีใครรู้ของ Arduino ซึ่งช่วยให้เราประหยัดจำนวนสายไฟที่ต้องต่อไปยังปุ่มต่างๆ ได้มาก
การตั้งค่าเป็นดังนี้: จาก A1 ไปยังปุ่มแรกผ่าน 1k resistor จากปุ่มที่ 1 ไปปุ่มที่ 2 ผ่าน 10k จากปุ่มที่ 2 ไปปุ่มที่ 3 ผ่าน 10k และจากปุ่มที่ 3 ไปปุ่มที่ 4 ผ่าน 10k แต่ละปุ่มเมื่ออยู่ในสถานะ "Close" จะลัดวงจรลง Ground เนื่องจากมี Ground ที่แต่ละปุ่มสำหรับ LED อยู่แล้ว Pin ที่สองของแต่ละสวิตช์จึงเชื่อมต่อกับ Ground ของ LED ได้เลย ลองดูแผนผังเพื่อทำความเข้าใจการเดินสาย

ณ จุดนี้ การเสียบสาย Mini-USB เข้ากับ Arduino Nano จะทำให้คุณสามารถเล่นเกมได้หลังจาก Upload sketch แล้ว สิ่งที่คุณต้องการเพียงอย่างเดียวคือภาคจ่ายไฟเพื่อให้เกมสามารถพกพาได้

ผมใช้เซลล์ 18650 จำนวน 2 ก้อนที่ Recycle มาจาก Battery Laptop ที่เสียแล้ว ก้อนเหล่านี้มีความจุค่อนข้างต่ำ (ประมาณ 600mAh) ซึ่งผมไม่อยากนำไปใช้กับงานที่กินไฟสูง ตัวเครื่องนี้ไม่ได้ใช้พลังงานมากนัก ดังนั้นแค่นี้ก็น่าจะเพียงพอสำหรับการเล่นเกมได้หลายวัน
Battery ถูกติดตั้งใน Double 18650 battery holder และมีหัวต่อเพื่อให้ง่ายต่อการประกอบเข้ากับภาคจ่ายไฟ

เกมควรจะสามารถชาร์จใหม่และอัปเกรด Firmware ได้โดยไม่ต้องถอดประกอบ ดังนั้นผมจึงเจาะรูที่ตัวต่อชิ้นหนึ่งเพื่อซ่อนหัวต่อ Micro-USB ไว้

เพื่อต่อขยาย USB จากผนังตัวต่อไปยัง Arduino Nano ผมนำสาย Mini-USB มาตัดปลายฝั่ง USB-A ออก (หัว USB อันใหญ่) แล้วปอกสายไฟ ในกรณีของผม สีแดง/ดำ คือไฟเลี้ยง ส่วนสีขาว/เขียว คือการเชื่อมต่อ D+/-

D+/- จำเป็นต้องบัดกรีลงบน Micro-USB breakout ส่วน 5V และ ground (แดง/ดำ) จะต้องผ่านภาคจ่ายไฟ
ทำไมถึงเลือก Micro-USB breakout ทั้งที่ Nano ใช้ Mini-USB? เพราะ Micro-USB มีอยู่ทุกที่ในบ้านเรา มันถูกใช้ชาร์จโทรศัพท์และอุปกรณ์อื่นๆ ดังนั้นคุณจะสามารถชาร์จเกมและอัปเกรด Firmware ด้วยสายชาร์จโทรศัพท์ของคุณได้เลย :-)

ผมนำ Prototype board แผ่นเล็กมาบัดกรี Module ชาร์จและป้องกัน Battery TP4056 และ 5V booster ลงไปโดยตรง


Input ของ TP4056 รับไฟมาจาก Micro-USB socket สาย Battery เชื่อมต่อกับ Pins ของ TP4056 ที่ระบุว่า B+/- ส่วน Pins ที่ระบุว่า OUT+/- จะต่อเข้ากับ Rocker switch และจาก Rocker switch การเชื่อมต่อ +/- จะเข้าไปยัง Module 5V booster จากนั้นที่ Output ของ Booster จะต่อสายสีแดง/ดำจากสาย USB ที่ปอกไว้
ลองดูแผนผังเพื่อทำความเข้าใจการเดินสาย

ผมใช้ Epoxy เพื่อยึด Micro-USB breakout ไว้ในตัวต่อ Lego หลังจากมันแข็งตัวแล้ว หัวเสียบจะมีความแข็งแรงมากกว่าที่พบในโทรศัพท์มือถือ เพื่อให้เด็กๆ สามารถชาร์จไฟได้โดยที่มันไม่พัง
แนะนำให้ใช้ Epoxy แบบแห้งเร็วสำหรับขั้นตอนนี้ หากคุณไม่มี ให้เพิ่มตัวทำให้แข็ง (hardener) ลงในเรซิน (resin) อีกเล็กน้อยแล้วทิ้งไว้สักพัก

สวิตช์นี้มีขนาดใหญ่มาก มันถูกออกแบบมาสำหรับไฟบ้าน 250V แต่ผมก็ยังเลือกรุ่นนี้เพราะมันดูดีและใส่ได้พอดีกับประตูมาตรฐานของ Lego City ผมจึงใส่สวิตช์เข้าไปในแผ่นยึดแล้วยึดแผ่นนั้นเข้ากับกำแพงตัวต่อโดยใช้สกรู 2 ตัว (กำแพงถูกเจาะรูเตรียมไว้แล้ว)


นอกจากนี้ ชุดสายไฟก็สามารถติดตั้งขั้นสุดท้ายได้แล้ว รวมถึง Micro-USB breakout ที่ทา Epoxy ไว้ในตัวต่อ Lego สังเกตว่ามีการใช้ตัวต่อเพิ่มเติมเพื่อยึดอุปกรณ์เข้ากับฐาน

เสียบสาย Mini-USB เข้ากับ Arduino Nano ที่ยึดอยู่กับฝาบนแล้วปิดฝา
ผมเจาะรูนำไว้ 4 รูที่ผนังและใช้สกรู 4 ตัวยึดฝาบนเข้ากับกล่อง

เกมเวอร์ชันแรกถูกเขียนโดยผม ตามมาด้วยเวอร์ชันใหม่ 4 เวอร์ชันจาก Alex เพื่อนของผมซึ่งเพิ่มเกมเข้าไปอีก 4 เกมและปรับปรุง Code ให้สมบูรณ์แบบ เรายังใช้ ผลงานของ Reyboz สำหรับเสียงประกอบ ระดับของเสียงที่ผลิตได้จาก Code นี้ยอดเยี่ยมมากเมื่อเทียบกับมาตรฐานจาก Library Tone ของ Arduino
อย่างที่กล่าวไป Code นี้ถูกปรับปรุงมาหลายเดือนหลังจากผ่านการทดสอบโดยเด็กๆ และตอนนี้เราได้อัปโหลดเวอร์ชัน 4 ขึ้น GitHub แล้ว
Source Code เวอร์ชันล่าสุด: https://github.com/LenkaDesign/Arduino-Arcade-Lego-Games-Box
สิ่งที่คุณต้องทำคือติดตั้ง 1602 I2C LCD library (มีอยู่ใน Arduino IDE library manager) แล้วอัปโหลด Code ของเรา
ขั้นแรกให้คุณอัปโหลดไฟล์ button-calibration.ino และจดบันทึกค่าที่ Arcade Button แต่ละปุ่มผลิตออกมา Script นี้จะล้าง EEPROM ด้วยเพื่อให้คะแนนสูงสุดถูก Reset
หลังจากนั้นให้คุณเปลี่ยนค่าของปุ่มที่คุณ Calibrate ได้ในไฟล์ Game-Settings.h แล้วอัปโหลดไฟล์หลัก Lego-Games-Box.ino เพียงเท่านี้คุณก็เริ่มเล่นได้เลย (โดยมีข้อแม้ว่าคุณเชื่อมต่อทุกอย่างตามแผนผังที่ให้ไว้ด้านบนแล้ว)
หมายเหตุ: หากคุณทำเกมนี้ให้เด็กเล่น โปรดลบรายการสุดท้ายใน Game-settings.h ออกจาก String GameTitle[] = {"Memory Game", "Reaction Game", "Tournament Game", "Melody Game", "Nuclear War Game"}; เพราะรายการสุดท้ายนี้มีกฎที่ผู้เล่นแต่ละคนต้องเลือกศัตรู ซึ่งอาจจะดูรุนแรงเกินไปสำหรับเด็ก
ในกรณีที่คุณคิดว่าการดูวิดีโอง่ายกว่าการอ่านคำแนะนำ นี่คือเวอร์ชันวิดีโอของการสร้างโปรเจกต์นี้
ปัจจุบันมีเกมที่พัฒนาเสร็จแล้ว 5 เกม หากคุณมีไอเดียเพิ่มเติมเกี่ยวกับเกมที่สามารถสร้างได้ด้วยกล่องนี้ โปรดแจ้งให้เราทราบในช่องความคิดเห็น ผมจะสรุปกฎและวิธีการเล่นของแต่ละเกมสั้นๆ ดังนี้
เปิด Rocker switch ที่ด้านข้างเพื่อเปิดเครื่อง Lego Arcade Games Box ทุกเกมจะมีเสียงประกอบจากเกม Mario ที่น่าคิดถึง เมื่อเริ่มเครื่องคุณจะได้ยินเพลงเริ่มเกมของ Mario
เมื่อเริ่มแล้ว คุณจะเห็นเกมที่เลือกอยู่ในปัจจุบันบนหน้าจอ LCD หากต้องการเปลี่ยนเกม ให้กดปุ่มสีดำ
เมื่อตัดสินใจเลือกเกมที่จะเล่นได้แล้ว เพียงกดปุ่มสีขาวเพื่อเริ่มเกม
หากคุณต้องการออกจากเกมที่กำลังเล่นอยู่ - ให้กดปุ่มสีดำ
ตอนเริ่มเครื่อง คุณสามารถปิดเสียงได้ (night mode) โดยการกด ปุ่มสีแดง
Memory Game (แนว "Simon-Says" คล้ายกับเกม Touch Me)
กฎกติกานั้นเป็นที่รู้จักกันดีและเรียบง่าย เกมจะแสดงลำดับตัวโน้ต/แสงไฟ และคุณต้องกดตามให้ถูกต้อง ในแต่ละรอบจะมีการเพิ่มโทนเสียง/แสงไฟเข้าไปอีกหนึ่งอย่าง ยิ่งคุณอยู่รอดได้นานเท่าไหร่ แสดงว่าความจำของคุณดียิ่งขึ้นเท่านั้น มันยอดเยี่ยมมากสำหรับการฝึกความจำระยะสั้นของเด็กและผู้ใหญ่
Reaction game (คล้ายกับเกมตีตัวตุ่น Whack-a-Mole)
คุณต้องรวดเร็วพอที่จะกดแต่ละปุ่มที่สว่างขึ้น ยิ่งคุณเล่นนานเท่าไหร่ ปุ่มก็จะสว่างขึ้นเร็วเท่านั้น เกมนี้ยอดเยี่ยมสำหรับการฝึกปฏิกิริยาตอบโต้ของเด็กและผู้ใหญ่
Contest/Competition game (สำหรับผู้เล่น 2-4 คน)
คุณจะได้รับโอกาส 5 รอบ ทุกคนต้องกดปุ่มของตัวเองให้เร็วที่สุดหลังจากได้รับสัญญาณ (เพลง Coin จาก Mario) ใครที่กดปุ่มคนแรกจะเป็นผู้ชนะในรอบนั้น จำนวนการชนะจะถูกคำนวณเมื่อจบ 5 รอบและจะมีการประกาศผู้ชนะ
Melody Game (โหมดกดเล่นอิสระสำหรับเด็กวัยหัดเดินและเด็กเล็ก)
เกมนี้เหมาะมากสำหรับเด็กวัยหัดเดิน - มันจะเล่นเพลงสลับกันไปเมื่อคุณกดปุ่มค้างไว้ หลังจากทดสอบกับเด็กๆ เราพบว่าลูกคนเล็กของเราที่มีอายุ 1 ขวบอยากเล่นมากแต่ไม่เข้าใจกฎ วิธีการเล่นเกมนี้คือ - ไม่มีกฎ คุณสามารถกดปุ่มไหนก็ได้แล้วมันจะส่งเสียงออกมา
War game (สำหรับผู้ใหญ่ 2-4 คน)
Alex เพื่อนของผมที่เขียนโปรแกรมเวอร์ชันต่อๆ มา คิดไอเดียสำหรับเกมนี้ในช่วงวิกฤต Trump/Kim เกี่ยวกับว่าใครมีปุ่มนิวเคลียร์ที่ใหญ่กว่ากัน กฎต้องใช้แยกวิดีโอเพื่ออธิบาย (ดูได้ที่นี่ และ ที่นี่) แต่สรุปสั้นๆ คือ คุณเลือกจำนวนผู้เล่นในตอนเริ่มต้น และในแต่ละรอบแต่ละคนจะเลือกศัตรูของตน เมื่อทุกคนเลือกศัตรูแล้ว ขีปนาวุธจะเริ่มบิน คนที่ถูกเลือกเป็นศัตรูจะมีเวลาเพียงไม่กี่ชั่วขณะเพื่อกดปุ่มส่งขีปนาวุธไปสกัดกั้นและรักษาประเทศของตนไว้ รอบจะดำเนินต่อไปจนกว่าจะเหลือเพียงประเทศเดียว
พวกเราคือเพื่อน 3 คนที่ใช้เวลาสร้างเกมนี้เพื่อลูกๆ ของเรา พวกเราหวังว่าคุณจะชอบเกมนี้มากจนอยากจะสร้างเวอร์ชันของคุณเองโดยใช้คำแนะนำเหล่านี้ หากคุณมีคำถามหรือข้อเสนอแนะ โปรดโพสต์ไว้ในช่องความคิดเห็น
รูปภาพผลงานสุดท้ายความละเอียดสูง:
สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้