Skip to the content
4 layers107.9 × 69.9 mmBranchControllerPCB, the printed circuit board in 3D

BranchControllerPCB

jspolsky/branchController215

Teensy 3.2 branch controller for up to 8 separate LED strips, based on instructions received over UDP.

Size
107.9 × 69.9 mm
Copper layers
4
Thickness
1.6 mm
Parts
10
Nets
59
Pads
124
Tracks, vias
168, 0
Pours
2
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
16 Dec 2019
Updated
1 Mar 2020

Overview

BranchControllerPCB is an open-source printed circuit board by jspolsky, from the jspolsky/branchController2 repository on GitHub. It is a 4-layer board of 107.9 × 69.9 mm with 10 parts on 59 nets, routed with 168 tracks and 0 vias.

Its parts include 3 connectors, 1 resistor and 1 IC. It belongs with the lEDs and displays boards and the NXP (LPC, Kinetis, i.MX RT) boards of this library.

README

README.md

branchController

The Branch Controller is a small hardware board based on the Teensy 3.2 development board to allow it to control up to 8 separate pixel-addressible LED strips.

Although it can be used standalone to send its own patterns to the light strips, it really shines when connected, over ethernet, to a network. That allows you to generate the patterns on a computer (say, with a high powered graphics card) and send them to one or more Branch Controllers. In particular you can drive a lot more LEDs than any single controller can drive by using multiple Branch Controllers.

Branch Controller

It is designed for WS2812b-style LED strips, with a single wire protocol. These are what Adafruit calls "NeoPixels".

Personally I like to use the WS2815 variant which runs on 12 volts and has a backup wire allowing any single pixel to fail.

Branch Controller does not handle APA102c-type strips, which use a two wire protocol consisting of both the signal and a clock.

Features:

  • Supports up to 4400 pixels (550 per strip) at a frame rate of 60 Hz, the theoretical limit of the protocol

  • Ethernet control. Connects to an ethernet network to receive pixel data over TCP/IP. This allows you to use many branch controllers controlled from a single PC

  • 128x32 OLED display for diagnostics and network configuration

  • IR sensor allows you to use an IR remote control for basic controls

Basic Operation

By default branchController assumes you have 8 strips of 550 pixels each. You can operate a single branchController with a 44 button IR remote control like this one:

44 button IR remote control

The brightness and color buttons work out of the box so you can use your branch controller to create basic solid colors.

Use the On/Off button on the remote to turn off the LEDs. When you press OFF, any changes you have made to the state of the branchController is saved to EEPROM so that it will come back in the same state when you power up. If you don't press off, the state is never saved.

The DIY1-6 buttons are reserved for internal test patterns and chases. You can edit the code for these to provide something that is a good backup if your PC or network fails.

DIY1 shows a test pattern where the first pixel is brown on the first strip, the first two pixels are brown on the second strip, etc. This is useful for making sure you have the 8 strips hooked up in the right order.

Network Operation

You can connect your branchController to a LAN using the built-in ethernet port and control it from any kind of computer that speaks TCP/IP.

When branchController starts up, it will look for a DHCP server and try to get an IP address and network configuration. If that works it will show you the IP address on the screen.

Every branch controller has a unique MAC address which will never change, so you can configure your DHCP server to always hand out the same IP address to the same branch controller, which makes it easier to sort out multiple branch controllers.

If you would like to use a static IP address:

  • Start up the branch controller once using DHCP
  • Connect to the web server running at the IP address that you see on the OLED display
  • Check the "static IP" box and enter the IP address you want to use. Click submit
  • Restart the branch controller. From now on it will use your static IP address.

Web-based Hardware Configuration

If you don't like the default configuration, you can use a web browser to connect to your branchController and modify some things:

  • the maximum power that LEDs will be allowed to consume (in milliwatts). If the total power budget is exceeded, all LEDs will be dimmed equally.
  • the RGB order in your LED strips (some strips expect RGB, others expect GRB). Use the "red", "green", and "blue" buttons to diagnose incorrect RGB order.
  • the color correction you want applied to all output, as a six digit hex RGB value
  • the color temperature you want applied to all output, as a six digit hex RGB value
  • the overall brightness of the LEDs, on a scale from 0 (off) to 255 (full). This can also be adjusted with an IR remote
  • whether to use a static IP address

See http://fastled.io/docs/3.1/group___color_enums.html for options for color correction and color temperature.

Open Pixel Control

