ZOE GPS proto board in 35 mm model rocket application / Introduction


  • Full Member
  • ***
    • Posts: 27
    • View Profile
Ben Rose  gave me the opportunity to test and evaluate a ZOE GPS prototype board, see the post “GPS TinyShield does not provide actual altitude”  on the forum.

In the current post I will describe how I used this ZOE GPS proto board in a small model rocket application where I wanted to record GNSS position (latitude, longitude and altitude) of the model rocket at 5Hz as well as barometric altitude, accelerations, gyroscope and magnetic field readings at about 50 Hz.

Functionality and HW aspects

The ZOE GPS prototype board that I received is a bit bigger board, about TinyScreen+ size, with u-blox ZOE-M8B GNSS, Bosch BME280 (combined humidity and pressure sensor), ST LSM9DS1 (3D accelerometer, 3D gyroscope and 3D magnetometer) and microSD slot. These chips and related support components are placed on one side of the board.

The ZOE-M8B is a very small GNSS chip, member of the u-blox M8 product family and working at only 1.8 V with a very lower power consumption also thanks to the default “Super-E mode”. Data connection of the ZOE on this proto board is through UART only. The I2C pins are not connected. The backup voltage pin is not connected either, so all commands to modify the default ZOE setup have to be given through the UART which is connected to IO0, IO1 and ground, so available at the TinyZero under the HW UART “Serial”.

ZOE pins SAFEBOOT_N and RESET_N are connected to AD2 and AD3. It is essential to apply statements to set AD2 and AD3 high early in setup to ensure that these ZOE inputs are safe.

The ZOE proto board has been connected to a TinyZero using the TinyShield expansion bus. Because of components on both ZOE proto board and TinyZero it is necessary to put another board in between. At first I used a standard TinyShield proto board with both top and bottom bus expansion between ZOE proto and TinyZero.

The BME280 on the ZOE proto behaves exactly the same as the BMP280 for the temperature and pressure settings I am using. The BME280 is also downward register compatible to the BMP280 (with some exceptions not applicable for my case), so the code of BMP280.h and .cpp can be reused.
However, the BME280 as mounted on the ZOE protoboard has a different I2C address, 0x76 instead of 0x77, so  this has to be changed in BMP280.h.

This also means that it is possible to log two barometric altimeters, so I replaced the standard proto board TinyShield between ZOE board and TinyZero by a Barometric pressure TinyShield.

Some static tests have been executed with a 9x9 mm passive GPS patch antenna originally belonging to the GPS TinyShield. The sensitivity was clearly less than that of the much bigger Sparkfun SAM-M8Q breakout board, but sufficient for the model rocket application. Main advantage of this small antenna is that it is very light and every gram counts in model rocketry.

The 3 boards and the 9x9 mm GPS antenna have been mounted on and in a kind of harness, designed and 3D printed in PETG at home, see pictures. The boards are placed in the length on a thin plate of the harness, with a 150 mAh battery glued with double sided tape at the other side. The harness with boards, antenna and battery weights 18.5 gram.

The harness can be  placed in a 3D printed PETG container and locked with a ring and a PETG screw cap. This container with nose acts as an extended nose cone, see picture. The total weight of the model rocket without motor is ~130 gram, only 4 gram more than the previous version with sensor logging, but without GNSS. With a Klima C6 motor an altitude of 130 - 140 m can be expected.

ZOE setup

For my envisaged application in a small 35 mm diameter model rocket, setup changes are necessary, because by default 6 NMEA messages are given at 1 Hz  (9600 baud rate) taking into account a “portable” platform model e.g. assuming low acceleration and a maximum vertical velocity of 50 m/s.
So I changed the setup to only 3 NMEA messages (GGA, GSA (for GPS and GLONASS separately), VTG) at 5 Hz (57600 baud rate) and the most dynamic platform model available called “Airborne <4g”.

With static tests I found that the ZOE changed its 5Hz rate automatically to 1 Hz after some time presumably to reduce power consumption. In contrast with e.g. the u-blox SAM-M8Q GNSS, the ZOE-M8B has “Aggressive with 1 Hz” related to its  “Super-E mode” as default power mode setup (PMS).
This has to be changed to "Full power" or "Balanced" to be sure that 5Hz is maintained. This means a higher power consumption, but that is not an issue for model rocket trajectories with a short duration.

In a separate post I will elaborate the ZOE-M8B setup modifications through UART.

SW aspects

Based on earlier logging SW programs a SW version was prepared and tested (at fixed position) to log in a .txt file:

