Skip to the content
PCBKitNew board
2 layers88.9 × 46.2 mmLed controller rounded, the printed circuit board in 3D

Led controller rounded

cruzsbrian/aurora3

An addressable LED controller with graphical interface, audio input, and patterns programmed on an SD card.

Size
88.9 × 46.2 mm
Copper layers
2
Thickness
1.6 mm
Parts
83
Nets
55
Pads
204
Tracks, vias
251, 182
Pours
56
Routed
Yes
KiCad
KiCad 6 (file 20211014)
Created
16 Jun 2022
Updated
21 Jul 2024

Overview

Led controller rounded is an open-source printed circuit board by cruzsbrian, from the cruzsbrian/aurora repository on GitHub. It is a 2-layer board of 88.9 × 46.2 mm with 83 parts on 55 nets, routed with 251 tracks and 182 vias.

It is built around the 74HCT245, CMA-4544PF-W and SJ-3524-SMT-TR. Its parts include 22 resistors, 13 capacitors, 10 connectors, 4 ICs and 1 switch. It belongs with the NXP (LPC, Kinetis, i.MX RT) boards of this library.

Main components

3

README

README.md

Aurora

Aurora is an addressable LED controller with a graphical interface, audio input, and patterns programmed on an SD card. It controls up to 8 WS2811-style LED strips in parallel. A microphone and audio jack can be used for music visualization. LED patterns are programmed in Lua and can be modified without rebooting by replacing the SD card.

Interactive PCB BOM viewer

Configuring LED Strips

aurora_sw/src/lights.h contains configuration for the number of strips and their lengths and directions.

N_STRIPS is the total number of strips (starting from the top connector).
LEDS_PER_STRIP the maximum number of LEDs on a single strip.
N_LEDS is the total number of LEDs (the sum of all the strip lengths, less than or equal to N_STRIPS * LEDS_PER_STRIP).
n_leds[N_STRIPS] is an array of the strip lengths.
led_dirs[N_STRIPS] is an array of the strip directions. 1 indicates the strip should start from its first LED, -1 indicates it should start from its last LED.

Writing Patterns

When an SD card is inserted, Aurora interprets each Lua file in its root directory as a pattern. The title of a pattern is its filename, minus the .lua extension.

Every pattern must define an update() function to display one frame of its animation, which will be called at 50 Hz.

Patterns can set LED colors with the setRGB(i, r, g, b) and setHSV(i, h, s, v) functions, where i is the index of the LED (starting at 1 to follow the Lua convention) and the other parameters specify the color (all values ranging from 0 to 1). Patterns can also inspect the current color of an LED with getRGB(i), which returns the red, green, and blue values from 0 to 1.

Calling print(arg1, arg2, ...) from Lua prints to the serial console.

A pattern can specify any number of "parameters" for itself, which appear as sliders in the UI, with add_param(name, min, max, step, default), where name is a string, and max, min, step, default are floating point numbers. The parameter will then be available as a global variable in the Lua environment for that pattern (so name must be a valid Lua variable name).

Here is an example pattern which displays a rainbow repeated a configurable number of times (set by cycles) moving at a configurable speed:

Lua
add_param("speed", 0, 1, 0.05, 0.15)
add_param("cycles", 1, 10, 1, 1)

start = 0

function update()
    for i=1,N_LEDS do
        -- Calculate hue based on LED position, rainbow start position, and number of cycles.
        h = ((i - start) * cycles / N_LEDS) % 1
        
        -- Set LED to calculated hue, full saturation, 25% brightness.
        setHSV(i, h, 1, 0.25)
    end

    start = start + speed
end

Compile / Upload:

Site Customization: :

Although you can run the Aurora firmware as-is, you will probably want to go in and customize the LED settings to match the specific layout of your installation. This customization is done in the aurora_sw/src/lights.h file as follows. Examples are included for a few different possible configurations.

