Group Assignment : Velichapaad (വെളിച്ചപ്പാട്)¶
Presentation¶
Presentation Slide¶
Presentation Video¶
Some art pieces we were able to create using Velichapaad
To see more photos and videos that we created, click here.
Objectives¶
- design a machine that includes mechanism+actuation+automation+application
- build the mechanical parts and operate it manually
- document the group project and your individual contribution
- actuate and automate your machine
- document the group project and your individual contribution
Brainstorming¶
Even though we planned for 1 day to brainstorm, we ended up spending 2 days brainstorming different concepts for a machine. We wanted it to be fun as this would make it easy to present in a 1 min video.
We thought of many ideas we thought of before finalising a design.
We finally decide on making An automatic light painting machine..
Velichappaad (വെളിച്ചപ്പാട്)¶
The idea:
“A machine to automate 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.
Source:
To help convey and understand the idea better amongst us, we did some light painting in our lab.
Project Planning¶
To read more about how we planned our project and scheduled various tasks, please read Revisankar’s documentation.
After we finalized the idea, initially we divided the tasks and duties of each member, with the understanding that as the days progressed, we will have to contribute to different aspects of the project outside of our original plan.
At first, we made a rough plan in writing, which was updated everyday after we made daily updates regarding the tasks completed and the the agenda for the day to discuss and distribute work accordingly. The project plan and schedule looked like this:
The Idea¶
We wanted to paint in free space. To do so the machine would resemble an open frame where the light trails will be plotted within it. This is will help to capture the background as well. A module with the lights in it will be embedded on to the mount . These lights can be controlled via a software in which we can give inputs for making whatever design we would like to paint. A camera will be setup to capture these trails and click the photograph. We would like to design the machine in such a way that it can easily replicate in any Fablab facility.
Inventory Management¶
Ancy & Abin were responsible for inventory management. To see more about how she kept track of the inventory being used, please read Ancy’s & Abin’s documentation.
This is the bill of materials for the machine we made:
Mechanical Design¶
To know more about the Mechanical Design of the Machine, please refer to Akash’s documentation.
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 toreal life examples to rely on while building the machine
- We can reduce moment of inertia using this design.
The machine would look something like this:
We started to make CAD models of the parts of the mechanism with the task lead by Akash. The basic framework of it was created. Some minor adjustments are made according to the constraints we faced.
LED End Effector¶
PCB Design¶
To know more about PCB design, please read Namita’s documentation. We had to make a PCB for the addressable LEDs and also an eclosure for so that it can be easily taken out for recharging/any maintanence. The PCB was primarily designed to understand how the light trails could be made in different configurations.The PCB designing is lead by Namita and the enclosure locking system is being designed by Thomas and Noel.
The lights were arranged in way that we could increase the brushstroke by turning on different rows of the lights. WS2812B Leds were used for this project. We used the ESP32C6 miccrocontroller to control the LEDs through Wifi. two lithium battteries are provided after calculating the battery consumption.
The 7 WS2812B Leds are supposed to control the stroke size of the leds. It would offer 3 brush sizes to control the width of the stroke of light painting.
The LED PCB would be wirelessly controlled by another ESP32 C6 using ESP NOW
Mount Design¶
Lock Mechanism for the Timing Belt¶
To lock the belts on the mount without using any zipties or fasteners, Noel designed a belt locking mechanism that uses the dovetail joint. Please check Noel’s documentation to find out more about the design and testing process for the same.
We used a dovetail joint mechanism that gets tighter the more tension is applied on the belt.
Push-Slide Lock Mechanism¶
The plan was to make a removable mount to make it easy to charge via USB C connection provided by the Xiao ESP32 C6. Please read Tom’s documentation & Noel’s documentation to read more about the initial design concept and various mechanisms that was used to create the LED mount
To make it easily removable, Tom designed a CAD model of a push-and-slide lock mechanism, which was then incorporated into the original design.
This is how the final 3d printed output looked like
Modification¶
However, while testing, due to excess rotation at the central axis that was affecting the output images, Akash had to modify the design to accommodate two central rods.
Fabrication & Assembly¶
[Ravi] & Noel took the lead in making sure that fabrication of 3D printed parts and assembly of metal frame took place in parallel without wasting any time.
For 3D printing, a clearance of +0.3 mm was added to achieve a loose fit for the screws. They would be tightened using nuts at the other end of the screws.
This is how the finally assembled machine looks like
Electronics¶
Ashish took lead of electronics and programming. Please read Ashish’s documentation to know more.
1. Controller System: NeoPi + ESP32 (GRBL-ESP32)¶
Overview:¶
The CNC control is handled by NeoPi, a compact wireless CNC controller developed by Saheen Palayi. NeoPi 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
Firmware:¶
- 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.
2. Wireless Communication Subsystem¶
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
- ESP32 (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 ESP32-C6
-
Packet Structure:
```cpp
typedef struct { int brushSize; uint32_t color; // Decimal color value, e.g., 16777215 for white } struct_message; ```
3. End-Effector Light System: ESP32-C6 + NeoPixel¶
Overview:¶
The end-effector is a compact unit mounted to the CNC gantry, powered by an 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)
- Receives
- WS2812B
- Voltage: 5V
- Data Pin: GPIO0
- LED Count: Configurable (usually 1–7 for patterns)
Communication:¶
- 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)
Command Protocol Summary¶
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.
Programming¶
Programming was led by Ashish Joy.
Firmware 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. Ashish had already tested the ESP-NOW communication protocol, so we also wanted to test it with this setup.
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)
Testing¶
Ancy, Noel, Ravi, & Tom were responsible for testing fits of screws, nuts, heated threaded inserts, and bearings.
Fastener Tests¶
UI & Path planning¶
Midlaj had already prepared a UI for G code generation that Ashish modified 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.
Setup¶
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
Video editing¶
Abin took lead in video editing, helped by Namita
Final Output¶
Michael Jackson Audio: Smooth Criminal - Michael Jackson (Internet Archive)
Music in the Sea Audio: Pixabay
Kili Audio: Pixabay
Kochi Nights
The Super Team @ Super Fab Lab Kochi
This is the original picture that Kalyani edited.
“Sorry, this link is broken”- Neil Gershenfeld
Conclusion¶
We were successfully able to build a light plotter that can convert vector images into light painting still images. During these two weeks we learnt a lot about what goes into building a machine, from the technical aspects of creating the machine to team building and organising. Thank you to Fab Academy for giving us this opportunity.
Future Outlook¶
While the machine was able to achieve the goal that we had in mind, some improvements can be made:
-
Placement of belts in the LED mount should be changed: The placement of the belts in the LED mount caused the mount to twist on it’s central axis when moved. This is much more visible when the LED mount takes a sharp change in direction, consequently affecting the quality of the final output image. Due to lack of time, we solved this by adding two rods by locking the LED mount to two rods via linear bearings, but if were to start from scratch, we would redesign the mount in such a way that the twisting is cancelled out.
-
Verifying that the electrical components work properly before supplying high voltage power: There was a problem with the buck converted in the CNC programmer, which caused the frying of multiple electrical components before before the problem was identified.
-
Redesign of CNC programmer housing: More holes have to be created on the top plate for easy access to the screw terminals.
-
Portability: Currently the system is very hard to move around once assembled, adding some wheels with stoppers on the bottom frame could make it much more easy to move around on flat surfaces.
-
Redesign of the base: The base has to be redesigned because the current design is not as stable as we hoped; the screws holding them together slowly get loose over time.
-
Brush size of the LED mount: Even though we had designed the PCB so that we can adjust brush sizes while painting, we were unable to get it working in time.
-
Better user interface: Currently we need to use both the UI for G code generation and the ESP32GRBL in parallel to make the machine work. Future work would be focused on building a UI that combines the function of both for ease of use.