Looking to add an impressive, glowing effect to your tabletop terrain or D&D scenery? With just a few affordable components, some simple wiring, and a touch of code (provided), you can create a 3D printed terrain piece that lights up like arcane magic!
This glowing ritual circle is perfect for fantasy or sci-fi settings, whether you’re summoning eldritch horrors or powering up ancient tech.
🧙♂️ What You’ll Need to build this terrain
Here’s a list of materials I used to create the glowing ritual circle:
- 3D printed ritual circle – You can grab the STL file from Saucermen Studios
- Neo-Pixel LED ring – I used a 16 LED ring
- Microcontroller – Arduino, ESP32, or any similar board will do
- A few wires
- 5V power source – A USB battery pack or phone charger works great
⚙️ Where to Get the Parts
I sourced the electronics cheaply through AliExpress, but similar components can be found on Amazon, eBay, or your local electronics supplier. Altogether, this build cost less than $10.
🧠 Coding the Magic (With Help from ChatGPT)
To animate the LEDs, I used ChatGPT to help generate the code. I asked:
“Create two sequences for the ring on pin 13 of Arduino and 16 LED nano pixel ring. First: a symmetrical blue sparkle effect lasting 3 seconds. Second: a popping green magical explosion lasting 6 seconds.”
It responded with perfectly usable Arduino code, which I uploaded to the microcontroller. You can customize this code to match the tone of your game—be it eerie, chaotic, or divine.
You can also use the code below:
#include <Adafruit_NeoPixel.h>
#define PIN 13
#define NUM_LEDS 16
#define SEQ_ONE_DURATION 3000 // 3 seconds
#define SEQ_TWO_DURATION 6000 // 6 seconds
#define TOTAL_DURATION (SEQ_ONE_DURATION + SEQ_TWO_DURATION)
#define FADE_SPEED 20
#define SPARK_CHANCE 30
Adafruit_NeoPixel ring = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
// For sparkle logic
uint8_t sparkle_brightness[NUM_LEDS];
// For timing
unsigned long startTime = 0;
void setup() {
ring.begin();
ring.setBrightness(255); // Full brightness, we control individual pixel brightness
ring.show();
for (int i = 0; i < NUM_LEDS; i++) {
sparkle_brightness[i] = 0;
}
startTime = millis();
}
void loop() {
unsigned long currentTime = millis();
unsigned long elapsed = (currentTime - startTime) % TOTAL_DURATION;
ring.clear();
if (elapsed < SEQ_ONE_DURATION) {
runSequenceOne(elapsed);
} else {
runSequenceTwo();
}
ring.show();
delay(30); // Control update speed
}
// --- Sequence ONE: 4-way mirrored faint blue rotation ---
void runSequenceOne(unsigned long elapsed) {
static unsigned long lastStep = 0;
static int step = 0;
if (millis() - lastStep > 100) {
step = (step + 1) % 4; // 4 steps per quarter rotation
lastStep = millis();
}
for (int offset = -1; offset <= 1; offset++) {
int pos = (step + offset + 4) % 4;
uint8_t brightness = 10;
if (offset == 0) brightness = 50;
else if (abs(offset) == 1) brightness = 20;
for (int q = 0; q < 4; q++) {
int idx = (pos + q * 4) % NUM_LEDS;
ring.setPixelColor(idx, ring.Color(0, 0, brightness));
}
}
}
// --- Sequence TWO: Green magical sparkles ---
void runSequenceTwo() {
for (int i = 0; i < NUM_LEDS; i++) {
if (sparkle_brightness[i] == 0 && random(0, SPARK_CHANCE) == 0) {
sparkle_brightness[i] = 255; // Start sparkle
}
if (sparkle_brightness[i] > 0) {
sparkle_brightness[i] = max(sparkle_brightness[i] - FADE_SPEED, 0);
}
ring.setPixelColor(i, ring.Color(0, sparkle_brightness[i], 0));
}
}
🔌 Wiring It All Up
- 5V from the LED ring to the 5V pin on your board
- GND to GND
- Data Input to Pin 13 on your microcontroller
Once wired, upload the code via the Arduino IDE, and your 3D printed terrain will burst to life with a dramatic glow.
✨ Assembly Tips for your terrain
I recommend dry-fitting everything first. Once you’re happy with the positioning, use a bit of hot glue or superglue to secure the LED ring inside the ritual circle. You can diffuse the lights further with parchment paper or resin for a mystical glow.
🧪 Use Cases for Glowing Terrain
- Highlight key objectives in a dungeon crawl
- Mark teleportation circles or magical wards
- Bring life to cyberpunk terminals or sci-fi consoles
- Upgrade your D&D scenery with animated lighting effects
This is a great way to bring your 3D printed terrain to life and impress players with interactive tabletop elements.
📦 STL Download & More Info
You can download the STL for the ritual circle here:
👉 Darkmyth Dungeon Ritual Circle with LED Integration – Saucermen Studios
I’ll post the exact Arduino code and links to components in an upcoming blog update.
🧙♂️ Miniature Credit
The wizard mini featured in the video/photos is the Thalmor Mage by Marco R Sassi.


