It's open sourced! Hardware licensed under CERN OHL S v2. Software licensed under GNU GPL v3.
Raven is an open source spinning LED light display, built for (and generously funded by) Hack Club's Highway!
Since being introduced to an LED strip during FRC at the start of 2024, I realized I really like LEDs. Like a little too much. This could also be seen with the 10 LEDs from my Hackpad back in October 2024 and when I brought it on a robotics trip to BattleCry in June 2025 (iykyk). Simply, I kinda like LEDs a lot.
Now inspired by the lights at the venue of the aforementioned robotics trip (and the lights show that occured near the end of the event), that brings us here! Introducting Raven, a spinning LED display that uses 50 LEDs spread across 5 panels, spinning really fast. Using a Hall Effect Sensor for speed measurement, the measured values for angular prediction, and wireless control for wireless communications, Raven is capable of producing sector-based effects, rainbow gradients, strobes, and more, with a full 360 degree range of the room, or any sector of it! Apart from being an almost disco ball of sorts, the mechanism itself allows it to also act as an LED light display, almost looking like some sort of Vegas Sphere, except as a cylinder.
This project took over a hundred hours to make (with tons of redesigns!), and, retrospectively, I guess it's just because I think LEDs look pretty cool. The idea of replicating what happened in the venue really kept me going, and, now staring at what's been created, I think those hours were worth it! Learned lots a things along the way, such as reading datasheets, power in general, and implementing stuff from the ground up!
Incase you wanted a full, long description, here it is!
Introducing Raven, an open source spinning LED light display! The system can be separated into three parts: the motor subsystem, the LED control subsystem, and the LED panels. But first, what exactly is the idea behind Raven? Inspired by the light effects done at BattleCry 2025 at WPI (2025BC), along with really liking LEDs for some reason, I wanted to create a LED display that lights up an entire room. But a stationary system wouldn't create the desired effect, the effect to slice up the room into different colors. For example, imagine the left side of the room being red and the right being blue.
This is accomplished by having 5 LED panels, each with 10 LEDs each, vertically stacked, pointing outwards. These 5 panels form a 180 degree circle, each panel spaced 45 degrees off the next. Arms connecting to the top and bottom of the LED panels attach to a center. Spacers keep these top and bottom arms in position. In the center, the top arms connect to the LED control PCB, which contains a XIAO ESP32-C3. This board is also equipped with a Hall Effect Sensor, used to be a simple way to measure RPM without an expensive encoder. This entire section spins on a shaft collar connected to a 775 motor. Additionally, a 18650 Li-ion battery is on this section, powering the whole thing without need for a power wire.
In order to save on costs, a slip ring was strongly avoided during design. Instead, the motor subsystem powers the motor with 4 Li-ion batteries, supplying a total of 14.8-16.8V @20A to the motor. 4 Li-ion batteries was choosen as a solution to the problem with finding suitable boost converters, which were either incapable of handling 20A, or are just really expensive. In fact, it is actually cheaper to use 4 Li-ion batteries than a single one of these boost converters. This solution also gave the benefit of having additional battery time, which was a nice side bonus. The motor subsystem is stationary, with the base being a copy of the LED control subsystem's PCB. This empty PCB is used as the FR-4 material of the PCB is likely stronger than PLA parts, while also being a smart way to reuse the multiple PCBs sent by JLCPCB. This is also the reason why there are 5 LED panels, as to minimize waste. The motor subsystem is also powered with a XIAO ESP32-C3, and has its own Hall Effect Sensor to measure the RPM of the LED subsystem.
The control system starts at the stationary motor subsystem microcontroller, which sends a constant ping to the LED subsystem's microcontroller. The LED subsystem reads this ping through the ESP32's bluetooth capabilities, and also sends a ping back. Both systems need to listen to each other in order to think they are operating properly. In the event that a ping isn't heard in a long time, the LED subsystem will stop operating and the motor subsystem will attempt to bring the motor to a stop. While operating properly, the LED subsystem uses a mix of data from the motor subsystem's Hall Effect Sensor and the LED subsystem's Hall Effect Sensor to calculate its speed and position, utilizing a model of the motor's speed. The motor subsystem will use PID control with a MOSFET to ensure that the LED subsystem reaches the proper spin.
This entire system is packaged inside a cylinderical shape with diameter of roughly 24 cm and a height of roughly 15 cm. The LED subsystem, weighing less than 2 pounds, plans to spin at anywhere from 1k-2k RPM, in order to achieve a speed where the LEDs essentially blend into a blur. The LED subsytem is loaded with almost 120 screws, in order to ensure that the LED subsystem stays in place. Additionally, all batteries are protected inside an over-discharge protection board and charged with a TP4056 module with protection (the TP4056 does NOT provide power to the system, it is only used for charging.).
And that's Raven, an open source spinning light display!
Wanna know more? Here's some quick places to get started!
- CAD
- We used OnShape for this, but you can grab files here too! (Although, poking around the CAD is probably better to have an idea of what things look like!)
- PCB
- We have three different PCBs, have a look at them! They were created in KiCad v8.0.8 (yeah I know I'm a whole major version behind.)
- Firmware
- We have two firmwares, one for each subsystem! (These firmwares are written for CircuitPython! Look here for deeper instructions!)
- Journal
- Wanna know the thought process behind stuff? Or just a really long read? Check out the journal! (or the
updatelogsfor everything in different files...)
- Wanna know the thought process behind stuff? Or just a really long read? Check out the journal! (or the
- BOM
- Wanna make your own copy of Raven? Here's the BOM in CSV format! (You can look at
BOM.mdfor a markdown version of it, but it won't be too descriptive!) (Or just scroll down.)
- Wanna make your own copy of Raven? Here's the BOM in CSV format! (You can look at
- First things first, it's recommended that you pull up the CAD and get familiar with how things look, and think of the order of steps. Special attention should be paid towards making sure that it is possible to put together, along with wires being able to "fit". Use logic to figure out whether a wire will be inside a part!
- We're gonna assemble all the PCBs first! Pull up the PCB on KiCad for the PCBs themselves. Where things should be placed should be clear in the drawing! Do NOT solder the Hall Effect Sensors on!
- Test the boards! It'll be easier now before it's in an awkward position!
- Back to the CAD, assemble the LED subsystem structure! This should be quite simple, but just very tedious, as there are are a lot of parts and screws.
- Assemble the shaft collar and the motor subsystem structure!
- Ok, place that all aside for now. It's time to do the power systems for both! While doing this, reference the electronics wiring drawn below! Also note the names of the nets in KiCad.
- Check solder joints!!! Everything on the LED subsystem MUST be ziptied (or you will risk something flying off). After this, start finding the center of gravity of the LED subsystem and try to balance it in the center (important).
- After this, assemble everything together! Note the CAD and the epic image above!
- Test that each system works individually! If so, head on over to the firmware and flash both of them!
- Enjoy and check back for any firmware/general updates!
The Bill of Materials for x1 unit of Raven!
Note: For this list, the prices are as of July 2025. Depending on certain actions on certain people, this may fluctuate over the next couple months/years. Current calculations have shipping and tax included, but if you want to see how much everything actual ended up costing me (as in, trying to use all the deals), look out for updatelogs during construction time! If you'd like a BOM where things are grouped by type, check out BOM.md. Check out 'BOM.csv` to also have descriptions of each item!
Try to use the AliExpress Welcome Deal on the 775 Motor and take advantage of a current sale on the batteries (drops all the batteries down to ~$26, including shipping and taxes)! (Batteries are currently calulated with the discount.)
| Part | Price | Link |
|---|---|---|
| M4 Screws (x20, 40mm) | $2.85 | AliExpress |
| M4 Screws (x20, 30mm) | $2.49 | AliExpress |
| M4 Screws (x80, 16mm) | $7.96 | AliExpress |
| M4 Nuts (x125) | $9.45 | AliExpress |
| 3D Printed Parts | $0.00 | (self print) |
| LED Panels (min 5) | $2.10 | JLCPCB |
| LED Subsystem (min 5) | $4.00 | JLCPCB |
| Motor Subsystem (min 5) | $4.00 | JLCPCB |
| Shipping (to NYC) | $10.20 | JLCPCB |
| XIAO ESP32-C3 (x2) | $10.00 | Seeed Studio |
| Shipping (to NYC) | $9.00 | Seeed Studio |
| A3144 (min 5) | $1.18 | LCSC |
| 30SQ045 (x3) | $1.76 | LCSC |
| WS2812B (x65, mul 5) | $4.28 | LCSC |
| 1N4148 (x2, min 20) | $0.51 | LCSC |
| PR01000101002JA100 (min 5) | $0.60 | LCSC |
| MF1W-100Ω±1% T (min 10) | $0.45 | LCSC |
| 1N5822 (x2, min 5) | $0.51 | LCSC |
| AOD424 (x1) | $0.46 | LCSC |
| Handling Fee | $3.00 | (LCSC) |
| Shipping (to NYC) | $9.00 | (LCSC) |
| 775 Motor (288W, 12k) | $17.65 | AliExpress |
| Overdischarge (1S 16A) | $1.26 | AliExpress |
| Overdischarge (4S 20A std.) | $5.89 | AliExpress |
| LM2596 (x1, Step Down) | $1.76 | AliExpress |
| XL6019 (x1, Step Up) | $2.04 | AliExpress |
| TP4056 (x5, USB-C, safety) | $2.70 | AliExpress |
| 22 AWG wire (5m, 1 roll) | $2.02 | AliExpress |
| 10 AWG wire (1m, Black) | $6.86 | AliExpress |
| Battery Holder (x2, 1B) | $5.58 | AliExpress |
| Battery Holder (x1, 4B) | $3.72 | AliExpress |
| Shipping (to NYC) | $0.00 | (AliExpress) |
| Samsung 25R 18650... | $15.00 | IMR Batteries |
| Shipping (to NYC) | $9.13 | (IMR Batteries) |
| Taxes | $2.07 | (IMR Batteries) |
| Buffer | $5.00 | |
| TOTAL | $164.51 |





