Introduction: Glo: a Hackable, Arduino-Based RGB Strip/Neopixel Controller
With LED technology and DIY Electronics being more available to everyone with each passing year, the demand for maker-friendly LED controllers has been on the rise. Currently, low-cost RGB strip drivers are available but offer no flexibility or external I/O to play with. Another option is to use an Arduino UNO or similar microcontroller. However, this approach is not suitable for more rugged/compact projects, such as mounting LEDs on a bicycle or under a car.
To meet this demand, as well as to teach others the basics of RGB Lighting, I have designed Glo, a low-cost, customizable LED controller. The board is smaller than an Arduino UNO and contains all the ports needed to run multiple LED strips, eliminating the need for extra wires. Additionally, it uses heavy-duty terminal blocks for the LED and power connections, ensuring that the wires won't come unplugged in more rugged applications.
Glo is also Arduino-compatible, meaning that it can be interfaced with external modules, sensors, or processors. The possibilities for your lighting projects are endless!
This instructable will highlight the design and fabrication processes of Glo, so you can build your own! If you are interested in the project, check out omnilabs.com for Glo Rev 2, which will launch on Kickstarter in March 2021! The new chip is WiFi compatible, works with Amazon Echo/Google Home, and has plenty of I/O to add modifications.
For this project, you will need:
Step 1: Project Requirements
I have designed Glo to be able to drive 240 WS2812B LEDs simultaneously. The device can handle more but do so at your own risk. Too many LEDs can cause the controller to overheat, damaging both the controller and the LED strip.
Glo will include:
- 4 addressable RGB LED channels
- 1x Digital pin (D2), 8x Analog Pins (A0-A7), and Serial Transmission Pins (TX & RX). However, analog pins may be used as digital pins if necessary.
- 3x GND pins, 2x 5V pins, 2x 3.3V pins, 1x VIN (voltage supplied by power supply) pin, and 1x RESET pin.
- Open source Arduino-compatible microcontroller (Atmega 328p)
- FT232 USB to Serial converter chip. This chip is used on official Arduino boards and does not contain driver issues commonly found in clones (devices using the CH340G chip).
- Hall effect sensor. This sensor detects the presence of nearby magnets. For example, this allows for rotation based patterns if Glo is mounted on a bicycle tire.
- Mini USB 5V power port and terminal block 5V power port.
- 2 Mode buttons to change settings
Step 2: Schematic Design - Processor
This schematic page outlines how the processor (Atmega328p) will interface with the rest of the PCB. It includes the clock circuit, decoupling capacitors, reset circuit, and the I/O header pins.
This circuit provides a 16Mhz clock signal to the processor. It involves a 16 Mhz crystal (X1) and 2 22pF capacitors (C1 & C2).
Providing a stable power supply for your hardware is very important in electronics design. Glo contains several decoupling capacitors (C3, C4, C5) to smooth out noisy voltage spikes and prevent power issues.
By connecting the processor's RESET Pin to GND, the chip can be rebooted. Glo uses a simple pushbutton (SW1) to achieve this.
Step 3: Schematic Design - USB Interface
Note:There is a minor mistake in this schematic. The POWER and PROGRAM USB ports have their names switched. Please keep this in mind when following the designs.
To be able to download code from a computer, or communicate to other USB devices, Glo comes with an FT232 USB-UART chip. This chip converts the signals from the mini USB port to a serial line the processor can understand. Along with decoupling capacitors both for the chip and the USB input, the schematic includes two LEDs (TX & RX) to indicate when the device is transmitting or receiving data via USB.
To allow for programming while LEDs are plugged in, Glo comes with two USB ports. One is dedicated to programming the processor, while the other is meant for powering the LED strips. Since USB can only handle 1 amp of current, a thermal fuse has been added to prevent damage.
Step 4: Schematic Design - Power Distribution
Since Glo will be pulling large amounts of current, it is important to design the power distribution circuitry properly. The device includes a 5V low-dropout regulator to provide a voltage for the processor. However, this is only useful if the input voltage is greater than 6V (can be removed/omitted).
To allow for multiple ways to power the device, a 'power switch' was implemented. This switch chooses which power source supplies current to the processor and other chips, and is not connected to the LED terminals. It is in the form of a p-channel MOSFET (Q1), a diode (D1), and a pulldown resistor. When a voltage is applied to the power terminal, the MOSFET remains on. However, when the USB port supplies a voltage, the MOSFET turns off, and the processor begins to be powered by the USB's voltage source. This approach, when coupled with a bypass capacitor (C15) and a pulldown resistor (R6), allows for a seamless means of powering Glo's processor from multiple sources.
Note: While both the Program Port and the Power Terminal Block can be connected to a voltage source, DO NOT supply a voltage on both the USB Power Port and the Power Terminal. This will damage the controller as well as the power supply.
Step 5: Schematic Design - Peripheral Components
This sheet contains many of the connectors and extra components on Glo. It includes the 4 LED terminal blocks (LED1 to LED4), the two pushbuttons (SW2 & SW3), and the hall-effect sensor.
Step 6: PCB Layout
The PCB layout for this project is extremely important. Follow the below design considerations to create an optimized PCB:
- To allow large currents to pass through the board without significant overheating, the copper traces have to be very wide. This can be accomplished by using copper pours and via stitching. To via stitch, create two copper pours on opposite layers and 'stitch' them with several vias. You can see how this was done on the PCB for the high current 5V traces.
- Place decoupling capacitors as close as possible to relevant ICs. This minimizes voltage noise.
- Try to route traces using 45-degree turns. This reduces current problems on the PCB and makes it less likely for manufacturing defects to occur (45 degrees also looks way cooler :D)
- Place components in 'zones' where surrounding components relate to each other. For example, place all power distribution components in the same region to minimize long traces and frustrating routing.
Please note that this list is not exhaustive. PCB design is an extremely complex field and there are many techniques engineers use to create robust boards. For this use-case, following these simple guidelines will produce a well-rounded PCB.
Here is a more detailed resource on PCB design. The Altium Project is attached below.
Step 7: Gerber File Generation
To get my boards manufactured, I used JLCPCB, as they offer SMT assembly and relatively low-cost prototyping. Choosing a manufacturer is up to you, companies such as Oshpark & PCBway are excellent for beginners and hobbyists.
After generating my Gerber and Drill files, the BOM (Bill of Materials) and CPI (Pick and Place File) can be uploaded. Gerbers are attached below.
Step 8: PCB Fabrication & Assembly
Since JLCPCB only assembles SMD components, the through-hole (THT) components have to be ordered separately and soldered. I used LCSC for this since they partner with JLCPCB and have a standardized catalog. The BOM & CPI files have been attached below.
Step 9: Soldering
Once the PCBs and the through-hole components arrive in the mail, it's time to solder! Since all the parts required to be soldered are through-hole, they are very easy and do not need fancy irons or a reflow station.
Step 10: 3D Printed Enclosure
To protect Glo, and to mount it to my projects, I 3D printed a 2-piece enclosure for the device. The STEP file is attached below.
Step 11: Software
Since the processors were ordered new, the Arduino bootloader had to be installed. This can be done by connecting an Arduino UNO to Glo's ICSP Pins (6 pins in the middle of the board) and burning a bootloader. Check out this site for more info.
Glo runs a modified version of Adafruit's strandtest program. All software and test code can be found on the project's GitHub repository here. Reprogramming the device is as simple as plugging it into a computer, finding it in the Arduino IDE, and hitting upload!
Step 12: Conclusion, and Glo Rev 2!
And thats it! You now have a custom Arduino-compatible LED strip controller! Use it to control lights on your desk, kitchen or anything else! If you have any questions, post them in the comment section or message me, I will try to respond to them as soon as possible.
I hope you enjoyed this project! If you are interested in the next generation of Glo, check out omnilabs.com for more details about the next version launching on Kickstarter! This device will be able to connect to Wi-Fi, have an app interface, several GPIO, and be able to work with Google Home & Amazon Echo. Hope you like it!
Step 13: Useful Resources
Participated in the