Flora Brake Light Backpack

My friend asked if I could help make him more visible on his motorcycle, so Tyler Cooper and I designed a brake light backpack that uses a Flora accelerometer to auto-detect braking behavior on a motorcycle or scooter. It also has turn signals triggered by a simple wireless module, and still leaves plenty of room for your stuff in the pack!

This is a complex project with many components! Here are some recommended prerequisite guides:

Tools & Supplies

For this project, you will need:

To keep up with what I’m working on, follow me on YouTubeInstagramTwitterPinterest, and subscribe to my newsletter. As an Amazon Associate I earn from qualifying purchases you make using my affiliate links.

Circuit Diagram

An on/off switch with long leads connects the battery holder to a 2-pin JST connector, allowing the rider to turn the bag on and off while wearing the bag.

The Flora accelerometer connects to Flora’s 3.3v, SDA, SCL, and GND pins, all in a row, and will detect when the rider is braking.

The pixel strand connects to VBATT (red wire), GND (blue wire), D9 (green) and D10 (yellow).

VBATT also connects to +5V on the RF module. GND -> GND and each signal pin is connected to a Flora digital input via a voltage divider comprised of two 4.7K ohm resistors to reduce the signal voltage to ~3V.

The remote buttons trigger the RF modules signal pins to go HIGH. Two buttons are shown for use as turn signals, but you can connect up the remaining buttons in the same way.

Control Circuit

To wire up the battery power supply for the circuit, tin the long leads of your on/off switch with solder.

You may also wish to extend the switch leads even longer with pieces of wire.

Tin the leads of your 2-pin JST cable. Solder one switch lead to the JST cable’s red wire, and the other switch lead to the battery pack’s red wire. If your battery pack doesn’t have different colored wires, use your multimeter to determine which is the positive lead.

Also solder the JST cable’s black wire to the battery pack’s black wire.

Use a 3xAA battery pack for this project. If you don’t have one handy, you can bridge across one of the compartments on a 4xAA battery pack– just solder a wire to each end.

Attach the Flora accelerometer according to the circuit diagram. Notice that all four pins necessary for this i2c sensor are in a row, making wiring very convenient!

Affix the Flora board and accelerometer to the battery pack with Velcro tape. Likewise between the battery pack and plastic enclosure.

These simple wireless receiver/remote pairs are great for adding a few wireless inputs to your project, but they operate at 5V, which doesn’t match Flora’s 3V i/o. So build a simple voltage divider with two 4.7K ohm resistors!

To attach to Flora, twist the resistor leads together and solder to a digital input pin. Repeat with more pairs of resistors for each button on your remote or as many as you’d like to use.

One resistor in each pair will be soldered to ground, and the other will connect to the RF module’s output.

Female jumper wires can come in handy for attaching to the RF module’s header pins. The pin marked +5V gets connected to VBATT on Flora, and GND goes go GND.

Plug an extender onto the input side of a strand of weather-resistant LED pixels.

Run the connector cable through a small hole bored in the plastic weather-resistant enclosure.

Use colorful heatshrink tubing to mark the pixel connectors wires, corresponding to the colord wires in the pixel strand. You could also use pieces of taped marked with a letter– this makes it a lot easier to attach the wires to the Flora correctly.

Connect the four pixel connector wires as per this diagram – red to VBATT, blue to GND, yellow to D10 and green to D9.

These tactile on/off switches are perfect for toggling power on our backpack, but the switch isn’t inherently waterproof. Using a bit of plastic to prevent the button from being clogged, wrap the switch in Sugru and let it cure for 24 hours. Wear gloves to prevent fingerprint marks.

Use a ziptie for strain relief on any wires exiting the enclosure.

For maximum range between the RF remote/receiver pair, uncoil the receiver’s antenna wire so it runs along the outer edge of the enclosure.

More Sugrue helps waterproof the hole in the enclosure.

LED Pixels

Mark out a double diamond design with tailor’s chalk on your backpack.

Transfer that sketch to a piece of cardboard using a ruler and marker. Mark where each LED pixel will go.

Punch holes in the cardboard with an awl.

Install your pixels into the cardboard jig.

Since the design is longer than 1 strand (25 pixels– our design is 36), solder on or plug in another strand of pixels.

Use zipties to cinch up the wires between pixels so the design has some structure.

You can also use tape to bridge across the backs of the pixels. Remove the pixels from the jig.

Follow the tailor’s chalk markings on your backpack and install the LED pixels by cutting a hole and heat-sealing the nylon edge.

Attach the pixels by stitching the wires to the front surface of the bag. Knot and cut the thread at each junction so that if one stitch comes undone, the rest of the design isn’t compromised by an unraveling thread.

My install didn’t go exactly as planned, and my pixel design had to be compromised. I adjusted my diagram so I’d know which pixels were which when programming animations. It’s challenging to install so many pixels inside such a small space, but it was comforting knowing I could fix any layout problems later, in the code.

Decide where you’d like your power toggle switch to go, make a slice in the bag for the switch to come through, heat seal the nylon, then stitch the switch in place!

Prop up the bag and connect the USB cable (keeping the battery power off) for programming.

Code

Disclaimer: This code and project is a proof of concept. The code works reasonably well, but needs a fair amount of work to make it a reliable.

When we first starting working on this project, I thought that the code would be the easy part. As I started working on the code, I quickly realized there are a lot of external factors that can give you erratic results from the accelerometer. Factors such as quick acceleration, bumpy roads, or slow braking gave me results that I wasn’t prepared for.

Overall, though, this was a lot of fun to code, and it is a project that I will continue to tinker with until I am happy with the results. Here is the code that I came up with, and how it works.

You’ll need to download and install the Adafruit_LSM303 library – we have a tutorial on installing arduino libraries here

Select Download Project Zip to get the Flora_Brakelight_Backpack.ino file.

Code Walkthrough

#include <Wire.h>
#include <Adafruit_LSM303.h>
#include <SPI.h>
#include <Adafruit_WS2801.h>

Adafruit_LSM303 lsm;

#define BRAKETHRESHOLD        350
#define BRAKETIMETHRESHOLD    200

The most important part of the code is the LSM303 library, the WS2801 library, and the BRAKETHRESHOLD, and BRAKETIMETHRESHOLD values. You will need to install the LSM303 library, which can be found here, and the WS2801 library, which can be found here.

The BRAKETHRESHOLD value will need to be tweaked to your liking. This value looks at the amount of force the accelerometer measures before it considers it worth investigating further. Similarly, the BRAKETIMETHRESHOLD value is the amount of time that the force exists before it will trigger the brake lights. This is an important part of the code, as it allows us to ignore things like big bumps in the road.

From there, the code is quite simple. If you press and hold the C button on the remote, the left blinker will activate on the backpack. If you press and hold the D button on the remote, the right blinker will activate on the backpack. Release either button to stop blinking. You could easily modify the sketch to press the button to turn on, and press again to turn off….or simply use the toggle type RF receiver which you can buy here.

Wear it!

Originally posted on Adafruit


If you like this project, you may be interested in some of my others:

To keep up with what I’m working on, follow me on YouTubeInstagramTwitterPinterest, and subscribe to my newsletter.