Жив

Как да изградим Pindu машина Arduino: 15 стъпки (със снимки)

ЦВЕТНАЯ ЯИЧНИЦА (ПОЛНАЯ ВЕРСИЯ) И ЖЕЛЕЙНЫЙ МЕДВЕДЬ ВАЛЕРА

ЦВЕТНАЯ ЯИЧНИЦА (ПОЛНАЯ ВЕРСИЯ) И ЖЕЛЕЙНЫЙ МЕДВЕДЬ ВАЛЕРА

Съдържание:

Anonim

Ако ме харесвате, обичате пинбол, но не разполагате с пари за закупуване или място, за да се поберат игра с пълен размер. Така че защо да не изградиш свой?

Тук ще прегледаме как да създадем своя собствена пинбол игра, задвижвана от Arduino. Играта има светлини, звуци, функции истински пинбол части, включително брони, капка цели, и прашка, и дори има рампа.

Този проект изисква много голямо количество и разнообразие от материали, затова консултирайте се с всеки следващ раздел за новите материали, необходими за завършване на всяка стъпка. Като начало е много полезно, ако имате достъп до лазерна машина или CNC рутер, както и основни електронни и хардуерни инструменти.

Бележка на автора: Тази инструкция беше публикувана съвсем наскоро и не всички файлове за дизайн и софтуер бяха напълно организирани. Ако планирате да използвате нашите файлове, моля, оставете коментар, за да сме сигурни, че всичко е в най-актуалното си състояние.

градина:

Стъпка 1: Дизайн

На снимката по-горе е Solidworks дизайн на игралното поле и поддържащ монтаж. Игралното поле е изцяло обичайно, но линиите на изстрела (като кривата на обратната извивка на гърба) са проектирани на базата на истински пинбол машини, за да се осигури гладка игра. Една трудност тук е, че поради тяхната сложност, действителните части на пинбол (напр. Броните и целите на падане) не са моделирани, но трябва да се внимава, за да се гарантира, че всичко ще се побере под игралното поле - частите са много по-големи. отдолу, отколкото по-горе.

Файловете са включени в хранилището, така че не се колебайте да регулирате дизайна, за да отговарят на вашите фантазии.

Няколко акцента на дизайна:

Игралното поле е с размери 42 инча с 20,25 инча, точно с размерите на игрите в стил Bally от 1980 година. Изработена е от ½ ”шперплат, който е стандартен и не трябва да се променя, тъй като монтажните части на пинбол са проектирани за тази дебелина. Стените тук се състоят от ½ ”слой върху.” Слой. В първия прототип бяха включени само ½ ”стени, но те се оказаха твърде къси и можеха да забият пинбол във въздуха с особено твърди изстрели. На второ място, този дизайн позволява леко повдигната стрелец линия (на снимката по-горе), която позволява на топката да падне леко в игралното поле, но не и да се върне обратно.

Рампата е проектирана с прозрачни акрилни и 3D печатни носители. Той пресича игралното поле, така че дава възможност на играча да удари рампата няколко пъти подред от левия флипер. Като такъв, ясният акрил се използва, за да не възпрепятства изгледа на играча в таблицата:

И накрая, игралното поле е подкрепено от къси стени в четирите ъгъла, които поддържат игралното поле при стандартните 6,5 градуса наклон. Задната стена има долна "рафт", която може да се свали и се използва за монтиране на електрониката. Това води до игра с пълноразмерно игрално поле, но е много по-компактна от типичната игра и може да бъде пренесена на ръка от един човек. Тъй като игровото поле е стандартен размер, обаче, тези опори могат да бъдат премахнати, ако искате да поставите игралното поле в стандартен кабинет за пинбол. За да направите това, може да искате да помислите за добавяне на връщане на топка, което не е включено в този дизайн.

Стъпка 2: Изрежете дървото

За да изрежем слоевете на игралното поле, използвахме лазерен нож. Въпреки това, лазерният нож, който е достатъчно мощен, за да изреже ½ ”шперплат, е трудно да се намери, изисква висококачествен шперплат и може да рискува да започне пожар, ако не внимавате. Типичните игрища се изрязват с помощта на CNC рутер - макар че някои от ъглите може да не са толкова ясни, все пак трябва да постигнете прилични резултати. За простота, стъпките по-долу ще предполагат, че имате достъп до същия лазерен нож, който направихме. Има някои хора, които са имали достойни резултати, използвайки само тренировка и пъзел, но трябва да бъдете много внимателни и много търпеливи, ако отидете по този път.

Първата стъпка в създаването на игралното поле е превръщането на дизайна в .DXF файлове, които могат да се подават в лазерния нож. Например, игралното поле .DXF е изобразено по-долу. Файловете, използвани в този проект, са включени в нашето хранилище.

