Arduino telemetry payload in a class C rocket

A few weeks ago I headed over to a local trotting track with Thomas to meet up with Marc Alexander, Rohan Fernando, and their kids to do a couple of launches with Marco Ostini’s class-C rocket fitted with an Arduino telemetry payload. Rohan brought a video camera and Marc brought a still camera, and it was a beautiful day so we got some really good coverage.

This was a triple-purpose trip: Arduino development for Practical Arduino, rocketry education for Lunar Numbat, and an excuse to have some fun.

Because class-C rockets are so small and light they can’t lift much of a payload and I had to keep the mass of the electronics as small as possible. You can get a sense of scale from this photo which shows a small white bundle in the bottom of the nosecone. Inside that bundle is an Arduino Pro Mini 5V/16Mhz, a 433Mhz transmitter module, and a Lilypad 3-axis accelerometer:

arduino-payload

The Arduino runs some code that reads the accelerometer values, pokes them out the transmitter using Mike McCauley’s VirtualWire library and waits for the message to go out, then loops back to the start. The result is a stream of values that is pretty much rate-limited by the 2Kbps transmission rate. On the ground I had my laptop connected to an Arduino Duemilanove with a 433MHz receiver module:

rocket-receiver

Running on the laptop was a little piece of code that read values coming from the USB port and displayed them on screen while also writing them to a logfile. This shot shows the values scrolling on the screen while I’m holding the rocket and giving it a bit of a shake:

rocket-telemetry

The launches worked really well, but in the end I don’t think the accelerometer data is going to mean anything much at all. I learned a very important lesson: always, always, always put an absolute timestamp in with the data, even if there’s a relative one in there! The values came out looking like this:

562047|326|328|395
562204|322|330|393
562361|327|327|397
562516|317|335|604
562673|325|331|590
562830|328|330|514
562985|328|331|506
563142|328|331|500
563298|328|329|501

where the columns are:

  1. Time in milliseconds since the Arduino booted
  2. X force
  3. Y force
  4. Z force

That data segment is from around the time of the second launch with the Z value stable at around 394 while the rocket was stationary then jumping to 604 and falling to 500 over the next 800ms. Which brings me to the second lesson learned: comms failed right at that point, less than 1 second after launch. So the el cheapo 433MHz modules from Jaycar just didn’t manage to do the job. I have a pair of 60mW XBee modules from SparkFun that are a lot bigger than the 433MHz modules but should be good for 1Km+ range, so for next time the 433 modules are out and XBee is in. One of the launches captured at just the right moment by Marc, with Thomas holding the launch controller and my arm around him:

rocket-launch

The extra mass in the nosecone didn’t seem to hinder the launches at all, but because I used C6-7 motors with a 2 second separation delay there was a heart-stopping moment when it reached apogee, turned over, and started coming straight down *really* fast before the charge fired and the chute deployed. On the second launch I thought the separation had failed because it descended a very long way before it fired, so the final lesson for the day was to use motors with a smaller separation delay when working with a larger payload mass.

Fun times!

(Photos in this post copyright 2009 Marc Alexander, all rights reserved, used with permission)

Leave a Reply