A kinetic sculpture art installation on an ESP32 TTGO T-Display for Professor Mark Santolucito’s Creative Embedded Systems (COMS 3930) Course in Spring 2022 (in collaboration with Anaïs Lawson)
For this project, we were tasked to collaborate on a kinetic sculpture using three types of motors — Servo motors, step motors, and DC brush motors. We were inspired by the design of floats for the Rose Parade and decided to design a miniature float with movable flowers. Our project rotates two sets of leaves and a 3D printed rose all of which sit upon a rolling wooden box. We were especially inspired to repurpose unwanted or broken scrap materials within the Columbia Makerspace.
How It Works
The 3D printed flower is connected to a step motor, the leaves are connected to small Servo motors, and the front two wheels are connected to DC brush motors. These motors are controlled by an ESP32, and when a button is pressed on an associated webpage, the device begins rolling and spins the flower and leaves.
Designing the Enclosure
We focused on building and decorating our device with supplies that could be found in the Columbia Makerspace — especially by repurposing material scraps and finding unconventional solutions to designing the enclosure. For the box, we used scraps of 1/8 in wooden sheets and our axel was initially made with the stick of a Q-Tip. The wheels are all attached to protoboards and the back axel rotates within a pair of jewelry eye hooks that fit into the protoboard. We also repurposed scrap felt and painted clear jewelry pieces to disguise the wiring and motors. In the end, we were able to design the enclosure at no cost and repurpose other students’ scrap materials to design an eco-friendly enclosure.
Designing the Code
The box itself is relatively simple, but I focused my efforts on designing an efficient object-oriented program to independently control the various motors. In my previous project, I created classes for multiple sensors attached to an ESP32, but I wanted to push myself to create independent files for each class that could be imported and would minimize the main file. Building on the last project with sensor classes, the addition of motors and the documentation made it extremely easy to add any of the peripherals to be handled by the main code without the need to maintain or normalize any values.
While designing the class-based controls, I especially focused on implementing clean-code practices and writing formal in-code documentation pages. I used Doxygen with JavaDoc syntax to auto-generate HTML and man pages as documented in my code. I was introduced to formal in-code documentation recently but had never used it in C++. I found that adding the documentation and being able to reference my own code documentation and treat the ESP32 code as simply implementing a miniature peripherals API.
Special Thanks to Professor Mark Santolucito and the staff at the Barnard Design Center for all of their help!!!