Electric Longboard

From ESE205 Wiki
Revision as of 22:54, 2 May 2016 by Mcetta (talk | contribs)
Jump to navigation Jump to search

Project Overview

Our goal in this project was to modify the Longboard riding experience. In particular, when riding a Longboard for commuting or exercise there is no way to certainly know how far or fast one has ridden. Using a GPS chip and an encoder on the wheel we programmed a Raspberry Pi 2 Model B to collect data from the board. We could then display the data on a map of the area tracing the route taken. This design enhances the Longboard riding experience by making it interactive and goal driven, while also yielding tangible results.

Team Members

  • Max Cetta
  • Jacob Frank
  • Alden Welsch (TA)

Objectives

  1. Use GPS data to track distance and location of rides
    1. Use the serial port to connect to the GPS.
    2. Read data and write it into a text file.
    3. Display data
  2. Have an encoder on the wheel to measure top ground speed and average speed over a ride
    1. Designing and printing the encoder
    2. Wiring the ADC and using SPI pins to communicate with the Raspberry Pi
    3. Writing code to filter and interpret the data to locate peaks

Challenges

  1. Receiving data from the GPS chip
  2. Interpreting the data
    • Isolating desired data from the GPS data stream which provided other information that was not useful for our project
  3. Displaying the data
    • How to get the data off the Raspberry Pi
    • Displaying the riders position on a map
    • Displaying the riders velocity on computer screen
  4. Designing Encoder
    • Ensuring mount would attach to the truck of the Longboard
    • Making sure the mounts were able to house the LED and photocell reliably and safely
    • Stabilizing results across all lighting conditions and riding surfaces
  5. Hooking up the Analog to Digital Converter
    • Locating the SPI pins and correctly wiring them to the ADC
    • Building the voltage divider
    • Choosing the resistance to use for more rapid photocell saturation
  6. Writing code to read the ADC values, filter, and interpret them
    • Creating a properly sized filter to stabilize noise in data
    • Locating a peak in the data and ensuring that only 1 peak was counted
  7. Environmental effects on GPS accuracy
    • Concrete, heavy clouds and other structures will obscure view to satellites
    • Locating and eliminating unreliable data
    • Substituting encoder data for these instances
  8. Mounting
    • Taking all of our components and putting them in a compact container which can be secured to the longboard
    • Maintaining as light a design as possible considering the board is being manually powered
    • Keeping all the components safe and dry

Solutions

  1. To receive data from the gps chip we did...
  2. When we printed the data that we read from the serial port it came out line by line starting with either $GPGGA, $GPGLL, $GPGSA, $GPGSV, GPRMC or $GPVTG, followed by a string of numbers separated by commas. At first we didn't understand what these values were. The GPS chip that we bought came with a data sheet that explained what these values were. The values at the beginning of the lines are called message IDs. So to find velocity, for example, we had to look for the lines that started with $GPVTG which spits out values that correspond to course over ground speed. Lines with this message ID had 8 comma separated values that followed it. The value that corresponded to kilometers per hour was the value 7 down from $GPVTG. A similar process was used to find Longitude and Latitude.
  3. Now we had to display the data. We wanted to display the riders current velocity during the ride and at the end of the ride display their max speed, average speed and distance traveled and map where they went. To display the data the rider's velocity, we had to use pythons split() method for strings. The split method takes in a string as a parameter:let's call this string parameter the separator. When you call the split method on a string it separates the string by the separator you input as its parameter and the method returns an array with every element between the separators in the string stored in a different index in the array.So, In our program, we read a line from the serial port and stored it in a string x. Then we called x.split(",") which stored each line we read as an array with each value that was separated by a comma in a different index in the array. To find velocity we created an if stated that checked for the condition array[0]=="$GPVTG". Array[0] is what each line would start with--the message ID. Once this condition was met we knew that the 7th index in the array stored the rider's velocity in kilometers per hour.

Budget

Item Quantity Price Vendor Link
GPS Receiver - GP-20U7 (56 Channel) 1 $15.95 Sparkfun https://www.sparkfun.com/products/13740
Mini Photocell 2 $1.50 Sparkfun https://www.sparkfun.com/products/9088
Analog to Digital Converter - MCP3002 1 $2.30 Sparkfun https://www.sparkfun.com/products/8636
Raspberry Pi 2 - Model B (8GB Bundle) 1 $49.95 Sparkfun https://www.sparkfun.com/products/13724
Resistor Kit - 1/4W (500 total) 1 $7.95 Sparkfun https://www.sparkfun.com/products/10969
LED - Basic Green 5mm 2 $0.35 Sparkfun https://www.sparkfun.com/products/9592
Tontec® Raspberry Pi Case 1 $7.98 Amazon http://www.amazon.com/Tontec%AE-Raspberry-Black-Enclosure-Transparent/dp/B00NUN98UW?ie=UTF8&psc=1&redirect=true&ref_=od_aui_detailpages00
KMASHI 10000mAh Battery 1 $13.99 Amazon http://www.amazon.com/KMASHI-10000mAh-External-Battery-Portable/dp/B00JM59JPG?ie=UTF8&psc=1&redirect=true&ref_=oh_aui_detailpage_o04_s00
Total $101.82


Gantt Chart
Timeline