The Glitter Positioning System isn't intended for use as serious wayfinding equipment! Have fun, but please don't rely on this project in any situation where life and limb are at risk, or where you might become seriously lost.

It's good to keep some basic constraints in mind before setting out:

  • The code doesn't presently handle tilt compensation, so you'll need to keep the box fairly flat to get good compass readings.
  • The code doesn't currently special-case the situation where a NeoPixel needs to point at more than one box, so at present a box can be hidden "behind" another box if it's on the same compass bearing.
  • Within 2-5 meters, GPS readings are unlikely to be accurate enough to provide a useful bearing to the other units.
  • The GPS will work best with a clear view of the sky, and under adverse conditions it may take many minutes to get a fix.
  • Radio range will vary depending on terrain and atmospheric conditions.  You'll do best in a relatively flat landscape with few buildings or other obstructions, but with a simple wire antenna you should be able to transmit upwards of half a kilometer in many environments.

It is best to test everything at home prior to any event you plan to attend with your boxes, just to make sure everything appears to work as you believe it should.

Display Customization

LED colors for the first eight box IDs are RGB tuples in a dictionary constant called COLOR_LOOKUP, defined in glitterpos.py:

# Color presets for each glitterpos_id:
COLOR_LOOKUP = {
    0: GREEN,
    1: BLUE,
    2: PURPLE,
    3: YELLOW,
    4: CYAN,
    5: (100, 0, 255),
    6: (0, 100, 200),
    7: (100, 50, 100),
    # BOULDER_ID: RED
}

You can extend or modify this dictionary to your liking. (Note that the file also contains some handy pre-defined color constants.)

Lots of interesting variations on the display code are possible.  Another easy tweak is to display headings for fixed points of interest, such as your camp or a high-visibility landmark.  As an example, glitterpos.py contains commented-out coordinates for downtown Boulder, CO.  Open that file and uncomment all the lines containing the string BOULDER_ID, starting around line 35.

Practically speaking, you can add as many fixed points as you want, but remember that you only have 16 NeoPixels to work with, so the display can get cluttered fast.

Potential Hardware Improvements

Both the Ultimate GPS FeatherWing and the Radio FeatherWing can be equipped with an external antenna for greatly improved performance. 

See the Radio FeatherWing guide for details on mounting a uFL or SMA antenna.

See the Ultimate GPS FeatherWing guide for details on mounting an external active GPS antenna.  In the case of the Adafruit GPS antenna, keep in mind that the antenna base contains a strong magnet, so you'll need to mount it at some distance from the body of the GlitterPOS box or it'll interfere with the compass.

The current build lacks an on/off switch, which would make for a considerable improvement in usability!

Acknowledgments & Further Reading

While the end goal is somewhat different, this Burning Man LoRa + GPS tracker project by Melissa Loudon and Drew Griscom Roos was a source of inspiration for the Glitter Positioning System, and good evidence that the radios would work well in that environment.

The compass-bearing code in glitterpos_util.py is from this Gist by Jérôme Renard.

Ozzmaker's Create a Digital Compass with the Raspberry Pi series is an excellent resource for many of the techniques used here.

Thanks to Ladyada for working out the finicky details of compass calibration!

This guide was first published on Oct 04, 2018. It was last updated on Sep 10, 2018.

This page (Usage, Customization, and Next Steps) was last updated on Sep 27, 2018.

Text editor powered by tinymce.