- U-blox M8 GPS setup data, e.g. platform model 8 (Airborne <4g), power mode setup 1 (Balanced), 5 Hz, baudrate 57600, NMEA strings: GGA, GSA (GPS and GLONASS), VTG.
- GPS strings every 200 ms

and in a .csv file:

- administration: time stamps, NMEA string received or not, internal buffer data, etc.
- acceleration (3 axes simultaneously) and temperature of BMA250 on TinyZero,
- altitude and temperature of BMP280 on Barometric pressure shield
- altitude and temperature of BME280 on ZOE board
- magnetic field (3 axes simultaneously) of LSM9DS1 on ZOE board
- gyro (3 axes simultaneously) of LSM9DS1 on ZOE board
- acceleration (3 axes simultaneously) of LSM9DS1 on ZOE board

Measurement cycle of all .csv data: ~ 19 ms, so > 50 Hz,  with a very limited number of longer cycles (less than 20 cycles  > 42 ms in ~ 100,000 cycles in stationary test run). These longer cycles are related to microSD access issues despite the use of block writing (blocks of 512 bytes).

Launch trials

Two launches of this rocket called "MER-35-ZOE" were executed on November 9. Weather was excellent for launching. See picture of launch #1 from below / side.

The acceleration limit of 4G in the dynamic platform model is exceeded for a short time interval during the boost phase. It depends on the estimates inside the ZOE if this will be detected or not.
Acceleration at launch #1 was higher than that of #2 resulting in max vertical velocities of 54 m/s and 49 m/s respectively. However, max altitudes were nearly the same (135 and 134 m). Launch #2 was more vertically oriented.

Parachute ejection occurred nicely in time. No model rocket damage after landing. Boards and battery were still mechanically fixed on the harness.

NMEA GNSS strings and other sensor measurements have been well recorded during both flights.

During ascend phase of flight #1 six NMEA string groups are missing the position values and flagged with indication “No position fix (at power-up, after losing satellite lock)” or “GNSS fix, but user limits exceeded” in the GGA and GSA strings, which gives the same flag. This did not happen with flight #2, presumably because of the bit lower acceleration of this flight.

Further results will be detailed in a separate post, but no errors or very strange things were discovered up to now.


It has been shown that the ZOE GPS prototype board can be successfully applied in a 35 mm diameter model rocket.
ZOE setup modification took some effort, but can be done in a reliable way.


  • Administrator
  • Hero Member
  • *****
    • Posts: 437
    • View Profile
This is awesome! It's great to finally see pictures of the tiny rocket!

We are looking to hopefully release the ZOE GPS TinyShield on our website sometime in the next few months. Thanks so much for putting it to good use and reporting back on your findings!


  • Sr. Member
  • ****
    • Posts: 68
    • View Profile

Would it be possible to acquire your BMA250 accelerometer csv files from your test flights?

- acceleration (3 axes simultaneously) and temperature of BMA250 on TinyZero,

Also, what were your bandwidth and acceleration range settings at the time.




  • Full Member
  • ***
    • Posts: 27
    • View Profile
Hi John,

yes, it is possible to get data from my test flights.

Please send me an e-mail (see members list) with an indication of the planned use.

With respect to BMA250 range and bandwidth, I used +/- 16 G to avoid saturation and BW 31.25 Hz (update time 16 ms).

The LSM9DS1 accelerometer is using much more bits, also + / - 16 G setting and ODR 50 Hz.

Just a note:

Because the model rocket fincan has canted fins, it also rolls (along its length axis) with a rotation rate depending among others on the forward velocity . This offers the possibility to test the gyro and the magnetic sensors.

The accelerometers are not positioned at the center, so the roll rotation also gives a significant centripetal acceleration to AccY and AccZ of BMA250 and AccX of LSM9DS1.

AccX of BMA250 and AccY of LSM9DS1 provide data of the forward acceleration of the model rocket including the rocket motor activity.



  • Full Member
  • ***
    • Posts: 27
    • View Profile
In the mean time I also found that SBAS (Satellite-based augmentation system) is not enabled by default in the ZOE-M8B in contrast with e.g. the SAM-M8Q GNSS receiver. So if this is not changed, the ZOE will never provide a Differential GPS fix taking into account some corrections.

In the ZOE-M8B datasheet (ZOE-M8B_DataSheet_(UBX-17035164).pdf),  it is stated “Tracking SBAS satellites uses power and requires a long decoding time. It is recommended to disable SBAS for Super-E mode.”
Default disabling SBAS is in line with other default settings of the ZOE-M8B to minimize power consumption like the “Super-E mode”.

In a following post about changing the ZOE configuration using the UART channel (in preparation), I will also include how to enable SBAS.



SMF spam blocked by CleanTalk