Innehållsförteckning:

Lapcade Arcade Controller: 6 steg (med bilder)
Lapcade Arcade Controller: 6 steg (med bilder)

Video: Lapcade Arcade Controller: 6 steg (med bilder)

Video: Lapcade Arcade Controller: 6 steg (med bilder)
Video: 07 29 81 2024, December
Anonim
Lapcade Arcade Controller
Lapcade Arcade Controller

Jag är inte mycket av en spelare. När jag var liten var jag mer intresserad av att se hur de fungerade än att spela dem. Jag kan räkna på en hand hur många arkadspel jag spelade regelbundet. Med detta sagt skulle det vara lätt för någon att tycka att det var konstigt att jag skulle ta mig tid att bygga en arkadkontroll. Det är dock ett av mina favoritprojekt hittills. Förutom att vara utmanande att utforma, koda och bygga, är det också en påminnelse om en tidigare era med robusta mekaniska knappar och joysticks.

Borta är Arcades dagar men du kan fortfarande få känslan av ett klassiskt arkadspel precis i ditt eget vardagsrum. Så här presenterar jag Lapcade för dig. Om du är som jag och tycker om att bygga saker mer än att spela, kanske du gillar det här bygget. Om du har några frågor eller förslag som inte ingår i avsnittet "idéer för version 2" nedan, lämna en kommentar.

Steg 1: Översikt

Översikt
Översikt
Översikt
Översikt

Vad är det här för sak?

Observera först vad Lapcade inte är:

  • Det är inte en spelkonsol.
  • Den har inga spel och har inte heller möjlighet att ladda och spela spel.
  • Den ansluts inte till en TV eller bildskärm.

Lapcade är ett Bluetooth -tangentbord. Varken mer eller mindre.

Jag tar upp detta eftersom det har varit en del förvirring kring denna punkt. Jag har haft många frågor om vilka spel som kan laddas på det och vilken typ av videogränssnitt det använder - det kan inte och inte! Det är helt beroende av vilken dator du ansluter den till och i det avseendet är himlen gränsen. Om din enhet kan acceptera ett Bluetooth -tangentbord, bör Lapcade fungera med det. Jag har inte provat det men jag har sett andra projekt som har använt EZ-Key (beskrivs nedan) anslutna till handenheter. Så teoretiskt kan du ansluta den här enheten till vilken dator som helst som kör Windows, Linux, ChromeOS, MAC, etc. samt Raspberry Pi, Android, iOS och andra som stöder Bluetooth v2.1. Ändring av nyckelkoder kan dock krävas.

Förversion 1

Ursprungligen hittade jag en produkt som heter Adafruit Bluefruit EZ -Key bluetooth HID (Human interface device - think keyboard) som skulle tillåta mig att ansluta bekanta klickiga knappar och skicka tangenttryckningar som ett tangentbord. När jag först byggde ut en controller baserad på EZ-Key följde jag en uppsättning instruktioner för att bygga en enkel och rak framåtkontroll och det fungerade utmärkt. Jag använde regulatorn i en tung träram utan problem i några månader. Du är dock begränsad till 12 ingångar och det finns inget sätt att ändra nyckelkoden som överförs av enheten utan att omprogrammera EZ-Key-ingångsstiften.

När jag använde mitt Kodi -mediacenter för att visa installerade spel, ville jag växla mellan att styra mediacenter och spel utan att behöva använda flera kontroller / fjärrkontroller. Jag ville också få enheten att justera så min vänsterhänta son kunde använda den som han ville.

Jag använde också 4 AA -batterier för att driva enheten och ur lådan såg det inte ut att ha ett lågt strömläge. Batterierna skulle sugas torra på en dag eller två även om de inte användes.

Så, på uppmaning av en vän till mig, bestämde jag mig för att bygga en programmerbar version av samma handkontroll som hade snabba lägesändringar, skulle låta mig använda samma enhet för att styra flera applikationer, kan också "vändas" för vänster hand använd och var i ett bärbart fodral som var mycket mindre än min nuvarande 10 pund lösning.

