Welcome to Song Blocks
12 wood blocks each contain magnets and an NFC tag. With a satisfying clack! a block magnetically attaches to the face of a drawer containing a Raspberry Pi computer and an NFC controller. The Pi reads the NFC tag, tells the Sonos which song to play, and tweets the song title at @songblocks.
The primary design consideration was to make the technology disappear completely; the final experience is organic, tactile and aural - and quite magical. My son loves it.
Ingredients
- Sonos Play:5
- Raspberry Pi Model B+
- This NFC controller board
- NFC tags
- Rare-earth magnets
- 3/8" thick walnut plank
- A simple Python script (~100 lines) that I wrote. It's on GitHub here
- Open-source Python libs: SoCo to talk to the Sonos, nfcpy to talk to the NFC controller, TweetPony to talk to Twitter
The Drawer
Cavities were routed out from the inside of the drawer face to place the magnets (they sit 3/16" below the outer surface). The NFC controller board is taped to the inside of the drawer face. The Raspberry Pi just sits in the drawer, with its power cord running out the back. The four wires between the NFC controller and the Raspberry Pi connect UART Rx, Tx, +5v, and ground.
The Blocks
A 3/8" thick walnut plank was cut down to pieces measuring 1-1/2"x3-1/4" (two of these form each block). Cavities were routed out for the NFC tag and magnets (they sit 3/16" below the outer surface). Magnets were glued in. The halves were then glued together and clamped.
Each side was evened out by trimming off a very thin slice with a band saw. The edges were given a 1/8" radius round-over with a router. The sides and edges were sanded with 150 grit sandpaper. The seam between the halves was rendered nearly indiscernible.
Before and after the trimming, radiusing, and sanding:
The numbers were imprinted with an ink stamp set and then burned in with a soldering iron.
The wood has been left natural - no oil or stain. Naked walnut is beautiful, wears well, and smells nice.
The Code
I haven't coded in well over a decade and this is my first Python project. So it's ugly, but functional and pretty self-explanatory. The GitHub repo is here.
Conclusions
This was a fun project combining design thinking, woodworking and technology. It has given my little boy a way to participate in music listening and cultivate his own musical preferences (which you can see at @songblocks). He also gets to practice numbers and has learned the symbolic mapping of a number to a song. This is his favorite "toy" right now, and I hope it stays that way for years to come.
Please feel free to leave your comments and questions below.
Thanks for visiting!