This commit is contained in:
Piotr Dobrowolski 2022-06-17 21:11:44 +02:00
parent 5b51034d84
commit 2c70501b83

106
README.md Normal file
View File

@ -0,0 +1,106 @@
# pozytywny sejf™
## What is this?
Pozytywny Sejf™ is an entertainment device - essentially an inside-out escape
room.
A 80x80x80cm box where each of four sides have ~8-10 different tasks to solve.
Every side contains:
* 6 "slots" for replaceable hardware modules
* an ~12" 1280x1024 LCD screen in the middle
* a "status indicator" slot above the screen - 10 RGB LEDs indicating tasks progress
* a drawer with a PIN entry keyboard
* (optional, present on one of the sides) extra drawer for final game reward
Main point of this project is to design a framework for these types of
entertainment devices, and some reference game task modules.
## Hardware
### Furniture
80x80x80cm wooden box holding all the modules.
#### Wiring
All module slots should have CAT5e RJ45-terminated input/output cables available.
Whenever a slot does not use a sejfduino module in a specific game - an RJ45 coupler
should be used.
"Status indicator" is not generally meant to be replaceable. Some extra hardware
features like game finish siren/lamp or extra game finish drawer will be
controlled via its sejfduino board.
Certain slots may have extra 12v high power Tamiya connector exposed.
Certain slots may have extra USB female port available for custom functionality
(eg. extra audio interface for microphone/speaker)
All wiring runs going to module slots shall have enough slack for simple
maintenance (module removal *before* disconnecting of its cabling)
Main 5v/12v power will be provided by a central ATX power supply.
Raspberry Pi boards should be connected to a 5-port ethernet switch, with static
IPv4 networking set up (with "master" board exposing a management/debugging
DHCP server)
The only cable coming out of the Furniture shall be a 230v power lead.
Only cabling shared between "sides" shall be ethernet data and 12v power.
UBus/RS485 *must not* be shared between multiple sides - each "side" has its own
separate bus managed by its Raspberry Pi board.
### sejfduino
A custom Arduino-style board with several special features:
* ATMega328PB running at 16MHz - compatiblity with a lot of arduino boards
* 8P8C/RJ45 input/output connectors for 12v power and RS485 half-duplex
communication bus. If a module is removed, it can be easily replaced with
a dumb RJ45 coupler, keeping all the wiring inside.
* Arduino Pro Mini-style serial programming header
* Screw terminals for easy and (fairly) secure connection of extra peripherals
Design files for this board are present in `hardware/sejfduino/` directory.
Sejfduino-based modules are running arduino-based code, including an "UBus"
library that implements some basic cross-device communication on a half-duplex
RS485 bus. See `software/arduino/ubus/` and `protocol.md` for reference on that.
### Raspi
Raspberry Pi 3 connected to an LCD screen is present on each of 4 sides of the
"Furniture".
Raspberry Pi boards are running Python Kivy based software that takes a role of
a ~master~ leader on the "UBus" bus.
Game "scenario" is configured there, and sejfduino modules are mostly meant to
be a custom human interface devices for specific game tasks.
Code running on the raspberry pi is present in `software/raspi/` directory.
#### raspbian bootstrap (WIP)
```sh
apt install -y --no-install-recommends python3-pip python3-virtualenv
apt install -y --no-install-recommends libsdl2-2.0-0 libsdl2-image-2.0-0 libgl1 libmtdev1
python3 -m virtualenv /opt/kivy
/opt/kivy/bin/pip3 install "kivy[base]" kivy_examples
apt-get install --no-install-recommends xserver-xorg-video-all xserver-xorg-input-all xserver-xorg-core xinit x11-xserver-utils unclutter xterm
```
## Sample task modules
* 16x2 LCD + a potentiometer used as a digit input device - "safebox combination
lock dial" entry module
* Snake - displayed on screen, with hardware joystick exposed as plain GPIO inputs
* NFC card reader - connected over I2C (card found earlier in the game)
* "Key" module - plain GPIO input - key found earlier in the game
* Barcode scanner - USB port exposed externally, with a separate USB scanner
(found earlier in the game)
* Electronic drawer with pincode entry