Personal Project: LED Light Up Dress
At Mindtribe we make it a habit of doing retrospectives on our projects in order to constantly improve our processes. I decided to execute this practice through a personal project focusing on smart product development – a skillset I’ve obtained since recently graduating with my master’s degree. Keeping my love for fashion (and sewing) in mind, I was driven to construct a light-up dress designed specifically for waltzing at the annual Stanford Viennese Ball. The following is a post-mortem of my first attempt at this project.
I love to dance and have attended the Stanford Viennese Ball for the past 6 years. I wanted my dress to not only light-up but to respond to the music and add a new level of interaction with my partner. This first version (minimum viable product) lights up blue or pink based on the direction of the spin with a nice fade between the colors. This works well for waltzing because you can either waltz in the forward direction (clockwise spin) or in reverse (counter-clockwise). Also, if you spin for at least 2 minutes, the dress enters a “rainbow mode” and the LEDs rotate and fade through colors until no spinning is detected for 10 seconds.
Originally, I used this project as an opportunity to gain more experience with the Texas Instruments Tiva LaunchPad Arm processor that I used in my graduate degree program. I architected a basic version on the LaunchPad and I was able to get most of my functions working, but I was struggling with getting the LEDs to look right. I found myself running out of time and decided to switch over to an Arduino Uno. Although I lost some code complexity, the features that I gained from using the Arduino (pre-built libraries and example code) allowed me to move quickly to finish the dress. Switching also helped me implement more complicated LED light patterns (like rainbow mode and color fading) – which mattered more to the user (me).
I chose to use the Adafruit neopixel RGB LEDs for my project. I had originally chosen them for their small package size, integrated driver and nice RGB colors; however, when I switched from ARM to Arduino, I was really happy with the great library Adafruit provided to go along with their products. My dress has 86 LEDs in four rows going up the skirt, which took a lot of time to install. If I had thought more critically about the dress, I would have installed only enough for a bottom row.
To sense motion, I used the Adafruit 9-DOF IMU Breakout Board which was very easy to use with the Arduino. The reason I went with this board was because I was unsure of which sensor (magnetometer, accelerometer or gyroscope) would be best for measuring the forces of waltzing. Additionally, having a bunch of options means room for expansion if I ever want to add in sensing options for jumps or flips.
Putting it all Together:
The most important part of the dress itself was its ability to diffuse the light of the LEDs from a harsh spot to a warm glow. I also needed a fabric color that was neutral enough to go with all kinds of RGB LED colors. Finally, I needed enough space to fit my electronics holster underneath the skirt. I designed and made the entire dress from scratch. I would have saved time by buying something and altering it, but I love sewing, so I wanted to do everything myself.
Challenges and Learnings:
Getting the sensing and LEDs coordinated together was a big challenge. I struggled partly because I worked on the systems separately before integrating them all together. If I had to do it again, I would push integration forward and make a mini prototype with just a few LEDs to try out various dancing styles and situations. Because I didn’t do this, I was not able to fix all the bugs before the dance (fortunately I didn’t have any issues that couldn’t be solved to a quick power reset). Doing a mini prototype early would have also taught me what was important from the user experience and I would have learned lessons like, “you don’t need 86 LEDs” before I spent a bunch of time installing them all. Just goes to show that early integration is always the way to go!