Inspiration

One fine day, one of our team members was riding his bike to center city to go to his favorite Indian restaurant. However, he was on his phone to navigate to this restaurant. However, poor Humpty Dumpty had a big fall and cracked his phone and spine while at it. If only there was a safer way for him to navigate while on his bike!

Thus, Romit and I would like to create GPS Lights for your bike!

What it does

This project will entail of lights that go onto the bar handles of the bike that will light up based on which direction you should head. If the biker is going straight, then both lights should be lit up. We plan on using Arduino, Bluetooth, LED light strips, and a dummy app that uses the Google-Maps API. The steps we will take are: 1) Figure out Google Maps API, 2) Create a dummy app that incorporates Google Maps API, 3) Connect lights via bluetooth from phone, 4) Sending data from phone to lights so that it changes based on the information it receives and connect app to arduino.

Deadlines

By April 3rd, we will have the dummy app with the Google API finished. By April 17th, we will have the LEDs connected to the application via bluetooth.

Writeup

Our project, “Blink”, was a GPS light system for your bike. The project gave bike riders the option of getting turn-by-turn directions without having to hold their phones in one hand while riding a bike. Before riding you open up the website for the project and entered your start and finish destination. The website would get directions and send them to your light system on the bike. You would then get on the bike and ride while the lights directed which way to go. There were 3 sets of lights (for left, right, and straight) and they got brighter as you got closer to your destination. The product also had the ability to turn on a blinking light if there was a sudden change in orientation of the bike, indicating you may have fallen, to alert those in the vicinity.

What we had ready for the first demo day was the actual light system and the falling down feature. The project at the time, had the ability to read in a user input to the serial monitor.  It would decode the input and light the correct light for the correct amount of time. We also implemented the accelerometer that would allow us to check for any sudden change in orientation of the product the in y-z plane. We got feedback from TAs to work on the hardware first as we were CIS majors and had experience with software. However, on Demo Day 1, we got feedback that we should have been further in our project and we realized we had a lot left to do. We made major strides for our final demo day. We implemented a whole JavaScript based webapp that implemented the Google Maps API in order to provide the user interface to use the product. We then had to create the Bluetooth hardware so that we could communicate directions from the webapp to the light system. We then figured out how to parse data from Google Maps API, encode it into a text file, decode the directions so the Arduino could read them, and then send them to the slave module (our light system) so that it could give the user directions. We felt that we did way more work in the second half of the project, but we got to exactly where we wanted to be by the end.

Going into each subsystem, we start from the webapp. This was at first a basic JavaScript application that used the given Maps API. However, it got complicated when we had to figure out how to output directions (as the Maps API does not do this). We eventually created inbuilt functions to get directions and calculate distances between turns. We then used Blob objects to store the parsed directions and then eventually had to explore JavaScript libraries and write another function on our own to write into a text file that was automatically downloaded to the data folder of the project folder within the Arduino folder on our laptops. Next for the Bluetooth subsystem. We simply used the Processor library for Arduino to parse the text file and send over each line. The slave simply reads each line and adds to a string array that is set to size 50 (as no direction in the Maps API can exceed 50 lines). Finally, the light system from the first iteration reads in each line of the array, sees either an “R”, “L”, or “S” followed by a distance. It then calculates the time it will take to travel and make the turn using the fact that the average bike goes at 14 f/s and then lights the correct light. The accelerometer meanwhile keeps reading in the Z position and if it ever drops below 450 or above 550, it blinks a red led light.

To be turned into a real product, we felt that we should definitely use different technology. The Arduino produced many restrictions that made us do more work or gave us unsolvable problems. For example, just reading and sending the directions became a 6-7-hour task instead of a task that should’ve taken no more than a couple hours. Further, Arduino does not provide a good way to get velocity which made us hardcode bike speed. Finally, we would have to minimize the size of the electronics and create a proper display interface to let the rider know how far away the turn is rather than rely only on the brightness of the LED. We didn’t really see any room for improvement on what we had created, but there is always room to grow in terms of adding more features and making the product more feasible!

Another Link to Demo

https://www.youtube.com/watch?v=hsuNy4E2y1Q&t=3s

Share this project:

Updates