If branchController successfully gets on the Internet, it will listen for TCP connections on port 7890, where it will receive data sent to it using the Open Pixel Control format, documented here. You can use Christopher Schardt's app L.E.D. Lab for iPhone or iPad to send cool animations -- all you need to do is set up the controller as if it were a FadeCandy controller.

We use TCP and not UDP for Open Pixel Control. The w5500 ethernet chip used in this design has a tiny buffer and will lose UDP packets if they are sent too fast. TCP solves this problem.

About the project

This code was built using PlatformIO, an open source platform for embedded development which is a zillion times better than using the Arduino IDE. You will still need Teensyduino to flash the Teensy. For more about the research behind this project, follow my blog, BlinkyLights.

Want to build one?

  • The gerber directory has gerber and drill files so you can order PCBs.
  • This BOM lists the parts you need.
  • The PCB is designed to be mounted in a Polycase SK-16-03 if you want a weatherproof enclosure

Next Up

Recently implemented:

  • Static IP address
  • Faster brightness adjust

These features are planned REAL SOON NOW:

  • Improve power limiting feature by showing stats on display for diagnosis
  • "Count Pixels" mode
  • Investigate temporal dithering - it's not really happening.
  • Internet cable disconnected / reconnected
  • Better built-in (DIY1-6) displays maybe
  • Support remote control Play/Pause button for internal DIY1-6 displays
  • Either implement gamma correction or stop pretending

Ideas for future improvements:

Parts

10
QtyValueFootprintReferences
2RJ45 AE10388-NDbranchController:ASSMANN_A-2004-1-4-LP-N-RJ1, J2
1220 ΩResistor_THT:R_Axial_DIN0411_L9.9mm_D3.6mm_P7.62mm_VerticalR1 220
1Adafruit 4400 32x128 OLEDbranchController:AdaFruit4400LEDJ3
1Grn Status LEDLED_THT:LED_D5.0mmSTATUS
1Level ShifterbranchController:SN74HCT245NSN74HCT245N
1RES ARRAYbranchController:4116R-1-101LF100 OHM
1TSOP34438 IR SENSOROptoDevice:Vishay_MOLD-3PinIR
1Teensy3.2teensy:Teensy30_31_32_LCTEENSY 3.2
1WIZ850io EthernetbranchController:WIZ850ioU4

Similar boards

  • 4 layers22 × 42 mmLatest, the printed circuit board in 3D

    Latest

    dennisss/dacha

    Monorepo for awesome tools/projects/libraries

    10 parts397Apache-2.0
  • 4 layers28 × 70 mmDSC DB9 Splitter, the printed circuit board in 3D

    DSC DB9 Splitter

    nanographs/Open-Beam-Interface

    Just what you need to control the beam and get an image.

    10 parts371
  • 4 layers59 × 23 mmSma probetarget, the printed circuit board in 3D

    Sma probetarget

    azonenberg/starshipraider

    Open hardware test equipment

    10 parts193BSD-3-Clause
  • 4 layers47.9 × 47.9 mmFlashCardBanked2M, the printed circuit board in 3D

    FlashCardBanked2M

    clydeshaffer/gametank

    design files for the gametank hardware implementation

    10 parts150
  • 4 layers32 × 50 mmJ533DreamPCB, the printed circuit board in 3D

    J533DreamPCB

    lukasloetkolben/OpenpilotHardware

    Welcome to the Openpilot Hardware Collection!

    10 parts95MIT
  • 4 layers118.1 × 68.6 mmNucleo-144-click shield, the printed circuit board in 3D

    Nucleo-144-click shield

    COVESA/Open1722

    Open-source implementation of the IEEE 1722 protocol, for streaming audio/video, tunneling CAN/LIN messages and enabling remote access to peripherals

    10 parts86BSD-3-Clause
  • 4 layers72 × 40.2 mmThelio io sata, the printed circuit board in 3D

    Thelio io sata

    system76/thelio-io-hardware

    KiCad electrical design of Thelio Io board

    10 parts70GPL-3.0
  • 4 layers60.9 × 34.2 mmVIA2Expansion, the printed circuit board in 3D

    VIA2Expansion

    RetroRemake/OtterX

    8-Bit computer compatible with Commander X16

    10 parts40CERN-OHL-W-2.0

Questions

How big is the BranchControllerPCB PCB?

It measures 107.9 × 69.9 mm and has 4 copper layers, 1.6 mm thick.

What parts does the BranchControllerPCB use?

10 parts. 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 BranchControllerPCB KiCad files?

From the jspolsky/branchController2 repository on GitHub, at the commit this page was made from: the board is kicad/branchControllerPCB.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the BranchControllerPCB design in my own project?

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