Hello all! I'm a first-time dabbler in electronics and could use some conceptual help with this project.
I'm working on a costume that features eight LED strips radiating out from a central point. Each strip is one meter long and has 60 LEDs (480 LEDs total). Each strip would display the same patterns at the same time.
I'm considering two options for arranging these strips:
Option 1 would have all the strips chained in one giant strip (with electrical shunts when needed), then code each pixel range (0-59, 60-119, etc). Since each of the strips has to start at the central node, and each strip ends at a different place in the costume, that would mean wiring the end up each strip back up to the central node to start the next strip off.
Option 2 would have each strip attach to a separate pin on the board.
I'm sure both options are possible -- but any advice on which would be easier (especially for a first-timer) are greatly appreciated! And if there's anything I need to know about how these different approaches would impact how I manage the powering of the strips too, let me know.
Thanks in advance -- excited to be part of this community!
I think separate strips if only for the reason of future ideas where you may want different patterns on each strip.
You said 6 strips, I am assuming of 60 so a total of 360 Leds (BTW, what kind of LED, NeoPixel, RGB, etc) If I just use a standard 20mA LED then you need a power supply of a minimum of 8A. If you are considering Lithium 18650's, you will need at least 3 and they may last 1 hour. For a more robust power pack involving a series/parallel configuration you will need some sort of battery management. Remember Lithium has special properties that if ignored can be catastrophic.
Thank you! Right now I'm prototyping with an ESP32 CP2102 board, but I also bought an adafruit feather scorpio. If there are better options for this let me know, I'm not wed to anything!
Very good. Neopixels take a lot of memory, but ESP32 has enough to contain 480 of them. (Arduino Uno/Nano rev 3 work up to 620, then memory becomes a problem).
You will want a right-sized power supply (see post #3), a couple discrete components (limiting resistor of 470ohm and electrolytic capacitor of 1000uf) and read about Neopixel. Then, find a good project on-line to follow, or make your own.
Still chewing on this -- I tested out the multiple-pin approach and got it working pretty easily. But in case I want to do the single-pin, long-strip sections approach, what I'm struggling to wrap my head around now is how to name section A as pixels 0-59, section B as pixels 60-119, etc.
Here's what I have to treat these two strips (right now, two 144-pixel strips, 288 pixels total) as one long one; how would one go about splitting them into Section A or Section B?
#include <FastLED.h>
#define NUM_LEDS 288
CRGB leds[NUM_LEDS];
void setup () {
FastLED.addLeds<NEOPIXEL, 2>(leds, NUM_LEDS);
FastLED.setBrightness(50);
}
void cylon() {
static uint8_t pos = 0;
static int8_t direction = 1;
// Fade all LEDs
fadeToBlackBy(leds, NUM_LEDS, 20);
// Set current position
leds[pos] = CRGB::Red;
// Move position
pos += direction;
if (pos == 0 || pos == NUM_LEDS - 1) {
direction = -direction;
}
}
void loop() {
cylon();
FastLED.show();
delay(30); // Control speed
}
Thank you for the reply. So say I wanted to get this cyclon function running on both of my sections simultaneously (sec A is pixels 0-143 and sec B is 144-287). Is the best way to do that to list out these pixel ranges somewhere? (I'm not even sure where I would do that -- in the setup function? Or somewhere in the loop functions?)?
I'm imagining there might be a way to define somewhere, "Section A is pixels 0-143" so that when I wanted to command something to Section A later I could just refer to it by that name instead of enumerating its range of pixels. Is that possible?
I am looking for the method used with "FastLED.method()" that means "segment A is from LED X to LED Y" and "segment B is from LED Y to LED Z" and then call a "fadetoblack" style function on each segment simultaneously, color independent... (sorry, I usually use the FastLED library, but code my own animations)...
Of course something to consider is that each strip would display the same pattern now, but that may change in the future and you might want different patterns on the strip.
In that case you would need to increase the logic level of the output pin. An ESP32 is a 3.3v device and neopixels require 5v logic levels. You can simply use a 7400 series TTL chip powered with 5v. A 74HCT14 or 74HCT04 where you run the signal though 2 of the gates is the simplest solution.
If you do decide that you may want different patterns on the strip at some point in the future, you can use Makuna Neopixelbus and it has a 8x (and even a 16x) parallel output method with which you can use separate pins which are updated simultaneously using I2S (Fastled can manage up to 4 using RMT)