It is always frustrating to have to run to a bus stop, only to watch the bus drive away.

What it does

Our web app and Arduino pager both provide notifications on when the bus is getting close. This way, the user knows when to leave for the bus to make it to the stop on time.

We also developed a web application that displays septa buses on the map in real time.

How we built it

We split the work into three components:

  • A backend that fetches data from SEPTA and Google Maps to determine when the next bus will arrive.
  • An Arduino pager that notifies the user when the optimal time to leave is
  • A web app that displays buses on the map and also alerts the user when to leave for work.

Challenges we ran into -> how we solved them

  • Predicting the location of the bus -> Aggregated SEPTA and Google Maps Traffic APIs to figure out current position
  • Integrating components together -> We planned our data formats (JSON, serial data) at the beginning so connections were easy to make
  • Avoiding Google Maps query request limits -> We cache data instead of querying it every time. We also limit how often each client polls for data to prevent sending too many requests/day.

Accomplishments that we're proud of

  • The Arduino pager communicates reliably with the backend Flask server
  • The backend can find the position of the nearest bus

What we learned

  • How to use the Google Maps API
  • Designing a reliable Arduino + Python application
  • How to calculate velocity/heading using GPS coordinates and traffic data

What's next for SeptaNotifier

  • Adding more features to the Arduino Client (animate the LCD display, add buttons for user input)
  • Improve accuracy of position estimates
  • Create an Android app
  • Make GUI improvements for the web app
  • Deploy Flask app to cloud hosting
Share this project: