Arduino, AVR, HCI, Little Robot, Projects, Ubiquitous Computing
This is part one of a three part series: Part two covers the firmware, and part three will cover the software.
I find interaction design to be pretty fascinating. And lets face it, most of the technology we deal with on a daily basis has not been designed with interaction in mind. Or at least not subtle interaction.
Take telephones: they're a priority interrupt. When a phone rings, you go through a full context switch. You have to stop what you're doing to answer. Email doesn't interrupt, but it's not priority either. Email doesn't say "I'm thinking of you" it says "I thought of you twenty minutes ago". These are great examples of technologies that meet their minimum need; they do work, but do they work well? Is email the best way to get text from one human being to another? My spam filter says no. Is the telephone the best way to tell someone you were just thinking about them?
When you're in a room with someone, there are many different subtle ways to indicate that you enjoy their presence. Everything from where you sit to how you breath has at least some degree of significance -- some degree of communication. This project was my way of performing that communicative act, when I'm not in a room with that someone.
Enough waxing philosophical: I made two little robots. One for my fiancé's desk, and one for mine. When you poke one in the belly, the other one waves.
Without further ado, here's part one:
The hardware on this project is absolutely informed by the firmware. From the outset I expected to use Objective Development's V-USB package. It provides a software USB stack capable of running on 8-bit Atmel AVR microcontrollers.
With that in mind, I sought a challenge and picked the smallest AVR I could get on short notice -- the ATtiny85, in an 8-pin DIP package. This is a pretty powerful chip, at least for these purposes. Less than $3 Canadian gets 8kB of flash program storage, a half a kilobyte of RAM, two hardware timers, and an internal oscillator.
Not really being one to reinvent the wheel, I found an existing project using the same firmware and microcontroller -- the one key keyboard by Flip van den Berg. After some ethical deliberations, I shamelessly took his schematic, and breadboarded out myself:
To my surprise, it actually ran! You can make a USB keyboard on a breadboard! And it works on any computer that supports HID compliant devices!
The next step was to take the same circuit, and put it on something a little bit more permanent. In this case, some protoboard. The circuit on the left is a programming target board, with a standard programming header. I use it with an Adafruit USBtinyISP programmer. The circuit on the right is the USB controller with a button and header for a servo motor.
Servos are fairly useful beasts. They don't really need drivers. Supply them with a suitable PWM signal, and they'll drive themselves. In this case, the servo is powered off the +5v USB supply, even though the microcontroller is running at +3.3v. My servo didn't seem to care, and quick google searching suggests that this is pretty standard; servos will amplify their PWM signal internally.
So at this point I found that the electronics basically worked. I was able to control a servo, and read button presses. So now for some larger scale hardware.
I don't have access to a full shop, so I relied on a low impact sculpting material: Sculpey, a polymer clay, similar to Fimo. A little armature wire, some low-fidelity sculpting and the parts went into the oven at 250° F for about 15 minutes. As easy as sculpey is to work, it is even easy to rework. Hot glue and acrylic paint stick to it quite happily.
Next, I installed the guts with lots of hot glue.
Then I painted the exterior with acrylic spray paint. I touched up the eyes with acrylic paint, and added craft foam tank treads and covers for the belly-switches.
And here's what they look like from the back.
Next up: The firmware!Update: This article was featured on Make: Online.