Ver 2.0 Manual

High Power RGB LED Shield Ver 2.0 Manual


High Power RGB LED Shield for Arduino will drive power LEDs. The shield provides three independent channels which is ideal for RGB LED to make beautiful colors. Of course, you can connect white LEDs to shine your room as well. High Power RGB LED Shield can drive various power LEDs such as Philips Luxeon, Philips Lumiled, Cree XP-E, Cree XP-G, OSRAM Dragon, OSRAM Ostar, power LEDs from dealextream, and many others.

The shield can be powered by broad range of voltage (6 – 42V) and can power up 100 – 700mA LEDs. It supports two different dimming methods to control brightness of LEDs. Analog dimming has best energy efficiency while PWM dimming is better for RGB color mixing. The shield can be stacked as many as you want (up to 64) while it use only two pins from Arduino regardless of number of the shield stacked. The shield can be operated without Arudino.


  • 700mA 3 channel LED driver based on lt3496 (buck configuration)
  • I2C controlled 3 channels PWM for dimming leds
  • 12 bit PWM, adjustable PWM frequency
  • Dynamically adjustable current output (can be used for analog dimming as well)
  • 42V input, 36V output. Drive up to 40W LEDs
  • 5V switching power supplier (up to 42V input)
  • Many shields can be stacked and only use two I2C pins (A4, A5) from arduino
  • Optional temp sensor for monitor led temp and PCB temp


  • Interactive High Power LED lighting

Getting Started

The shield needs to be connected to the Arduino to set maximum current to LEDs and operation frequency. Then connect your power LEDs and power the shield.

Shield Layout


Connecting to Arduino

The shield designed to be stacked on top of the Arduino as any other shields for Arduino. When single shield is used, user may use regular 0.1 inch spaced header pins to stack on top of Arduino. When multiple shields are stacked on the top of each other, it is recommended to use stackable pins ( The shield can be stacked up to 100.

When the shield is used separate from Arduino, Analog In 4, 5, and GND need to be connected to Arduino for I2C communication. You can supply 5V power from Arduino, if the shield is not connected to power adaptor.

The shield use standard I2C communication protocol for entire operation. Any microcontroller or computer that has I2C master function can be used with shield. Once the shield is configured, the shield may operate as stand-alone.

Setting for Basic Operations

The proper maximum current to LED needs to be set depending on LEDs that the shield drives. Manufactures of LEDs have specification for maximum operation current for a LED. Generally, so called 1W white LED and 3W RGB LED have 350mA operation current. Philips Lumiled, Cree XP-E , and Osram Gold Dragon have 700mA maximum operation current. For details, please check the datasheet of the LED from the manufactures.

Download the shield version 2.0 library from the Google code( and install it to your sketch directory. You will find an example file that has the example for maximum current settings for each channel and operation frequency as follow. For the frequency, please check “Input Voltage and Operating Frequency” section.

   1: #include <wire.h>
   2: #include <hprgb2.h>
   5: HPRGB ledShield; // default mcp4728 id(0) and default PCA9685 id(0)
   7: void setup()
   8: {
   9:   ledShield.begin();
  10:   ledShield.setCurrent(350,350,350); // set maximum current for channel 1-3 (mA)
  11:   ledShield.setFreq(600);// operation frequency of the LED driver (KHz)
  12:   ledShield.eepromWrite();// write current settings to EEPROM
  13:   delay(100); // wait for EEPROM writing
  14: }
  17: void loop()
  18: {
  19:   ledShield.goToRGB(255,255,255); delay (3000); //go to RGB color (white) now
  20:   ledShield.goToRGB12(4095,4095,4095); delay (3000); //go to 12bit RGB (white) now
  21:   ledShield.goToRGB(255,0,0); delay (3000); //go to RGB color (red)
  22:   ledShield.goToRGB(0,255,0); delay (3000);//go to RGB color (green)
  23:   ledShield.goToRGB(0,0,255); delay (3000); //go to RGB color (blue)
  24:   ledShield.goToHSB(0,0,255); delay (3000); //go to HSV color (Hue, Saturation, brightness)
  25: }

Connecting LEDs to the Shield


Connector to LEDs are labeled as R (red, channel 1), G (green, channel 2), and B (blue, channel 3). When White LEDs are connected, just channel number is matter. Each channel has label for polarity (+,-). Right port of the channel is the GND. Connect the LEDs properly, otherwise you may damage LEDs.

When multiple LEDs connected to a channel, LEDs are recommended to connect in series. If multiple LEDs are configure as parallel, LEDs in parallel have to be exact same types of LEDs. Slight differences in voltage drop of LEDs may cause damage, so parallel connection of LEDs is highly undesirable.

Total 10 LEDs per channel can be connected to the shield depending on types of LED. The Input Voltage to LED is required to be higher than total output voltage to LED. “Input Voltage and Operating Frequency” section has detailed information for input voltage ranges.

Once LEDs are securely connected to shield, you can connect the power to the shield.

Power supply for the shield

The shield has a standard power connector (2.1mm pole) which should fit with majority of AC wall adaptors. The shield has on-board 300mA, 5V switching power supply and can be powered by 6-42V DC wall adaptor. Optionally, users may connect power adaptor to Arduino power jack, if input voltage is lower than 12V. The shield will get power from VIN pin of Arduino.

To protect Arduino from high voltage, the shield has a protection diode. VIN in the shield is not available in Arduino while the shield supplies 5V (about 200mA) to Arduino. Users may override protection diode for stacking shields using a jumper (JP1) next to the VIN pin. When the jumper is connected, users may consider bending or cutting VIN pin to Arduino for protection.


Dimming LEDs

The shield supports two dimming methods (analog and PWM dimming). User can choose one of them based on needs.

For general dimming such as RGB color mixing, PWM is recommended. The PCA9685 on the shield functions as an I2C PWM controller. The shield library support most PCA9685 functions such as 12 bit PWM and PWM frequency change. You can find detailed information of PCA9685 from NXP

Basic PWM commands are goToRGB and goToHSB. Both of them take 0-255 level dimming which is  corrected for human brightness perception. You can directly use 12bit PWM with goToRGB12.

Input Voltage and Operating Frequency

LED driver part of the shield is buck switching regulator which requires higher input voltage than output voltage. Please find proper input voltage and operation frequency based on LEDs (Vf = 3.0 – 3.65).

Following table has recommended input voltage and recommended operating frequency based on number of LEDs in series per channel

If higher input voltage is used than recommend input voltage, operation frequency may require being higher than recommended operation frequency. Users can calculate exact operation frequency from the spreadsheet.

Current Rating Number of LEDs Input Voltages RecommandedInput Voltage RecommandedOperation Frequency
350mA 1 6-42V 9 (>0.8A) 600KHz
350mA 2 8-42V 9 (>1.2A) 600KHz
350mA 3 12-42V 12 (>1.2A) 600KHz
350mA 4 16-42V 18 (>1.0A) 800KHz
350mA 5 21-42V 24 (>1.0A) 1200KHz
350mA 6 26-42V 28 (>1.0A) 1300KHz
350mA 7 31-42V 32 (>1.0A) 1500KHz
350mA 8 36-42V 36 (>1.0A) 1700KHz
700mA 1 6-42V 9 (>1.2A) 330KHz
700mA 2 8-42V 9 (>2.0A) 330KHz
700mA 3 12-42V 12 (>2.2A) 330KHz
700mA 4 16-42V 18 (>1.9A) 400KHz
700mA 5 20-42V 24 (>1.8A) 600KHz
700mA 6 24-42V 24 (>2.1A) 600KHz

Efficiency and Thermal Considerations

The shield has very efficient LED drivers which normally has 85-95% efficiency. Even though it is driving power LEDs at high efficiency, it will still dissipates heat. For example, when the shield power 30 watts of LEDs, it dissipate about 3 watts of heat from the shield at 90% efficiency. The shield gets warm or slightly hot (120-140ºF, 50-60ºC) which is completely normal. If users want to connect more than 40W of LEDs to the shield, shield require a heat sink on the top or bottom of the LED driver chip and temperate of the chip need to be monitored (should be lower than 100ºC). Since operation frequency of the LED driver effect heat dissipation, low operation frequency has to be used.

Stacking Shields

The shield is designed for easy of stacking. Regardless of the number of stacked shield, the shield use only two pins from the Arduino. Up to 8 shields can be stacked when analog dimming is used. When analog dimming is not required, 64 shields can be stacked theoretically. For stacking shield, I2C addresses of the chips need to be changed. There are two I2C chips, PCA9685 and mcp4728 on the shield.

Changing address of PCA9685 is done by changing jumper on back of the shield. Default device id of PCA9685 is 0. All jumpers are connected to –(GND) for device ID 0. There are 6 jumpers (A0-A5). Device ID is set by binary code of (A5-A0). For example, A0 = +, A1-A5 = – is 000001 (device ID = 1). A0,A1 = +, A2-A5 = – is 000010 (device ID =2).


Changing address of mcp4728 requires jumper for address change command. As in the image, LDAC jumper is normally connected to – (GND). For the address change command of mcp4728, the jumper needs to connect to + (pin D8). After changing LDAC jumper, load address change example from the shield library. It will let you change the address of mcp4728. Once address change is done, LDAC jumper need to be – (GND) again for normal operation.


Temperature Sensing

If you have the shield with temperature sensor(TMP421), users can acquire PCB and remote temperatures. TMP421 is located close to LT3496, so local temperature is co-related with LT3496 temperature (about 5-10 Celcius degree lower than LT3496 temperature). The shield come with five remote temperature sensors (2N3906). As in figure below, tie base and collector and connect it to “N” of the shield. The emitter of 2N3906 is connected to “P”. It is recommended to put resistors (50 ohms) and a capacitor(100pF) as a filter. For detail, please check the datasheet. The shield library has couple of commend to acquire temperatures, please check “temperature example” from the shield library.



Online Resources

  • Shield Library

  • Shield Design Explanation

  • Shield Schematics and Design

Manual Revision History

5/2/2011 Initial manual for version 2.0 shield

  1. Nice to see this information has been saved to a safe location. I had a lot of problems getting my shield in the first place and having this resource available is invaluable. Well done.

  2. Hi Daniel, thanks for your kind words. We’re trying to capture the information and also to set up a new production run based on Neuroelec’s last design. I hope we can keep this alife.

  3. howard jackson

    It looks like your board could control rgb but what about rgbw leds? I am looking to control 12 of these:

    Thanks in advance.

    • Hi Howard, you are right, the current design is limited to three channels only. Our current goal is to get the improved design that Peter D. described in his recent posts back into production, after that, we’ll see. The need for more channels is obvious and something to consider, but as said: first things first.

    • Howard,

      I have asked myself the same question as I have looked at the Cree Xlamp XM-L Color for a next project myself. So the next question is how many LED channels are the right number of channels as there are some LED that have not 4, but 7 mounted on one MCPCB.

      I have an idea for a modular design and have a very early…well…I would not even call it a prototype but a functioning feasibility study and discussed it with Peter J. just last weekend.

      However, as Peter J. pointed out correctly, first we’ll see how we get the current board manufactured. But please stay tuned!

  4. Is it possible to stack multiple shields and changing mcp4728 addresses afterwards by placing the LDAC jumper and programm the addresses one by one? Or will this result in problems on the I2C bus?

    • Mark,

      I am sorry. I’ve totally missed your post somehow.
      No, you need to program the address of each mcp chip one shield at a time. Otherwise as you correctly suggest you’ll run into I2C bus problems. At the time of programming all mcp chips still have the same factory set address, which causes the problem when thing to “talk” to that address.

      • I tested this situation (multiple mcp chips on 1 i2c bus) and verified that it works to start with all chips on the same address and LDAC of 1 chip connected. I was able to change the address of that chip.

        I found a problem in the SoftI2CMaster library and added the following line:

        digitalWrite(sdaPin_, HIGH);

        before each time the pinmode changes to output:

        pinMode(sdaPin_, OUTPUT);

        Without this change SDA was LOW instead of HIGH.

      • Mark_H,

        Very cool. Thanks for posting this. With your permission I may contact you once I start committing software to Github for some mo details on this. I’ve never tried this as I never had enough shields on hand to try this out and it is generally not recommended. But if it works, it works. Can’t argue with that!

  5. Hi, I tried to buy 2 of these on the tindie website and it said only one was available. When will there be more in stock?

  6. Hi John,

    Sorry for the very late answer! I need to check my wordpress setting as I am not notified of all posts. I have a few more in Stock and will likely make more over the holidays. you can also contact me through Tindie as that seems to work better at the moment than this WordPress blog 😉

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: