Introduction: SPLENDIDA LED Projects on Arduino
Wokwi Arduino Simulator is built on an open-source AVR8js engine. The spirit of the open-source Arduino simulator have kindled many great programming and design artists and all of their great arts together to create this wonderful splendid π
This instructable is an introduction to the resources sued to build this project
Supplies
https://www.wokwi.com
Step 1: People Involved and Who Brought Their Beautiful Art Works
from Discord channel
@ldir
@wokwi
@Elliott
@Costyn
@Urish
@Stepko
@arcostasi
@sutaburi
@stevesigma
@sutaburosu
you are invited to
Step 2: This Is a Project Built Upon Smart LEDs
This project is based on Arduino and any MCUs ATtiny85, ATmega128 can support it. The program can easily run on Arduino UNO, Arduino Mega without any problems.
Here are the basic information
- 256 WS2812B-B RGB LEDs
- 256 100nF decoupling capacitors
- 2 sets of 3-pin header connectors with standard 0.1" spacing:
- 5V, DIN, GND
- 5V, DOUT, GND
- 172mm board diameter
- 3xM3 mounting holes (81.5mm from centre)
- Hypnotic skull spiral decoration π
Step 3: You Can Find the Resources and Design Files Used in the Project
GitHub: https://github.com/wokwi/splendida
Splendida 3D Model (OpenSCAD source code)
Diffuser by ldirko (also available on Thingiverse)
The PCB was designed with KiCad and laid out using a Python script.
The design was inspired by Evil Genious Labs' Fibonacci 256.
Step 4: Examples Projects to Tinker With
Flying Splendida layout
https://wokwi.com/arduino/projects/288956459033559...
//F_lying fibonacci 256
//Fastled fibonacci 256 RGB leds demo //Yaroslaw Turbin, 28.01.2020 //https://vk.com/ldirko //https://www.reddit.com/user/ldirko/
#include "FastLED.h"
// Matrix size #define NUM_ROWS 20 #define NUM_COLS 20 // LEDs pin #define DATA_PIN 3 // LED brightness #define BRIGHTNESS 255
// Define the array of leds CRGB leds[257];
void setup() { FastLED.addLeds(leds, 256); FastLED.setBrightness(BRIGHTNESS); }
void loop() { static byte hue = 0; EVERY_N_MILLISECONDS(30) { hue++; //30 - speed of hue change }
byte x1 = beatsin8 (18, 0, (NUM_COLS - 1)); byte x2 = beatsin8 (23, 0, (NUM_COLS - 1)); byte x3 = beatsin8 (27, 0, (NUM_COLS - 1)); byte x4 = beatsin8 (31, 0, (NUM_COLS - 1)); byte x5 = beatsin8 (33, 0, (NUM_COLS - 1));
byte y1 = beatsin8 (20, 0, (NUM_ROWS - 1)); byte y2 = beatsin8 (26, 0, (NUM_ROWS - 1)); byte y3 = beatsin8 (15, 0, (NUM_ROWS - 1)); byte y4 = beatsin8 (27, 0, (NUM_ROWS - 1)); byte y5 = beatsin8 (30, 0, (NUM_ROWS - 1));
CRGB color = CHSV (hue, 255, BRIGHTNESS);
fadeToBlackBy (leds, 256, 40 );
mydrawLine(x1, y1, x2, y2, color, 1); mydrawLine(x2, y2, x3, y3, color, 1); mydrawLine(x2, y2, x4, y4, color, 1); mydrawLine(x3, y3, x4, y4, color, 1); mydrawLine(x3, y3, x1, y1, color, 1); mydrawLine(x4, y4, x1, y1, color, 1);
FastLED.show();
} //loop
void mydrawLine (byte x, byte y, byte x1, byte y1, CRGB color, bool dot) { // my ugly line draw function )))
byte xsteps = abs8(x - x1) + 1; byte ysteps = abs8(y - y1) + 1; byte steps = xsteps >= ysteps ? xsteps : ysteps;
for (byte i = 1; i <= steps; i++) { byte dx = lerp8by8 (x, x1, i * 255 / steps); byte dy = lerp8by8 (y, y1, i * 255 / steps); leds[XY(dx, dy)] += color; // change to += for brightness look }
if (dot) { //add white point at the ends of line leds[XY(x, y)] += CRGB ::White; leds[XY(x1, y1)] += CRGB ::White; } }
uint16_t XY(byte x, byte y) { static const uint16_t FibonPlanarTable[] PROGMEM = { 256, 256, 256, 256, 256, 256, 256, 256, 36, 39, 38, 37, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 13, 34, 35, 40, 256, 58, 59, 60, 61, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 14, 33, 256, 41, 56, 57, 68, 67, 66, 65, 64, 63, 256, 256, 256, 256, 256, 256, 256, 12, 15, 32, 42, 55, 256, 69, 256, 79, 80, 81, 82, 83, 62, 256, 256, 256, 256, 256, 11, 16, 31, 256, 43, 54, 70, 77, 78, 94, 93, 92, 91, 90, 84, 85, 256, 256, 256, 255, 10, 17, 30, 44, 53, 71, 76, 256, 95, 256, 101, 102, 103, 104, 89, 88, 256, 256, 256, 254, 9, 18, 29, 45, 52, 72, 75, 96, 256, 100, 120, 119, 118, 117, 105, 106, 87, 256, 256, 253, 8, 19, 28, 46, 256, 51, 73, 97, 99, 121, 124, 125, 126, 256, 116, 256, 107, 86, 232, 252, 7, 20, 256, 27, 47, 256, 50, 74, 122, 123, 145, 144, 256, 127, 256, 115, 256, 108, 233, 251, 6, 256, 21, 256, 26, 48, 49, 256, 98, 146, 147, 148, 143, 256, 128, 256, 114, 109, 231, 234, 250, 5, 256, 22, 23, 25, 24, 0, 195, 171, 170, 169, 149, 142, 256, 129, 113, 110, 230, 235, 256, 249, 4, 3, 2, 1, 244, 243, 256, 194, 172, 256, 168, 150, 141, 130, 112, 256, 256, 229, 236, 256, 248, 247, 246, 245, 242, 220, 219, 196, 193, 173, 167, 151, 140, 131, 111, 256, 256, 208, 228, 237, 238, 239, 240, 241, 256, 221, 218, 197, 192, 174, 166, 152, 139, 132, 256, 256, 256, 256, 209, 227, 226, 256, 256, 256, 222, 256, 217, 198, 191, 175, 165, 153, 138, 133, 256, 256, 256, 256, 207, 210, 211, 225, 224, 223, 215, 216, 199, 256, 190, 176, 164, 154, 137, 134, 256, 256, 256, 256, 256, 206, 205, 212, 213, 214, 201, 200, 256, 189, 177, 163, 256, 155, 136, 256, 256, 256, 256, 256, 256, 256, 256, 204, 203, 202, 256, 187, 188, 178, 162, 256, 156, 135, 256, 256, 256, 256, 256, 256, 256, 256, 256, 183, 184, 185, 186, 180, 179, 161, 256, 157, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 182, 181, 159, 160, 256, 158, 256, 256, 256, 256, 256, 256, 256 }; return pgm_read_word (FibonPlanarTable + y * 20 + x); }





