หากคุณชอบฉันคุณชอบเกมพินบอล แต่ไม่มีเงินซื้อหรือพื้นที่เพื่อให้เหมาะกับเกมขนาดเต็ม ดังนั้นทำไมไม่สร้างของคุณเอง?
ที่นี่เราจะอธิบายวิธีสร้างเกมพินบอลของคุณเองโดยใช้ Arduino เกมดังกล่าวมีไฟเสียงองค์ประกอบพินบอลจริงรวมถึงกันชนเป้าหมายหล่นและหนังสติ๊กและยังมีทางลาดด้วย
โครงการนี้ต้องการวัสดุจำนวนมากและมีความหลากหลายดังนั้นให้ปรึกษาแต่ละส่วนที่ตามมาสำหรับวัสดุใหม่ที่จำเป็นในการทำแต่ละขั้นตอนให้สมบูรณ์ เป็นการเริ่มต้นมันจะมีประโยชน์มากถ้าคุณเข้าถึงเครื่องตัดเลเซอร์หรือเราเตอร์ CNC รวมทั้งชุดเครื่องมืออิเล็กทรอนิกส์และฮาร์ดแวร์ขั้นพื้นฐาน
หมายเหตุผู้แต่ง: คำสั่งนี้ได้รับการเผยแพร่เมื่อเร็ว ๆ นี้และไฟล์การออกแบบและซอฟต์แวร์ทั้งหมดไม่ได้รับการจัดระเบียบอย่างสมบูรณ์ หากวางแผนที่จะใช้ไฟล์ของเราโปรดแสดงความคิดเห็นเพื่อให้เราสามารถมั่นใจได้ว่าทุกอย่างอยู่ในสถานะที่ทันสมัยที่สุด
วัสดุ:
ขั้นตอนที่ 1: ออกแบบ
ภาพด้านบนเป็นการออกแบบ Solidworks ของสนามเด็กเล่นและชุดประกอบที่รองรับ สนามเด็กเล่นนั้นล้วน แต่กำหนดเอง แต่เส้นยิง (เช่นเส้นโค้งของการวนกลับด้านหลัง) ได้รับการออกแบบบนพื้นฐานของเครื่องพินบอลจริงเพื่อให้แน่ใจว่าการเล่นราบรื่น สิ่งหนึ่งที่ยากก็คือเนื่องจากความซับซ้อนของพวกเขาชิ้นส่วนพินบอลที่แท้จริง (เช่นกันชนและเป้าหล่น) ไม่ได้ถูกสร้างแบบจำลอง แต่การดูแลยังคงต้องดำเนินการเพื่อให้แน่ใจว่าทุกอย่างจะพอดีกับใต้สนามแข่งขัน - ชิ้นส่วนมีขนาดใหญ่กว่ามาก ใต้กว่า
ไฟล์รวมอยู่ในที่เก็บดังนั้นอย่าลังเลที่จะปรับการออกแบบให้เหมาะกับความต้องการของคุณ
จุดเด่นของการออกแบบ:
สนามเด็กเล่นมีขนาด 42 นิ้ว x 20.25 นิ้วซึ่งมีขนาดเท่ากับเกมสไตล์บอลลีในปี 1980 มันทำจากไม้อัด½” ซึ่งเป็นมาตรฐานและไม่ควรเปลี่ยนเนื่องจากชุดประกอบพินบอลถูกออกแบบมาเพื่อความหนานี้ กำแพงที่นี่ประกอบด้วยชั้น½” ที่อยู่ด้านบนของชั้น¼” ในต้นแบบแรกมีเพียงกำแพง½นิ้วเท่านั้น แต่สิ่งเหล่านี้พิสูจน์แล้วว่าสั้นเกินไปและสามารถตีลูกพินบอลขึ้นไปในอากาศได้ ประการที่สองการออกแบบนี้อนุญาตให้มีแนวยิงที่ยกขึ้นเล็กน้อย (ในภาพด้านบน) ซึ่งอนุญาตให้ลูกบอลตกลงไปในสนามแข่งขันได้เล็กน้อย แต่ไม่ถอยกลับ
ทางลาดถูกออกแบบด้วยอะคริลิกใสและตัวรองรับ 3d- พิมพ์ มันข้ามสนามแข่งขันเพื่อให้ผู้เล่นมีโอกาสตีทางลาดหลายครั้งติดต่อกันจากตีนกบซ้าย ดังนั้นอะคริลิกใสจึงถูกใช้เพื่อไม่กีดขวางมุมมองของผู้เล่น:
ในที่สุดสนามเด็กเล่นได้รับการสนับสนุนโดยกำแพงสั้นที่มุมทั้งสี่ซึ่งทำให้สนามเด็กเล่นมีความชัน 6.5 องศามาตรฐาน ผนังด้านหลังมี "ชั้นวาง" ด้านล่างที่สามารถถอดออกได้และใช้สำหรับยึดอุปกรณ์อิเล็กทรอนิกส์ ผลลัพธ์นี้เป็นเกมที่มีสนามแข่งขันขนาดใหญ่ แต่มีขนาดกะทัดรัดกว่าเกมทั่วไปและสามารถเล่นด้วยมือคนเดียว เนื่องจากสนามเด็กเล่นมีขนาดมาตรฐานอย่างไรก็ตามการสนับสนุนเหล่านี้จึงสามารถลบออกได้ถ้าคุณต้องการวางสนามเด็กเล่นไว้ในตู้พินบอลมาตรฐาน ในการทำเช่นนั้นคุณอาจต้องการพิจารณาเพิ่มชุดประกอบลูกกลับซึ่งไม่รวมอยู่ในการออกแบบนี้
ขั้นตอนที่ 2: ตัดไม้
เพื่อตัดเลเยอร์ของสนามเด็กเล่นเราใช้เครื่องตัดเลเซอร์ อย่างไรก็ตามเครื่องตัดเลเซอร์ทรงพลังพอที่จะตัดไม้อัด½” ยากที่จะหาต้องใช้ไม้อัดคุณภาพสูงและอาจเสี่ยงต่อการเกิดไฟไหม้หากคุณไม่ระวัง สนามเด็กเล่นทั่วไปถูกตัดโดยใช้เราเตอร์ CNC - ในขณะที่บางมุมอาจไม่คมชัด แต่คุณก็ควรได้รับผลลัพธ์ที่ดี เพื่อความง่ายขั้นตอนด้านล่างจะถือว่าคุณสามารถเข้าถึงเครื่องตัดเลเซอร์แบบเดียวกันกับที่เราทำ มีบางคนที่มีผลลัพธ์ที่ดีโดยใช้เพียงการเจาะและตัวต่อ แต่คุณต้องระวังให้มากและอดทนถ้าคุณไปเส้นทางนี้
ขั้นตอนแรกในการสร้างสนามเด็กเล่นคือการแปลงการออกแบบเป็นไฟล์. DXF ที่สามารถป้อนเข้าเครื่องตัดเลเซอร์ ตัวอย่างเช่นไฟล์ playfield .DXF เป็นภาพด้านล่าง ไฟล์ที่ใช้ในโครงการนี้รวมอยู่ในที่เก็บของเรา
การใช้เครื่องตัดเลเซอร์เราตัดรูปร่างสำหรับสนามแข่งขัน, เลเยอร์¼” ระดับกลาง (เราใช้ Duron, วัสดุต้นแบบที่มีรูปร่างคล้ายไม้ราคาถูกกว่า แต่ไม้อัด¼” ก็จะทำงานได้), layer” ชั้นบนสุดและ½” สนับสนุน
วัสดุที่จำเป็น:
- ½” ไม้อัดสำหรับสนามแข่งขันและฐาน
- plywood” ไม้อัดหรือ duron สำหรับชั้นผนังกลาง
- สกรูไม้½”, ¾” และ 1”
- เข้าถึงเราเตอร์ CNC หรือเครื่องตัดเลเซอร์
ขั้นตอนที่ 3: รวบรวม Playfield
เริ่มต้นด้วยการจับชิ้นส่วนจากชั้น dur” duron ไปยังไม้อัดในสถานที่นั้น ๆ การใช้สว่านมือเจาะรูแรกใช้บิต 3/32” จากนั้นใช้สกรูไม้หัวแบน attach” เพื่อแนบเลเยอร์¼” เข้ากับสนามเด็กเล่นสิ่งสำคัญคือต้องทำจากบนลงล่าง (เช่นบนสุด เพื่อให้สกรูผ่านชั้น¼” ก่อนจากนั้นเข้าไปในฐาน½” เนื่องจากชิ้นส่วน¼” มีขนาดเล็กและบางและจะงอออกจากชั้นฐานถ้าเจาะในทิศทางตรงกันข้าม สิ่งสำคัญคือต้องแน่ใจว่าหัวสกรูนั้นล้างด้วยชั้น flush” และไม่ให้ความหนาเพิ่มเติม
หมายเหตุสุดท้าย: สกรูเหล่านี้สามารถไปได้เกือบทุกที่เนื่องจากเลเยอร์นี้จะมองไม่เห็นต่อผู้เล่นส่วนใหญ่เมื่อมีการประกอบสนามแข่งขัน แต่มีข้อยกเว้นคืออย่าใส่สกรูเข้าในเลนยิง (เริ่มแรกเราทำผิดพลาดนี้)
ถัดไปติดผนังด้านข้างและใช้สกรูไม้ที่ยาวที่สุดเพื่อเจาะเข้าไปในพวกเขาจากด้านบนของบอร์ดอีกครั้งเช่นหัวสกรูจะล้างด้วยด้านบน เมื่อทำเสร็จแล้วให้ยึดชิ้นชั้น½” ที่ด้านบนของ duron แล้วขันสกรูเข้าที่ดังเดิมยกเว้นเวลาที่ใช้สกรูขนาด 1 นิ้วจากด้านล่างโดยใช้สกรู 1 ตัวเนื่องจากชั้นบนสุดหนา½” จึงมีโอกาสน้อยกว่า เพื่องอออกจากฐานและขันสกรูจากด้านล่างเพื่อให้แน่ใจว่าสกรูไม่สามารถมองเห็นได้จากเครื่องเล่น
ในที่สุดให้ติดบล็อกปืน (ภาพด้านบนกับปืน) โดยการขันจากด้านล่างโดยใช้สกรู 2 ตัวเพื่อให้บล็อกไม่สามารถบิดได้ง่าย บล็อกของปืนมีช่องรูปตัว "U" ที่เหมาะกับปืนซึ่งสามารถติดตั้งได้โดยการขันน็อตให้แน่นอีกด้านหนึ่ง คุณอาจต้องใช้สารหล่อลื่นเพื่อลดแรงเสียดทานระหว่างก้านยิงกับลูกบอล
การออกแบบอาจต้องปรับเปลี่ยนบางอย่างในตอนนี้ ตัวอย่างเช่นในการออกแบบของเราการตัดสำหรับเป้าหมายการปล่อยนั้นแคบเกินไปและต้องขยายโดยใช้เดรเมล หากใช้ไฟล์ของเราเป็นข้อมูลอ้างอิงมากกว่าให้ลองติดต่อผู้แต่งที่อาจให้ไฟล์ที่อัปเดต มันเป็นความคิดที่ดีที่จะขัดพื้นที่ขรุขระใด ๆ โดยเฉพาะอย่างยิ่งที่ไม้สองชิ้นมาบรรจบกัน
โดยส่วนใหญ่แล้วนี่เป็นการสรุปงานไม้และเราสามารถย้ายไปใส่ส่วนประกอบต่างๆได้
วัสดุที่จำเป็น:
- สกรูไม้หัวแบน 3/4 "
- ชุดปืน
- สกรูไม้ที่ยาวกว่า (~ 1.5 ")
- สว่านมือพร้อม 3/32 "บิต
- น้ำมันหล่อลื่น
- สกรูไม้หัวแบนขนาด 1 "
- ไฟล์และ / หรือ dremel และกระดาษทราย
ขั้นตอนที่ 4: เพิ่มส่วนประกอบ
เมื่อถึงจุดนี้ในขั้นตอนการออกแบบคุณควรมีแนวความคิดทั่วไปเกี่ยวกับการวางแนวที่จำเป็นเพื่อให้แน่ใจว่าส่วนประกอบทั้งหมดพอดีกับใต้สนามแข่งขัน (หากใช้การออกแบบของเราอ้างอิงภาพด้านล่างของตารางข้างต้น)
ขั้นแรกให้ติดตั้งชิ้นงานแบบหล่น, ชิ้นส่วนขาตั้งและชุดหนังสติ๊กโดยใส่สกรูไม้ through นิ้วผ่านรูสำหรับติดตั้งในชุดประกอบ ทำเช่นเดียวกันกับตัวกันชนป๊อป แต่ให้แน่ใจว่าได้ถอดฝาปิดออกก่อนหรือชุดประกอบไม่เข้าที่รู!
ประการที่สองติดตั้งชุดกบ ตรวจสอบให้แน่ใจว่าพวกเขาหมุนในทิศทางที่ถูกต้อง โซลินอยด์เมื่อถูกยิงจะตอกหมุดลงในขดลวดและสิ่งนี้ควรหมุนเพลาเพื่อให้ฟลิปเปอร์หมุนขึ้นไปยังสนามแข่งขัน เมื่อติดตั้งชุดประกอบฟลิปเปอร์แล้วให้ติดฟลิปเปอร์บัตเข้าจากอีกด้านหนึ่งใช้ประแจที่น๊อตล็อคในชุดประกอบเพื่อขันให้เข้าที่จากนั้นใช้สปริงที่มาพร้อมกับชุดประกอบเพื่อให้แน่ใจว่าครีบของวัวถูกถอดกลับลงเมื่อไม่ถูกไล่ออก
ในทำนองเดียวกันให้ติดตั้งสวิตช์โรลโอเวอร์ทั้งหมดโดยใช้สกรูขนาด 1/2 นิ้วเพื่อให้แน่ใจว่าสามารถกดได้ง่ายจากด้านบนและสปริงกลับเข้าที่โดยใช้สลักเกลียว 6-32 นอกจากนี้ยังติดสวิตช์ประตูที่ด้านบนซ้ายของ การออกแบบของเราสวิตช์ประตูนี้ยังทำหน้าที่เปิดทางเดียวซึ่งช่วยให้การถ่ายภาพจากด้านขวาและจากมือปืนตกไปในกันชนนี่คือการออกแบบที่ส่งผลให้เกิดการยิงเข้าสู่ทางลาดที่เหมาะสมและวนขวาไป สถานที่ต่าง ๆ และเพิ่มความหลากหลายให้กับการเล่น
ในการติดตั้งไฟให้วางแผ่นพลาสติกลงในรูก่อน เม็ดมีดเหล่านี้มีความหนาประมาณ¼นิ้ว หากใช้เราเตอร์ CNC วิธีที่เหมาะสมในการติดตั้งเหล่านี้คือการตัดเลเยอร์¼” ที่ใหญ่กว่ารูใส่ ในการออกแบบของเราเนื่องจากเครื่องตัดเลเซอร์ไม่สามารถตัดเลเยอร์บางส่วนได้เราวงเล็บแบบ 3 มิติที่รองรับเม็ดมีด ใช้อีพ็อกซี่เพื่อยึดเม็ดมีดเข้าที่ (ทำให้ขอบเป็นขรุขระก่อน) และกระดาษทรายเพื่อให้แน่ใจว่าเม็ดมีดอยู่ในระดับเดียวกับสนามแข่งขัน
จากนั้นใส่ LEDS ลงในวงเล็บโดยใส่แล้วบิดเข้าที่ จากนั้นขันสกรูเขาที่จนไฟ LED ติดตั้งดานลางของแตละเม็ด ตัวยึดแสงที่เชื่อมโยงด้านล่างนั้นบางและบางพอที่สกรูขนาด 1/2 นิ้วอาจเจาะส่วนบนของตารางใช้แหวนรองสองอันเพื่อให้สิ่งนี้ไม่เกิดขึ้น
โพสต์สนามเด็กเล่นติดตั้งโดยใช้สลักเกลียว 6-32 เมื่อติดตั้งแล้วให้ห่อยางจากชุดยางรอบตัวเพื่อทำกันชนแบบพาสซีฟ สิ่งเหล่านี้ทำให้ตาราง "ชีวิต" มากขึ้นกว่าการออกแบบที่จะเป็นไม้อัดอย่างสมบูรณ์ ใช้สลักเกลียวตัวเดียวกันยึดไกด์เลนที่อยู่เหนือครีบ กาวกาวสวิตช์จบเกมเข้าที่
โปรดทราบว่าเกมส่วนใหญ่มีชุดประกอบการคืนลูกโดยเฉพาะเช่นเดียวกับที่นี่ สิ่งนี้ไม่ได้รวมอยู่ในการออกแบบนี้ส่วนใหญ่เนื่องจากต้นทุน แน่นอนว่าการแลกเปลี่ยนคือผู้เล่นมีหน้าที่รับผิดชอบในการวางบอลกลับเข้ามาในเลนยิงเมื่อมีการระบายออก แต่เรามีปืนซึ่งติดอยู่กับบล็อกของนักยิงตามภาพก่อนหน้านี้
ปุ่มฟลิปเปอร์และปุ่มเริ่มต้นได้รับการติดตั้งโดยวางไว้ในรูและล็อคด้วยพาเล็ท สวิทช์ปุ่มใบของฟลิปเปอร์จะถูกสลักเกลียวภายในปุ่มโดยใช้ 6-32 น็อตและจะปิดวงจรสวิทช์เมื่อกดปุ่ม
ณ จุดนี้สนามเด็กเล่นของคุณจะมีลักษณะคล้ายกับโต๊ะพินบอลเกือบเต็ม! สิ่งที่ขาดหายไปคือทางลาด รู้สึกอิสระที่จะได้เห็นเพื่อน ๆ ของคุณดูว่ามันยอดเยี่ยมขนาดไหนในขณะที่คุณกำลังหวาดกลัวกับการเดินสายและการบัดกรี
วัสดุที่ต้องการ (ส่วนใหญ่ซื้อจาก PinballLife.com และสามารถหาได้ง่ายๆโดยการค้นหาคำศัพท์ด้านล่าง)
- แอสเซมบลีเป้าหมายการปล่อย 3 ธนาคาร 1
- กันชนประกอบ 3x ป๊อป
- ชุดประกอบฟลิปเปอร์ซ้าย 1 ชุด
- 1 ชุดกบขวา
- ค้างคาว 2 ฟลิปเปอร์
- ปุ่มฟลิปเปอร์ 2 ปุ่ม
- palnuts ปุ่ม 2 ปุ่ม
- 1 ปุ่มเริ่มต้น
- ชุดแหวนยาง 1 ชุด
- ~ โพสต์ playfield starest 30 ครั้ง (ใช้ 1 1/16 ")
- คู่มือ 2 เลน
- 2 ปุ่มฟลิปเปอร์ปุ่มสวิตช์
- 2 หนังสติ๊กประกอบ
- 1 standup target
- สวิตช์แบบโรลโอเวอร์ 10 ตัว
- 8 LED # 44 ไฟแบบสไตล์ดาบปลายปืน
- วงเล็บไฟแบบดาบปลายปืน 8 แบบ (ฐานซ็อกเก็ตแบบ 2 ช่องขนาดเล็กแบบ Bayonet พร้อมขายึดแบบยาว)
- 5 1-1 / 2 "x 13/16" แทรกลูกศรสีน้ำเงิน
- 3 1 "x 3/4" แทรกสัญลักษณ์แสดงหัวข้อย่อยที่ชัดเจน
- สลักเกลียวขนาด 6-32 ตัว (2.5 นิ้วเช่นเดียวกับขนาดที่เล็กกว่า) ถั่วและแหวนรอง
- ~ 2 "สวิตช์ประตูกว้าง (เช่นเดียวกับที่นี่นี่อาจจะหายากเราทิ้งเศษของเราจากทางลาดพินบอลเก่าที่ซื้อบนอีเบย์)
ขั้นตอนที่ 5: สร้างทางลาด
ในการสร้างทางลาดให้ใช้อะคริลิก for” สำหรับชิ้นส่วนฐานและอะคริลิค for” สำหรับผนังด้านข้าง อะคริลิคใสจะให้รูปลักษณ์ที่สวยงามและสะอาดตาในขณะที่ไม่ปิดกั้นมุมมองของสนามแข่งขันสำหรับผู้เล่น การใช้อะคริลิคสีอาจเป็นตัวเลือกที่ดูดี แต่ไม่แนะนำให้ใช้วัสดุทึบแสงอย่างเช่นไม้
ตัวรองรับสำหรับทางลาดนั้นถูกพิมพ์แบบสามมิติโดยใช้ makerbot และยึดติดกับสนามแข่งขันและพลาสติกที่ใช้สลักเกลียว 6-32 ตัวเดียวกัน
ชิ้นอะคริลิคที่นี่ติดกาวเข้าด้วยกันโดยใช้อะคริลิคซีเมนต์ซึ่งเป็นตัวทำละลายที่หลอมละลายและเชื่อมพลาสติกเข้าด้วยกัน ตรวจสอบให้แน่ใจว่าใช้จำนวนเล็กน้อยและจะสร้างความผูกพันที่แข็งแกร่งมากซึ่งเกือบมองไม่เห็น
ที่ทางเข้าของทางลาดเราได้รวมแผ่นกันกระแทกแบบเดียวกับที่แสดงในภาพด้านบน นี่คือชิ้นส่วนโลหะบาง ๆ ที่ให้การเปลี่ยนจากสนามเด็กเล่นไปเป็นพลาสติกของทางลาดได้อย่างราบรื่นมากกว่าการมีลูกพินบอลต้อง "กระโดด" ขึ้นไปที่ความหนา¼ "ของพลาสติก คุณสามารถซื้อหนึ่งในราคาถูกเหล่านี้ได้จากร้านพินบอลพิเศษหรืออีเบย์ (เราทำ) หรือทำของคุณเองจากแผ่นโลหะ ในเกมเชิงพาณิชย์สิ่งเหล่านี้ถูกตรึงอยู่กับที่เพื่อไม่ให้สลักเกลียวขึ้นและเข้าไปในทางของลูกบอล เนื่องจากเราไม่มีอุปกรณ์ที่เหมาะสมในการทำเช่นนั้นเราจึงตรวจสอบให้แน่ใจว่าใช้สกรูหัวแบนและลบคมรูในพลาสติกและโลหะเพื่อให้ได้ผลเช่นเดียวกัน
มีสวิตช์ประตูแคบติดอยู่กับ 3D รองรับที่มุมด้านหน้าขวาของทางลาดซึ่งจะหันไปข้ามสนามเด็กเล่น สวิตช์นี้เป็นสิ่งที่บันทึกไว้เมื่อมีการยิงทางลาดที่ประสบความสำเร็จ
วัสดุที่จำเป็น:
- แผ่นอะคริลิคใสขนาด 12x24 นิ้ว
- แผ่นอะคริลิคใสขนาด 12x24 นิ้ว
- อะคริลิคซีเมนต์
- เข้าถึงเครื่องพิมพ์ 3 มิติและเครื่องตัดเลเซอร์
- พนังทางลาด
- สลักเกลียวหัวแบนขนาด 6-32 น็อตสำหรับแผ่นปิดทางลาด
- ดอกสว่านเจาะรูหรือเครื่องมือช่าง
- สวิตช์ประตูแคบ
ขั้นตอนที่ 6: วางแผน Electronics Block และ Pin Layout
(การปรับปรุงของผู้เขียน: ด้วยการใช้อย่างต่อเนื่อง 48V สามารถเป่าทรานซิสเตอร์บางส่วนในการกำหนดค่านี้ฉันขอแนะนำให้ใช้ 35V หรือต่ำกว่ากับอุปกรณ์อิเล็กทรอนิกส์เหล่านี้หรือใช้ทรัพยากรของบอร์ดควบคุมระดับมืออาชีพมากขึ้นเช่นที่แสดงอยู่ที่นี่: http: // pinballmakers .com / วิกิพีเดีย / index.php / ก่อสร้าง)
เครื่องนี้มีระดับแรงดันไฟฟ้า 3 ระดับ: 48V สำหรับพลังงานโซลินอยด์, 6.3V สำหรับไฟ LED และ 5V สำหรับตรรกะและเสียง เพื่อให้ระดับแรงดันไฟฟ้าเหล่านี้เราใช้แหล่งจ่ายไฟ CNC สำหรับอะแดปเตอร์ DC 48V และ off-the-shelf เพื่อให้ 6.3V และ 5V (เป็นไปได้ที่จะใช้เพียง 6.3 โวลต์เนื่องจาก Arduino ควบคุมแรงดันไฟฟ้าของอุปทานไปยังขาออก 5V แต่เราได้แยกแหล่งจ่ายไฟเหล่านั้นออก) 48V เป็นไฟฟ้าแรงสูงและในขณะที่ไม่ถึงขั้นเสียชีวิตอาจทำให้ชิ้นส่วนเสียหายและอาจทำให้ส่วนประกอบร้อนเร็วหากเกิดปัญหากับวงจร ใช้ฟิวส์ 5-A แบบชกช้าๆบนทั้งอินพุตและเอาต์พุตของแหล่งจ่ายไฟ 48V หลักเพื่อหลีกเลี่ยงการเริ่มต้นไฟหากทรานซิสเตอร์ตัวใดตัวหนึ่งสั้น
บนโล่ Arduino เราได้เชื่อมต่อสายไฟเข้ากับขั้วต่อ Molex ตัวเมียที่ออกแบบมาเพื่อให้ตรงกับความต้องการด้านอินพุตและเอาต์พุตของแต่ละบอร์ดย่อยทั้งสาม: แผงโซลินอยด์บอร์ดไดรเวอร์ไฟ / ซาวด์บอร์ดเสียงและบอร์ดอินพุต
ในการออกแบบของเราเรามีการกำหนดพินดังต่อไปนี้ แน่นอนว่านี่มีความยืดหยุ่นมาก ตรึง 0 ถูกเปิดทิ้งไว้ (ผู้สอนไม่ให้เราทำรายการหมายเลขขึ้นต้นด้วย 0)
- เปิด
- เปิด
- ขาอินเตอร์รัปต์ / อินพุตแอ็คทีฟ
- ขาอินพุตที่เข้ารหัส
- ขาอินพุตที่เข้ารหัส
- ขาอินพุตที่เข้ารหัส
- ขาอินพุตที่เข้ารหัส
- ขาอินพุตที่เข้ารหัส
- กันชนด้านขวา
- เอาท์พุทกันชนกลาง
- กันชนด้านซ้ายออก
- ปล่อยเอาต์พุตเป้าหมาย
- เอาต์พุตสวิตช์หลักของ Flipper
- สวิตช์ไฟหลักออก
- ไฟขาออก
- ไฟขาออก
- ไฟขาออก
- พินเอาต์พุตเสียง
- เปิด
แม้ว่าจะไม่ได้นำมาใช้ในการออกแบบของเราหมุด SCL และ SDA สามารถใช้สำหรับการแสดงผลและหมุดที่เหลือสามารถใช้สำหรับการควบคุมเพิ่มเติมเช่นการเพิ่มคุณสมบัติ (การคืนลูก) หรือการรวมแสงเพิ่มเติม
วัสดุที่จำเป็น:
- แหล่งจ่ายไฟ CNC 48V (เช่นนี้)
- แหล่งจ่ายไฟแบบ 6.3V และ 5V แบบ off-the-shelf (เช่นนี้)
- 5A ฟิวส์ที่ช้าและตัวยึดฟิวส์และท่อหดความร้อนสำหรับการเชื่อมต่อ
- ขั้วต่อ Molex
- บอร์ด Arduino โล่ต้นแบบ
- ลวด 22AWG มากมายบัดกรีและความอดทน
ขั้นตอนที่ 7: สร้างบอร์ดไดรเวอร์
บอร์ดควบคุมมีหน้าที่ในการเปลี่ยนอินพุตจาก Arduino ปุ่มฟลิปเปอร์และหนังสติ๊กเปลี่ยนเป็นการยิงคอยส์ เนื่องจากสัญญาณอยู่ที่ระดับ 5V และโซลีนอยด์ที่ 48V จึงจำเป็นต้องใช้มอสเฟตกำลังสูงเพื่อถ่ายทอดสัญญาณ ทรานซิสเตอร์ที่ใช้ในการออกแบบนี้เป็น MOSFET ที่ได้รับคะแนน 100V จาก บริษัท Mouser
มีแผนผังสามรูปด้านบนซึ่งรวมถึงครีบ, หนังสติ๊กและกันชน / เป้าหล่น แต่ละข้อมีความต้องการที่แตกต่างกันเล็กน้อย แต่ในทั้งหมดเมื่อทรานซิสเตอร์ได้รับสัญญาณ 5V เส้นทางปัจจุบันจะเปิดขึ้นสำหรับโซลินอยด์และ 5-8 แอมป์จะถูกผลักผ่านขดลวดเพื่อให้พลังเตะ นี่เป็นจำนวนมากในปัจจุบัน! ในความเป็นจริงกระแสไฟฟ้าจำนวนมากนี้จะเผาไหม้ส่วนประกอบต่างๆหากทรานซิสเตอร์ถูกเก็บไว้เป็นเวลานานกว่าพัลส์สั้น ๆ ตรวจสอบให้แน่ใจว่าในการทดสอบวงจรนี้โดยใช้ซอฟต์แวร์หรือวิธีการอื่นเพื่อไม่ให้โซลินอยด์จ่ายกำลังไฟให้เต็มที่นานกว่าหนึ่งวินาที
แหล่งที่มาหลักของปัญหาในวงจรข้างต้นคือเตะอุปนัย โซเลนอยด์นั้นเป็นตัวเหนี่ยวนำที่ทรงพลังและอย่างที่คุณอาจจะรู้ว่ากระแสไฟฟ้าในตัวเหนี่ยวนำไม่สามารถเปลี่ยนแปลงได้ในทันที เช่นเมื่อทรานซิสเตอร์ถูกปิดการทำงานยังคงมีช่วงเวลาสั้น ๆ ที่ 5-8 แอมป์ไหลผ่านโซลินอยด์และกระแสไฟฟ้าทั้งหมดนั้นต้องไปที่ไหนสักแห่ง หากไม่ได้รับเส้นทางสู่พื้นดินกระแสนี้จะขับแรงดันไฟฟ้าที่ทรานซิสเตอร์ระบายออกไปถึงหลายร้อยโวลต์และทำลายทรานซิสเตอร์ นอกจากนี้เมื่อทรานซิสเตอร์ถูกทำลายจะทำให้ขั้วทั้งสามขั้วขาดซึ่งทำให้กระแสแอมป์ต่อเนื่องไหลและสามารถทำลายโซลินอยด์ได้หากไม่มีฟิวส์ที่เหมาะสม (เราทำลายทรานซิสเตอร์ 8 ตัวในการค้นพบของเราและพยายามที่จะจัดการกับปัญหานี้ แต่โชคดีที่ไม่มีโซเลนอยด์เนื่องจากเรารวดเร็วในการถอดการเชื่อมต่อด้วยตนเอง)
มีสองวิธีในการป้องกันการเตะแบบเหนี่ยวนำ: ขั้นแรกชุดประกอบพินบอลแต่ละอันควรมาพร้อมกับไดโอดที่ชี้จากทรานซิสเตอร์ระบายกลับไปยังแหล่งจ่าย ในทางทฤษฎีแล้วควรป้องกันไม่ให้ทรานซิสเตอร์ไหลเกินกว่าแรงดันไฟฟ้าที่เคยเกิดขึ้นเมื่อไดโอดเกิดขึ้นจะเปิดและระบายพลังงานที่เหลือทั้งหมดออกจากตัวเหนี่ยวนำ น่าเสียดายที่ในความเป็นจริงแล้วไดโอดเหล่านี้เพียงอย่างเดียวไม่สามารถเปิดได้เร็วพอที่จะยับยั้งการเตะแบบเหนี่ยวนำได้ด้วยตัวเอง
เพื่อแก้ปัญหาเราได้เพิ่มวงจร RC snubber ’ วงจรนี้มีตัวเก็บประจุแบบอนุกรมที่มีตัวต้านทาน ตัวเก็บประจุดูดซับกระแสไฟฟ้าจากตัวเหนี่ยวนำเพียงพอที่ไดโอดจะมีเวลาในการเปิดและทำงานตามหน้าที่ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวงจร RC snubber ตรวจสอบที่นี่
วงจรขับโซลินอยด์กันชน / หยดเป้าหมายนั้นค่อนข้างง่ายและมีเพียงทรานซิสเตอร์โซลินอยด์สปเปอร์และการเชื่อมต่อเพื่อรับอินพุตจาก Arduino ในบอร์ดนี้และบอร์ดถัดไปตรวจสอบให้แน่ใจว่าได้เดินสายโซลินอยด์เพื่อให้ไดโอด (ซึ่งไม่ได้แสดงในแผนผัง) ชี้ไปทางด้านไฟฟ้าแรงสูง
วงจรไดรฟ์ฟลิปเปอร์มีความซับซ้อนเพิ่มขึ้นเล็กน้อยด้วยเหตุผลสามประการ ขั้นแรกเพื่อให้มีปฏิกิริยาอย่างรวดเร็วระหว่างการกดปุ่มและการกระทำของฟลิปเปอร์ขอแนะนำให้สร้างการตอบสนองนั้นโดยตรงในวงจรไฟฟ้าแทนที่จะเป็นอินพุตและเอาต์พุตแยกต่างหากที่จัดการโดย Arduino ความล่าช้าที่เกิดจาก Arduino นั้นมีขนาดเล็ก แต่ผู้เล่นที่มีประสบการณ์จะสามารถบอกได้ทันทีและจะหงุดหงิดจากการขาดการควบคุม
ประการที่สองครีบมีสองขดลวดที่แตกต่างกัน (ขดลวดพลังงานต่ำและขดลวดกำลังสูง) สวิตช์จุดสิ้นสุดของจังหวะซึ่งทริกเกอร์เมื่อฟลิปเปอร์สูง สวิตช์นี้ทำหน้าที่ฟังก์ชั่นที่สำคัญในการอนุญาตให้ขดลวดพลังงานสูงเริ่มแรกเพื่อให้เกิดจังหวะที่ทรงพลัง แต่เปลี่ยนเป็นขดลวดพลังงานต่ำ (~ 130 โอห์มเทียบกับ 4 โอห์ม) ที่ให้พลังงานเพียงพอที่จะทำให้ฟลิปเปอร์อยู่ในตำแหน่ง ตราบเท่าที่ปุ่มถูกวางไว้ แต่ไม่ดึงกระแสไฟฟ้ามากพอที่จะทำให้โซลินอยด์หมดไป ในภาพด้านล่างสวิตช์ EOS ปกติปิด แต่ชุดประกอบของเรามีสวิตช์เปิดตามปกติและจำเป็นต้องมีทรานซิสเตอร์ตัวอื่นเพื่อแปลงมันให้เป็นสัญญาณปิดปกติ
ประการที่สามในขณะที่เราต้องการให้ปุ่มควบคุมครีบโดยตรงเรายังรวมสัญญาณสวิตช์ 'ต้นแบบ' จาก Arduino ที่สามารถเปิดใช้งานหรือปิดการใช้งานครีบขึ้นอยู่กับว่าลูกบอลกำลังเล่นอยู่หรือไม่ ส่งผลให้มีการใช้ทรานซิสเตอร์ตัวที่สามในวงจร
ในทำนองเดียวกันกระดานหนังสติ๊กมีภาวะแทรกซ้อนของตัวเอง ในขณะที่มันใช้ทรานซิสเตอร์เพียงตัวเดียวมันควรจะควบคุมด้วยสวิตช์อินพุทโดยตรง (ซึ่งเราต่อสายเป็นอนุกรม) เพื่อการตอบสนองที่รวดเร็วและไม่ต้องใช้ขาออกเพิ่มเติมใน Arduino แต่น่าเสียดายที่ถ้าประตูของทรานซิสเตอร์เชื่อมต่อกับสวิตช์โดยตรงการตอบสนองเร็วเกินไปที่จะมีการเตะมากกว่าที่แทบจะสังเกตไม่เห็นเนื่องจากสวิตช์ไม่ได้ปิดอยู่นานมาก เพื่อให้การเตะมีประสิทธิภาพยิ่งขึ้น (เช่นปล่อยให้หนังสติ๊กโซลินอยด์ "ติดตามผ่าน") เราได้เพิ่มไดโอดและตัวต้านทานขนาดใหญ่ที่ประตูของทรานซิสเตอร์ซึ่งช่วยให้สามารถตอบสนองอย่างรวดเร็ว แต่สร้างค่าคงที่ของแรงดันไฟฟ้า ที่โหนดนั้นเพื่อให้เกตยังคงอยู่ใกล้กับ 5V (และทรานซิสเตอร์เปิด) นานพอที่จะเตะได้อย่างเห็นได้ชัดแม้หลังจากสวิตช์หนังสติ๊กถูกเปิดใหม่ ความยุ่งยากอีกประการหนึ่งคือการส่งอินพุตนี้ไปยัง Arduino เนื่องจากบอร์ดอินพุต (ดังที่เราจะเห็นในภายหลัง) ต้องการ ต่ำ อินพุตและหนังสติ๊กจะทำงานเมื่ออินพุตถูกผลักสูง เพื่อแก้ปัญหานี้เราได้รวมทรานซิสเตอร์ตัวที่สามซึ่งปิดเมื่อใดก็ตามที่อินพุตสูงและสามารถรักษาได้เหมือนสวิตช์อินพุตอื่น ๆ ในสนามแข่งขัน
บอร์ดควบคุม (อันที่จริงสองบอร์ด) ประกอบด้วยไดรเวอร์ฟลิปเปอร์สองตัวไดรเวอร์หนังสติ๊กสองตัวและไดรเวอร์สวิตช์เดี่ยวสี่ตัวสำหรับโซเลนอยด์ที่เหลืออยู่ แทนที่จะบัดกรีโดยตรงเราใช้ตัวเชื่อมต่อ molex ขนาด 0.1 นิ้วเพื่อเชื่อมต่อบอร์ดนี้กับโซเลนอยด์แหล่งจ่ายไฟและสวิตช์เพื่อให้สามารถทำการซ่อมแซมหรือปรับเปลี่ยนได้ง่ายขึ้น
เราใช้บอร์ดแบบประสานได้สำหรับการออกแบบของเรา แต่การออกแบบ PCB จริงด้วยฟังก์ชั่นเหล่านี้จะให้ผลลัพธ์ที่สะอาดกว่าและช่วยลดความยุ่งเหยิงของสายไฟที่เครื่องเหล่านี้มีอย่างหลีกเลี่ยงไม่ได้
วัสดุ:
- 12 ทรานซิสเตอร์พลังงาน 100V
- ตัวเก็บประจุ 10-50 uF (ไม่ใช่ขั้วถ้าเป็นไปได้)
- ตัวต้านทาน 300, 5k และ 500k และ 3M
- 1 ทรานซิสเตอร์ที่เล็กลงสำหรับสวิตช์หนังสติ๊ก
- 1N4004 หลายไดโอด
- ต้นแบบแผ่นขนมปังประสาน (หรือดีกว่าออกแบบ PCB ของคุณเอง)
ขั้นตอนที่ 8: สร้าง Sensor Input Board
เนื่องจากเราใช้เพียง Arduino เราจึง จำกัด 20 พินดิจิตอล อย่างไรก็ตามเครื่องพินบอลมีสวิทช์ที่เป็นเอกลักษณ์เพียงไม่กี่โหลไม่พูดถึงเอาต์พุตที่จำเป็นสำหรับแสงเสียงและโซเลนอยด์ในการขับขี่ เพื่อบรรเทาปัญหานี้เราได้ตั้งสมมติฐานว่าจะไม่มีการเรียกใช้อินพุตสองตัวพร้อมกัน (จึง จำกัด ให้เราใช้เพียง 1 ลูก) สมมติฐานนี้ช่วยให้เราสามารถ "เข้ารหัส" อินพุตสวิทซ์โดยแปลงให้เป็นไบนารี่รีจิสเตอร์ 5 บิตด้วยพินที่ 6 ที่เรียกการขัดจังหวะเมื่อใดก็ตามที่ได้รับอินพุตสวิทช์ที่ถูกต้อง ในการทำสิ่งนี้ให้สำเร็จเราใช้ตัวเข้ารหัส 8 ถึง 3 ตัวเพื่อสร้างตัวเข้ารหัส 24 ถึง 5 โดยใช้ตัวเข้ารหัสนี้ในโครงร่างที่แสดงในรูปภาพด้านบน
นี่เป็นหนึ่งในการพัฒนาที่สำคัญที่สุดของโครงการเนื่องจากช่วยให้เราสามารถเพิ่มความซับซ้อนของเครื่องของเราได้อย่างมากจากแผนเริ่มต้นของเราเพียงแค่มีครีบครีบกันชนและเป้าหมายหนึ่งหรือสองเป้าหมาย
มีการใช้บอร์ดต้นแบบตัวที่สองเพื่อวางขั้วต่อ Molex 24 ตัวแต่ละตัว สวิตช์แต่ละตัวบนสนามแข่งขันจะมีขั้วต่อหญิงที่ปลายสายยาวที่เสียบเข้ากับบอร์ดนี้ เป้าหมายการปล่อยเป็นกรณีพิเศษที่สามารถจัดการได้หลายวิธี สิ่งที่เราทำคือการเชื่อมต่อสวิตช์เป้าหมายการปล่อยแต่ละครั้งในซีรีย์เพื่อให้อินพุตถูกปิดเมื่อพวกเขาทั้งหมดลงและอนุญาตให้ Arduino ส่งสัญญาณไปยังโซลินอยด์เพื่อยิงเป้าหมายการปล่อยที่สำรองไว้
วัสดุ:
- ลำดับความสำคัญ 4 3 สถานะเอาท์พุท 8-to-3 เข้ารหัส
ขั้นตอนที่ 9: สร้างอุปกรณ์ต่อพ่วง Light / sound / score
ในการบันทึกพินในลักษณะที่คล้ายคลึงกับตัวเข้ารหัสเราใช้ตัวถอดรหัส 3 ถึง 8 เพื่อควบคุมไฟของเรา สิ่งนี้ทำให้เรามีข้อ จำกัด ว่าเราไม่สามารถส่องแสงมากกว่าหนึ่งครั้งในเวลาใดก็ได้ แต่นั่นเป็นการแลกเปลี่ยนที่ยอมรับได้ในการเพิ่มหมุดสำหรับองค์ประกอบอื่น ๆ นอกจากนี้เรายังรวมเอาแสงสว่าง "มาสเตอร์" ตัวที่ 4 ที่สามารถควบคุมแสงทั้งหมดได้ในคราวเดียว ตัวอย่างเช่นสิ่งนี้อาจทำให้เราสามารถเปิดไฟทั้งหมดได้หลายครั้งเมื่อเปิดเกมเป็นครั้งแรก (ให้สัญญาณที่ชัดเจนว่ามีบางสิ่งเกิดขึ้นกับผู้เล่นเมื่อเขาหรือเธอกดปุ่มเริ่มต้นซึ่งเป็นเรื่องยากโดยไม่มี รางน้ำลูกหรือจอแสดงผลที่มีสีสัน)
แผนผังดังกล่าวมีวงจรทรานซิสเตอร์คล้ายกับไดรเวอร์ แต่ง่ายกว่ามากเมื่อแรงดันไฟฟ้าต่ำกว่าในการเล่น (6.3V สำหรับไฟ) ต้องการทรานซิสเตอร์ขนาดเล็กและไม่จำเป็นต้องใช้วงจรป้องกันมากนัก เราใช้ diode หรือ gate สำหรับทรานซิสเตอร์เพื่อแยกสัญญาณสวิตช์หลักและสัญญาณไฟแต่ละอัน สิ่งนี้ทำให้เราสามารถใช้ทรานซิสเตอร์เพียงหนึ่งตัวต่อแสงแทนที่จะเป็นสองตัวและป้องกัน Arduino และชิปเข้ารหัสจาก 'การต่อสู้' ไปยังแหล่งที่มาหรือการจมในปัจจุบัน
ในขณะที่เราใช้ LED ที่มีกระแสไฟต่ำสำหรับไฟสนามเด็กเล่นแต่ละตัว (ไฟที่อยู่ข้างใต้เม็ดมีด) ปุ่มเริ่มต้นและกันชนแบบป๊อปอัพ 3 อันแต่ละอันมาพร้อมกับหลอดไส้ที่มีความยาวประมาณ 250mA ทรานซิสเตอร์ได้รับการจัดอันดับสำหรับ 530mA ของกระแสอย่างต่อเนื่องดังนั้นเพื่อไม่ให้เกินนี้เราตรวจสอบให้แน่ใจว่ามีเพียงสองหลอดที่เคยผ่านทรานซิสเตอร์ตัวเดียว
นอกจากนี้เรายังแนบออด piezo 5V แบบพาสซีฟที่ช่วยให้เราสามารถเล่นเสียงพื้นฐานไปยังบอร์ดนี้
แสงที่กำหนดเองและลำดับเสียงสามารถตั้งโปรแกรมโดยใช้ฟังก์ชั่น light_sequence + sound_sequence หรือผ่านส่วนต่อประสานภาษาพินบอล
- 10 ทรานซิสเตอร์แสงสว่าง (เราใช้สิ่งเหล่านี้)
- 5V Piezo ออด
ขั้นตอนที่ 10: ขั้นตอนที่ 11: ออกแบบกฎเกมของคุณ
มีสองตัวเลือกสำหรับกำหนดกฎของเกมพินบอล คุณสามารถโต้ตอบกับเกมโดยใช้เอกสารพินบอลที่ปรับแต่งได้หรือกฎของเกมฮาร์โค้ด กฎของเกมแบบตายตัวช่วยให้มีความยืดหยุ่นมากขึ้นรวมถึงภาพต่อเนื่องและโบนัสตามเวลาขณะใช้ระบบพินบอลเอกสาร / โปรแกรมแยกวิเคราะห์ช่วยให้มีความยืดหยุ่นมากขึ้น แต่กฎง่ายขึ้น เราจะเริ่มต้นด้วยอินเทอร์เฟซสำหรับเกมที่กำหนดค่าได้และจากนั้นให้รายละเอียดของกฎเกมแบบฮาร์ดโค้ดเพื่อให้คุณสามารถเลือกการกำหนดค่าที่คุณต้องการสำหรับเกมพินบอลของคุณเอง
ดูที่เก็บ github ที่นี่สำหรับไฟล์ที่อ้างอิงในโครงการนี้
ส่วนที่ 1 ออกแบบกฎเกมของคุณ
เครื่องรัฐเริ่มต้นสำหรับเกมพินบอลที่ให้ไว้ในภาพ
สิ่งนี้มีอยู่ในรหัสเริ่มต้นเริ่มต้น ตอนนี้คุณมีสองตัวเลือก - ไม่ว่าจะเขียนรหัสของคุณเองสำหรับเครื่องหรือใช้การจัดรูปแบบที่ระบุสำหรับเกมพินบอล
ขั้นตอนที่ 11: ตัวเลือกที่ 1 เขียนไฟล์ Pinball.txt ของคุณเอง
ในเอกสารพินบอลคุณจะพบสามส่วน: ส่วนหนึ่งส่วนหนึ่งส่วน“ รัฐ” และอีกส่วนหนึ่งสำหรับ“ การกระทำ” ที่นี่คุณสามารถกำหนดการกระทำเฉพาะสำหรับแต่ละองค์ประกอบ สำหรับส่วนประกอบส่วนใหญ่คุณอาจต้องการติดตั้งกับเครื่องสถานะเดียว ตัวอย่างเช่นหากทุกครั้งที่มีการชนกันชนผู้เล่นควรได้คะแนน 100 คะแนนเพิ่มแสงไฟทางลาดและคะแนน 100 คะแนนจากนั้นแผนภาพสถานะจะมีลักษณะเหมือนรูปที่ 1 พร้อมรหัสที่สอดคล้องกัน ถ้าคุณต้องการให้ชิ้นส่วนมีเครื่องสถานะหลายรัฐบอกว่าคุณต้องการไฟที่จะเปิดเมื่อกันชนถูกกระแทกจากนั้นปิดเมื่อมันถูกตีอีกครั้งแผนภาพสถานะ / สถานะที่สอดคล้องกันของคุณจะมีลักษณะดังรูปที่ 2 เครื่องเฉพาะของเรามีโครงสร้างเช่นเดียวกับในรูปที่ 3 ซึ่งคุณสามารถกำหนดกฎ ชื่อแมโครภายในที่เข้ารหัส (ซึ่งคุณไม่จำเป็นต้องกังวล แต่อาจมีประโยชน์หากคุณตัดสินใจที่จะตรวจสอบซอร์สโค้ด) และรหัสขัดจังหวะจะได้รับในรูปที่ 3 รูปที่ 4 เชื่อมต่อชื่อเหล่านี้กับคอมโพเนนต์ playfield
เคล็ดลับสำหรับการเขียนเกมพินบอลของคุณ
เนื่องจากส่วนประกอบของเกมเชื่อมโยงกับการขัดจังหวะเฉพาะ (ระบุโดยฟิลด์ "pos") ซึ่งกำหนดโดยฮาร์ดแวร์เราจึงไม่แนะนำให้แก้ไขส่วน "ส่วน" มากเกินไปนอกเขต "สถานะ" เราขอแนะนำ การจองสถานะ 0 และการกระทำ 0 สำหรับส่วนประกอบที่ไม่มีผลต่อการให้คะแนนเช่นปุ่มเริ่มและสวิตช์เกม รหัสของเรามีลักษณะตามที่แสดงในรูปที่ 5
ขั้นตอนที่ 12: กำหนดลำดับแสงและเสียง
ไฟแปดดวงบนกระดานควบคุมโดยใช้ตัวถอดรหัส 3 ถึง 8 + หนึ่งสวิตช์หลักตามที่อธิบายไว้ก่อนหน้า ไฟที่เฉพาะเจาะจงสามารถติดไฟได้ด้วยการเขียนพินที่สอดคล้องกับรหัสที่เข้ารหัสแบบไบนารีของรหัสชิ้นส่วนสูง ฟังก์ชันตัวช่วย light_sequence จัดเตรียมส่วนต่อประสานสำหรับผู้ใช้เพื่อระบุแสงที่ต้องการส่องสว่างและแมโครถูกกำหนดในเอกสาร state_machine_headers.h มีการจัดตารางอีกครั้งเพื่อความสะดวกในการเขียนโปรแกรมของคุณ สำหรับ Sound เราใช้ห้องสมุดโทน Arduino เพื่อเขียนลำดับเสียงสั้น ๆ สำหรับกิจกรรมเกมต่างๆ เรามีสี่เสียงที่สร้างไว้ล่วงหน้าที่คุณสามารถเลือกได้ (ใช้ executeSound (<# ของเสียงที่คุณต้องการ>)) เสียงเหล่านี้สอดคล้องกับลำดับที่ยาวนานร่าเริงลำดับที่ร่าเริงสั้นลำดับเศร้าสั้นและลำดับเศร้ายาว หากคุณต้องการตั้งโปรแกรมเสียงของคุณเองคุณสามารถดูวิธีการดังกล่าวได้ที่นี่ (pitch.h รวมอยู่ในที่เก็บ): http://www.arduino.cc/en/Reference/Tone
ขั้นตอนที่ 13: โหลดไฟล์ Pinball.txt ไปยัง Arduino
เมื่อคุณเขียน FSM เสร็จแล้วต่อไปนี้เป็นวิธีโหลดเกมของคุณไปยัง Arduino (สมมติว่าคุณใช้ Mac) ไฟล์ทั้งหมดสามารถพบได้ในพื้นที่เก็บข้อมูล github
- แตกซิปไฟล์ arduino-serial
- นำทางไปยังไฟล์ arduino-serial และบันทึกไฟล์ config เกมของคุณที่นี่ “ Pinball.txt” แสดงตัวอย่างเทมเพลตที่คุณสามารถใช้ได้
- เปิด Arduino อัพโหลดภาพร่างเกมพินบอล
- เปิดเทอร์มินัลแล้วพิมพ์คำสั่งต่อไปนี้:
- ทำ
- ./arduino-serial -b 9600 -p pinball.txt
- ตอนนี้เราควรอ่านและเก็บข้อมูลในหน่วยความจำภายในของ Arduino หากมีเส้นผิดปกติ Arduino จะพิมพ์ข้อความแสดงข้อผิดพลาดและคุณสามารถเลือกที่จะส่งไฟล์อีกครั้ง
- เมื่อคุณอัปโหลดรหัสโดยใช้เทอร์มินัลเช่น เมื่อ Arduino พิมพ์ข้อความ“ เสร็จสิ้น” คุณสามารถเปิด Arduino Serial เพื่ออ่านข้อความจากเกมที่กำลังดำเนินการอยู่
ปัญหาทั่วไป / การปรับให้เหมาะสมที่สุดสำหรับเกมซอฟต์แวร์
- เกมที่กำหนดค่าตายตัวและกำหนดค่าได้ - เราสังเกตเห็นว่าการขัดจังหวะในเกมแบบ hard-coded นั้นตอบสนองได้แม่นยำกว่าเกมที่ปรับแต่งได้ อาจเป็นเพราะเกมที่ปรับแต่งได้นั้นมีฟังก์ชั่นวัตถุประสงค์ทั่วไปมากมายซึ่งจำเป็นต้องมีเงื่อนไข สิ่งนี้ทำให้ความเร็วในการอ่านของลูปช้าลงซึ่งทำให้เราพลาดการขัดจังหวะหลายครั้งและส่งผลต่อความเร็วในการทำงานโดยรวมของเกม ในการแก้ปัญหานี้เราได้ลดความสามารถในการปรับแต่งบางอย่างของเกมตั้งค่าเพื่อให้ได้เวลาตอบสนองที่ยอมรับได้ในวงจร เดิมเรามีความกังวลเกี่ยวกับความจุ RAM ของ Arduino และจำนวนของกฎของเกมที่สามารถจัดเก็บได้ แต่สิ่งนี้กลับกลายเป็นปัญหาน้อยกว่าที่คาดไว้เดิมและมันเป็นความเร็วของการวนรอบที่เป็นปัจจัย จำกัด ที่ใหญ่กว่า
- การเปิดตัวอินเตอร์รัปต์ - เนื่องจากการกระทำที่รวดเร็วของเกมพินบอลเรามีหลายกรณีที่หมุดอินเตอร์รัปต์ได้รับอินเทอร์รัปต์หลายอันสำหรับพินบอลตีเพียงองค์ประกอบเกมเดียว นอกจากนี้เนื่องจากอินเทอร์รัปต์เหล่านี้ได้รับก่อนที่ตัวเข้ารหัสจะมีเวลาอ่านอินพุตทั้งหมดอย่างถูกต้องอินเทอร์รัปต์จะเชื่อมโยงกับส่วนประกอบที่ไม่ถูกต้อง เพื่อแก้ปัญหานี้เราใช้ไลบรารี่ภายนอกที่ตอบสนอง 1ms หลังจากได้รับการขัดจังหวะครั้งแรกโดยให้เวลาสำหรับหมุดตัวเข้ารหัสเพื่อให้สูงก่อนที่เกมจะอ่านรหัสอินพุต
- ดิสเพลย์ - แม้ว่าจอแสดงผลแบบอนุกรมอนุญาตให้เกมพิมพ์ข้อความโดยละเอียด แต่ผู้เล่นจะอ่านข้อความขาออกได้ยากเมื่อเล่นเกมพินบอลที่รวดเร็ว นอกจากนี้ยังยากที่ผู้เล่นจะต้องเล่นเกมด้วยคอมพิวเตอร์ที่ต่ออยู่ ในอนาคตเราหวังว่าจะใช้จอแสดงผลดิจิตอลที่สามารถแสดงคะแนนและข้อมูลเกมอื่น ๆ ในจอแสดงผลที่ผู้ใช้สามารถดูได้ง่ายเช่นเมทริกซ์ LED หรือจอแสดงผล 7 ส่วน
ขั้นตอนที่ 14: ตัวเลือกที่ 2: คำแนะนำเกี่ยวกับการเขียนโปรแกรมเกมของคุณเองอย่างหนัก
ก่อนอื่น - อ่านผ่านเอกสาร state_machine_headers.h เพื่อทำความเข้าใจโครงสร้างข้อมูลโกลบอลที่เก็บข้อมูลเกี่ยวกับเครื่องสถานะ คุณควรเริ่มต้นโครงสร้างข้อมูลเหล่านี้กับกฎเกมของคุณภายใน Arduino IDE ก่อนที่จะโหลดลงในรหัส Arduino มีการจัดเตรียมโครงสร้างข้อมูลต่อไปนี้:
โครงสร้างของเกมเพื่อเก็บข้อมูลเกี่ยวกับแต่ละส่วนของรัฐเพื่อเก็บข้อมูลเกี่ยวกับการเปลี่ยนสถานะการดำเนินการเพื่อเก็บข้อมูลเกี่ยวกับการกระทำที่จะดำเนินการ โครงสร้างเหล่านี้จะถูกเติมด้วยไฟล์อ่าน กำหนดอินพุต / เอาต์พุตสำหรับพินทั้งหมด ควรกำหนดพินอินเตอร์รัปต์เป็นพิน INPUT
ภายในลูปหลักตรวจสอบแต่ละรอบเพื่อดูว่าอินเทอรัลหยุดทำงานสำหรับองค์ประกอบของเกมแต่ละรายการหรือไม่ กำหนดองค์ประกอบของเกมแต่ละรายการภายในคำสั่งเปลี่ยน
ฟังก์ชั่นตัวช่วย executeState อัพเดตสถานะปัจจุบันของชิ้นส่วนและดำเนินการตามข้อมูลในรหัส
รหัสเกมเวอร์ชั่นแรกที่เขียนโค้ดยากสามารถพบได้ในไฟล์“ simplepinballgame.ino”
ขั้นตอนที่ 15: เชื่อมต่อทุกอย่าง
ในการเชื่อมต่อ Arduino กับบอร์ดควบคุมของเราเราใช้ protoshield เพื่อเข้าถึงพินบนบอร์ดอื่นได้ง่ายขึ้น มีสายไฟจำนวนมากดังนั้นระวัง! ทำตามเลย์เอาต์ที่กำหนดในพินอิเล็กทรอนิกส์และเลย์เอาต์เพื่อเชื่อมต่อช่อง Arduino ของคุณกับพินที่สอดคล้องกัน Molex Connectors น่าจะช่วยได้มากในการหาว่า
นี่คือคำถามที่พบบ่อยการแก้ไขปัญหาสั้น ๆ ในกรณีที่คุณพบปัญหาทั่วไปที่เราทำ:
ธรรมชาติของตัวเข้ารหัสอินพุทคือมีพินอินพุต 6 ตัวใน Arduino: 5 ซึ่งแสดงให้เห็นว่าอินพุตใดถูกทริกเกอร์และพินที่ 6 ที่สูงขึ้นหากมีการทริกเกอร์อินพุตเดียว รหัสที่เขียนจะตรวจพบเฉพาะเมื่อพินที่หกนี้เปลี่ยนจากต่ำไปสูง ดังนั้นหาก Arduino ไม่ได้รับอินพุตใด ๆ และคุณมั่นใจว่าสวิตช์ทั้งหมดหรืออย่างน้อยที่สุดทำงานได้ตรวจสอบดูว่าสวิตช์ใดติดหรือไม่ ตัวอย่างเช่นหากเป้าหมายการปล่อยทั้งหมดลดลงและไม่ได้ถูกสำรองข้อมูลนั่นเป็นสวิตช์ปิดและป้องกันไม่ให้ Arduino รับอินพุตอื่น ๆ
ตรวจสอบเพื่อให้แน่ใจว่าน๊อตที่ถือปืนอยู่ในที่นั้นแน่นเต็มที่หรือบล็อกของปืนไม่หลวม หรืออีกทางหนึ่งให้แท่งน้ำมันชูรส
นี่อาจเป็นปัญหาเชิงกล / การออกแบบถ้าสวิตช์อยู่ในเลนที่กว้างเกินไปทำให้ลูกบอลหมุนไปรอบ ๆ พวกมันได้ มิฉะนั้นอาจเป็นผลมาจากการล่าช้าเกินเหตุในรหัส ตัวอย่างเช่นหากคุณกำลังเล่นเสียงโดยใช้คลังเสียงและคำสั่งล่าช้า () Arduino จะไม่สามารถรับอินพุตได้ในช่วงเวลานั้น วิธีแก้ปัญหาหนึ่งที่เราใช้คือเล่นเสียงเฉพาะสำหรับทางลาด, เป้าหมายสแตนด์อะโลน, ปุ่มเริ่มต้น, และสวิตช์สิ้นสุดเกมเนื่องจากเรารู้ว่าจะต้องใช้เวลานานเท่าใดหลังจากการถ่ายภาพเหล่านี้ก่อนที่อินพุตใหม่จะถูกทริกเกอร์ .
เป็นที่ยอมรับว่าเราไม่ได้กำหนดส่วนหัวเฉพาะสำหรับไฟหรือโซเลนอยด์ที่เฉพาะเจาะจงซึ่งหมายความว่าครั้งแรกที่คุณเสียบทุกอย่างใน (หรือครั้งต่อ ๆ ไปหากคุณไม่ติดป้ายอย่างใด), พินเอาต์พุต (หรือการเข้ารหัสแสง) คำสั่งโดยพลการ ใช้การทดลองและข้อผิดพลาดเพื่อแก้ไขว่าพินใดสอดคล้องกับเอาท์พุทใดและปรับรหัสตามนั้น สำหรับไฟและกันชนสิ่งนี้ไม่ได้เลวร้ายนัก - แต่ติดป้ายอินพุตทั้งหมดและเขียนลงไปอย่างแน่นอนซึ่งกระบวนการนี้สามารถมีค่าได้ถึง 24 ค่าและใช้เวลาในการปรับเทียบนานขึ้นเล็กน้อย
ตัวเข้ารหัสมีคุณสมบัติที่โชคร้ายในบางครั้งการเต้นของหมุดตัวบ่งชี้สูงก่อนที่ขาตัวเข้ารหัส 5 ตัวจะแก้ไขค่าได้อย่างสมบูรณ์ สำหรับเราเรารู้ว่าสิ่งนี้เกิดขึ้นเมื่อจำนวนของสวิตช์ที่ถูกกดถูกปิดลงทีละรายการ แต่มันอาจปรากฏขึ้นแตกต่างกันสำหรับคุณ เราแก้ไขปัญหานี้โดยใช้ห้องสมุด debouncing เพื่อสร้างความล่าช้าเล็กน้อยเมื่อเราสังเกตว่าสวิตช์มีการเปลี่ยนแปลงและเมื่อเราบันทึกสวิตช์ใด แม้ว่าความล่าช้ามากเกินไป (มากกว่า 15-20mS) อาจทำให้คุณพลาดอินพุตทั้งหมด
ขออภัยเรายังไม่พบวิธีแก้ปัญหาที่ดีสำหรับอันนี้