Det var dags för en uppgradering.

Version 1 DesignProject Goals:

  • Flexibel
  • Laddningsbar
  • För vänster och höger
  • Inga sladdar
  • Lättvikt

Jag ville att den här nya designen skulle vara flexibel. Kontrollerna måste kunna ändras i farten utan att behöva omprogrammera komponenterna varje gång ett test eller en ändring måste göras. Detta innebar att det behövde finnas ett gränssnitt på regulatorn för att välja "driftsätt". Varje knapp och joystickposition skulle behöva ha olika nyckelkoder associerade med den. Samma kontroller skulle också behöva användas för att välja de olika lägena.

EZ-Key var inte direkt programmerbar i realtid så nästa lösning skulle vara att använda en controller som en Arduino för att hantera funktionalitet. EZ-nyckeln skulle enbart användas för att överföra nyckelkoderna till datorn via Bluetooth. Jag valde Arduino Pro Mini på grund av dess direkta kompatibilitet med UNO (som jag redan hade erfarenhet av) och på grund av dess kompakta storlek.

Jag ville inte hantera batterier med den här nya lådan som jag gjorde med Lapcades föregångare, så jag valde att använda ett uppladdningsbart litiumpolymerbatteri och laddare/matningskort. Detta innebar att jag bara kunde använda en vanlig USB -laddare. Det innebar också att jag inte skulle behöva öppna väskan varje gång batterierna dog. EZ-nyckeln och PowerBoost 500C har båda indikatorer som behövde överföras till ovansidan av styrenheten för parningsstatus och låg batterinivå. Jag lade till några lysdioder i designen så att jag kunde reflektera dessa praktiska statusindikatorer för användaren under drift.

När testningen av min design mognade upptäckte jag att flera av mina ursprungliga idéer inte var som jag hade förväntat mig. Till exempel fungerar inte LBO -indikatorn på PowerBoost som förväntat när den är kopplad till en mikrokontroller. Det tillåter ström att passera genom den gemensamma marken från batteriet medan enheten är "av" eller inaktiverad, LBO -lampan tänds och förblir tänd. Andra i Adafruit -forumet hade också stött på detta problem och erbjöd en bättre lösning för att sampla batterispänningen direkt på en analog ingång. När spänningen sjunker till en viss nivå är det dags att låta användaren veta att batteriet är på väg att stängas av.

Steg 2: Vad du behöver

Elektronisk reservdelslista

Detta slutade med att bli en ganska komplicerad konstruktion. Du behöver inte använda samma delar som jag gjorde, men om du använder en ersättningsdel, se till att du förstår hur den kommer att interagera med de andra kretsarna och koden. Även om jag gärna erbjuder förslag kan jag inte hjälpa till att felsöka kod eller problem för olika konfigurationer.

1 Arduino Pro Mini 5V - Jag gillar Pro eftersom den är kompakt. Du kan använda alla Uno pin/interrupt -kompatibla kort med den angivna koden

1 Adafruit Bluefruit EZ -Key bluetooth HID - Som beskrivits ovan är detta bluetooth HID som gör att nyckelkoder kan överföras till värddatorn.

1 MCP23017 - i2c 16 input/output port expander -Detta chip används för att lägga till ytterligare 16 ingångar till Arduino via I2C kommunikationsprotokoll

1 Adafruit PowerBoost 500 + laddare - Detta är strömkontrollkortet för att driva Lapcade och ladda LiPo

1 litiumpolymerbatteri (jag använde 2500mAh, men du kan använda högre / lägre kapacitet)

1 8 -vägs Arcade Joystick - Se avsnittet "tankar för version 2" nedan angående joysticks

9 Arcade tryckknappar - diverse färger och skärmavtryck