Important Parameters:

  • LED_BRIGHTNESS: How bright should "full" brightness be. Higher values will provide more light and color depth, but will also increase current use and may introduce color aberration on longer strips when many LEDs are lit. A default value of 100 will work in most environments.
  • N_STRIPS: How many different led strips there are. In this context a strip is defined as a group of LEDs which all share one signal line.
  • LEDS_PER_STRIP: The maximum number of LEDs on any one strip.
  • N_LEDS: The total number of LEDs, this should be the sum of "n_leds".
  • n_leds: How many LEDs there are in each strip. For custom installations it may be nessary to count, or to upload debug patterns to precisely determine this number. Incorrect values with result in lost pixels.
  • led_dirs: Which direction each strip runs relative to the direction of signal. You can pick either clockwise or counter-clockwise as the logic direction, but it must remain consistent to prevent animation jumps. Clockwise is a good default.

Windows Setup:

Write-up Coming Soon!

Linux Setup:

The Linux install instructions assume that you have Version 1.x.x of the Arduino IDE installed, along with teensyduino which is used to upload code to the Teensy. Instructions for installing teensyduino (and links to arduino installers) can be found here: https://www.pjrc.com/teensy/teensyduino.html. It is definitely worth checking that your install works by uploading one of the teensy example scripts before proceeding.

Setting up the build environment is pretty straightforward, but it does involve mucking around in the arduino libraries folder. If you have any questions definitely feel free to reach out.

Using the arduino IDE Install: (Sketch -> Include Library -> Manage Libraries...)

  • SD
  • TFT_eSPI
  • lvgl
  • arduinoFFT (for debugging, optional)

Navigate to your a libraries folder (likely /home/[name]/Arduino/libraries) and clone the arduinoLua repo.

Now copy the lv_conf.h file from /aurora_sw/src/ to the top level of your Arduino libraries folder. This configures the GUI generator.

In your arduino libraries folder, replace TFT_eSPI/User_Setup.h with the User_Setup.h file provided in aurora_sw/src/. This configures the pins and dimensions of the display itself.

Rename /aurora_sw/src/main.cpp to /aurora_sw/src/main.ino so that it will be detected by the Arduino IDE.

You can now open src.ino with the Arduino IDE.

Before uploading you will need to set the optimizer (tools -> optimize) to "Smallest Code".

You are now ready to upload!

Hardware Setup / Assembly:

Tips:

  • The MAX9814 is the board's most fiddly component, so if you are going to use the microphone, it pays to solder that first.
  • The fft_debug script can be used to check if the audio components are correctly installed. To use it install the script, and then play tones from your phone. The tones played and the tones reported on the serial monitor should match to within 1hz or so over 200hz - 4000hz.

Parts

83
QtyValueFootprintReferences
8100Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR13, R14, R15, R16, R17, R18, R19, R20
8Conn_01x03Connector_JST:JST_PH_S3B-PH-K_1x03_P2.00mm_HorizontalJ3, J4, J5, J6, J7, J8, J9, J10
8G***kibuzzard-62AD6AECkibuzzard-62AD6AEC, kibuzzard-62AD6AEC1, kibuzzard-62AD6AEC2, kibuzzard-62AD6AEC3, kibuzzard-62AD6AEC4, kibuzzard-62AD6AEC5, kibuzzard-62AD6AEC6, kibuzzard-62AD6AEC7
8G***kibuzzard-62AD6B04kibuzzard-62AD6B1, kibuzzard-62AD6B2, kibuzzard-62AD6B3, kibuzzard-62AD6B04, kibuzzard-62AD6B4, kibuzzard-62AD6B5, kibuzzard-62AD6B6, kibuzzard-62AD6B7
7100kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1, R2, R4, R5, R6, R7, R22
410kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR9, R10, R11, R12
4MountingHole_PadMountingHole:MountingHole_3.2mm_M3_ISO14580_PadH1, H2, H3, H4
310uCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC1, C2, C13
20.1uCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC3, C11
20.47uCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC4, C5
210nCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC9, C10
247nCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC7, C8
1150kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR21
11MResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR8
11uCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC12
12.21kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR3
12.2uCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC6
174HCT245Package_SO:TSSOP-20_4.4x6.5mm_P0.65mmU2
1Adafruit_TFT_1in3_ST7789displays:Adafruit_TFT_1in3_ST7789U4
1CMA-4544PF-WCMA-4544PF-W:MIC_CMA-4544PF-WMK1
1G***kibuzzard-62AD6C4Ckibuzzard-62AD6C4C
1G***kibuzzard-62AD5F34kibuzzard-62AD5F34
1G***kibuzzard-62AD6C16kibuzzard-62AD6C16
1G***kibuzzard-62AD6BC2kibuzzard-62AD6BC2
1G***kibuzzard-62AD5F1Dkibuzzard-62AD5F1D
1G***kibuzzard-62AD6C27kibuzzard-62AD6C27
1G***kibuzzard-62AD66A7kibuzzard-62AD66A7
1G***kibuzzard-62AD66B6kibuzzard-62AD66B6
1G***kibuzzard-62AD6B13kibuzzard-62AD6B13
1G***kibuzzard-62AD6BA8kibuzzard-62AD6BA8
1G***kibuzzard-62AD6C62kibuzzard-62AD6C62
1G***kibuzzard-62AD6C38kibuzzard-62AD6C38
1MAX9814Package_DFN_QFN:TDFN-14-1EP_3x3mm_P0.4mm_EP1.78x2.35mm_ThermalViasU1
1RotaryEncoder_SwitchRotary_Encoder:RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mmSW1
1SJ-3524-SMTSJ-3524-SMT:CUI_SJ-3524-SMTJ2
1Screw_Terminal_01x02terminal_block:TerminalBlock_Molex_393570002_1x02_P3.50mm_HorizontalJ1
1Teensy4.0teensy_library:Teensy40U3

