VELICHAPAAD (വെളിച്ചപ്പാട്)
“A machine to automate light painting”
Velichapaad is an interactive CNC platform that transforms hand-drawn sketches into luminous trails of art. Users draw on a pen tablet interface synced with a live camera feed; the artwork is instantly converted to G-code and brought to life in glowing strokes, visible in long-exposure photographs. The result is a new genre of digital signage — one that merges art, CNC precision, and Seeed Studio’s cutting-edge IoT hardware.
At the core of Velichapaad are two Seeed Studio XIAO ESP32-C6 modules, communicating wirelessly through ESP-NOW for ultra-reliable, low-latency control. One XIAO communicates with the ESP32 CNC controller, while the other powers a cable-free WS2812B LED end effector. This eliminates cable drag, enabling smooth CoreXY motion and fluid, precise rendering of light-based sketches.
The below is the setup of the Machine. The User Interface is setup on a laptop which has a graphic touch pad which allows users to draw and unleash their creativity. The user interface also allows users to import SVG graphics into the canvas
Kochi Nights
Michael Jackson Stop Motion Video
Under Water Stop Motion Video
How we made it?What is Light Painting?Light painting is a photographic technique where you move a light source while taking a long-exposure photograph to make beautiful light trails. Here are some references of various light painting photographs.
These are some light paintings we tried before working on the machine.
The Idea
Imagine drawing a pattern on your screen and watching it instantly appear as glowing trails in mid-air. Velichapaad is an open-frame Core XY light painting machine where you control the art in real time. Its interactive UI lets you sketch live, trace a photo of someone, or improvise on the spot and the final long-exposure photograph will capture your exact drawing in the scene.
We wanted to paint in free space, so the machine is designed as an open frame where light trails are plotted within it, allowing the camera to also capture the background. A light module mounted on the frame moves precisely according to inputs given in the software, enabling you to create any design you imagine. The lights are fully software-controlled, and a camera is set up to capture the trails in a single click. We’ve designed Velichapaad so it can be easily replicated, making it portable and shareable across the global maker community.
Unlike manual light painting, Velichapaad delivers pinpoint precision, repeatable patterns, and the ability to create complex designs effortlessly. It maintains perfect speed and brightness for consistent results, opens up patterns impossible to paint by hand, and turns light painting into an interactive, collaborative performance between you and the machine. Portable, repeatable, and endlessly creative, Velichapaad takes light painting beyond the limits of the human hand.
Mechanical Design
We debated between using a polargraph design or a Core XY mechanism, but we ended up choosing the Core XY mechanism since
- It is more stable
- We have larger pool of references to real life examples to rely on while building the machine
- We can reduce moment of inertia using this design.
We started to make CAD models of the parts of the mechanism. The basic framework of it was created. Some minor adjustments are made according to the constraints we faced.
For true interactivity, the end effector and CNC controller needed to talk wirelessly -no cables, no limits. The Seed Studio XIAO ESP32-C6 made it possible, enabling smooth, real-time control that brings every light trail to life.
LED End Effector
To make the LED mount portable, both the NeoPixels and the ESP32-C6 needed to be battery-powered. At full brightness, each NeoPixel consumes 60 mA — with 7 LEDs drawing a total of 420 mA. For a 2-hour runtime, we needed around 840 mAh, so we used two 500 mAh 3.7 V lithium batteries wired in parallel for 1000 mAh capacity.
We designed the PCB in KiCad with a Y-shaped LED layout to produce thicker “brushstrokes” in the light painting as more LEDs in each row illuminated.
After routing and soldering SMD components, we added connectors for the batteries and the ESP32-C6. The batteries were wired in parallel, crimped, and connected via JST for easy removal.
Initial testing revealed a loose battery connection, which was fixed by rewiring. A faulty LED was also replaced, and after uploading the final code, the rows of LEDs could be precisely controlled based on live user input.
Mount Design
To make it easily removable, we designed a CAD model of a push-and-slide lock mechanism, which was then incorporated into the original design.
Lock Mechanism for the Timing Belt
To lock the belts on the mount without using any zip ties or fasteners, we designed a belt locking mechanism that uses the dovetail joint.
To lock the belts on the mount without using any zip ties or fasteners, we designed a belt locking mechanism that uses the dovetail joint.
We used a dovetail joint mechanism that gets tighter the more tension is applied on the belt.
Fabrication and Assembly
The frame of the machine is built up of aluminum extrusions, which are supported using corner brackets, T Slot nuts and bolts. We designed and 3D Printed custom brackets, motor mounts and pulley holders.
This is how the finally assembled machine looks like
The CNC control is handled by NeoPi, a compact wireless CNC controller developed by Saheen Palayi. Neo Pi is equipped with an ESP32 microcontroller and runs a custom-modified GRBL-ESP32 firmware.
Hardware :- NeoPi Wireless CNC Controller
- ESP32-WROOM module
- DRV8825 stepper drivers (interchangeable)
- Socketed headers for limit switches and stepper outputs
- Wi-Fi-enabled (STA and AP modes)
- Stepper Motors: NEMA17 (x2 for XY)
- Power Supply: 12V DC
- Base Firmware: GRBL-ESP32
Custom Modifications:
- Added serial communication routines to send real-time tool movement commands over UART to a second ESP32.
- Implemented G-code parsing hooks to extract brush control commands (e.g., M3, M5, S[value]), convert them to
uint32_t
color codes, and send via serial. - UART Baud Rate: 115200 bps
- Example G-code custom command:
M3 S16711680 ; Red color brush (RGB: 255,0,0)
- These commands are forwarded to the LED controller in real-time.
- The M3 and M5 codes are send as states M0 and M5, respectively.
Overview:
To isolate the light-rendering logic from CNC motion, Velichapaad uses a dedicated ESP32 module as a serial bridge. It receives brush/color commands from NeoPi and forwards them wirelessly via ESP-NOW protocol to the end-effector.
Hardware:
- ESP32-WROOM (on NeoPi) → UART TX to intermediate controller
- ESP32 → XIAO ESP32 C6 (Serial Bridge Node)
- Listens on UART for messages (e.g., brush size + color)
- Uses ESP-NOW to send structured data packets to the end-effector XIAO ESP32-C6
- Packet Structure:```cpptypedef struct { int brushSize; uint32_t color; // Decimal color value, e.g., 16777215 for white } struct_message; ```3. End-Effector Light System: ESP32-C6 + NeoPixel
The end-effector is a compact unit mounted to the CNC gantry, powered by a Seeed Studio XIAO ESP32-C6 microcontroller and driving a NeoPixel RGB LED (WS2812B or equivalent). It receives brush/color instructions and lights up accordingly during motion.
Hardware:ESP32-C6 Node
- Receives
struct_message
packets via ESP-NOW - Parses brush size and color
- Controls NeoPixel (WS2812B) via
Adafruit_NeoPixel
library - Optional onboard LED feedback (GPIO2)
WS2812B
- Voltage: 5V
- Data Pin: GPIO0
- LED Count: Configurable (usually 1–7 for patterns)
- Uses
esp_now_register_recv_cb()
for asynchronous wireless reception - Real-time LED response to brush command
- Supports full 24-bit RGB color range (0–16, 777, 215 in decimal)
- The two XIAO ESP32 C6s communicate with each other wirelessly using ESP-NOW Communication Protocol
Velichapaad supports real-time control using modified G-code commands. These are parsed on the fly and translated into light commands:
G-code Meaning
M1 Activate brush with selected color
M0 Turn off brush (black)
S[value] Set brush color (decimal RGB)
Example:
M3 S255 ; Blue (0x0000FF)
M3 S16711680 ; Red (0xFF0000)
M3 S16777215 ; White (0xFFFFFF)
The main electronics we used for the machine include used a Wireless 3 Axis CNC controller called NeoPi designed previously by Saheen Palayi, NEMA 23 Stepper motors were used.
LED End Effector ControlProgrammingFirmware is a type of software permanently programmed into a hardware device to control its functions. Unlike general software applications that run on operating systems, firmware operates at a lower level and communicates directly with the hardware. In microcontroller-based systems, such as those used in embedded electronics or CNC machines, firmware is essential—it interprets commands, manages timing and logic, and interacts with physical components like sensors, motors, and communication interfaces.
Grbl_ESP32 is a firmware project that adapts the popular open-source Grbl CNC control software to run on the ESP32 microcontroller. It interprets G-code commands—standard instructions used in CNC machining—to generate precise step signals that drive stepper motors along the machine’s axes. In addition to core Grbl functions like motion control and parameter handling, Grbl_ESP32 leverages the ESP32’s built-in Wi-Fi and Bluetooth to enable wireless G-code transmission, machine status monitoring, and remote configuration.
We already had a CoreXY machine in our lab called the LUNA Plotter, so we used it for testing the firmware. GRBL was chosen as the firmware, and we needed to add custom commands to the G-code to control the LED—turning it ON and OFF and changing its color. We had already tested the ESP-NOW communication protocol, so we also wanted to test it with this setup.
You can download the GRBL ESP32 Firmware from
We initially tested the motor rotation through the firmware, which worked successfully. Next, we proceeded to test the CoreXY system. Using firmware, we moved the end effector in both positive and negative X and Y directions. We then focused on implementing homing with a limit switch. After some effort, we successfully tested the homing functionality. Finally, we tested the overall concept by feeding a G-code and running the machine. The resulting output is shown below.
Since high speed was required, we conducted tests on the machine using various feed rates and acceleration values. Through these trials, we determined the optimal settings: a feed rate of 12, 000 mm/min, an acceleration of 6, 000 mm/s², and 160 steps/mm. The formula used to calculate the steps per millimeter is provided below.
Motor steps per revolution = 200 steps
Micro stepping factor = 32 (1/32 micro stepping)
Pulley teeth count = 20 teeth
Belt pitch (distance between teeth) = 2 mm (GT2 belt)
Midlaj, one of our instructors at Fab Lab Kochi had already prepared a UI for G code generation that wemodified for our purpose. With this UI, you can upload a vector image, rearrange all the visual elements, change the colours, ansd export as G code files that can be directly uploaded into GRBL ESP32.
Since light photography requires the camera lens to be open for a long period of time (long exposure photography), the results are best viewed in the night sky.
In our camera, we have to set the exposure compensation to minimum, aperture value to max (F32), and shutter speed as high as possible.
This is the complete setup of the Interactive Light painting machine. The Camera is placed in front of the Machine connected to a laptop that runs the User Interface,
Final Output
Comments