I’m building a small, portable LED sign using a WS2812 (NeoPixel-compatible) RGB LED strip controlled by an Arduino Nano. The sign needs to be lightwe

I’m working on a small, portable LED sign using a WS2812 (NeoPixel-compatible) RGB LED strip controlled by an Arduino, and I want to get some opinions on my power and wiring setup before I fully commit. The goal is to keep the whole thing lightweight, rechargeable, and not reliant on a wall plug. I’ve done quite a bit of research on LED power requirements, Arduino limits, and battery options, and this is where I’ve landed so far.

The LED strip I’m using is a flexible WS2812 strip, 1 meter long with 60 LEDs per meter. It runs at 5V and will almost always be on a single colour (most likely red), but like not always on just on at like specific times like when bathrooms occupied kind of thing. From what I’ve read, a single colour typically draws around 20mA per LED, so for 60 LEDs that puts me at roughly 1.2A total, well below the worst-case full-white scenario, and also the website said it’s usually abou 20mA. The data line is driven from the Arduino through a 470Ω resistor also adviced form the website, and the LEDs are chained normally. I’ve included a Fritzing diagram showing the basic wiring.

For the controller, I’m planning to use an Arduino Nano instead of an Uno to keep the build smaller and less bulky. The Nano will be powered directly through VIN rather than the 5V pin. Since the recommended input range for VIN is around 7–12V, this ties in well with my battery choice and avoids needing a barrel jack or extra adapters.

For power, I’m using a 7.2V 3800mAh NiMH RC battery pack. The battery feeds two paths: one directly to the Arduino Nano VIN, and the other through a buck converter to power the LED strip. The buck converter is an MP1584EN adjustable step-down module rated up to 3A. It takes the 7.2V battery input and is set to output a regulated 5.0V for the LEDs. All grounds (battery, Nano, buck converter, and LED strip) are tied together. I’m also planning to include a 2A resettable fuse between the battery and the buck converter for basic protection.

I’m mainly looking for feedback on whether this setup makes sense electrically and practically for a portable sign. Specifically, I want to know if powering the Nano from VIN at 7.2V alongside a buck-converted 5V rail for the LEDs is reasonable, whether the current estimates and buck converter rating are appropriate, and if there are any obvious issues or improvements I should consider before moving from breadboard to a more permanent build.

in the pic it shows 4 led but im gonna use 60 irl, and battery is diff, im acc using 7.2V 3800mAh rechargeable battery.

1 Like

Hint: Test your prototype with your battery and see if it lasts at least 125% of the required time as batteries will age. Also be sure you do not over discharge the battery, that can make your design look bad.

Rather than making your own sign, use NeoPixel Matrix... but their size starts at 8x8.

One or the other, not both. Batteries are heavy. My "small sign" has a 7.5Ah, 4kg, battery (it lasts for three weeks on a charge, and never moves).

What kind of sign has 60 pixels? That's two 5-pixel characters.

Not portable, unless you only want it to work for some minutes. Not practical (what will two characters get... and have you ever tried to read a scroll bar only two characters wide?).

You can't put that much current through breadboard, it will get hot and possibly burn. Your wiring to the LEDs needs to be direct, not through breadboard.

Using a fuse is good but it should feeding everything from the battery, not just the LEDs. Ideally a battery should have a fuse as physically close to it as possible. It might be that the lithium battery you are using already has built in protection, in which case the fuse probably isn't needed.

Alright thanks Ill do that

I wanted to make like a 3d printed sign and the led strips would be at the back kind of like this:

I found a good one on amazon it was around 300g and 177.8x132x48 mm so would easily fit in the box behind the sign with the other components

Was trynna go for something bright i guess, but might switch to 30led/meter if there r issues with the 60 later on

The 3d print size is pretty small rn at like 100mm thick, 330mmx210mm, so it would easily fit onto a door or a wall.Could you explain why it’d probably last few minutes, i did like the math stuff and i got LEDs: 5V × 1.2A =approx 6W, Arduino + losses approx 1W
Total = 7W and then 27Wh/7 is like a little under 4hrs and i don’t understand wut u mean by 2 characters this is the like cad for text rn btw srry forgot to show:

Ok thx for that, I missed that out could hv burnt breadboard, I’ll change up the wiring.

Yh for the fuse I thought about that as well then I read like a web article from instructable, but now that im seeing it again i might hv read it wrong. (here’s it- How to Use DC to DC Buck Converter LM2596 : 8 Steps - Instructables). Im not sure if it had a fuse i didn’t see anythign about it in the desription butit wouldn’t hurt to add it no?

I adjusted the circuit could u pls give opinion:

I think I understand your idea now. If this is the sign style...

In your cicuit drawing, also onnect a 1000uf electrolytic capacitor on your power supply output.

Since 5V is all you need here, you could simply use power bank. You find them almost any capacity nowadays, they include all protections and charging is more simple.
Dual port or dual cable for maximum convenience, one for arduino and one for led strip.

I've not had success with power banks. They do not recognize the MCU as a large enough power sink. One small project was 50-pixels. So, if the power bank does not work, it is probably not because of your hardware.

Some don't work, most do. If arduino sleep cycles are not required, 1A LED load keeps any power bank awake