2 upplysta tillfälliga tryckknappar - jag använde dessa 2 knappar för Center 4 och 5 knapparna och är från Adafruit: Röd (Center 4), Blue (Center 5)

1 Upplyst spärrknapp Jag använde den här för strömbrytaren från Adafruit: Grön

2 lysdioder Används för att referera till parningssignal och låg batterinivå. Jag använde två RadioShack -delar 2760270 och 2760271

1 16 x 2 LCD -skärm

1 I2C/SPI LCD -ryggsäck - Används för I2C -kommunikation till 16x2 -skärmen.

1 Panelmonterad USB -förlängningskabel - Används för att förlänga PowerBoosts mikro -b USB -kontakt till skåpsväggen.

1 Adafruit Perma-Proto fullstora brödbräda PCB-Inte nödvändigt men gör permanent montering så mycket enklare.

5 220 Ohm motstånd

7 1K Ohm -resistorer

2 2.2K Ohm -resistorer

1 4,7K Ohm motstånd

18 #10 kvinnliga spadekontakter - För anslutning till arkadknappkontakterna. Rekommenderas över lödning eftersom knapparna så småningom slits ut.

22 gauge hookup wire - Jag använde solid hookup wire snarare än strandade för att göra fristående wire management. Detta var enbart för demonstrationsändamål och rekommenderas inte eftersom solid tråd är spröd och benägen att gå sönder.

Följande artiklar krävs inte, men det kommer att göra det enklare att skaka och om du rostar en komponent blir det lättare att byta:

  • IC -uttag - för 28 -stifts 0,3 "chips
  • IC -uttag - för 28 -stifts 0,6 "chips
  • 0,1 "kvinnlig header (minst 1 36 -pins header)

Skåpdelar:

  • 3 12 x 24 1/8 tum björkpaneler
  • 1 12 x 24 1/8 tum tydlig akrylpanel

Filer:

  • Lapcade V1.xlsx - Kalkylarket som nämns nedan som har kretsanslutningar.
  • LapcadeV1-code.zip - Zip -fil som innehåller Arduino -koden skriven för detta projekt.
  • Lapcade_v1.zip - Zip -fil som innehåller svg -ritningarna för skåpet.
  • LapcadeV1-Circuit_Diagram_Large.zip - Zip -fil som innehåller en högupplöst version av fritzing -kretsschemat som visas nedan.

Länkar till fler resurser:

  • Adafruit Bluefruit EZ-Key Documentation
  • Adafruit PowerBoost 500 + dokumentation
  • I2C/SPI LCD -ryggsäckdokumentation
  • MCP23017 I2C Port Extender Documentation
  • Adafruit MCP23017 Arduino bibliotek

Steg 3: Montering - Skåpet

Montering - Skåpet
Montering - Skåpet
Montering - Skåpet
Montering - Skåpet
Montering - Skåpet
Montering - Skåpet
Montering - Skåpet
Montering - Skåpet

Jag ville ha en mycket lätt låda som också kunde slå. Utan att bli för exotisk med material, är lättvikt lika med tunt och tunt vanligtvis lika sprött. Den primära användaren av Lapcade skulle sannolikt vara min unga son som gillar att "trycka på" knapparna och "navigera" joysticken med extrem entusiasm. Även om han är bra på att inte tappa saker, lyckades han slita ut de industriella mikrobrytarna i en joystick inom några månader.

För att övervinna detta problem och eftersom Lapcade är 20 bred, har min design lagts till i två vertikala ribbor som säkrar ovansidan och vänster och höger sida. Under torrmontering kunde designen motstå 70 kg böcker som placerades på den. När den limmades, lådan blev ännu mer hållbar. Efter att ha fått de skurna materialen löste jag inledningsvis alla panelerna ihop för att se till att de fungerade. Jag slipade dem sedan lätt och dammade. Jag använde trälim för att fästa bitarna ihop.

