Wednesday, November 4, 2009

Robot Costume Complete

We finished this costume about an hour and a half before we had to leave to go trick or treating at my sister's house. It was a lot of work, but the results are awesome. I made the electronics, and my wife did the cardboard papercraft as well as the actual design. Of course, I helped with final assembly. There was lots of glue that had to be clamped and held.

We initially spent a lot of time searching for other robot costumes people have done, and one thing we noticed was that most people make the costume too wide, so the kid's arms are held out the whole time, which we didn't think would lead to the kid wearing it for long. We found a box that was almost exactly armpit width, so that was the foundation.

robot costume

It's mostly made from cardboard painted with textured spray paint. It's incredible how good that paint looks. Here the kids are testing out the Candy Input slot. Candy goes into a box inside the costume, and it trips an electric eye on its way in that triggers some sounds and the analog gauge.

He actually wore the costume for about a half hour before he wanted to sit down. There isn't enough room for that so we took it off, and I couldn't believe how heavy it was with candy! He was a real trooper for wearing it for so long.

robot costume

The sleeves are dryer vent tubing, stitched to the long sleeve shirt he has on under the costume. So when he took off the box, he still looked a little like a robot. Also, notice the copper painted crocs. He loves those, and wants us to paint other stuff in the house copper now. We told him we'll see

robot costume

Here's a better view of the back and the Arduino controller. There's an Adafruit Wave Shield there that drives the sounds, and I soldered up the circuitry you see there as well. The Arduino has no problem looping sounds, reading input, driving the analog gauge with PWM, and chasing the LEDs there around the controller. When I was setting it up, it ran on a fresh battery for over two hours without any degradation.

robot costume rear detail

Last but not least, here's a video of the electronics in action. The green LED thing is a Game of Life kit that is independent of the rest of the circuitry, just for fun. I overboosted the speech in Audacity to make it seem like it's louder.



More about the initial design can be seen here.



Thursday, October 15, 2009

Robot costume first milestone

My wife and I are making a robot Halloween costume and I just finished the electronics design prototype. I wanted to wait until the costume was finished before revealing it but I'm too excited that I finished my circuit and coding.





That's a video of it, and I want to describe it a little. It uses an Adafruit Wave Shield for the sounds, and an antique analog gauge I found at Gateway Electronics here in St. Louis. There's an infrared beam pair from Sparkfun, which will be watching the "candy input slot" on the robot's chest. The gauge displays the count, until too much candy is inserted and it goes crazy. Then after 20 seconds of no more candy, the candy count gets reset, to be ready to do it all over again at the next house.

In the sketch, I used these AlphaBeta libraries: LED, button, TimedAction, and Scheduler. These made coding this sketch very easy. He even updated Scheduler with a clear() for me. Thanks again for that! The hardest part was getting it all to work together. I had been trying to use pin 9 for the gauge, and it crashed the sketch. I did more reading and found out you can't do PWM on 9 with the Wave libraries because of the timer. Pin 6 works fine though.

The beep sound loop I found on my mac, I think it came from iMovie. The speech is recorded synthesis also from my mac, made like this from a terminal:
say -o outputfile.aiff "thing to say"


This makes an aiff file. Then I used iTunes to convert all the sound files to WAV with the right settings for the Wave Shield.

The chaser LEDs are going to surround the Arduino in a shadow box sort of thing, so people can see the controller, and to punch it up so it isn't so boring.  ;D

Next I have to install all of this in the costume and solder it all up.



Wednesday, March 25, 2009

Soldering is complete




I used a RBBB (an Arduino runtime module, cheap!) mounted on a soldered breadboard. Also, two RJ45 connectors on SparkFun breakout boards. That will make a clean connection for a pair of cat5 wires going up to the ceiling. I had originally planned on using screw terminals, but then I decided to use twisted wire pairs (signal, gnd) and needed twice as many connections. There was enough unused space on the board for every other pin to be a ground with these breakouts.

Next, I have to finish wiring up the LEDs and mount them to the little hot air balloons.

Prototype complete



For my Arduino-powered flickering LED project, I finished the prototype with all the features I wanted:
  1. Light sensor to turn the LEDs off after the room lights are turned off.
  2. Button to set the room darkness threshold, since I don’t want to have to reprogram the chip in the future.
  3. Six LEDs with flickering brightness.
  4. One steady LED for a differently shaped balloon, which will be used for the status display as well (blink to indicate setting the threshold, as well as to indicate that it noticed the lights went out).

Flickering LEDs - proof of concept

My first project is to light a string of papier-mâché hot air balloons. I was just going to light them with some LEDs, but then I heard about the Arduino and wanted to make something more exciting. I got a starter kit from adafruit.com and got to work.

This is the first proof of concept of making the LEDs flicker. Later I’ll add a light sensor to start a sleep timer that will turn the balloons off after a half hour.



Here’s the sketch that runs what you see above:

/*
* randomly flickering LEDs
*/

int ledPin[] = {
5, 6, 9, 10, 11}; // pwm pins only
int ledState[5]; // last state of each led
long randNumber;

void setup() {
for (int i=0; i<5; i++){ // set each led pin as an output
pinMode(ledPin[i], OUTPUT);
}
randomSeed(analogRead(0)); // seed the rnd generator with noise from unused pin

for (int i=0; i<5; i++){ // init each led with a random value
ledState[i] = random(20, 201);
}
}

void loop(){
for (int i=0; i<5; i++){ // for each led:
analogWrite(ledPin[i], ledState[i]); // set the pwm value of that pin determined previously
randNumber = random(-35, 41); // generate new random number and add that to the current value
ledState[i] += randNumber; // that range can be tweaked to change the intensity of the flickering
if (ledState[i] > 200) { // now clamp the limits of the pwm values so it remains within
ledState[i] = 200; // a pleasing range as well as the pwm range
}
if (ledState[i] < 10) {
ledState[i] = 10;
}
}
delay(100); // the delay between changes
}

Thursday, February 19, 2009

Camera Shutter Tester

I make pictures with this 1951 press camera (a 4x5 Graflex Speed Graphic) and I wanted a way to check the accuracy of the leaf shutter in the lens as well as the rear curtain shutter.

The only ways I had found to do this are to buy an expensive testing machine, or to pay someone to use that machine they've bought, or the "sound card shutter tester" along with Audacity, which seems pretty kludgy and takes too much human effort.

But with Arduino, I knew I could make something on my own.

So I got an infrared emitter and sensor pair from SparkFun and I wired them up like this:



I wrote this simple Arduino sketch:

#define receiverPin 12 // input from the ir receiver.

unsigned long duration; // time shutter is open

void setup()
{
pinMode(receiverPin, INPUT);
Serial.begin(9600);
}

void loop()
{
//digitalWrite(ledPin, !digitalRead(receiverPin)) ;
duration = pulseIn(receiverPin, LOW);
if(duration != 0 )
{
Serial.println(duration);
}
}




And here is is set up to use:





I put the emitter on one side of the lens, the sensor on the other, and trip the shutter. The serial console shows me the open duration in microseconds, which I compare to what it should be.

Now I can see how accurate the shutter is, and I can adjust the exposure if necessary. (Or even send the equipment out for repair or adjustment.)