Introduction: Message in a Tin Can
You know how sometimes you can live with someone—actually physically inhabit the same space—and feel like you never see them? Well that’s what happened to me this year. My boyfriend and I are on totally different schedules and will go a week without ever being in the apartment at the same time. I kept scribbling notes as I ran out the door, he tried leaving video messages, but it wasn’t working. We text during the day, but we really just want to hear each other’s voices.
I hacked a simple audio recorder and playback system, rigged it to Arduino, and inserted it into a tin can phone that I installed by the door—now we can each leave a quick message to greet the other!
To record a message, press a pressure sensor on the outside of the can and speak into it. To listen, simply hold the can up to your ear. (It uses a light sensor to trigger playback!)
My ulterior motive was to learn how to hack existing electronics and control them with Arduino. It can be adjusted to use different sensors and be put in any sort of housing. I uploaded a quick demo for now; fuller video to come soon!
Step 1: Gather Your Materials
- RadioShack 9V Digital Voice Recording Module and 9V battery
(you can use any similar device, but the wiring I’ll explain is specific to this model)
- Adafruit 5V Pro Trinket
- Pressure sensor
- Soldered breadboard
- Solid core wires in different colors
- 2 x 10K resistors
Recommended: Arduino Uno and Breadboard for testing
- Tin can
- MicroUSB cable
- Heavy cardboard
- Adhesive vinyl or electric tape
- 5 min epoxy
- Soldering iron & solder
- "Helping hands" brace for soldering
- Wire snippers/strippers
- Hammer and nail
- Box cutter/Leatherman/Multi-tool
Step 2: Hack the Recording Module
First things first, unpackage your recording module, hook it up to the 9V battery, and make sure it’s working out of the box. You should have to hold the Record button down to record, and simply push the Playback button once to hear the last recording. This particular module records for a maximum of 20 seconds and only plays back the last thing recorded.
Use your multimeter to make sure it’s running 5V so that it’s compatible with the Arduino Uno. You can test this by touching the two probes to the wires coming and going to the button for the microphone.
Now comes the fun part: Taking it apart! The rubber button covers are easily removed with your fingernails, and reveal the way the circuit works. When you press each of the buttons, power flows through and activates the microphone or speakers. Since we're taking off the rubber buttons that contain the connection to bridge these circuits, we will be creating these connections in another way.
First, snip off the mic button. If you strip back the ends of the wires coming out of the board and touch them together, this should trigger the playback. (If it's not working, try soldering new wires onto the actual board here to make sure you have a really strong connection.)
What I found out by experimenting is that touching these cables is actually creating a short circuit and that triggers the mic. Since we're going to be regulating the recording trigger via the pressure sensor through the Arduino, we actually only need one of these wires. (On my board it was the one on left—closer to battery input— but I would recommend keeping both accessible just in case it varies board to board.)
The speaker is a little trickier. When you take off the button you'll see that that circuit doesn't have wires, but copper tape that gets bridged. That tape is quite delicate. You will only need one side of this as well, and for me again it was the one closer to the battery input. Carefully solder a wire to that side of the tape, being sure not to create a bridge with the solder. This is probably the trickiest soldering I've done, but you only have to do it once! Again, to be safe, you may want to solder wires onto each side so that you can verify that the speaker is working when you touch those two ends of wire. I put some 5min epoxy over this connection so that it wouldn't get too stressed
Finally, cut off your battery attachment, but leave enough wire on each cable to plug directly into your breadboard. We’ll power it directly through the Arduino. Those wires are multi-thread, so I soldered on an additional bit of wire to each.
You have now made your recording module your own, and you can trigger it as you choose! Proceed to the next step to see what I chose to do.
Step 3: Trigger the Recording Module With Push Buttons
In the end, I built my circuit on the ProTrinket, using a pressure sensor to trigger the mic and a photo resistor to trigger playback. However, when I was figuring this out, I started with simple push buttons that have a basic HIGH/LOW digital input and connected everything to the Arduino Uno. It's up to you whether you do this step, but it may be helpful. If you want to move directly to the sensors, proceed ahead brave warrior! If you want to skip the Arduino Uno stuff entirely and move to the ProTrinket, take two steps forward!
If you want to take it slow, hang out here.
I used the attached code and followed the ARD-X Circ-07 Pushbutton tutorial to wire and code the buttons. Instead of powering an LED, we want to wire the mic and speaker, though. So all you need to do is connect one of the wires of the mic and speaker (hopefully the one closer to the power source!) to digital pins (I used 9 and 10 in my sketch, respectively). It was in doing this that I figured out that I had to set the pin LOW to engage the recording/playback, which is a little counterintuitive, especially since the buttons are HIGH... You also need to power the recording module through the breadboard (+ to +, – to –).
When I ran this, the pushbuttons triggered the mic and playback. Just as with the original buttons, you have to press and hold to record, but playback just takes a press and release. Is it working? Hurray!
(I hope you keep testing the recording and playback saying more interesting things than, "Testing, Testing, 1, 2, 3"—I was doing that for a while and it became somewhat tedious...)
Step 4: Trigger the Recording With Sensors
Again, if you want to skip ahead to the wiring for the ProTrinket, be my guest! In the interest of caution, I took the next step on the Arduino Uno before downsizing everything to the ProTrinket.
I followed the ARD-X Circ-09 example to set up the wiring and write the initial code for both the pressure sensor and photo resistor. Both of these sensors are analog inputs, so you can set thresholds for activation depending on how much pressure or how much light is received. Your mic and speaker stay as they were. You'll want to use your serial monitor to see how the sensors react. I used the attached code.
All good? Fantastic. Now we get to make it all small enough to fit in to a tin can. Enter: ProTrinket!
Step 5: Downsize to the ProTrinket
This step will take some time, because it's all about getting your circuit to be smaller and connected as efficiently as possible. I went through 2 rounds of downsizing, with my wires getting shorter each time :)
We'll begin by transferring operations from the Arduino Uno to the ProTrinket. I recommend reading the Adafruit ProTrinket tutorial in full before starting. Attached is the code, which will indicate to you which pins I used for the in- and outputs. All the logic stays the same—analog pins for the sensors; digital pins for the mic and speaker.
Load your sketch to the ProTrinket using the MicroUSB cable and run it to make sure everything is in order.
The next part is all about eliminating as much of the breadboard as possible. You'll need a few more grounds, so I used a soldered breadboard, kept things tight, and then just cut off the corner that I used. The wiring diagram should explain the final setup.
Take it slow, and keep testing your recording and playback functions at every turn so you can always just backtrack one step to troubleshoot.
Once you have everything set up and working, it is time to "fabricate" your housing.
Step 6: Prepare the Tin Can
"Fabricate" is in quotations because you're really just repurposing materials. This step is an excellent opportunity to stop for a break and have a snack. I had some black beans, and hey presto: I had an empty tin can! How opportune.
Clean and take the labels off the can. Use a hammer and nail to make a hole in the bottom. Open that hole up gently using your multi-tool—you kind of just have to wiggle back and forth. We are making a hold big enough for the end of the microUSB. I didn't want to run the risk of making too big a hole, so once I was pretty close, I shaved down the plastic around the microUSB until I could wedge it in the hole.
Next, take your adhesive vinyl (any color, I used black) and cover the entire inside of the can to insulate it.
The only other incision we need to make is in the side of the can; this is where the pressure sensor will feed through. Make sure to put a little bit of vinyl or electrical tape on the outside where the sensor will sit, and make sure the metal isn't exposed on the inside of the cut.
Step 7: Install the Circuit in the Can
Here's the last hurdle: Get that circuit in the can!
To do this, cut a square piece of thick cardboard the width of the diameter of the tin can. Make sure you can wedge it in the middle of the can and have it be tight—it shouldn't wiggle. We will use this as the mounting board for the three boards and the speaker.
Position the ProTrinket so that the MicroUSB port is centered on one edge. This will be the 'bottom' and go into the can first. Position your recording module and breadboard above the ProTrinket. Shorten wires and resolder as necessary to make a nice tight circuit. I wrapped the power wires going from the recording module to the breadboard around the back, but this is not necessary. It was nice because it held the boards to the cardboard mount a bit, but I had to cut in on the edges so the wires wouldn't be in the way when wedging the cardboard into the can. The main thing is that you have as clean a setup as possible. Then use the adhesive vinyl or electrical tape to attach the wires to the cardboard to keep it in place. I wrapped the speaker wires over the top of the cardboard mount and used the adhesive vinyl to hold it on, too.
Wedge the cardboard and push it all the way down. Looking from the bottom of the can, make sure you can see the microUSB input. Plug in the cable, then wedge the end of the cable back in the can. Take it slow and test the system to make sure all is well.
The last thing to position is the pressure sensor: you'll have to unsolder the sensor from its wires to thread it through your slit and then resolder. I pulled the sensor all the way in so that just the round head remains outside, and covered that with another piece of adhesive to hold it down. Same goes for the inside—stick the lead of that sensor to the (nicely insulated) wall of the can.
Similarly, I taped the mic wires to the can so that it sits in one position securely. The only element that is simply suspended from its wires is the photo resistor. I wanted it to remain in the center of the can so that it would be triggered uniformly.
Step 8: Pat Yourself on the Back
You did it!
You should now have a rough but functional tin can message recorder! Remember that you may need to tweak the code once your sensors are in the can. Perhaps you set a higher threshold for the photo resistor so it doesn't respond to shadows.
You can plug this into your computer or an outlet via the USB and start leaving messages. Although the inspiration for this project was personal, I kind of want to install this randomly around and see how people react and if they can figure it out.
My next challenge is to make the same thing but powered with a battery so it can be truly clandestine in its technology. I'd love to use the same circuit in different ways; please let me know if you come up with other enclosures or use cases!