February 10, 2023
Description
This device increases the area of the LED matrix by 4 times. My idea is to use an expanding light separator. If you print it from a translucent material (and my silver plastic turned out to be a little translucent), then the image elements are "voluminous", and, for example, if you use the firmware to display the clock, the numbers will also be three-dimensional. But you can print them in black plastic and get a classic scoreboard, but 4 times larger at the price of a small one. And all the electronics will cost about $7.
Depending on the firmware, you can use as a clock, lamp, creeping line, night light or color music.
The design does not use filling, but only walls, so printing is relatively fast and low material consumption. Also, no screws or other fixing methods are used.
How it works can be seen in the video
UPD
I added a version in two sides in the form of frames, its printing a third faster and when printing a model, corners closed by cooling by a fan are not created. This option has not yet been tested, but I guess it is better to print it from a more rigid PLA.
It is better to print the box out of partially flexible plastic, for example, SBS. I printed with a 1 mm nozzle at a layer of 0.3 and low speed (this requires material, in addition, my extruder cannot heat very much). It is important to prevent overheating, as the part may become deformed.
You will need an Arduino Nano board, an 8x8 color display matrix, a 200-500ohm resistor with any power and some wires. For electronics, I used the information from this site https://alexgyver.ru/gyvermatrixbt/ and chose the simplest option.
BOM (approximately $7)
WS2812 LED Full Color Module 64 Bit 5050 RGB
(approximately $ 4)
https://aliexpress.ru/item/32658218780.html?spm=a2g0s.9042311.0.0.264d33edPrg17W
Arduino Nano with bootloader compatible Nano 3.0 CH340 USB driver 16 MHz ATMEGA328P / 168 P
(approximately $ 2)
https://aliexpress.ru/item/32341832857.html?spm=a2g0s.9042311.0.0.264d33edPrg17W
Power supply with adapter, 5 V, 2 A, 2000 mA
(approximately $ 1)
https://aliexpress.ru/item/32661794396.html?spm=a2g0s.9042311.0.0.264d33ed0JAM9T
In the example, I used this Arduino sketch:
FASTLED_USING_NAMESPACE
// FastLED "100-lines-of-code" demo reel, showing just a few
// of the kinds of animation patterns you can quickly and easily
// compose using FastLED.
//
// This example also shows one easy way to define multiple
// animations patterns and have them automatically rotate.
//
// -Mark Kriegsman, December 2014
//#define CLK_PIN 4
CRGB leds[NUM_LEDS];
void setup() {
delay(3000); // 3 second delay for recovery
// tell FastLED about the LED strip configuration
FastLED.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
//FastLED.addLeds<LED_TYPE,DATA_PIN,CLK_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
// set master brightness control
FastLED.setBrightness(BRIGHTNESS);
}
// List of patterns to cycle through. Each is defined as a separate function below.
typedef void (*SimplePatternList[])();
SimplePatternList gPatterns = { rainbow, rainbowWithGlitter, confetti, sinelon, juggle, bpm };
uint8_t gCurrentPatternNumber = 0; // Index number of which pattern is current
uint8_t gHue = 0; // rotating "base color" used by many of the patterns
void loop()
{
// Call the current pattern function once, updating the 'leds' array
gPatternsgCurrentPatternNumber;
// send the 'leds' array out to the actual LED strip
FastLED.show();
// insert a delay to keep the framerate modest
FastLED.delay(1000/FRAMES_PER_SECOND);
// do some periodic updates
EVERY_N_MILLISECONDS( 20 ) { gHue++; } // slowly cycle the "base color" through the rainbow
EVERY_N_SECONDS( 10 ) { nextPattern(); } // change patterns periodically
}
void nextPattern()
{
// add one to the current pattern number, and wrap around at the end
gCurrentPatternNumber = (gCurrentPatternNumber + 1) % ARRAY_SIZE( gPatterns);
}
void rainbow()
{
// FastLED's built-in rainbow generator
fill_rainbow( leds, NUM_LEDS, gHue, 7);
}
void rainbowWithGlitter()
{
// built-in FastLED rainbow, plus some random sparkly glitter
rainbow();
addGlitter(80);
}
void addGlitter( fract8 chanceOfGlitter)
{
if( random8() < chanceOfGlitter) {
leds[ random16(NUM_LEDS) ] += CRGB::White;
}
}
void confetti()
{
// random colored speckles that blink in and fade smoothly
fadeToBlackBy( leds, NUM_LEDS, 10);
int pos = random16(NUM_LEDS);
leds[pos] += CHSV( gHue + random8(64), 200, 255);
}
void sinelon()
{
// a colored dot sweeping back and forth, with fading trails
fadeToBlackBy( leds, NUM_LEDS, 20);
int pos = beatsin16( 13, 0, NUM_LEDS-1 );
leds[pos] += CHSV( gHue, 255, 192);
}
void bpm()
{
// colored stripes pulsing at a defined Beats-Per-Minute (BPM)
uint8_t BeatsPerMinute = 62;
CRGBPalette16 palette = PartyColors_p;
uint8_t beat = beatsin8( BeatsPerMinute, 64, 255);
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i2), beat-gHue+(i10));
}
}
void juggle() {
// eight colored dots, weaving in and out of sync with each other
fadeToBlackBy( leds, NUM_LEDS, 20);
byte dothue = 0;
for( int i = 0; i < 8; i++) {
leds[beatsin16( i+7, 0, NUM_LEDS-1 )] |= CHSV(dothue, 200, 255);
dothue += 32;
}
}
License:
Creative Commons — Attribution — Noncommercial — Share Alike