Why?
Burning Man is a huge event. 80,000 people spread out over 5.5 square miles. There is no cell service and the street layout changes a bit from year to year. Its easy to get lost, and even easier to loose track of your friends. Last year we tried a commercially available product that connected to your phone and allowed direct device to device communication between phones, but the performance and interface was so poor that we just didn’t bother with using them. What we wanted was a live map that displayed our location and the location of our friends, so I designed and built the system shown here.
The Hardware
My first designs were very simple GPS displays running on an Arduino 32u4s with LoRa Rf radios. They worked, but my program quickly outgrew the available memory. I switched to the Arduino M0 for its higher speed and much larger memory. The final design uses a Feather M0 with a 900mhz LoRa radio, an Ultimate GPS wing, a 3.5” TFT wing, a haptic motor driver, vibratory motor, and two Panasonic NCR 18650 cells. I included two bulkhead antenna connectors which allow optional external antenna to be used. These work well when installing the GPS inside a vehicle. On stardust we use a large Rf antenna and an external active GPS antenna.
Creating the Map
The exact map center and road radii were provided by Terry of the Burning Man Community Services Department. Thanks Terry! I created the map by first drawing it in SolidWorks. I then used Excel to segment each arc or line into individual segments that could be approximated with straight lines. I calculated each lines start and end position. Finally I created arrays of start and end points of each segment. Putting this data into arrays allows me to do all kings of things like zoom or pan, or keep the user at the center of the screen while moving the map. The final map has 1945 points.
Writing the Code
All code was written using the Arduino IDE. I utilized the TinyGPS++, Radiohead, and Adafruit GFX Touchscreen and Haptic libraries. Once I get the texting functions to work better I will release the code. The gps tends to freeze about 25% of the time when receiving a text message. I speculate this is due to shared serial bus issues and have a plan to fix it.
The current program (not including libraries) is 1556 lines.
Creating the Case
The case was designed in SolidWorks and then printed on our Formlabs SLA printer in high definition grey material. The case uses a tapered seal and 14 self tapping screws to seal the top and bottom halves. There are 3D printed extensions on the power switch and reset button. This is all to keep the dust out and it worked really well. Inside the case there are features that hold the cells in place with a nice snap fit. The USB port on the bottom of the Feather (for charging and programming) is accessible through a door that is tapered and held in place by four magnets.
Future Improvements
I was pleased with the performance of the four units I tested. I could receive location data, and send and receive messages from friends that were over a mile away. The mapping function was very accurate. In a huge crowd of people I could track and find a friend using the map. When used in a vehicle we could accurately know what o’clock and letter streets we were on, and the accuracy was on the order of 10 feet. I would like to improve a few things, including the texting features. Currently each device stores ten pre-written text messages, and these are all you can send. In the future I would like to implement an onscreen keyboard that allows a user to send any message they want. I would also like to make the devices more compact. The current units are a bit too thick to fit in a pant’s pocket. I plan to replace the 18650 cells with three prismatic cells which will package better with the circuit boards and will reduce the overall thickness by around 25%. To save on battery usage (the current units run for around 30 hours per charge, but due to limits on the already modified charging circuit take 6 hours to charge) I am considering dimming the back-light while not in use and possibly adding a button for turning the back light to full brightens. This will allow a slightly smaller battery while keeping the run time above 24 hours, and will decrease charge times. My ultimate goal would be to design a single compact circuit board for the screen, microcontroller, charging circuit, GPS, LoRa, and haptic controller.