Questions

How big is the Led controller rounded PCB?

It measures 88.9 × 46.2 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Led controller rounded use?

83 parts, built around the 74HCT245, CMA-4544PF-W and SJ-3524-SMT-TR. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Led controller rounded KiCad files?

From the cruzsbrian/aurora repository on GitHub, at the commit this page was made from: the board is aurora_hw/led_controller-rounded.kicad_pcb and its schematic aurora_hw/led_controller.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Led controller rounded design in my own project?

Its repository states no licence, so its author keeps all rights: ask cruzsbrian before reusing the design.

More from cruzsbrian/aurora

1
  • 2 layers88.9 × 46.2 mmLed controller, the printed circuit board in 3D

    Led controller

    cruzsbrian/aurora

    An addressable LED controller with graphical interface, audio input, and patterns programmed on an SD card.

    84 parts3

Similar boards

  • 4 layers81.5 × 134.5 mmMain PCB, the printed circuit board in 3D

    Main PCB

    Xii-Labs/Xii-Boy-Ultra

    The world's first wire-free Wii portable, now in the palm of your hands. Better than ever, optimized to delight, built for fun. The next generation of Wii portables starts now.

    37 parts104CERN-OHL-S-2.0
  • 2 layers58.8 × 55.7 mmAiO i2s DAC, the printed circuit board in 3D

    AiO i2s DAC

    martinroger/ipodesp32

    An iPod emulator for 2006-2013 BMW Mini Coopers that need Bluetooth

    102 parts24MIT
  • 4 layers75.1 × 60.9 mmMain pcb, the printed circuit board in 3D

    Main pcb

    Xenii1642/Xii-Boy-Pocket

    Newer, Better, Thinner and Open-Source Xii-Boy

    52 parts15
  • 4 layers82.8 × 88.9 mmMetal detector test, the printed circuit board in 3D

    Metal detector test

    bobasaurus/lumber-plunder-metal-detector

    A VLF induction balance metal detector with a wooden body

    111 parts11GPL-3.0
  • 2 layers60 × 60 mmMinimidi v1 panellized 4x, the printed circuit board in 3D

    Minimidi v1 panellized 4x

    bjonnh/dinoctopus

    A MIDI router and USB interface using a Raspberry PICO (RP2040)

    88 parts6MIT
  • 2 layers97.3 × 120.4 mmController, the printed circuit board in 3D

    Controller

    bjonnh/2024_emmg_workshop_midi

    56 parts3CC0-1.0
  • 4 layers85 × 88 mmEmonPi3, the printed circuit board in 3D

    EmonPi3

    openenergymonitor/emon32

    emonPi3 & emonTx6 Hardware

    174 parts3CC-BY-SA-4.0
  • 4 layers98 × 79 mmMpe32board, the printed circuit board in 3D

    Mpe32board

    udu3324/mpe32board-midi

    an expressive midi controller that has onboard sound processing with super hackable io

    228 parts3GPL-3.0