Vagrearg Logo  
With a touch of Arrrgh! and Brainfart
Imagine your daily life... Aren't there times when you hate it?

Everybody gets frustrated once in a while and we all have different ways to cope with the stress that comes as a result. One thing we all have in common; we all need some kind of relief from stress. I for one start designing electronics to sort my thoughts and redirect the frustration into something more creative.

Incorporating the source of stress into projects, by reflecting it creatively, is a good means to change a negative vibe into a positive vibe. The project here has its origins based on a set of decisions, where most of us simply would shake our heads and say "no, they did not just do that, again, did they?". While a first time (bad) decision calls for a facepalm gesture, the second and any subsequent invocation of the gesture can only be adequately described by the term SNAFU[1, 2].

And, while I am at the social commentary, daily frustration is also alleviated considerably by some old fashioned verbal expression, going back to pain management and adopted by the pirates of old times. Crying Arrrgh! out load conveys the expression of anguish, horror, rage or other strong emotion. It can be a typical reaction to too many SNAFUs or someone else's inability to "get it". Invoking the verbal expression, even if only symbolically, reduces stress potentials further.

But then again, sometimes your mind is trapped in your own little world and you think you are so smart. These are the moments where your brain may stop functioning all together. A typical situation for a temporary mental lapse or failure to reason correctly. In professional terms it is also called a Brainfart. Solving your problem means that you must recognize that you have a problem in the first place. Therefore, the ability to admit your brainfart is the first and best step to revert to sanity.

What do you get when you cross a "Word-Clock", an "X days since last Y" sign and some fun designing the frustration out of your system?

You get SNAFU Box.

Update 2016-Jul-02:
There is now an online version: SNAFU Box in a browser.
No longer a need to do hard work putting hardware together. Simply enjoy the pressing of buttons in your browser and notice how the stress can melt away.
(Firefox, Chromium (on Linux) and Safari (on Mac) works, others have not been tested)
(2016-Jul-03: Fixed some display bugs and did some CSS magic for alignment)

snafu arrrgh
21 hours and 50 minutes since last SNAFU
19 hours since last Arrrgh!
brainfart case-back
22 hours and 13 minutes since last Brainfart
The design of SNAFU Box was done by me (the author here), but was partly assembled by two students. Simon and Sebastian produced the PCBs and assembled them, including all wiring. The work was part of a week of lab-work. I am very grateful for their work. Unfortunately, the software turned out to be too much for one weeks work by the students. The software is actually quite complex (see below).

SNAFU Box consists of 24 LED strips (12V passive type) of varying size, which are controlled by a set of 74HC595 shift-registers and a transistor driver for each strip and RGB channel. The LED strips are used to backlight the lettering of the box. An additional three 74HC595 shift-registers are used for 4x4 matrices of blue LEDs, which are used to count the number of times a particular expression has been activated. Everything is controlled by an Arduino Pro Mini (5V) and an RTC (DS1307) keeps time and stores the current state (so it can be restored on power-failure).

The schematics are straight forward. The 4x4 matrix is divided into two PCBs. One for the electronics and one for the LEDs. The LED driver board and the 4x4 matrix boards use three identical copies for the entire design. The control board is created with KiCad, while the other PCBs are created with gEDA. The control board was created later, rather ad hoc, to replace a perfboard.

24 channel LED driver PDF-file

4x4 Matrix PDF-file

Control board PDF-file

The case is made of 3mm lasercut Plexiglas, designed in Inkscape, where layers are used to separate the different design parts.

The lettering on the box is created by half-cutting into the Plexiglas with the lasercutter, just until it cuts through the protection plastic. All parts that need to be black have their protection plastic removed and the whole plate is painted with three layers of black acrylic paint (rolled on for a smooth layer). The remaining protection plastic is removed once the paint is dry and hardened. What you get is a nice shine-through of the lettering. The same procedure is followed for the case's sides. The middle plate, which holds all the LED strips, is painted black as a whole.

Case see-through (click to enlarge)

Design files (licenses CC-BY-SA-3.0 and GPLv3): All LED strips are optically isolated with cardboard strips (as indicated in the design), which are glued on with hot glue after assembly of the case and LED strips. The final case has a diffuser layer attached at the back of the front plate.

The software "simply" keeps track how many times a particular button is pressed and displays that number on the LED matrix next to the big words. Each press/count is saved in the RTC's battery backed-up memory with the timestamp. Power-cycling will restore the last state. Only one press every 15 seconds is allowed to prevent abuse. This, sometimes, is a frustration in and of itself, but the flip-side is that the user has time to cool down while pressing buttons.

The RGB LED strips are run with 12-level PWM, which is reduced to 8 effective levels to linearize the intensity. The cycle also creates 3 intensity levels for the 4x4 matrix, which is updated in the same cycle as the LED strips. The PWM frequency is 100Hz and data output uses interrupt driven SPI with a 1MHz SPI clock.

Normal operation cycles through "X since last Y" where Y is SNAFU/Arrrgh!/Brainfart and X is the time since the last press using randomized colors. The time displayed tries to use an hour:minute, day:hour, weeks:days or months:weeks pattern to show as much of the time as possible. Overlapping use of digits is not allowed and will only show the higher order time part. The code has several animations on the LED strips and uses a timer-hardware generated tone to generate some music when a button is pressed. Animations and music will also be displayed once in a while in a bit random fashion.

SNAFU Box has a sign next to it to explain the terminology for the uninitiated. It turns out that some jokes are too obscure for non-technical persons and an explanation is required. Oh well, I'll consider it an additional educational experience for the users.


The conclusion after SNAFU Box was setup in the real world: It works! People (including myself) get a smile on their face and are less frustrated and less stressed after usage. Mission successfully completed.

Note 1: SNAFU: Situation Normal, All Fucked Up. (See also Urban dictionary)
Note 2: I do love some kind of social criticism to be incorporated into my projects whenever I can.

Posted: 2016-06-25
Updated: 2016-07-04

Overengineering @ request