Table of Contents
Tracker $$ProM
This is a document describing my second Near Space Balloon Tracker, now known as “ProMini”.
Any questions you can get in touch with me at kevin at unseen dot org.
Hardware
Tracker Hardware:
Arduino Pro Mini
The module I purchased is a clone of the original Arduino Pro Mini and has a few slight changes. It is closest to this Sparkfun product, with a voltage regulator settable to 3.3v or 5v.
SparkFun LiPower Boost Converter
The SparkFun LiPower Boost Converter allows me to use batteries producing less than 3.3v and boost the voltage to the required level.
As supplied the device has a low voltage cut out configured of 2.6v, designed for LiPoly cells. For primary cells we need to remove this by shorting R3 as described here.
The device is also supplied configured for 5v, we need 3.3v, so need to modify the solder jumper.
The data sheet for the IC is here. This shows the IC producing a maximum of 200ma (more than enough for us) at around 0.8v (about the minimum voltage from a single AAA cell before it is totally exhausted).
RFM22B Radio Module
The UKHAS Guide to the RFM22b is here
The Hope FM Mfg product page, with links to application notes is: here Pinout Diagrams are on page 61.
Note Frequency range legally available is 434.04MHz - 434.79MHz according to IR2030.
Now using radio1.write(0x73,0x03); High and radio1.write(0x73,0x00); Low in rtty_txbit, gives a much tighter signal. Detailed here: http://ava.upuaut.net/?p=408 Thanks to Dave Akerman suggested (as recommended by Navrac)
Assembled uBLOX MAX-6 Pico Breakout with Chip Scale Antenna
This is a pre-assembled pcb including the Max-6 GPS & Chip antenna. Just 4 connects are available - VCC, GND and RX & TX.
Connections
- SparkFun LiPower Boost Converter, GND → Arduino Pro Mini, GND
- SparkFun LiPower Boost Converter, VCC → Arduino Pro Mini, VCC
- SparkFun LiPower Boost Converter, VBatt → Arduino Pro Mini, A0 (to measure true battery voltage)
- Arduino Pro Mini, GND → RFM22B, GND (ground in)
- Arduino Pro Mini, Pin D3 → RFM22B, SDN (shutdown in)
- Arduino Pro Mini, VCC → RFM22B, VCC (3.3V in)
- Arduino Pro Mini, Int 0 pin D2 → RFM22B, NIRQ (interrupt request out)
- Arduino Pro Mini, SS pin D10 → RFM22B, NSEL (chip select in)
- Arduino Pro Mini, SCK pin D13 → RFM22B, SCK (SPI clock in)
- Arduino Pro Mini, MOSI pin D11 → RFM22B, SDI (SPI Data in)
- Arduino Pro Mini, MISO pin D12 → RFM22B, SDO (SPI data out)
- RFM22B, TX_ANT (TX antenna control in) → RFM22B, GPIO0 (GPIO0 out to control transmitter antenna TX_ANT)
- RFM22B, RX_ANT (RX antenna control in) → RFM22B, GPIO1 (GPIO1 out to control receiver antenna RX_ANT)
- Arduino Pro Mini, Pin 2 → Max-6, VCC
- Arduino Pro Mini, GND → Max-6, GND
- Arduino Pro Mini, pin 1 TX → Max-6, RX
- Arduino Pro Mini, pin 0 RX → Max-6, TX
Code
The Code lives here: https://github.com/KevWal/ProMini
Testing
In the warm office, Signal rx'ed loud and clear on 434.190.700 Mhz rather than the set 434.201 Mhz
Sentence is: $$PROM,2,000010,0.000000,0.000000,0,0,25,42*63B0
which is: %%PROM, id, time, lat, lon, alt, sats, vinmv, rfm_temp*CHECKSUM
RTTY 50 Baud, 480 Hz Shift, 7 Bits, No Parity, 2 stop bits
Habhub Payload Config
Using the form here I generated a payload config:
Payload Name: G7PMO $$PROM
Primary, 434.175, USB, RTTY, 480, ASCII-7, 50 Baud, Parity none, 2 Stop bits.
{“type”:“payload_configuration”,“name”:“G7PMO $$PROM”,“time_created”:“2012-11-18T22:25:32+00:00”,“metadata”:{“description”:“G7PMO's ProMini Tracker”},“transmissions”:[{“frequency”:434201000,“modulation”:“RTTY”,“mode”:“USB”,“encoding”:“ASCII-7”,“parity”:“none”,“stop”:2,“shift”:480,“baud”:50,“description”:“Primary”}],“sentences”:[{“protocol”:“UKHAS”,“callsign”:“PROM”,“checksum”:“crc16-ccitt”,“fields”:[{“name”:“sentence_id”,“sensor”:“base.ascii_int”},{“name”:“time”,“sensor”:“stdtelem.time”},{“name”:“latitude”,“sensor”:“stdtelem.coordinate”,“format”:“dd.dddd”},{“name”:“longitude”,“sensor”:“stdtelem.coordinate”,“format”:“dd.dddd”},{“name”:“altitude”,“sensor”:“base.ascii_int”},{“name”:“satellites”,“sensor”:“base.ascii_int”},{“name”:“battery”,“sensor”:“base.ascii_int”},{“name”:“temperature_internal”,“sensor”:“base.ascii_int”}],“filters”:{“post”:[{“filter”:“common.numeric_scale”,“factor”:0.001,“round”:3,“source”:“battery”,“type”:“normal”},{“filter”:“common.invalid_gps_lock”,“ok”:[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],“source”:“satellites”,“type”:“normal”}]},“description”:“$$ProM Std format”}]}
Doc ID: 7ca1c7874831f6e8a0616ca98add1600
Note the filter I use to identify if I have a satellite fix “{“filter”:“common.invalid_gps_lock”,”type“:“normal”,”ok“:[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],”source“:“satellites”}”
I should really implement another variable in the sentence to define lock directly for the PUBX code, but I am told the above should do what I want it to do.
Further Reading
Inspired by: http://www.daveakerman.com/?p=310
todo:
RFM22 Temp code: https://github.com/jamescoxon/PicoAtlas/blob/master/Pico80/Pico80.ino or here: https://github.com/jamescoxon/PicoAtlas/blob/master/Pico7/Pico7.ino
use Serial.flush(); to get rid of UBX issue
https://github.com/jamescoxon/PicoAtlas
More RFM22b code to look at: https://github.com/jamescoxon/Eurus/blob/master/70cmTracker/MainCode/MainCode.ino