About Hardware Software Artworks Contribute Return To Top

About

SpokeSpice is an open hardware project that is comprised of a controller board and a number of arms. It can display patterns and animations on the spokes of a bicycle wheel.

A magnet that is attached to the fork of the wheels is detected by the arms that swipe underneath it. This allows the system to synchronize the display with the rotation of the wheel.

Hardware

All KiCad design files are available in the GitHub repository.

Controller board

Controller

The controller board is based on the ESP32 microcontroller and features a USB-C connector for programming and debugging. It features a battery holder for an 18650 Li-Ion cell, a 3.3V LDO regulator, an SD card slot and 4 connectors for the arms.

Several mounting holes in the PCB allow it to be mounted in a variety of different spoke configurations.

For the sake of simplicity, the controller board does not feature a battery charging circuit. The battery must be charged externally.

There is also no voltage regulation for the LEDs. The LEDs are powered directly from the battery, which is a 3.7V cell. Consquently, there is also no reverse polarity protection to avoid the voltage drop and hence the energy loss. The battery must hence be inserted with the correct polarity.

Arms

Arm

Arms are made to be attached to the spokes of a 28-inch bicycle wheel.

Several mounting holes in the PCB allow them to be mounted in a variety of different spoke configurations.

Each arm PCB features 32 WS2812B RGB LEDs and is connected to the controller board via a 4-pin cable. A second 4-pin cable can be used to daisy-chain a second arm on the other side of the wheel, which will then display the same content.

A hall effect sensor is used to detect the speed of the wheel and to synchronize the display with the rotation.

Please have a look at the GitHub repository for more information.

Interested in building your own?

To build your own SpokeSpice, you will need to order the PCBs and the components from a PCB manufacturer and an electronics distributor, respectively.

There is currently no kit available for purchase, but we are thinking about setting up a link to a service that will allow you to order the assembled PCBs. If you are interested in this, please let us know by opening an issue in the GitHub repository.

Software

The software is divided into two parts: the firmware running on the ESP32 microcontroller and an image processing script running on a computer.

All the software is open-source and available on the GitHub repository.

Image pre-processing

To front-load the real-time processing on the ESP32, the images are pre-processed on a computer so that all the necessary data is available in a format that can be quickly read by the ESP32.

For that matter, all images are converted to a radial format, where each column of the pixels prepresents an angle and each row represents the value of each LED pixel in that angle.

For instance, the following image:

Original image

Is converted to the following radial image, which is then processed by the ESP32:

Radial image

A python script is used to convert the images to this format. The script is available in the GitHub repository of the project.

Firmware

The firmware is written in C and is based on the ESP-IDF framework.

It has the following tasks:

  • Receives interrupts from the hall effect sensors on the arms and calculates the speed of the wheel
  • Based on the estimated speed, it calculates the position of the wheel
  • Read pre-processed radial gifs from the SD card or SPIFFS and displays them on the arms when the wheel is spinning with at least a certain speed
  • Diplays patterns on the arms, also when the wheel is not spinning

Artworks

There is a collection of artworks in the artworks repository.

Contributions are very welcome, please submit a PR to add your own artwork to the collection.

Contribute

SpokeSpice is an open-source project and contributions are welcome. There are several ideas on how to extend the software, please refer to the GitHub repository for more information.