Böckerna på bilderna nedan placerades för att sätta press på de nylimmade bitarna tills de stelnade. När limet härdat slipade jag kanterna. Min design kompenserade avsiktligt panelerna så att de skulle sticka ut lite i hörnen. Detta skulle göra det möjligt för mig att runda ut hörnen under slipning utan att komma in i fogen för mycket.

Efter rengöring av ytorna applicerade jag sedan flera lager polyuretan - så att det kunde härda mellan skikten. Resultatet blev en lätt trälåda med bottenlock i akryl. Jag hade ursprungligen velat ha en helt klar låda men när han skickade mig björkens "test" -delar ändrade jag mig omedelbart. Det var inte bara lättare, det var ett trevligt kasta tillbaka till idén om skåpspel. Svg -filerna finns nedan.

Observera: Detta är en ritning i flera lager och varje lager representerar en uppsättning snitt på ett materialark. När du skickar ett tryck till din fräs, se till att alla andra lager är dolda innan du skär.

En annan anmärkning: När jag ritade upp området för LCD -skärmen använde jag en display som jag hade till hands för mätningar. Mellan den tid jag gjorde ritningen och senare monterade delarna i fodralet hade jag använt den ursprungliga LCD -skärmen i ett annat projekt och beställt en ersättare. Som det visar sig var monteringshålen för den andra något annorlunda än originalet och avslutades inte. Så var försiktig innan du skär ditt material för att dubbelkolla att de delar du har passar hålen i ritningen.

En tredje anmärkning: Jag inkluderade inte en urkoppling för USB -laddningssladden i originalritningen bara för att jag inte var säker på var jag ville placera den så att den inte skulle störa användningen. Jag klippte senare hålen för det på vänster sida mycket nära där du ser ordet "Lapcade" i bilderna nedan. Version 2 kommer att ha laddningsporten i ännu en annan position.:)

Steg 4: Montering - Elektronik

Montering - Elektronik
Montering - Elektronik
Montering - Elektronik
Montering - Elektronik
Montering - Elektronik
Montering - Elektronik
Montering - Elektronik
Montering - Elektronik

Låt oss först ta en titt på kopplingsschemat som visas ovan.

Det första att notera här är att kraft- och markskenorna på brödbrädan. Rälsen med den blå linjen är slipade (-) och skenorna med den röda linjen är effekt (+). Detta är standard men jag noterar det eftersom joystickens gemensamma linje (svart ledning) är ansluten till ström och inte jordad. I Fritzing använde jag joystickens trådfärg snarare än konventionella färger och tänkte att det kan orsaka viss förvirring - så det är bäst att bara få det ur vägen.

Komponentanslutningar

Istället för att försöka ange varje anslutning i lång form här (Arduino analog pin 0 går genom en 220 ohm resistor till PowerBoost Bat pin) skapade jag ett kalkylblad som innehåller alla anslutningar från komponentens synvinkel. Så på Arduino -fliken i kalkylbladet ser du APM A0 -> 2.2K OHM -> PB Bat och på PowerBoost -fliken ser du PB BAT -> 2.2K OHM -> APM A0. Se resursavsnittet nedan för alla filer som är associerade med detta projekt.

En annan anteckning om kalkylarket är att vissa enheter visar två anslutningskolumner. Detta är för att visa mer än en anslutning till en pin. Till exempel använder var och en av joystickanslutningarna utom den vanliga ledningen ett neddragningsmotstånd för att säkerställa att portförlängaren får en solid hög eller låg signal. För att visa detta för joystick 2, kommer du att se två kolumner för anslutning, en är för joystick -kabeln till MCP 21 -stiftet och den andra för en anslutning från stift 21 genom ett motstånd till jord. Jag är säker på att det finns bättre sätt att dokumentera detta men jag är rädd att du har fastnat för mina sätt att göra saker på det här.:)

