Talaan ng mga Nilalaman:
- Hakbang 1: Hardware
- Hakbang 2: Mga Skematika
- Hakbang 3: Sketch / Code
- Hakbang 4: Ano ang Tungkol sa Input Lag?
- Hakbang 5: Kumusta ang Mga Jamma Racing Cabinet?
- Hakbang 6: Ilang Pic, o Hindi Nangyari
Video: Jammarduino DUE - DIY PC sa Jamma Interface para sa Arcade Cabinets: 6 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:10
Ipapakita sa iyo ng itinuturo na ito kung paano lumikha ng isang simpleng kalasag para sa Arduino DUE upang mai-interface ang isang tunay na arcade machine na may mababang resolusyon na CRT at konektor ng jamma sa iyong PC.
Ang pangunahing punit ng kalasag ay:
- upang palakasin ang signal ng video na nagmumula sa video card (masyadong mababa ang boltahe para sa isang tunay na monitor ng Arcade CRT)
- upang maprotektahan ang iyong mababang resolusyon na monitor ng CRT mula sa masyadong mataas na dalas ng pahalang na mga signal ng pag-sync
- Upang "isalin" ang mga pagpindot sa pindutan sa arcade control panel sa isang bagay na maaaring hawakan ng PC
Ipapakita ko sa iyo kung paano pahabain ang paggamit ng interface upang makontrol ang mga gulong at spinner ng Arcade Racing.
Paunawa: HINDI pinipilit ng kalasag ang signal ng pag-sync ng video sa mababang mga frequency: kailangan mo ng ilang partikular na software para doon. Iminumungkahi ko sa iyo na gumamit ng CRT emudrivers o Soft15KHz.
Hakbang 1: Hardware
Ipagpapalagay ko na mayroon kang isang istasyon ng paghihinang at ilang lata sa pamamagitan ng kamay at alam mo kung paano gamitin ang mga ito. Ang pagiging ang amplifier ng video ay isang SMD na may 0.65 mm na pitch, iminumungkahi ko sa iyo na bumili ng ilang soldering flux upang matulungan ang panghinang na microbe. Gumamit ako ng murang "walang malinis" na Rosing Mildly Activated (RMA) na pen na may mahusay na mga resulta.
Ang interface ay binubuo mula sa:
- 1x Arduino DUE microcontroller board
- 1x THS7374 video amplifier
- 1x TSSOP14 hanggang DIP14 adapter
- 1x audio amplifier
- 1x jamma fingerboard
- 1x 5x7 cm prototype board, dobleng panig
- 1x 1N4148 diode
- 7x 1Kohm resistors
- 1x 820 ohm risistor
- 3x 220 ohm risistor
- 1x strip line, 2.54 mm spacing
- 1x VGA cable
- 1x audio cable
Hakbang 2: Mga Skematika
Narito ang isang may kulay na pamamaraan ng proyekto ng wholel. Hindi gaanong orthodox, ngunit mas madaling sundin, sa aking pag-asa.
Ang Wirings ay madaling tingnan:
- Ang mga linya ng kulay ay nagmula sa konektor ng PC VGA sa amplifier ng video; ang isang 1Kohm risistor sa lupa ay nagpapababa ng kasalukuyang input ng amplifier ng video. Sa bahagi ng output isang serye ng paglaban ay nagpapababa ng kasalukuyang sa arcade CRT.
- Ang linya ng pag-sync ay kahit papaano ay mas "kumplikado": ang hiwalay na pag-sync mula sa VGA ay ginawang pinaghalo, una, pagkatapos ay ibinaba ng isang divider ng boltahe upang igalang ang Arduino DUE specs (3.3V na lohika). Ang divider ng boltahe ay kinakalkula sa pagpapalagay ng isang 5V signal ng pag-sync.
- Ang video amplifier (THS7374) ay maaaring pinalakas sa 3.3V o 5V; na ang pag-kapangyarihan sa 5V ay nagbibigay-daan para sa isang mas malawak na saklaw ng mga voltages / signal ng pag-input at pagiging THS7374 ay maaaring kontrolin ng 3.3V kahit na naka-juice sa 5V, nagpunta ako sa 5V na paraan.
- video ground, arduino DUE ground, THS7374 ground at jamma konektor ground ay maikli na circuited.
- Ang mga linya ng Arduino DUE 5V at Jamma 5V ay DAPAT HINDI MAIKLING CIRCUITED.
- HUWAG i-juice ang audio amp mula sa USB cable: kailangan mo ng panlabas na mapagkukunan para doon dahil sa kasalukuyang mga limitasyon (ibig sabihin, ang PC ATX PSU). Ang paggawa nito ay makakapinsala sa iyong USB port o kahit sa iyong PC.
Konektor ng VGA: isang salita ng pag-iingat
Kamakailan lamang ay nagkaroon ako ng pagkakataong i-update ang PC na ginamit sa aking jammarduino DUE. Kahit na nasubukan ko ito sa dalawang magkaibang PC dati, pareho silang gumamit ng mga ATI card ng iisang pamilya (ATI 9250 at 9550). Ang bagong PC ay nilagyan ng isang HD5750 na may isang solong DVI analog output (walang VGA). Pinilit ako nitong gumamit ng (passive) DVI sa VGA adapter. Sa gayon, pagkatapos ng ilang pakikibaka napansin ko na ang VGA cable na konektado sa adapter DAPAT na may ground ground lamang na konektado sa pin 5 ng VGA konektor upang gumana, hindi mga pin mula 6 hanggang 10 tulad ng iniulat sa karamihan sa mga eskematiko sa web. Tandaan ito kung sakaling hindi ka makakakita ng anumang signal ng pag-sync mula sa iyong video card.
Hakbang 3: Sketch / Code
Dapat mo munang mai-install ang Arduino IDE; dapat mong i-install din ang SAM Cortex M3 Core (hindi naroroon bilang default). Huling ngunit hindi pa huli, mag-install ng mga Arduino DUE driver. Sumangguni sa opisyal na "Pagsisimula sa Arduino Takdang" tutorial para sa pinaka-napapanahong impormasyon.
Ang sketch na kailangan mong i-upload sa iyong Arduino DUE ay nakakabit dito. I-unzip at i-load ang "jammarduinoDUE.ino" sa iyo Arduino IDE, pagkatapos ay i-upload sa arduino DUE sa pamamagitan ng port ng "programming". Matapos na matagumpay na na-upload ang sketch, idiskonekta ang USB cable mula sa port ng "programa" at ikonekta ang Arduino DUE sa pamamagitan ng port na "Native USB", o ang input na bahagi ng code ay hindi gagana.
Talaga, sinusukat ng Arduino DUE ang dalas ng pag-sync at hindi pinagana ang amplifier ng video kapag ang pag-sync ay masyadong mataas para sa isang mababang res CRT. Hawak ng Arduino DUE ang mga input na nagmumula sa control panel din, na nagpapadala ng mga default na pindutan ng MAME sa tukoy na pindot ng pindutan. Ang isang pag-andar ng paglilipat (naaktibo sa pamamagitan ng pagpindot sa pindutan ng P1 Start ay isinasama din, tulad ng mga komersyal na interface.
Sa talahanayan ang default keymap. Maaari mong baguhin ang default na key map o magdagdag ng mga pindutan ayon sa iyong kalooban nang direkta sa sketch nang madali.
Halimbawa, kung nais mong magtalaga ng mga pindutan ng kontrol sa dami para sa iyong emulator, dapat mong tukuyin ang mga key na iyon (hayaang sabihin ang keypad na "+" para sa volume up at keypad "-" para sa volume down) sa iyong menu ng mga emu key, una; pagkatapos ay idagdag ang shifted key sa mga pindutan na nais mong itaas ang volume o bawasan upang italaga sa. Sabihin nating nais kong taasan ang lakas ng tunog sa pamamagitan ng pagpindot sa shift key at Player 1 button 3. Babaguhin ko ang linya
{26, TAAS, 0, 180, 180}, // space - P1 B3
sa
{26, TAAS, 0, 180, 223}, // space - P1 B3 (+)
Ang "223" na iyon ay ang ASCII character code para sa keypad na "+".
Hahayaan ko kayong malaman kung paano italaga ang "-" (o kahit anong gusto mo) sa pagpapaandar na "volume down" bilang isang ehersisyo (Hint: ASCII code 222):)
Mangyaring tandaan na sa MAME maaari mo lamang italaga ang dami ng service mode, hindi ang pangkalahatang dami ng pagtulad; nangangahulugan ito na kung ang emulate board ay hindi pinapayagan para sa kontrol ng dami ng software, ang dami ay hindi maaapektuhan.
Hakbang 4: Ano ang Tungkol sa Input Lag?
Gumawa ako ng ilang mga pagsubok upang makita kung magkano ang lag na maipakilala ng code; mabuti, sa pamamagitan ng pagpapadala ng 3 mga pindutan ng pindutin nang sabay-sabay ang isang kumpletong loop ay tumatagal ng tungkol sa 4 ms upang maipatupad, sa ngayon mas mababa kaysa sa 33 ms ang isang frame ay tumatagal sa 30 FPS.
Hakbang 5: Kumusta ang Mga Jamma Racing Cabinet?
Potentiometer Wheel
Kung ang iyong gabinete ay isang racing cabinet, malamang na ang gulong ay potentiometer batay (maaari mong makita ang isang 5Kohm potentiometer sa likurang bahagi ng control panel).
Una sa lahat, i-download at i-install ang Joystick library (sa petsa ngayon ang bersyon 1 lamang ng library ang sinasabing katugma sa arduino DUE, ngunit napakahusay pa rin ng aklatan).
Pagkatapos, idagdag ang ilang mga linya na sumusunod sa sketch sa Hakbang 4 upang madaling hawakan ang gulong (kung saan ilalagay ang mga linya ay naiwan sa iyo bilang isang ehersisyo …)
# isama
int deadZone = 0;
walang bisa ang pag-setup () {
Joystick.begin ();}
void loop () {
int readPot = analogRead (A3);
int wheelPos = mapa (readPot, 0, 1023, -127, 127);
kung (wheelPos> deadZone || wheelPos <-deadZone) {Joystick.setXAxis (wheelPos);}
iba pa {Joystick.setXAxis (0);}
}
Tulad ng nakikita mo, maaari kang magtakda ng isang deadzone kung kinakailangan (sa isang mahusay na gumaganang arcade wheel pinakamahusay na itakda ito sa zero).
Ang pag-kable ng potensyomiter sa Arduino DUE ay deretso: ang mga pin ng gilid ng potensyomiter ay pumunta sa + 3.3V at GND, wiper pin sa isang arduino DUE analog port (tingnan ang larawan para sa sanggunian). Tinukoy ko dito ang analog pin 3 (A3) bilang input para sa wiper ng wheel potentiometer, ngunit maaari mong itakda ang analog pin na pinakaangkop sa iyong mga pangangailangan.
PS: alam mo ba na ang mga pedal sa racing cabinet ay madalas na kinokontrol ng isang potensyomiter, kaysa sa mga teknikal na gulong at pedal ay pareho ang aparato na may magkakaibang hugis? Nangangahulugan ito na ang code dito ay maaaring magamit upang makontrol ang mga tunay na arcade pedal din;)
Optical Wheel
Kung ang iyong gulong ay optikal, madali itong mahawakan din, muli, na may isang pagbabago sa litlle sa panimulang sketch.
Ang isang napaka-karaniwang pinout para sa mga optikong Arcade encoder (Taito spinner, Atari gulong encoder at iba pa) ay:
1. OptoA OUT
2. + 5V
3. GND
4. OptoB OUT
Ikonekta ang 2. at 3. sa Arduino DUE 5V at GND, at 1. at 4. sa anumang digital pin na nais mong bigyang pansin na kinakailangan ng isang divider ng boltahe upang mapababa ang 5V na output mula sa optical encoder sa 3.3V arduino DUE na maaaring hawakan. Huwag direktang ipadala ang mga output ng OptoA at / o OptoB 5V sa iyong mga arduino DUE input pin o malamang na iprito mo ang mga input o kahit na ang buong board. Binalaan ka
Sa halimbawang sketch dito gagamitin ko ang digital pin 2 at digital pin 3 bilang optik out A at optik out B.
# isama
boolean optA_state = TAAS;
int xAxisMov = 2;
walang bisa ang pag-setup () {
pinMode (2, INPUT_PULLUP); // OptA
pinMode (3, INPUT_PULLUP); // OptB
Mouse.begin ();
}
void loop () {
kung (optA_state == TAAS && digitalRead (2) == LOW) {
optA_state =! optA_state;
kung (digitalRead (3) == TAAS) {Mouse.move (xAxisMov, 0, 0);} iba pa {Mouse.move (-xAxisMov, 0, 0);}}} // loop end
Ito ay isang mababang resolusyon na 1X Nagbibilang ng pag-encode ng optical. Ito ay higit sa sapat para sa mga aplikasyon ng Arcade, ngunit maaari mong mapataas ang resolusyon nang madali sa pamamagitan ng pagdaragdag ng ilang linya ng code.
PS: alam mo ba na ang mga optikal na arcade wheel at arcade spinner ay panteknikal na parehong aparato na may iba't ibang hugis? Alam mo bang ang mga trackball ay technically isang 2 axis spinner? Nangangahulugan ito na ang code dito ay maaaring magamit upang makontrol ang tunay na mga arcade spinner at, na may kaunti, madaling mga pagbabago ring trackball;)
Hakbang 6: Ilang Pic, o Hindi Nangyari
Narito ang ilang mga larawan ng ginawa kong kalasag. Ito ay hindi isang mataas na antas ng trabaho (pusta ito, hindi ako isang pro), ngunit ito ay 100% na tumba sa aking jamma Arcade Cabinet!
Inirerekumendang:
Buong Python Web Interface Kit para sa PhidgetSBC3: 6 Mga Hakbang
Buong Python Web Interface Kit para sa PhidgetSBC3: Ang board ng PhidgetSBC3 ay isang buong functional Single Board Computer, na nagpapatakbo ng Debain Linux. Ito ay katulad sa raspberry Pi, ngunit mayroong 8 analog input ng sensor at 8 digital input at 8 digital output. Nagpapadala ito ng isang webserver at web application upang makasama
Pagsisimula Sa I2C Sensor Interface ?? - I-interface ang Iyong MMA8451 Paggamit ng mga ESP32: 8 Mga Hakbang
Pagsisimula Sa I2C Sensor Interface ?? - I-interface ang Iyong MMA8451 Paggamit ng ESP32s: Sa tutorial na ito, malalaman mo ang lahat tungkol sa Paano magsimula, kumonekta at makakuha ng I2C device (Accelerometer) na gumagana sa controller (Arduino, ESP32, ESP8266, ESP12 NodeMCU)
Piliin ang SD Interface para sa ESP32: 12 Mga Hakbang (na may Mga Larawan)
Piliin ang SD Interface para sa ESP32: Ang mga itinuturo na ito ay nagpapakita ng isang bagay tungkol sa pagpili ng isang SD interface para sa iyong proyekto sa ESP32
Yaesu FT-100 PC Link Interface para sa Mga Digital na Mode: 3 Hakbang
Yaesu FT-100 PC Link Interface para sa Mga Digital na Mode: Narito ipinakita ko ang mga alituntunin upang makabuo ng isang interface ng link ng PC para sa Yaesu FT-100. Pinapayagan ka ng interface na ito na magpadala at makatanggap ng mga audio signal mula sa isang sound card upang mapatakbo ang mga digital mode ng HAM (FT8, PSK31 atbp.). Magagamit ang karagdagang impormasyon
Arduino para sa Mga Nagsisimula: Arduino Interface Na May 16x2 LCD Naipaliwanag: 5 Hakbang
Arduino para sa Mga Nagsisimula: Interface ng Arduino Sa 16x2 LCD Naipaliwanag: Kamusta Lahat, Ngayon, ang Arduino ay naging tanyag at lahat ay tumatanggap din dahil sa madaling pag-coding. Nilikha ko ang serye ng Mga Pangunahing Kaalaman sa Arduino na makakatulong sa mga nagsisimula, newbie at kahit na ang mga developer upang makuha ang module na trabaho. Ito ay