This is a project to add a smart controller to a standard bicycle, using an Atmel SAMD21 controller (known as Arduino Zero or Arduino M0). What it does:
- Uses GPS for speed, heading (direction), and simple navigation
- Uses an OLED display to display a menu
- Controls front & back lights with both PWM and Neopixel control for turn signals
What it is not:
- An anti-theft device (although it might work as one)
- A controller for motorized bicycles
This project uses platformio for automatic
dependency management, building, and uploading. Follow the instructions outlined
here to install PlatformIO. You can
install the full IDE based on VS Code or Atom, or just install the core version and use an external IDE.
Once platformIO is installed, update platformio.ini
to use the correct port in
upload_port =
. Then, run pio run -t upload
. This will automatically install all
dependencies and upload to the selected board. If you'd like to use another IDE, guides are
provided here.
Name | License | Used for |
---|---|---|
Adafruit NeoPixel ZeroDMA | MIT | Driving WS2812B (Neopixel) LED strips |
Adafruit ZeroDMA | MIT | Dependency to Adafruit NeoPixel ZeroDMA |
Adafruit Neopixel | LGPLv3 | Dependency to Adafruit NeoPixel ZeroDMA |
FastLED | MIT | Math for driving LED strips, and to replace the above three when using other LED chips (e.g. APA102, using SPI) |
NeoGPS | GPLv3 | Parsing GPS data. Used instead of TinyGPS because it is smaller, faster, more customizable, and better documented. |
U8g2 | 2-clause BSD | Driving monochrome graphic displays |
sunset | MIT | Calculating sunrise and sundown times for automatic lights (TODO: implement) |
Timezone | GPLv3 | Calculating time offsets and daylight savings time |
Time | LGPLv2.1 or later | Keeping track of current time |
Time
and Timezone
should be removed first, as they pollute the global namespace.