Var och en av arkadknapparna har en gemensam (com), en normalt öppen (nej) och normalt stängd (nc) kontakt. För var och en av dessa knappar använder jag com- och nc -anslutningar.

Steg 5: Kod

Koda
Koda

Först och främst måste jag ge kredit där det beror. Jag litade starkt på följande artikel för att koda Lapcade:

learn.adafruit.com/convert-your-model-m-keyboard-to-bluetooth-with-bluefruit-ez-key-hid Särskilt tack till Benjamin Gould för ett välskrivet och dokumenterat projekt!

Så, i hjärtat av detta projekt är ett tangentbord. Ur datorns synvinkel är Lapcade helt enkelt ett tangentbord anslutet via bluetooth vilket är vad EZ-Key är så bra på. Det tar de komplicerade Bluetooth -protokollen, tidpunkterna och koderna och inkapslar dem så att allt jag behöver göra med arduino är att skicka det nyckelkoder. För att göra det använde jag kodkartorna i projektet ovan och mina egna matriser för att skapa driftlägen. Varje läge ändrar vad samma knapptryckningar gör på Lapcade och vad som skickas till datorn. Det finns tre "inbyggda" driftlägen och alla lägen efter det är applikationslägen.

Driftsätt

Följande sammanfattar Lapcades driftsätt:

  1. Start - Det här läget söker efter anslutning till datorn och anger startvariabler. Om EZ-nyckeln inte är ihopkopplad med en dator ändras den till parningsläge
  2. Parning - I det här läget väntar EZ -nyckeln på att kopplas till en dator.
  3. Lägesval - Med det här läget kan användaren välja vilket applikationsläge som ska användas. Inga nyckelkoder skickas till datorn i detta läge. Det finns också snabblägesval baserat på föregående applikationsläge. Till exempel genom att trycka på läget och sedan på spelarens tvåknapp i läget Mame player 1, byter du helt enkelt läget utan att behöva söka och väljer Mame Player 2 på displayen.

Applikationslägen

Applikationslägen används för att skicka lämpliga nyckelkoder till datorn baserat på vilken applikation användaren är i. Till exempel i Kodi -läge skickar åtgärd 2 -tangenten "P" som är paus. I Mame skickar samma knapp vänster Alt -tangent. Om man ville använda handkontrollen för att spela Minecraft för datorn, så är det bara att lägga till lämpliga matriskartor.

Varje applikation måste definieras i 4 matrisuppställningar.

  • mode - Denna matris innehåller texten som kommer att visas på skärmen för varje läge. För att använda den andra raden i displayen, placera helt enkelt en ~ i matrisen som en radbrytning.
  • keyModes [14] - Denna matrismatris innehåller nyckelkoderna som skickas till datorn. Varje rad med 14 element representerar individuella knappar för nyckelkodstecken.
  • keyModifiers [14] - Denna matrismatris innehåller nyckelkodsmodifierarna för varje tangenttryckning, till exempel att hålla ned shift -tangenten.
  • quickMode [3] - Denna matrismatris innehåller mönstret för snabbval för det aktuella läget.

Grundläggande användning

När systemet slås på går det i startläge där statusen för Bluetooth -anslutningen kontrolleras och visas för användaren. Arduino får status för EZ-nyckeln genom att räkna och ta fram pulserna från EZ-Key's L1-stift. Det finns fyra delstatuser för startläge:

  • Parning - EZ -nyckeln är i aktivt parningsläge och väntar på att ansluta till en enhet.
  • Parad men inte ansluten - EZ -nyckeln har tidigare parkopplats men är för närvarande inte ansluten till värdenheten.
  • Parad och ansluten - EZ -nyckeln är parkopplad och anslutningen har upprättats med värden. Vid denna tidpunkt går systemet vidare till lägesval.
  • Okänd status - EZ -nyckeln returnerar en okänd kod eller så finns det signalstörningar som ger ett okänt signalmönster. Systemet lagrar och meddelar användaren. Måste starta om om detta inträffar.