Not my experience. The power banks did not recognize the MCU (and the WS2812 do not draw until enabled).

Can be, every device is different.
I have been using at least 5 different ones and all of them power initially with any load. Several seconds later some switch off if power draw is too low, but at this point LEDs are already drawing. Long deep sleep has been only approach I failed to accomplish.

I got around it by fitting a MOSFET and load resistor across the bank supply and getting the controller pulsing it every 30 seconds, I think 120mA for 10ms did the trick, but I had to experiment.

Tom.... :smiley: :+1: :coffee: :australia:

1 Like

Hi, trynna stay away form powerbank cuz its heavy, expensive and fees kinda wasteful for aome reason. I changed a lot of stuff. I did some more research then found out about another microcontroller called the adafruit feather

Ichecked out the adafruit feather, and its so good.
Based on further advice, I switched to an Adafruit Feather 32u4, which fits this project way better than an Arduino + external power circuitry. It runs at 3.3 V, can be powered directly from a single-cell 3.7 V LiPo, and has a built-in 100 mA LiPo charger with charge status LEDs. That means I don’t need a separate charging board at all, and I can just plug the feather into USB to recharge the battery.

Also apparently WS2812 led strips are nominally run off 5v but can run off lower voltages although blue needs a higher voltage, the red can run off with about 3.4V so theLiPo battery of 3.7V will work well for it. And the battery from Adafruit also comes with a protection thing so I don’t have to worry as much about like fuse capacitor and stuff. Additionally as the LED r really bright I may not even need to be running it at full power I could go for about 100/255 further reducing the amount of current the LED strips would be using, probably even under 1A, making the battery up to the task.
The current setup uses a 3.7 V 2200 mAh LiPo connected straight to the Feather it can powers both the microcontroller and a 1 m WS2812 LED strip (60 LEDs/m). An nRF24L01 module is used for wireless control. The Feather listens for simple “ON” and “OFF” commands from a control unit, turns the LED strip on or off accordingly, and sends an acknowledgement back.
For battery monitoring, the feather has a built in pin for that purpose, I’m using the Feather’s analogue input to read the LiPo voltage (via the built-in divider). The firmware continuously measures the battery voltage and only sends an update to the control center when it changes by 0.1 V. This keeps RF traffic low while still giving useful information. I’m aiming to keep the battery above ~3.4 V, so when it drops near that level the control center can flag it, and I can just plug the sign into USB and let it charge automatically.
I haven't built the control center yet, prob soo tho, but it's basically like microcontroller with nrfmodule and like talks with other projects, using toggle switches.
here's the pic rn also the code, thoughts? Also I searched online but haven’t seen like successful project with adafruit feather and the nrf24l01 together, only 1 but it was a different module, anyone hv any experience with that?

#include <Adafruit_NeoPixel.h> // for neo pixel
#ifdef __AVR__
  #include <avr/power.h>
#endif
#include <SPI.h>
#include "RF24.h" //for RF24 module
#include <math.h>

#define PIN 5 //pin of neopixel
#define PIXELS 60 // number of pixels 
#define VBATPIN A9 // pin number to read LIPO battery

// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals.
// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest
// example for more information on possible values.
Adafruit_NeoPixel pixels(PIXELS, PIN, NEO_GRB + NEO_KHZ800);

RF24 radio(9,10); //CE and CS pins
byte adresses[][6] = {"1Node", "2Node"};


float measuredvbat;
float latest_vbat = 0.0; // make variable for the latest voltage value


char rxText[4]; // enough for "ON", "OFF", null

void setup() {
Serial.begin(115200);
Serial.println("RF24example: Simple tx");

radio.begin();
radio.setPAlevel(RF24_PA_LOW);
//open a writing and reading pipe on each radio, with opposite adresses
radio.openWritingPipe(adresses[0]);
radio.openReadingPipe(1,adresses[1]);
radio.startListening();

pixels.begin(); // This initializes the NeoPixel library.
}

void loop() {

  /* ---------- RECEIVE ON / OFF ---------- */
  if (radio.available()) {
    radio.read(&rxText, sizeof(rxText));

    if (strcmp(rxText, "ON") == 0) {
      for (int i = 0; i < PIXELS; i++) {
        pixels.setPixelColor(i, pixels.Color(150, 0, 0));
      }
      pixels.show();

      radio.stopListening();
      radio.write("ON", 3);
      radio.startListening();
    }

    if (strcmp(rxText, "OFF") == 0) {
      pixels.clear();
      pixels.show();

      radio.stopListening();
      radio.write("OFF", 4);
      radio.startListening();
    }
  }

  /* ---------- BATTERY MEASUREMENT ---------- */
  measuredvbat = analogRead(VBATPIN);
  measuredvbat *= 2.0;
  measuredvbat *= 3.3;
  measuredvbat /= 1024.0;

  if (fabs(measuredvbat - latest_vbat) >= 0.1) {
    latest_vbat = measuredvbat;

    radio.stopListening();
    radio.write(&latest_vbat, sizeof(latest_vbat));
    radio.startListening();

    Serial.print("VBAT sent: ");
    Serial.println(latest_vbat);
  }

  delay(200);
}