Използвайки лазерния режещ инструмент, ние изрязваме форми за игралното поле, междинния слой d ”(използвахме duron, по-евтин дървообразен материал за прототипи, но will“ шперплатът също ще работи), ½ ”горния слой и ½” поддържа.

Необходими материали:

  • ½ ”шперплат за игралното поле и базата
  • Or ”шперплат или duron за междинния слой на стената
  • Винтове за дърво ½ ”, ¾” и 1 ”
  • Достъп до CNC рутер или лазерен нож

Стъпка 3: Сглобете игралното поле

Започнете с притискане на парчетата от слоя onto ”duron върху шперплат в съответните им места. С помощта на ръчна бормашина първо пробийте пилотни отвори с 3/32 ”бит, а след това използвайте плоски главни ¾” винтове за дърво, за да прикрепите слоя layer ”към игралното поле Важно е да направите това от горе надолу (т.е. така че винтът първо минава през ¼ ”слоя, след това в ½” базата, тъй като parts ”частите са малки и тънки и ще се огъват от основния слой, ако бъдат пробити в обратна посока. Важно е също така да се уверите, че главите на винтовете са подравнени с ¼ ”и не осигуряват допълнителна дебелина.

Една последна бележка: тези винтове могат да отидат почти навсякъде, тъй като този слой ще бъде най-вече невидим за играча, след като игралното поле бъде сглобено. Но има едно изключение - не поставяйте винтове в лентата на стрелеца. (Първоначално направихме тази грешка).

След това прикрепете страничните стени и използвайте най-дългите винтове за дърво, за да пробиете в тях от горната част на плоскостта, отново така, че главите на винтовете да се изравнят с горната част. След като това е направено, затегнете ½ ”слоевете на върха на duron, и ги завийте както преди, с изключение на това, че този път се завинтва от дъното с помощта на 1" винт. Тъй като горният слой е ½ "дебел, е по-малко вероятно за да се наведе настрани от основата и завиването отдолу гарантира, че винтовете остават невидими за плейъра.

И накрая, прикрепете блока на стрелеца (на снимката по-горе, със стрелецът), като завиете от долната страна с помощта на 2 винта, така че блокът не може лесно да се завърти. Шутър блокът има "U" -образен слот, който пасва на стрелеца, който може да бъде инсталиран чрез затягане на гайката от другата страна. Може също да се наложи да използвате лубрикант, за да намалите триенето между стрелката и топката.

Дизайнът може да се нуждае от някои корекции в този момент. Например, в нашия проект, разрезът за целите на падане беше твърде тесен и трябваше да се разшири с помощта на dremel. Ако използвате нашите файлове като повече от препратка, опитайте се да се свържете с авторите, които биха могли да предоставят актуализирани файлове. Също така е добра идея да се опесъчат всички груби зони, особено когато се срещат две парчета дърво.

В по-голямата си част това завършва дървообработването и можем да преминем към въвеждане на компоненти.

Необходими материали:

  • Винтове за дърво с плоска глава 3/4 "
  • Стрелба сглобяване
  • По-дълги (~ 1.5 ") дървени винтове
  • Ръчна бормашина с 3/32 "бит
  • Смазочно масло
  • Винтове за дърво с плоска глава
  • Файл и / или дремел и шкурка

Стъпка 4: Добавете компонентите

До този момент на етапа на проектиране трябва да имате обща представа за ориентацията, необходима, за да сте сигурни, че всички компоненти действително се вписват под игралното поле. (Ако използвате нашия дизайн, направете справка с картината от долната страна на нашата таблица по-горе).

Първо, поставете мишените за спускане, целта за изправяне и сглобките на прашка, като поставите ½ ”винтове за дърво през монтажните отвори в комплекта. Направете същото и с помпените брони, но първо трябва да махнете капачката или да не се побере в дупката!

Второ, инсталирайте флиперните възли. Уверете се, че те се въртят в правилната посока. Соленоидът, когато бъде задействан, ще изхвърли щифта в намотката и това ще върти вала така, че флиперът да се върти нагоре към игралното поле. След като флипърът се монтира, прикрепете летящите прилепи от другата страна.Използвайте гаечен ключ върху заключващата гайка в сглобката, за да ги затегнете на място, след това използвайте пружината, която трябва да се достави заедно с комплекта, за да се уверите, че плавниците са изкривени обратно, когато не са изстреляни.

По същия начин, монтирайте всички превключватели за преобръщане, като използвате 1/2 "винтове, като се уверите, че те могат лесно да бъдат натиснати от горната и пружинната част на място. Използвайки болтовете 6-32, прикрепете и ключа за врата в горния ляв ъгъл. Този превключвател на врата служи и за еднопосочно отваряне, което позволява изстрелите от дясната страна и от стрелеца да попаднат в броните.Това е аспект на дизайна, в резултат на който снимките влизат в дясната рампа и десния контур различни места и добавя повече разнообразие към пиесата.

За да инсталирате светлините, първо поставете пластмасовите вложки в техните отвори. Тези вложки са с дебелина около ¼ ”. Ако използвате CNC рутер, правилният начин за монтирането им е да отрежете a ”слой малко по-голям от отвора за вмъкване. В нашия дизайн, тъй като лазерният резач не може да отреже частични слоеве, ние 3D-отпечатани скоби, които поддържат вложките. Използвайте епоксидна смола, за да задържите вложките на място (първо да опустошите ръбовете) и шкурка, за да се уверите, че вложките са на нивото на игралното поле.

След това поставете светодиодите в техните скоби, като ги поставите и завъртите на място. След това завийте скобите на място, така че тези светодиоди да седят точно под всяка вложка. Подредените по-долу светлинни скоби са доста тънки и в действителност са достатъчно тънки, за да могат 1/2 "винтовете да пробият горната част на масата. Използвайте няколко шайби, така че това да не се случи.

Полетата за игри се инсталират с помощта на болтовете 6-32. Веднъж инсталирани, обвийте гумите от гумения комплект около тях, за да направите пасивни брони. Те дават на масата много повече "живот", отколкото ако дизайнът е бил напълно шперплат. Използвайте същите болтове, прикрепете направляващите ленти точно над плавниците. Също така залепете превключвателя в края на играта на място.

Имайте предвид, че повечето игри имат специален комплект за връщане на топката като този тук. Това обаче не е включено в този проект, но главно поради разходите. Разбира се, компромисът е, че играчът е отговорен за поставянето на топката обратно в лентата на стрелеца, след като тя се източи. Ние обаче имаме стрелец, който е прикрепен към блока на стрелеца, както е изобразено по-рано.

Бутоните на плавника и бутонът за стартиране се инсталират чрез поставянето им в отворите и заключването им с палници. Превключвателите за крилца на бутоните са завинтени вътре в бутоните с болтове 6-32 и ще затворят превключвателната верига, когато бутоните бъдат натиснати.

В този момент вашата игрална площадка (от горе) ще прилича на почти пълна маса за пинбол! Липсва само рампата. Чувствайте се свободни да се радвате сред приятелите си за това колко страхотно изглежда, докато се страхувате лично от това колко кабели и спойки трябва да направите.

Необходими материали (по-голямата част са закупени от PinballLife.com и могат да бъдат намерени само чрез търсене на долните термини).

  • 1 3-банкова цел за спускане
  • 3x монтаж на помпа
  • 1 ляв флипер
  • 1 десен панел
  • 2 летящи прилепа
  • 2 бутона за плавници
  • 2 флипер бутона
  • 1 бутон за стартиране
  • 1 комплект гумен пръстен
  • ~ 30 заглавия със звезда за игра, (1 1/16 "използвани)
  • 2 водачи за платна
  • 2 превключвателя за превключване на листовите бутони
  • 2 комплекта прашка
  • 1 standup цел
  • 10 превключватели за преобръщане
  • 8 LED # 44 байонетни светлини
  • 8 ъглови скоби в стил байонет (миниатюрна байонетна основа с 2-жилен цокъл с дълъг монтажни скоби)
  • 5 1-1 / 2 "x 13/16" синя стрелка
  • 3 1 "x 3/4" чист патрон
  • 6-32 болта (2,5 ", както и някои по-малки размери), гайки и шайби
  • ~ 2 "широк превключвател на вратата (подобно на този тук, това може да е трудно да се намери, ние бракувахме нашата от стара счупена рампа за пинбол, закупена на ebay)

Стъпка 5: Изграждане на рампата

За да направите рампата, използвайте ac ”акрил за базовите парчета и ac” акрил за страничните стени. Ясният акрил ще даде хубав, чист вид, без да блокира изгледа на игралното поле. Използването на цветни акрили също може да бъде хубав вариант, но не се препоръчва използването на напълно непрозрачен материал като дърво.

Подложките за рампите са 3D отпечатани с помощта на машина за боядисване и закрепени с болтове към игралното поле и пластмасата с помощта на същите 6-32 болтове.

Акрилните парчета тук се залепват с помощта на акрилен цимент, който е разтворител, който по същество се топи и заварява пластмасата заедно. Уверете се, че използвате малко количество и то ще направи много силна връзка, която е почти невидима.

На входа на рампата включихме рампа, като тази на снимката по-горе. Това е тънко парче метал, което дава много плавен преход от игралното поле към пластмасата на рампата, вместо да има „пинбол“, който трябва да „скочи“ нагоре по ¼ ”дебелината на пластмасата. Можете да си купите един от тях евтино от специализиран магазин за пинбол или Ebay (ние го направихме), или просто да направите един от вашите собствени листове. В търговските игри те са приковани така, че болтовете да не се задържат и да се изпречат на топката. Тъй като не разполагахме с подходящо оборудване, за да направим това, се погрижихме да използваме винтове с плоска глава и правилно да измъкнем отвор в пластмасата и метала, за да постигнем същия ефект.

В предния десен ъгъл на рампата е прикрепен тесен превключвател на вратата, прикрепен към 3D носачите, където се превръща в игралното поле. Този превключвател е това, което записва, когато е ударен успешен изстрел на рампа.

Необходими материали:

  • 1/4 "ясен акрил (лист 12x24")
  • 1/2 "прозрачен акрил (12x24" лист)
  • Акрилен цимент
  • Достъп до 3D принтер и лазерен нож
  • Клапа на рампата
  • Болтове с плоска глава 6-32 за капака на рампата
  • Бормашина или ръчен инструмент
  • Превключвател с тясна порта

Стъпка 6: Планирайте електронен блок и контур

(Актуализация на автора: С удължена употреба, 48V може да взриви някои от транзисторите в тази конфигурация. Бих препоръчал да използвате 35V или по-ниска с тези електроника, или като използвате по-професионален ресурс за управление на борда като тези, изброени тук: http: // pinballmakers .com / уики / index.php / Строителство)

Тази машина има 3 нива на напрежение: 48V за соленоидната мощност, 6.3V за светодиодите и 5V за логиката и звука. За да осигурим тези нива на напрежение, използвахме захранване с ЦПУ за 48V и постоянните DC адаптери, за да осигурим 6.3V и 5V. (Би могло да бъде възможно да се използва само 6.3V, тъй като Arduino регулира захранващото напрежение до 5V изхода, но ние запазихме тези захранвания изолирани). 48V е високо напрежение, и въпреки че не е смъртоносен сам по себе си може да бъде вреден за частите и може бързо да причини прегряване на компонентите, ако има някакви проблеми с електрическата верига. Използвайте 5-A бавен предпазител както на входа, така и на изхода на основното захранване 48V, за да избегнете пожар, ако някой от транзисторите е къс.

На екрана на Arduino ние прикрепихме кабели с женски Molex конектори, проектирани така, че да отговарят на входните и изходните изисквания на всяка от трите под-платки: соленоидната платка на драйвера, платката за светлините / звука и входната платка.

В нашия дизайн, ние имахме следните пин задачи. Това, разбира се, е доста гъвкаво. Пин 0 бе оставен отворен. (Instructables не ни позволява да правим номерирани списъци, започващи с 0.)

  1. отворено
  2. отворено
  3. Прекъсване / вход Активен щифт
  4. Кодиран входен щифт
  5. Кодиран входен щифт
  6. Кодиран входен щифт
  7. Кодиран входен щифт
  8. Кодиран входен щифт
  9. Изход за дясна броня
  10. Изход за средна броня
  11. Изход за лява броня
  12. Пуснете целевия изход
  13. Изход за главен превключвател на Flipper
  14. Изход за главен светлинен превключвател
  15. Светлинен изходен щифт
  16. Светлинен изходен щифт
  17. Светлинен изходен щифт
  18. Звуков изход за звука
  19. отворено

Въпреки че не са приложени в нашия дизайн, щифтовете SCL и SDA могат да се използват за дисплей, а останалите щифтове могат да се използват за допълнителен контрол, като добавяне на функции (връщане на топката) или повече комбинации на осветление.

Необходими материали:

  • 48V CNC захранване (като този)
  • Извънредни захранвания от 6.3V и 5V (като тази)
  • 5A бавни предпазители и държачи за предпазители и термосвиваеми тръби за свързване
  • Molex конектори
  • Arduino прототип щит
  • Изобилие от 22AWG тел, спойка и търпение

Стъпка 7: Направете драйвери

Драйверната платка е отговорна за превръщането на входовете от Arduino, копчетата на флипер и превключвателя на прашка. Тъй като сигналите са на ниво 5V и соленоидите на 48V, тежки мощност MOSFETS са необходими за предаване на сигнала. Транзисторите, използвани в този дизайн са тези 100V-оценени MOSFETs от Mouser.

Има три схеми, изобразени по-горе, които включват плавници, прашки и предпазни цели. Всеки от тях има малко по-различни изисквания, но във всички тях, когато на транзистора е даден 5V сигнал, се отваря токов път за соленоида и 5-8 ампера се натискат през серпентина, за да се получи мощен удар. Това е много ток! В действителност, този много ток ще изгори компонентите, ако транзисторът е включен за повече от много кратък импулс. Уверете се, че при изпитването на тази верига, използвайки софтуер или други методи, никога не задействайте напълно соленоид за повече от секунда.

Основният източник на проблеми в горната схема е индуктивен удар. Соленоидите са мощни дросели и както знаете, токът в индукторите не може да се промени веднага. Като такъв, когато транзисторът е изключен, все още има кратък момент, когато 5-8 ампера текат през соленоида, и всичко, което се нуждае от ток някъде. Ако не е даден път към земята, този ток ще управлява напрежението в транзистора да се източи до стотици волта и да унищожи транзистора. Освен това, когато транзисторът е разрушен, той закъснява всичките три терминала, което причинява протичане на ампера от непрекъснат ток и може да унищожи соленоида, ако няма инсталиран подходящ предпазител. (Ние унищожихме 8 транзистора в нашето откритие и се опитваме да се справим с този проблем, но за щастие нямаме соленоиди, тъй като винаги сме били бързи за ръчно изключване на захранването).

Има два метода за предотвратяване на индуктивен удар: първо, всеки пинбол трябва да дойде с диод, който показва от транзисторния отток обратно към захранването. Това, на теория, трябва да предотврати изтичането на транзистора от всякога надвишаващо захранващото напрежение, тъй като веднъж това се случи, диодът ще включи и изцеди цялата останала енергия от индуктора. За съжаление, в действителност тези диоди сами по себе си не се включват достатъчно бързо, за да потиснат достатъчно индуктивния удар.

За да решим проблема, добавихме кръг от RC "snubber". Тази верига включва кондензатор последователно с резистор. Кондензаторът абсорбира достатъчно ток от индуктора, така че диодът има време да се включи и да изпълни своята функция. За повече информация за RC snubber схеми, проверете тук.

Схемата на соленоидния драйвер за броня / droptarget е сравнително проста и има само транзистор, соленоид, демпфер и връзка за приемане на входа от Arduino. В този съвет и следващите дъски, се уверете, че тел на соленоид такъв, че диод (който не е показан в схематични) точки към високо напрежение страна.

Флипер веригата водач е малко по-сложно по три причини. Първо, за да има бърза реакция между натискането на бутона и действието на плавника, се препоръчва да се създаде този отговор директно в схемата, а не като отделни входове и изходи, обработени от Arduino. Закъснението, причинено от Arduino, е малко, но опитен играч ще може да каже веднага и ще бъде разочарован от липсата на контрол.

Второ, плавниците имат две различни намотки (нискомощна и високомощна), превключвател на края на ход, който се задейства, когато флиперът е висок. Този превключвател служи на важната функция, позволяваща на първоначално да изстрелва високомощна бобина, за да даде мощен удар, но преминавайки към нискомощна бобина (~ 130 ома срещу 4 ома), която дава достатъчно сила, за да държи флипъра "нагоре" като докато бутонът е поставен, но не черпи толкова ток, че да изгори соленоида. На снимката по-долу, прекъсвачът EOS е нормално затворен, но нашата сглобка имаше нормално отворен ключ и изискваше друг транзистор за превръщането му в нормално затворен сигнал.

На трето място, докато искахме бутонът да контролира директно плавните перки, включихме и сигнала от главния превключвател от Arduino, който може да активира или деактивира плавниците в зависимост от това дали топката е в игра. Това води до използването на третия транзистор във веригата.

По същия начин дъската за прашка има свои собствени усложнения. Докато използва само един транзистор, той, подобно на плавниците, трябва да се контролира директно от входните превключватели (които сме свързали последователно) за бърз отговор, както и да не се изискват допълнителни изходни щифтове на Arduino. За съжаление, ако портата на транзистора е свързана директно към превключвателя, отговорът е твърде бърз, за ​​да има повече от едва забележим удар, тъй като превключвателят не остава затворен много дълго. За да имаме по-силен удар (т.е. отдаване под наем на прашника), добавихме диод и голям резистор в портата на транзисторите, което позволява бърз отговор, но създава голяма константа на времето на спадане на напрежението. в този възел, така че портата да остане близо до 5V (и транзистора) достатъчно дълго, за да има забележим удар, дори след като ключовете за прашка са били отворени отново. Друго усложнение е изпращането на този вход към Arduino, както изисква входната платка (както ще видим по-късно) ниско входове и прашка работи, когато входът е натиснат високо. За да решим този проблем, ние включихме и трети транзистор, който се затваря, когато входящият сигнал е висок и по този начин може да се третира като всеки друг входен превключвател на игралното поле.

Драйверната платка (всъщност две платки) се състои от два драйвера за флипер, два драйвера за прашка и четири едноредукторни драйвери за останалите соленоиди. Вместо директно запояване използвахме 0.1 ”molex съединители, за да прикрепим тази платка към соленоидите, захранването и превключвателите, така че всички поправки или корекции да се направят по-лесно.

Използвахме запоени дъски за нашите проекти, но проектирането на реални печатни платки с тези функции би имало много по-чист резултат и ще помогне за смекчаване на бъркотията от кабели, които тези машини неизбежно имат.

материали:

  • 12 транзистора с номинална мощност 100V
  • 10-50 uF кондензатори (ако е възможно, неполярни)
  • Резистори 300, 5k и 500k и 3M
  • 1 по-малък транзистор за превключвател на прашка
  • Няколко диоди 1N4004
  • Прототипни запоени дъски (или, още по-добре, проектиране на собствени печатни платки)

Стъпка 8: Направете платката за въвеждане на сензор

Тъй като използваме само Arduino, ние сме ограничени до 20 цифрови пина. Машината за пинбол обаче има няколко десетки уникални превключвателни входа, да не говорим за изходите, необходими за светлините, звука и задвижващите соленоиди. За да смекчим този проблем, направихме предположението, че няма да бъдат задействани два входа наведнъж (което ще ни ограничи до използването само на 1 топка). Това допускане ни позволява да "кодираме" входовете на превключвателите, като ги конвертираме в 5-битов двоичен регистър с 6-ти щифт, който задейства прекъсване при всяко приемане на валиден превключвател. За да постигнем това, използвахме каскада от 8 до 3 енкодера, за да направим 24-към-5 енкодер, използвайки този енкодер в оформлението, показано на снимките по-горе.

Това беше едно от най-важните разработки на проекта, тъй като ни позволи значително да увеличим сложността на нашата машина от първоначалния ни план да имаме само плавници, брони и една или две цели.

Втората прототипна платка е използвана за поставяне на всеки от 24-те мъжки Molex конектора; всеки превключвател на игралното поле ще има женски конектор в края на дълъг проводник, който се включва в тази платка. Целите на падането са уникален случай, който може да се обработва по няколко начина. Това, което направихме, е да прехвърляме всеки сепариращ прекъсвач на цели, така че входът да се затвори, когато всички са спуснати и позволява на Arduino да изпрати сигнал към соленоида, за да запали целта на падането.

материали:

  • 4 приоритетни 8-до 3-енкодера с 3 състояния

Стъпка 9: Направете светлината / звука / оценката на периферния съвет

За да запазим пина по подобен начин на енкодера, използвахме декодер 3 към 8, за да контролираме нашите светлини. Това ни предостави ограничението, че не можем да запалим повече от една светлина по едно и също време, но това беше приемлив компромис, за да освободим щифтовете за други елементи. Включихме и 4-тия “master” светлинен изход, който може да контролира всички светлини едновременно. Това, например, може да ни позволи да проблясваме всички светлини няколко пъти, когато играта първо се включи (давайки силна индикация, че нещо действително се случва на играча, когато той или тя натисне бутона за стартиране, което иначе е трудно без топка за топка или цветен дисплей).

Горните схематични характеристики на транзисторна верига, подобна на драйверите, но много по-прости, тъй като по-ниските напрежения в играта (6.3V за светлините) се нуждаят от по-малки транзистори и не изискват толкова защитни схеми. Използвахме диод ИЛИ порта за транзисторите, за да изолираме сигнала на главния превключвател и индивидуалния светлинен сигнал. Това ни позволява да използваме само един транзистор за една светлина вместо две и предотвратяваме чиповете на Arduino и енкодера от "борба" до източник на ток или източник на ток.

Докато използвахме ниско-текущите светодиоди за всяко от игровите светлини (тези под вложките), стартовият бутон и трите поп-брони всеки дойде с крушки с нажежаема жичка, които привличат по 250 mA всеки. Транзисторите са оценени за 530mA непрекъснат ток, така че да не надхвърлят това, ние се уверихме, че само два нажежаеми някога са преминали през един транзистор.

Прикачихме и пасивен 5V пиезо зумер, който ни позволява да играем елементарни звуци на тази платка.

Персонализираните светлинни и звукови последователности могат да бъдат програмирани с помощта на функции light_sequence + sound_sequence или чрез интерфейса на Pinball Language.

  • 10 транзистора за осветление (използвахме тези)
  • 5V Piezo зумер

Стъпка 10: Стъпка 11: Дизайн на правилата на играта

Има две възможности за определяне на правилата на пинбол играта. Можете да взаимодействате с играта, като използвате персонализиран пинбол документ или правила за твърд код. Правилата с твърдо кодирани игри позволяват по-голяма гъвкавост, включително последователни снимки и времеви бонуси, докато използването на системата за пинбол документ / парсер позволява по-гъвкави, но по-прости правила. Ще започнем с интерфейса за конфигурируемата игра, след което ще изложим някои от правилата на играта, така че да можете да изберете коя конфигурация искате за вашата собствена пинбол игра.

Вижте хранилището на github тук за файловете, споменати в този проект.

Част 1. Създайте правилата си за игра

Машината по подразбиране за игра на пинбол е представена на снимката.

Това се предоставя в стартовия код по подразбиране. Сега имате две възможности - или да напишете свой собствен код за машината, или да използвате определеното форматиране за пинбол играта.

Стъпка 11: Опция 1. Напишете свой собствен файл Pinball.txt

В документа с пинбол текст ще намерите три раздела: един за части, един за "състояния" и един за "действия". Тук можете да дефинирате конкретните действия за всеки компонент. За повечето компоненти вероятно ще искате да се придържате към машина за състояние с една държава. Например, ако всеки път, когато ударът е ударен, играчът трябва да отбележи още 100 точки, да запали рампа и да получи 100 точки, след това диаграмата на състоянието ще изглежда като фигура 1 със съответния код. Ако искате компонент да има машина с много състояния, да речем, че искате светлина да се включи, когато се удари бронята, и след това да се изключи, когато се удари отново, диаграмата на състоянието ви / съответните състояния ще изглеждат като фигура 2 Нашата конкретна машина осигурява структурите, както на фигура 3, за които можете да дефинирате правила. Техните имена, вътрешни кодирани макроси (за които не е нужно да се притеснявате, но биха могли да бъдат полезни, ако решите да изследвате изходния код) и кодовете на прекъсванията са дадени на фигура 3. Фигура 4 свързва тези имена с компоненти на игровото поле.

Съвети за писане на вашата пинбол игра
Тъй като компонентите на играта са свързани с конкретни прекъсвания (обозначени с полето „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 и запишете конфигурационния файл на играта тук. „Pinball.txt“ предоставя примерен шаблон, който можете да използвате.
  3. Отворете Arduino. Качете скицата за пинбол.
  4. Отворете терминала и въведете следните команди:
    • правя
    • ./arduino-serial -b 9600 -p pinball.txt
  5. Сега трябва да четем и съхраняваме данни в вътрешната памет на Arduino. Ако има някакви деформирани линии, Arduino ще отпечата съобщение за грешка и можете да изберете да изпратите файла отново.
  6. Когато сте готови с качването на кода, използвайки терминал, напр. когато Arduino отпечата „завършено“ съобщение, можете да отворите Arduino Serial, за да четете съобщения от играта в процес на изпълнение.

Общи проблеми / оптимизации за софтуерната игра

  1. Твърдо кодирани и конфигурируеми игри - забелязахме, че прекъсванията в твърдо кодираната игра реагираха много по-точно, отколкото в персонализираната игра. Това може да се дължи на това, че персонализираната игра има много функции с общо предназначение, които изискват условни изрази. Това забави скоростта на четене на цикъла, което ни накара да пропуснем няколко прекъсвания и да повлияем на общата оперативна скорост на играта. За да разрешим този проблем, ние намалихме някои от възможностите за конфигуриране на конфигурационната игра, за да постигнем приемливо време за реакция във веригата. Първоначално имахме притеснения относно капацитета на RAM на Arduino и колко от правилата на играта могат да се съхраняват, но това се оказа по-малко проблем от първоначално очакваното и скоростта на цикъла беше по-големият ограничаващ фактор.
  2. Отблъскване на прекъсвачи - заради бързите действия на пинбол играта, имахме няколко случая, през които прекъсващия щифт получаваше няколко прекъсвания, за да удари пинбола само в един компонент на играта. Освен това, тъй като тези прекъсвания са били получени преди енкодерът да има време да прочете правилно всички входове, прекъсванията ще бъдат свързани с неправилни компоненти. За да решим този проблем, използвахме външна библиотека, която отговаря на 1 мс след получаване на първото прекъсване, давайки време на щифтовете на енкодера да достигнат високо преди играта да прочете входния код.
  3. Дисплей - Въпреки че серийният дисплей позволява на играта да отпечата подробни съобщения, играчът трудно може да прочете изходните съобщения, когато играе бързо игра на пинбол. Също така е тромаво за играча да играе с прикачен компютър. В бъдеще се надяваме да приложим цифров дисплей, който да показва резултатите и другата информация за играта в дисплей, който потребителят може да вижда лесно, като например LED матрица или 7-сегментен дисплей.

Стъпка 14: Вариант 2: Съвети за твърдо кодиране на вашата собствена игра

Първо - прочетете документа state_machine_headers.h, за да разберете глобалните структури от данни, които съхраняват информация за състоянието на машината. Трябва да инициализирате тези структури от данни в правилата на играта в рамките на Arduino IDE, преди да ги заредите в кода на Arduino. Предоставят се следните структури от данни:

Структури на игрите за съхраняване на информация за всяка част Държави за съхраняване на информация за преходите на състояния Действия за задържане на информация за изпълняваните действия Тези структури се попълват от файла за четене. Определете входовете / изходите за всички щифтове. Прекъсващите щифтове трябва да се дефинират като INPUT игли.

В рамките на основния цикъл проверете всеки цикъл, за да видите дали е прекъсната за всеки компонент на играта. Определете всеки компонент на играта в декларация за превключване.

Помощната функция executeState актуализира текущото състояние на детайла и изпълнява действия въз основа на вградената информация.

Твърдо кодираната първа версия на кода на играта може да бъде намерена във файла „simplepinballgame.ino“

Стъпка 15: Свържете всичко

За да се свърже с Arduino с нашите платки за драйвери, ние използвахме протошол за по-лесен достъп до щифтовете на другите платки. Има много кабели, така че бъдете внимателни! Следвайте оформлението, дадено в Електронни щифтове и оформление, за да свържете вашите изходи Arduino към съответните им щифтове. Molex конекторите трябва да помогнат много за разбирането кои конектори се свързват с кои.

Ето кратък често задаван въпрос за отстраняване на неизправности в случай, че срещнете някой от често срещаните проблеми, които направихме:

Естеството на входния енкодер е, че има 6 входни щифта в Arduino: 5, които заедно показват кой вход е задействан, и 6-ти пин, който отива високо, ако се задейства само един вход. Написаният код открива само когато този шести пин се променя от нисък към висок. Така че, ако Arduino не получава никакви входове и сте сигурни, че всички или поне повечето от комутаторите работят, проверете дали някой ключ не е затворен. Например, ако всички цели на падането са надолу и не са били изстреляни обратно, това е затворен ключ и не позволява на Arduino да получава други входове.

Проверете дали гайката, която държи стрелеца на място, е затегната напълно, или че блокът на стрелеца не е свободен. Като алтернатива, смажете стреловата пръчка.

Това може да се окаже механичен / дизайнерски проблем, ако ключовете са поставени в твърде широка лента, позволявайки на топката да ги заобикаля. В противен случай може да е резултат от твърде дълго забавяне някъде в кода. Ако, например, сте заети да слушате тон, използвайки тоналната библиотека и оператора за закъснение (), Arduino няма да може да получава входове през това време. Един от начините, по които използвахме, беше да възпроизведем само звуци за изстрел на рампата, цел на стартиране, бутон за стартиране и ключ за игра, тъй като знаехме колко време ще имаме след тези снимки, преди да има вероятност да се задейства нов вход ,

Вярно е, че не сме задали конкретни заглавки за конкретни светлини или конкретни соленоиди, което означава, че при първото включване на всичко в (или следващите пъти, ако не ги маркирате по някакъв начин), изходните пинове (или кодирането на изходната светлина) са свързани в произволен ред. Използвайте пробна и грешка, за да решите кои щифтове съответстват на изхода и съответно коригирайте кода. За светлините и броните, това не е толкова лошо - но определено обозначете всички входове и запишете кой е кой, тъй като този процес може да има до 24 стойности и ще отнеме малко повече време за калибриране.

Енкодерът има неприятното свойство понякога да пулсира индикаторния щифт, преди 5-те щифта на енкодера да са напълно разрешили своите стойности. За нас знаехме, че това се е случило, когато номерът на натиснатия превключвател е бил един по един, но може да се появи по различен начин за вас. Решихме този проблем, като използвахме debouncing библиотека, за да създадем малко закъснение между това, когато забележим, че комутираното се е променило и когато записваме кой е бил. Внимавайте обаче, тъй като твърде многото закъснение (повече от 15-20mS) може да ви накара да изпуснете изцяло входовете.

Съжаляваме, но все още не сме намерили добро решение за това.