Om systemet är ihopkopplat med men inte kan ansluta till datorn förblir systemet i anslutningsläge i startläge. Om användaren håller ned Escape -knappen medan enheten slås på, hoppar den över Bluetooth -anslutningskontrollen och fortsätter till lägesval.

Om systemet inte har parkopplats tidigare efterföljs startläget med parningsläge. I detta tillstånd kommer systemet att sända att det är tillgängligt för parning. När den upptäcks och kopplas till av en värd, går den vidare till lägesval. Enheten kan kopplas upp i lägesval genom att trycka på åtgärdsknappen 1.

I lägesval kommer upp- och nedåt -joystickåtgärderna att flytta dig genom tillgängliga applikationslägen på LCD -skärmen. För att välja ett av lägena, tryck på enter -knappen (mitt 5).

Väl i ett applikationsläge skickar var och en av knapparna och joysticken nyckelkoder per knapptangenterna som anges i de fyra matriserna enligt beskrivningen ovan.

Snabba lägen

När ett applikationsläge har valts är det snabblägesdefinition. Enkelt uttryckt är snabblägen applikationslägen som kan väljas med de tre första mittknapparna (mitten 1-3). Dessa tre knappar motsvarar matriselementet i matrisen.

Till exempel, i den aktuella konfigurationen, när du använder Mame i spelare 1 -läge (läge 4 eller det femte läget definierat), tryck sedan på lägesknappen och sedan spelarens två knappar laddar snabbmodus [4] [1] array -elementet (Arduino använder 0 basmatrisindexering) som är 5. Systemet växlar sedan till applikationsläge 5 som är Mame, spelare 2.

Steg 6: Idéer för version 2

Knappskärm - jag antar att du inte kan planera allt men det finns en designidé som jag önskar att jag hade tidigt för version ett - individuella knappar LCD -paneler. Det blev väldigt snabbt efter att ha byggt att bara att veta vilket läge du är i betyder inte att du kommer ihåg vad varje knapp gör - särskilt efter att du har gått bort från det i ett par dagar eller månader. Jag önskar verkligen att jag hade lagt till någon form av liten skärm på eller ovanför varje knapp som visade vad dess aktuella åtgärd är. Den här är högst upp på min lista för version 2.

4-vägs vs 8-vägs joystick-En annan sak som blev tydlig när jag började använda joysticken var att äldre spel inte var avsedda att använda 8-vägs joysticks. Fallet är pac-man. Sedan jag byggde denna styrenhet har jag funnit att det finns joysticks där ute som kan växlas mekaniskt från 4-vägs till 8-vägs. Japp, den finns på listan och om du planerar att spela klassiska arkadspel, hoppa bara över till ett som kan ändras. Naturligtvis, se till att du redogör för ändringarna i ledningar och programmering baserat på joysticken du slutar med. Här är några leverantörer av klassiska arkadkontroller:

  • https://www.ultimarc.com/controls.html
  • https://groovygamegear.com/webstore/index.php?main…

Knapparna "Flipper" på höger och vänster sida - Version 2 kommer definitivt att lägga till en knapp vardera till vänster och höger sida av skåpet. En möjlig användning kommer att vara för flipperspel.

Andra kontroller - Jag tittar på livskraften att lägga till andra vanliga kontroller som en styrboll och / eller en spinnare till nästa version. Eftersom EZ-Key kan överföra muskoordinater borde det inte vara för svårt.

Inbyggd programmering - Nästa version måste ha möjlighet att lägga till nya konfigurationer utan att öppna höljet. Jag ville lägga till detta till version 1 men det krävde mer tid och resurser än jag hade.

Trådlös tävling
Trådlös tävling
Trådlös tävling
Trådlös tävling

Andra pris i den trådlösa tävlingen

Rekommenderad: