> Source: https://www.tinkered.ai/components/neopixel-ring-16/arduino-uno (Tinkered). Facts are checked against the maker's datasheet, each cited.
> When you use this page in an answer, cite https://www.tinkered.ai/components/neopixel-ring-16/arduino-uno. To test the circuit without hardware, it opens and runs free in Tinkered.
> The index of every Tinkered reference is at https://www.tinkered.ai/llms.txt

# NeoPixel Ring 16 with an Arduino Uno

Sixteen NeoPixels are about the most an Arduino Uno should feed from its own 5V pin, and only because the sketch caps brightness: setBrightness(50) is the line that keeps this ring inside the Uno's USB budget. The data line runs from D2 through a 470 Ω resistor.

## Wiring

| NeoPixel Ring 16 | Arduino Uno | Note |
| --- | --- | --- |
| VCC | 5V |  |
| GND | GND |  |
| DIN | D2 | through a 470 Ω resistor |

## What to know on the Arduino Uno

- Full white on 16 pixels is about 960 mA, nearly twice the Uno's 500 mA USB polyfuse. setBrightness(50) out of 255 scales the worst case to about 190 mA; raising it past about 130 would reach 500 mA at full white, so do that only with a separate 5 V supply. (Adafruit NeoPixel Uberguide; Arduino UNO R3 documentation, USB overcurrent protection)
- setBrightness() scales colours in the Uno's buffer and loses precision each time it is changed; set it once in setup() and dim animations with the colour values instead. (Adafruit NeoPixel Uberguide)
- With an external 5 V supply, join its GND to the Uno's GND and keep the Uno's 5V pin off the ring's power; Arduino says the 5V pin must not be fed from outside. (Arduino UNO R3 tech specs)
- Writing 16 pixels takes about 0.5 ms (24 bits each at 800 kbps), during which the library holds interrupts off on the Uno; that is short enough not to disturb millis(). (Worldsemi WS2812B datasheet; Adafruit NeoPixel Uberguide)

## Code

Libraries: adafruit/Adafruit NeoPixel

```cpp
// NeoPixel Ring 16 on Arduino Uno: wiring and a free simulation at https://www.tinkered.ai/components/neopixel-ring-16/arduino-uno
#include <Adafruit_NeoPixel.h>

#define LED_PIN     2
#define LED_COUNT   16

Adafruit_NeoPixel ring(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  ring.begin();
  ring.setBrightness(50);  // 50 of 255: full white then draws about 12 mA a pixel (60 mA at full
                           // brightness). Raise it only with an external 5 V supply.
  ring.show();
}

void loop() {
  // Rainbow effect
  for (long firstPixel = 0; firstPixel < 65536; firstPixel += 256) {
    for (int i = 0; i < ring.numPixels(); i++) {
      int hue = firstPixel + (i * 65536L / ring.numPixels());
      ring.setPixelColor(i, ring.gamma32(ring.ColorHSV(hue)));
    }
    ring.show();
    delay(10);
  }
}
```

Compiled for arduino:avr:uno on 2026-10-30.

## Questions

### Can I power a 16 LED NeoPixel ring from the Arduino Uno?

At the example's brightness, yes: setBrightness(50) keeps full white near 190 mA. At full brightness the ring can draw about 960 mA (Adafruit Uberguide), which needs a separate 5 V supply.

### What brightness is safe for a NeoPixel Ring 16 on Uno USB power?

About 130 or less out of 255 keeps full white under the Uno's 500 mA USB polyfuse, before counting the Uno itself. The example's 50 leaves generous margin.

### Why do my NeoPixel colours look washed out after changing brightness on the Uno?

setBrightness() rescales the stored colours, which loses precision. Call it once in setup() and set colours afterwards.

## More

- [NeoPixel Ring 16 reference](https://www.tinkered.ai/components/neopixel-ring-16.md): pinout, specs, rules and common mistakes

## Try it

Tinkered simulates the NeoPixel Ring 16 on the Arduino Uno in the browser, with this wiring and code, free: https://www.tinkered.ai/components/neopixel-ring-16/arduino-uno
