วิธีการสร้าง Arduino Pinball Machine: 15 ขั้นตอน (พร้อมรูปภาพ)

Arduino Pinball Machine - 3d Printing & Lasercutting

Arduino Pinball Machine - 3d Printing & Lasercutting

สารบัญ:

Anonim

หากคุณชอบฉันคุณชอบเกมพินบอล แต่ไม่มีเงินซื้อหรือพื้นที่เพื่อให้เหมาะกับเกมขนาดเต็ม ดังนั้นทำไมไม่สร้างของคุณเอง?

ที่นี่เราจะอธิบายวิธีสร้างเกมพินบอลของคุณเองโดยใช้ 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)

  1. เปิด
  2. เปิด
  3. ขาอินเตอร์รัปต์ / อินพุตแอ็คทีฟ
  4. ขาอินพุตที่เข้ารหัส
  5. ขาอินพุตที่เข้ารหัส
  6. ขาอินพุตที่เข้ารหัส
  7. ขาอินพุตที่เข้ารหัส
  8. ขาอินพุตที่เข้ารหัส
  9. กันชนด้านขวา
  10. เอาท์พุทกันชนกลาง
  11. กันชนด้านซ้ายออก
  12. ปล่อยเอาต์พุตเป้าหมาย
  13. เอาต์พุตสวิตช์หลักของ Flipper
  14. สวิตช์ไฟหลักออก
  15. ไฟขาออก
  16. ไฟขาออก
  17. ไฟขาออก
  18. พินเอาต์พุตเสียง
  19. เปิด

แม้ว่าจะไม่ได้นำมาใช้ในการออกแบบของเราหมุด 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

  1. แตกซิปไฟล์ arduino-serial
  2. นำทางไปยังไฟล์ arduino-serial และบันทึกไฟล์ config เกมของคุณที่นี่ “ Pinball.txt” แสดงตัวอย่างเทมเพลตที่คุณสามารถใช้ได้
  3. เปิด Arduino อัพโหลดภาพร่างเกมพินบอล
  4. เปิดเทอร์มินัลแล้วพิมพ์คำสั่งต่อไปนี้:
    • ทำ
    • ./arduino-serial -b 9600 -p pinball.txt
  5. ตอนนี้เราควรอ่านและเก็บข้อมูลในหน่วยความจำภายในของ Arduino หากมีเส้นผิดปกติ Arduino จะพิมพ์ข้อความแสดงข้อผิดพลาดและคุณสามารถเลือกที่จะส่งไฟล์อีกครั้ง
  6. เมื่อคุณอัปโหลดรหัสโดยใช้เทอร์มินัลเช่น เมื่อ Arduino พิมพ์ข้อความ“ เสร็จสิ้น” คุณสามารถเปิด Arduino Serial เพื่ออ่านข้อความจากเกมที่กำลังดำเนินการอยู่

ปัญหาทั่วไป / การปรับให้เหมาะสมที่สุดสำหรับเกมซอฟต์แวร์

  1. เกมที่กำหนดค่าตายตัวและกำหนดค่าได้ - เราสังเกตเห็นว่าการขัดจังหวะในเกมแบบ hard-coded นั้นตอบสนองได้แม่นยำกว่าเกมที่ปรับแต่งได้ อาจเป็นเพราะเกมที่ปรับแต่งได้นั้นมีฟังก์ชั่นวัตถุประสงค์ทั่วไปมากมายซึ่งจำเป็นต้องมีเงื่อนไข สิ่งนี้ทำให้ความเร็วในการอ่านของลูปช้าลงซึ่งทำให้เราพลาดการขัดจังหวะหลายครั้งและส่งผลต่อความเร็วในการทำงานโดยรวมของเกม ในการแก้ปัญหานี้เราได้ลดความสามารถในการปรับแต่งบางอย่างของเกมตั้งค่าเพื่อให้ได้เวลาตอบสนองที่ยอมรับได้ในวงจร เดิมเรามีความกังวลเกี่ยวกับความจุ RAM ของ Arduino และจำนวนของกฎของเกมที่สามารถจัดเก็บได้ แต่สิ่งนี้กลับกลายเป็นปัญหาน้อยกว่าที่คาดไว้เดิมและมันเป็นความเร็วของการวนรอบที่เป็นปัจจัย จำกัด ที่ใหญ่กว่า
  2. การเปิดตัวอินเตอร์รัปต์ - เนื่องจากการกระทำที่รวดเร็วของเกมพินบอลเรามีหลายกรณีที่หมุดอินเตอร์รัปต์ได้รับอินเทอร์รัปต์หลายอันสำหรับพินบอลตีเพียงองค์ประกอบเกมเดียว นอกจากนี้เนื่องจากอินเทอร์รัปต์เหล่านี้ได้รับก่อนที่ตัวเข้ารหัสจะมีเวลาอ่านอินพุตทั้งหมดอย่างถูกต้องอินเทอร์รัปต์จะเชื่อมโยงกับส่วนประกอบที่ไม่ถูกต้อง เพื่อแก้ปัญหานี้เราใช้ไลบรารี่ภายนอกที่ตอบสนอง 1ms หลังจากได้รับการขัดจังหวะครั้งแรกโดยให้เวลาสำหรับหมุดตัวเข้ารหัสเพื่อให้สูงก่อนที่เกมจะอ่านรหัสอินพุต
  3. ดิสเพลย์ - แม้ว่าจอแสดงผลแบบอนุกรมอนุญาตให้เกมพิมพ์ข้อความโดยละเอียด แต่ผู้เล่นจะอ่านข้อความขาออกได้ยากเมื่อเล่นเกมพินบอลที่รวดเร็ว นอกจากนี้ยังยากที่ผู้เล่นจะต้องเล่นเกมด้วยคอมพิวเตอร์ที่ต่ออยู่ ในอนาคตเราหวังว่าจะใช้จอแสดงผลดิจิตอลที่สามารถแสดงคะแนนและข้อมูลเกมอื่น ๆ ในจอแสดงผลที่ผู้ใช้สามารถดูได้ง่ายเช่นเมทริกซ์ 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) อาจทำให้คุณพลาดอินพุตทั้งหมด

ขออภัยเรายังไม่พบวิธีแก้ปัญหาที่ดีสำหรับอันนี้