As you may recall, a few weeks ago I created a little Arduino-based prototype board that flashed the message “Hello World” in Morse code (see my column Storing Morse code in C — A comparison of techniques).
Why was I doing this? Well, the real “secret squirrel” aspect to this has yet to be revealed (be afraid, be very afraid), but in the meantime…
You know the old saying: “If the only tool you have is a hammer, then everything starts to look like a nail.” Well, once I had the ability to flash messages in Morse code, I naturally started to ruminate on ideas for ways in which to use and abuse this capability.
The first thing I came up with was to get two Fritos containers to “talk” to each other by flashing messages in Morse code. You can see the result in this video, which actually came out a lot better than I'd expected.
The first thing I had to do, of course, was to eat a whole load of Fritos. This didn’t do my diet any good at all, but I “took one for the team,” as it were.
As you can see in the above video, I used ping-pong balls for the main eyeballs. I then stuck some little black eyes onto the ping-pong balls; I don’t know what you call these things, but ages ago I picked up a bag containing a load of the little rascals in all shapes and sizes from Walmart or Hobby Lobby or somewhere like that, and I've been using them in little projects like this ever-since.
When it came to lighting the eyes to flash the messages, I wanted to use tri-colored LEDs, and the little scamps that were closest to hand were to be found in a strip of Adafruit's Neopixels.
I snipped four of these off the end of the strip with a pair of scissors (using full antistatic precautions, of course), then wired them up in two groups of two pixels, with long wires to connect the first pixel of each pair to the Arduino, and short wires to space each pixel-pair to match the ping-pong ball placement.
The first pass at the code is pretty simple (you can access this code by clicking here). For our purposes here, the term “Chat” refers to a short conversation between the cans, while the term “Yak” refers to an individual exchange in a conversation; for example, consider the following Chat that comprises four Yaks:
Talker #1: "Oy!" // 1st Yak
Talker #2: "Wot?" // 2nd Yak
Talker #1: "ICU" // 3rd Yak
Talker #2: "ICU2" // 4th Yak
The current implementation of the program contains four Chats, each of which comprises four Yaks. In this initial realization, I've set things up such that we have random delay of between two and four seconds between Chats, we randomly select one of the four Chats (making sure we don’t have the same Chat twice in a row), and we randomly decide which can is going to be the first Talker (speaker); i.e., the one that initiates the chat.
Both the hardware and software are currently “hard-wired,” but in the future we could make this much more “organic” by varying the length of the conversations and suchlike. We could increase the number (and types and shapes) of the cans and we could also add sound, with each can “chirping” at a different pitch and with a different timbre in time with its flashing eyes. We could also set it up such that the cans have sound sensors and they actually respond to ambient sounds and to each other's chirps. We could even add servos such that the cans start with their lids closed, then the lids pop open and the eyes rise up for the duration of a Chat, after which they all go back into hiding.
We could even make it that each can was self-contained boasting its own batteries and an Arduino Micro… or perhaps an RFduino, in which case they could also be communicating with each other using a wireless back-channel.
I tell you, the possibilities are endless. Can you imagine a group of young kids watching a gaggle of these cans conversing with each other, with lids and eyes popping up and down like a demented game of Whac-A-Mole? Now suppose a kid picks up a can that's currently “asleep”; we could have motion detectors and other sensors in the can, so its lid could slowly open, its eyes slowly rise up, and it could flash its eyes and give a “questioning chirp.” Alternatively, if a kit picks up a can while it’s talking, that can could issue an “alarm chirp,” then all of the cans could snap shut and go quiet for a few seconds, after which they could gradually start to open up and recommence chirping in low, questioning tones for a while before they began to pick up the pace.
What say you? Can you think of anything more we could do to enhance this audio visual experience?