Rocket instrumentation project (v0.2)

Thanks to Mike, and Andy, and Jon, and our other fellow hackers for their inspiration and advice and ideas and everything else. I just laid out a board, but I can by no means take all the credit for the project idea.

Unless otherwise specified, you may consider the hardware designs linked here as licensed under the TAPR Open Hardware License.

I know EAGLE isn’t FOSS, so if you’re eally principled about not using any software that isn’t open, unfortunately you won’t be able to open those files. I haven’t learned to use gEDA yet. If you want to, by all means, feel free to re-draw the board and schematic layouts in gEDA, using the PNG images provided.

(moderately large .png)

PCB layout (moderately large .png)

EAGLE schematic file.
EAGLE board file.

That board design has everything routed…. it’s complete. Yay :)

i) Temperature sensor.
Here I’ve just assumed that we can use a DS18B20 to measure temperature; pretty simple really, just one microcontroller pin, and a 4.7 k pull-up resistor. We could of course have multiple sensors throughout the rocket and just bus them all together, and connect them all back to the one connector on the main PCB. There are other sensors we could use in theory, but the DS18B20 is common, convenient to use, and there is heaps of experience and documentation with regards to using it in the Arduino community.

I didn’t have a part library for the DS18B20, so I just put a 3-pin 0.1″ pin header on the board. You can simply solder the TO-92 package through that footprint on the board quite easily, or alternatively, you can stick a pin header on the board, and wire up the DS18B20(s) off the board.

ii) GPS.
Here I’ve just picked LS20031 5 Hz GPS from SparkFun, since Jon mention that’s the one he has experimented with.
It’s a 3.3V device, so we simply have a 1:2 voltage divider on its RX line to interface it to the 5V microcontroller.
I’ve just used a standard 0.1″ pin header footprint here, so flying wires can be soldered on to connect to the pads
on the GPS board.

Since the microcontroller on the Arduino only has one hard UART, a virtual soft UART needs to be used, and the performance that you programming gurus could squeeze out of that code will be the factor that limits the speed at which the GPS could be read. It’s not my department :)

iii) Light sensors.
Just two LDRs connected to two microcontroller ADC inputs, connected with a couple of resistors as voltage dividers. Pretty simple, really. The resistor values might need to be tweaked depending on the typical resistances of the LDRs used, but they should be pretty flexible, and 100 k should be about right, since we really only want qualitative information from them anyway. The LDRs can of course be mounted off the board on long flying wires, and mounted whereever they have to be mounted.

iv) Real-time clock.
I’ve just assumed we’re using a DS1307 here, and this is really just a very simple schematic which is needed to support this device. There are a couple of 10 k pull-up resistors on the I2C bus. You could use any DS1307 prototyping or development board, as available, for example, from Sparkfun or Microzed or Futurelec, to develop code for this, they’re all the same chip, and they all have essentially identical hardware.

v) Flash memory.
Mike mentioned the AT45DB61B, and that looks like the perfect device.

It has heaps of storage, it’s fast, it’s easy to interface, and it’s inexpensive. There’s nothing not to like with this suggestion. This is a 3.3 V device, however, but the datasheet says that the communications signals are 5 V tolerant, so there shouldn’t be any trouble with interfacing it. 2 Mb ought to be enough for anything (touch wood) but if it isn’t, there’s no reason why another chip couldn’t be added on the SPI bus.

Rockby sells the device in the CASON package for $2.60 AUD, and Sparkfun sells the same device in the SOIC package for $3.60 AUD. Since the latter isn’t far more expensive, and the CASON package looks like it’s a bitch to solder by hand, I have used the SOIC package :)

vi) RF telemetry.
Here, just for the sake of drawing the schematic, I’ve assumed we might be using an XBee device, although if you wanted to change the design to use, say, one of the DR3100 devices there wouldn’t be much of a change, they’re still 3 V devices, using bidirectional serial comms back to the microcontroller, so there really isn’t much difference. The XBees have a couple of LEDs to indicate their status, eg. that they’ve got a communication link to another device, so I’ve just added these in, since a few blinkenlights don’t hurt :)

Note that the XBee is a 3.3V device, so I’ve just divided the data input from the microcontroller down with a 2:1 voltage divider, which should be fine.

vii) Microcontroller
Here I’ve just assumed that a standard Arduino Duemilanove board is used. I’ve especially chosen the pins allocated for the I2C and SPI buses to correspond to the AVR’s pins for those hardware interfaces, although if these interfaces were implemented in software, any other pins could be used, really. There’s a reset button included, since the shield board blocks the one on the Arduino itself.

viii) Accelerometer and ADCs.
I’ve just assumed we’re using an ADXL330, and the LTC1298s as Mike mentioned, which is a cool idea.

I chose the ADXL330 pretty much arbitrarily, since it’s the first one I could find an Eagle library for, it seems pretty common, and SparkFun stock it. It’s the same 3-axis accelerometer as used, for example, in the Arduino Lillypad accelerometer board.

The Analog Devices ADXL345, with A-D conversion built in to the IC with only an interface to the microcontroller’s SPI or I2C bus needed, looks very cool though, and the price difference, once the cost of ADC chips is included, doesn’t seem that large.

