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.
Schematic (moderately large .png)
PCB layout (moderately large .png)
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.
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.
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 Capacitors: 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 ICs: 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
You’re currently reading “Rocket instrumentation project (v0.2),” an entry on Nullius in Verba
- June 15, 2009 / 12:56 am