Select Page

BOCS is a puzzle box platform that incorporates multiple I/O devices in a customizable and extensible manner. Anyone who knows basic Python can write their own puzzle, and one can even add I/O devices by simply connecting another Arduino to the central Raspberry Pi and following the appropriate steps. Photos, a video, and more in-depth coverage of everything can be found on our project website, our GitHub repo, and our repo’s wiki.

The idea for BOCS was conceived during a mid-afternoon stroll in downtown Boston in the summer of 2017. Some friends and I were discussing past MIT hacks and how we, as Olin College students, really needed to join in the fun. After throwing around numerous ideas, we settled on a puzzle box that could both be a nuisance and a source of intrigue.

The following summer we were all took Principles of Engineering, where we would work on teams to create projects that incorporated “non-trivial” software, electrical and mechanical components into on functioning system. We decided to team up to create the puzzle box we had dreamed of, though we were doubtful we’d actually deploy it on the MIT campus.

We built a roughly 2’x2’x2′ cube with a PaPiRus e-ink display, a push button with an LED ring around it, an Adafruit Trellis LED keypad, a numeric keypad, some custom-made retractable piano keyboard keys, a telegraph key, and a drawer with a sensor to measure the height of objects placed within it. All of these (aside from the display and push button) were designed to be concealable, and all of them were available to puzzle developers as I/O devices.

As the only real programmer on the team, I was in charge of architecting the software system. I designed a robust and extensible interface between the Arduinos and the Raspberry Pi, wrapped the I/O devices in easy-to-use classes, and defined a format for easily writing puzzles. I also ended up writing the majority of the puzzles.

The primary BOCS software ran on two Arduinos and two Raspberry Pi Zero Ws. Interfacing between Arduinos and the central RasPi was done in an extensible manner so that others could customize the platform as they desired. (A Node.js server running on Heroku stores leaderboard information, though this feature was never fully developed.)

Details on how the various components worked can be found on our project website and our GitHub repo wiki. (It’s pretty well documented.)

By the end of the class, we had created a puzzle box that mostly worked. The core software components, at least, were quite robust, though the logic of many puzzles was not as robust as it could have been due to time constraints. We were also plagued by electrical issues throughout. In retrospect, it was a bit of an over-scoped project (as most PoE projects are), but we accomplished a significant amount given the time we had.