ENG-CANSAT-PICO-GPS

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche

Forewords

Transmitting the CanSat localisation while the parachute descent will, for sure, help you to find on the ground!

The CanSat GPS module use the GPS / GALILEO / GLONASS / QZSS satellite networks to calculate the current position.

ENG-CANSAT-PICO-GPS-01.jpg

The GPS module used a Patch Antenna made it very compact while still offering a -165 dBm sensitivity. The high sensitivity made it possible to detect the localisation signal even under bad conditions.

With the patch antenna already oriented to the sky, the module is ready to mount on the CanSat with a simple Grove cable!

Hot Start Localisation

What's make the difference of this GPS is its hot start capability.

The Hot Start requires a CR2032 coin cell to be inserted. Then the GPS module keeps an accurate time tracking making it possible to get satellite fix within 1 second!

Without the CR2032, the GPS module tries to locate the networks as it will do the very first time, this cold start may take up to 35 seconds (datasheet).

Technical details

  • Supported Networks: GPS/GALILEO/GLONASS/QZSS;
  • Channels: 33/99 channels
  • Hardware support: MT3333
  • Refresh Rate: 1-10Hz
  • TTFF (Time To First Fix): 1s (hot start)/35s (cold start)
  • Sensisivity: -165dBm
  • Interface: UART, I2C
  • Protocol: NMEA
  • Voltage: 3-4.3V
  • Antenna: ceramic patch antenna
  • Size: 16x16mm. Height: 6.7mm
  • Circular Error Probable: 3m(CEP)
  • Speed accuracy: 0.1m/s
  • PPS Accuracy: 20ns (PPS=Pulse Per Second)
  • SBAS, EPO, EASY, always Locate, LOCUS

Installing the GPS library

The board is compatible with GPS-Ultimate MicroPython library (available on GitHub).

You can download and copy the library manually to your board from the Repository.

Download-icon.pngDownload GPS-Ultimate library

First, open the repository, then navigate to the file lib/adafruit_gps.py and lib/gps_config.py.

Follow the steps as describes in the "BMP280 library installation" to copy the GPS library files to your micropython board.

Once copied, you can also check the proper installation by typing from adafruit_gps import GPS .

The GPS-Ultimate library repository contains examples of usage. Do not hesitate to check them!

Connect CanSat GPS

Quite simple, just plug the grove cable to the Cansat-GPS and the other end to UART connector.


ENG-CANSAT-PICO-GPS-10.jpg

GPS test

The cansat-belgium-micropython repository contains a test-gps subfolder with demonstration script.

ENG-CANSAT-PICO-GPS-20.jpg

Wait the fix!

GPS data will only be available when the GPS module got a fix.

The LED next to the GPS:

  • Blinks while searching GPS network
  • Lit (fixed) when synchronized with GPS Network.

Minimal test

The minimal test script perform the following tasks:

  • Opens and configure the UART (serial port) of the Pico
  • Create a GPS object (attached to the UART)
  • Send some command to the GPS to configure it.
  • Start an infinite while loop to print measurement each seconds
    • Wait the GPS to get a Network Fix (NMEA protocol returns the Fix status)
    • Display useful information from the GPS
from machine import UART, Pin
import utime as time

from adafruit_gps import GPS

uart = UART( 0, rx=Pin(1), tx=Pin(0), baudrate=9600, timeout=3000)
gps = GPS(uart) # Create the GPS object

# Turn on the basic GGA and RMC info
gps.send_command( 'PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0')

# Set update rate to once a second (1hz)
gps.send_command( 'PMTK220,1000')

# Main loop runs
last_print = time.ticks_ms()
while True:
    gps.update() # update object with data sent by GPS over uart

    current = time.ticks_ms()
    if time.ticks_diff(current, last_print) >= 1000: # Print once a second only
        last_print = current

        if not gps.has_fix:
            print('Waiting for fix...')
            continue # restart the While loop

        print('=' * 40)
        print('Fix timestamp: {}/{}/{} {:02}:{:02}:{:02}'.format(
            gps.timestamp_utc[1],
            gps.timestamp_utc[2],
            gps.timestamp_utc[0],
            gps.timestamp_utc[3],
            gps.timestamp_utc[4],
            gps.timestamp_utc[5]))
        print('Latitude: {} degrees'.format(gps.latitude))
        print('Longitude: {} degrees'.format(gps.longitude))
        if gps.satellites is not None:
            print('# satellites: {}'.format(gps.satellites))
        if gps.track_angle_deg is not None:
            print('Speed: {} km/h'.format(gps.speed_knots*1.8513))

Ce qui produit la sortie suivante dans la session REPL.

========================================
Fix timestamp: 10/18/2025 16:37:18
Latitude: 50.69057 degrees
Longitude: 4.400766 degrees
# satellites: 12
Speed: 0.074052 km/h
========================================
Fix timestamp: 10/18/2025 16:37:19
Latitude: 50.69057 degrees
Longitude: 4.400765 degrees
# satellites: 12
Speed: 1.203345 km/h
========================================
Fix timestamp: 10/18/2025 16:37:20
Latitude: 50.69057 degrees
Longitude: 4.400765 degrees
# satellites: 12
Speed: 1.073754 km/h
========================================

Localise on Google Maps

The collected latitude and longitude can be enter directly in the search field of Google Maps as follow:

latitude , longitude

From the preceding test script, the position could be encoded as 50.69057 , 4.400765

ENG-CANSAT-PICO-GPS-30.png

Once the return key pressed, the location will be reformatted and maps positioned above the coordinates! (it is the MCHobby address)

ENG-CANSAT-PICO-GPS-31.png

Simple test

The simpletest.py script example is based on the former example.

This new one contains more GPS commands and show more information collect from the GPS data.

Here the kind of result it can produce:

========================================
Fix timestamp: 10/18/2025 17:03:51
Latitude: 50.69063 degrees
Longitude: 4.400778 degrees
Fix quality: 1
# satellites: 10
Altitude: 110.0 meters
Speed: 0.36 knots and 0.666468 km/h
Track angle: 159.4 degrees
Horizontal dilution: 1.19
Height geo ID: 47.4 meters
========================================
Fix timestamp: 10/18/2025 17:03:52
Latitude: 50.69063 degrees
Longitude: 4.40078 degrees
Fix quality: 1
# satellites: 10
Altitude: 110.0 meters
Speed: 0.31 knots and 0.573903 km/h
Track angle: 159.4 degrees
Horizontal dilution: 1.19
Height geo ID: 47.4 meters



Written by Meurisse D. for MCHobby


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.