NGALAC/Subsystems
Noisebridge | About | Visit | 272 | Manual | Contact | Guilds | Resources | Events | Projects | WGs | 5MoF | Meetings | Donate | V · T · E |
Guilds (M) | Meta | Code | Electronics | Fabrication | Games | Sewing | Music | AI | Neuro | Philosophy | Funding | Art | Security | Ham | Brew | V · T · E |
Games Guild | Gamebridge Wednesdays | Blender | VR Guild | Gaming Archivists | Chess Fridays | Global Game Jam | Game Jams | Text Adventure | Noisebridge Against Humanity | V · T · E |
Noisebridge Gaming Archivists | NGALAC Arcade Cabinet | NGA Identity | V · T · E |
Subsystems[edit | edit source]
Power[edit | edit source]
Streaming PC[edit | edit source]
BIOS setting for Auto-on with power-on (e.g. from switch)
Audio[edit | edit source]
Electrical[edit | edit source]
- Ground everything and very well, especially anything the human touches.
Control Model[edit | edit source]
Start/Stop streaming[edit | edit source]
The streaming PC uses OBS to stream, and there is a python websockets library which can control it. This library and a serial command interface known as CmdMEssenger is used to communicate with an Arduino Mega so the Mega can indicate signals to control OBS through a small python script. CmdMEssenger implements a messaging protocol to trigger functions via commands sent over Serial.
The Arduino Mega is effectively a slave to a python server on the streaming PC. The Arduino will set and clear bits in an array which is communicated to the streaming server via the server polling the Mega. The server is continuously polling the Mega and performs actions based on it's state and the information in the status array.
A user pushed a green button on the cabinet front panel to start (or stop) streaming. The Mega debounces and latches the button press and sets status bit 11. The stream server reads this bit which determines is a button press occurred. If the machine is streaming, the steam will be stopped (and the scene in OBS changed to "Not Live"). If the machine is not streaming, the stream will be started and the scene in OBS switched to "Live".
Standby Loop[edit | edit source]
A script that controlls the lights, makes sure that the stream is off and goes into attract mode by showing a screen saver on the rasperry pie. Script is as follows: // TODO fill out how this works
Player Activity[edit | edit source]
A PIR sensor is attached to the cabinet under the player controls. The sensor feeds data back to the Arduino Mega which monitors the signal for movement. As movement occurs, a timer is reset and status bit 12 is set to 1. If the timer is not reset within 15ms, the Mega sets status bit 12 to 0, which tells the stream server to stop the stream
Emulation Station Customizations[edit | edit source]
//TODO fill out how this works
Exit script[edit | edit source]
A script that automatically exits the game correctly. Then goes back into attact mode. Script is as follows: //TODO add script here
Activity timer[edit | edit source]
A timer that counts down when no one is active to not be stuck in a game but go back to attract mode. //TODO fill in more technical details
OBS automation[edit | edit source]
inputs -> Arduino/RaspberryPi <-> CmdMessenger <-> Serial port <-> USB <-> streaming CPU <-> PyCmdMessenger <-> obs-wc-controller <-> obs
Guardian Process - Windows OBS restart automatically on fail strategy
Windows Task Scheduler starts the stream server automatically on the stream pc.
Windows-r to bring up run dialog
tasksched.msc
look for Launch NGALAC server task
Task should run automatically but if not, can run manually with right-click run or the green play button on bottom right panel. If it asks you to close all instances, say yes
OBS Web Socket Plugin | Sets up a websocket API for OBS |
obs-wc-rc | Python library to interface with OBS websocket API |
PyCmdMesssenger | Python library for CmdMessenger using serial port |
CmdMessenger for Arduino | Arduino CmdMessenger library to communicate with PyCmdMessenger on server via serial port |
OBS websocket plugin
obs-wc-rc
Query and send commands to OBS from python (can theoretically control everything)
credentials
credentials for the stream websocket interface are required.
rtmp server setup
Arduino[edit | edit source]
The arduino code is located in c:/Users/NGALAC-LIVE/projects/ngalac/prod
The main file is arduino_controller.ino, and lights.cpp controls the lights only.
- Debounce buttons
- better debounce - digital filter based
- Pressure switch for "player in front of machine"
- Note: arduino.ArduinoBoard(enable_dtr=False) See: ##Known Issues in PyCmdMessenger
Arduino code using CmdMessenger library for talking through serial port to python orchestrator
Python code to pair with CmdMessenger
First 3 states are switches set high or low
Last 3 are LED states (or anything else)
Can trigger LED strips or whatever else as we wish, run pre-defined patterns, etc.
Software[edit | edit source]
Arduino IDE 1.8.1+ * CmdMessenger Python 3.5.4+ * vitualenv, virtualenvwrapper-win, PyCmdMessenger, obs-ws-rc Git
Please see https://github.com/noisebridge/NGALAC for all relevent code
Webcam Adjustment[edit | edit source]
Using a servo hooked up to the Leonardo to move adjust the webcam height via some kind of potentiometer.
right now servo is a radio [s]hack 08A14.
pinout:
Config Files[edit | edit source]
Controllers[edit | edit source]
- evtest to check inputs from the IPAC-2 on rpi
- add player 2 keys to retropi retroarch config
maybe physically generate a plug/unplug signal via detection to arduino and trigger this: https://zedt.eu/tech/linux/restarting-usb-subsystem-centos/
arduino triggering done by detecting various grounding or other (is there a power? must be.) for each controller, then sending that to arduino, then to pi.
usb stuff - polling on rpi
full jsx linux system https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/tree/Documentation/input/joydev/joystick.rst
notes[edit | edit source]
keep alives for obs, obs restart on power on, rpi watchdog, faulover OBS instance, switched by obswsrc cannot connect. how will this work with auto start, and how to select which instance is stealing?
static electricity on case
Arduino COM port detection on streaming PC in python
Do we want to record and stream?
Hwinfo for monitoring streaming PC? whyzit shuttin dwn.
4/7/18 added obs to restart on crash and moved lauch_obspy to restart_obs.bat
add rpi input detection and set timer to tell stream PC to stop streaming (probably through Arduino or API call)
udev rules
ACTION=="add", SUBSYSTEMS=="usb", KERNELS=="6-5:1.0", SYMLINK+="input/joy"
udevadm test -a /sys/path or /dev/path
udevadm test /dev/thing i think
udevadm info --name /dev/thing --query=property
udevadm info --a --name= /dev/thing
udevadm trigger --verbose -dry-run --type=devices --subsystem-match=usb
udevadm monitor --kernel, --udev, or --subsystem-match=usb
Networking[edit | edit source]
- Raspberry Pie not auto-connecting to net by default. Should it?
- nginx w/ rtmp to restream