ix) Barometric pressure sensor.
This is just a Freescale MPX4115, which seems somewhat common in UAV, model aircraft and rocketry work for altimeter applications.

I’ve put a bit of low-pass RC filtering on the output from the barometric sensor, using the component values just as given from Freescale AN146. I’m currently working out the maths to read out the altitude from the output from the barometric sensor, which isn’t that trivial.

ix) Power supply
I’ve removed the LiPo battery and SMPS power supply from the previous version, since we need a 12V battery for the video downlink anyway.

I’ve just assumed that 12 V is plugged into the Arduino’s power supply jack, and 5 V is coupled to the daughterboard via the Arduino’s pin headers. There’s a 3.3V regulator on the board supplying the 3.3V for the XBee and accelerometer and DataFlash, an LM1117 at this point, although you could swap it for some other kind of device that is available. It needs to be a low dropout regulator, though, since you’re taking a 5V input to regulate down to 3.3 V.

The Vin pin on the Arduino is connected to one of the analog input pins via a voltage divider, so that battery voltage can be measured by the Arduino. (I know, those pins are right next to each other, and this seemed like something of a sweet hack.) With those resistor values chosen at the moment, 12 V on Vin corresponds to about 4.53 V on the ADC input, so you can read it straight off. Actually, Vin won’t be exactly equal to the battery voltage, because there’s a polarity protection diode on the Arduino power input before that Vin pin connection…. so there will be a little drop across that. I don’t know exactly how much, maybe about 0.2 V for a Schottky diode, I haven’t empirically measured it.

Now, what to call this thing? “That Arduino based rocket instrumentation/datalogger project” is too much of a mouthful. So, we need a name.

How about, say, ARTEMIS. That is, Arduino Rocket Telemetry and Instrumentation System.
(You can totally see the experimental physicist in me reflected in that name, can’t you?)

That’s just my idea for a name. I’ll let the Hackerspace crew mull over it and come up with a better idea if they want to.

Bill of materials… for the design as it stands at present.

Resistors: (All resistors 0805 SMD package)

R1      4.7 k
R2      100 k
R3      100 k
R4      750 R
R5      10 k
R6      10 k
R7      100 k
R8      100 k
R9      56 R
R10     100 k

R11     56 R
R12     100 k
R13     150 k
R14     91 k


C1      10 uF 16 V tantalum, through-hole                                       Jaycar RZ-6648
C2      10 uF 16 V tantalum, through-hole                                       Jaycar RZ-6648
C3      100 nF, 0805 SMD package
C4      100 nF, 0805 SMD package
C5      100 nF, 0805 SMD package
C6      100 nF, 0805 SMD package
C7      100 nF, 0805 SMD package
C8      1 uF, 25 V tantalum, through-hole                                       Jaycar RZ-6627
C9      10 nF, 0805 SMD package
C10     330 nF, 0805 SMD package
C11     100 nF, 0805 SMD package
C12     100 nF, 0805 SMD package
C13     100 nF, 0805 SMD package


I've specified some examples of parts suppliers that I know have the relevant items, though they may not be the only choices, or the best choices.

IC1     Linear LM1117-3.3 LDO 3.3 V voltage regulator, SOT-223 package          Digikey LM1117MP-3.3CT-ND
IC2     Dallas DS18B20 1-Wire temperature sensor, TO-92 package                 Sparkfun SEN-00245
IC3     Linear LTC1298 analog-to-digital converter, DIP-8 package               Futurelec
IC4     Analog Devices ADXL330 3-axis accelerometer, LFCSP-16 package           Sparkfun COM-00730
IC5     Freescale MPX4115A barometric pressure sensor, 867-H package            Digikey
IC6     Linear LTC1298 analog-to-digital converter, DIP-8 package               Futurelec
IC7     Dallas DS1307 real-time clock, SOIC-8 package                           Futurelec
IC8     Atmel AT45DB161B 16 MBit DataFlash memory, SOIC-8 package               Sparkfun COM-00301

IC9     Arduino Duemilanove board
IC10    XBee module (any, really)
GPS     LS20031 GPS module                                                      Sparkfun GPS-08975

B1      12 mm coin cell holder, SMD                                             Sparkfun PRT-07948
plus CR1225 3 V lithium coin cell                                       Sparkfun PRT-00337
Q1      32.768 kHz quartz oscillator crystal, TC-38 through-hole package        Sparkfun COM-00540
S1      Momentary tactile pushbutton switch, through-hole                       Jaycar SP-0600
LDR1    Standard cadmium sulfide photoresistor, through-hole 0.1"               Jaycar RD-3480
LDR2    Standard cadmium sulfide photoresistor, through-hole 0.1"               Jaycar RD-3480
LED1    Standard LED; 3 mm through-hole                                         Jaycar ZD-0120
LED2    Standard LED; 3 mm through-hole                                         Jaycar ZD-0120

2 x 10-pin 2 mm header sockets for XBee module                                  Sparkfun PRT-08272
Break-away 0.1" machined pin socket strip for mounting LTC1298 ICs              Jaycar PI-6470
28-pin break-away 0.1" pin header strip for mounting shield to Arduino          Jaycar HM-3211

About this entry