Repeating to change our project idea and fail to find the one what we all agree with, our team decided to split into two. So Maria and I are still in the same team and Joohyun does his individual project. Maria and I also determined to improve my midterm project rather than doing an entirely new one from the scratch.
The summary of the improvements in each Pcomp and ICM side is like below:
- Replace the microphone amplifier with a wind sensor to prevent the malfunction with a loud noise.
- Increase the number of the LEDs
- Control each LED individually so that they can flicker like a candle flame. (To be looked more natural, a flickering pattern should be irregular and independent on that of other LEDs)
- Add a few servos on which fairy-like figures are.
- Add a photosensor and a LED torch to lit the lights again
- Enhance the fabrication
- Improve the graphical animation
- Adding music
- Decorate users’ pictures with several graphical items related to making a wish
- Allow users to download their pictures via Twitter and bit.ly (Server side coding is required: Node.js, WebSocket, Twitter/bit.ly Web API, etc.)
- Overall improvement in UI (Considering to use clmtrackr for detecting users’ faces and their facial expressions)
Here is the UI flow:
Following is the system diagram:
6 figures and servos might be too many and unnecessary so now I am considering to reduce the number of them.
The BOM(Bill of Materials) document is available here: BOM: Wish candles
In this project, I think the most challenging part is wiring a lot of LEDs and giving them individual PWM signals differently. For the multiple PWM outputs, I researched several things and here are some options that I found :
- PWM controllable multiplexer such as TLC5940
- Other types of LED drivers
- Breakout boards on which a multi-channel PWM LED driver is mounted such as TLC5947
- Programmable LEDs such as Neopixels
At the end of the day, I chose TLC5940NT because it was the cheapest solution between the above, I can control the maximum current flow with different registers and which means I can use the LEDs which I want to use for my project. (As I expect a starry night kind of feeling from my LED candles, I would like to use 3mm clear warm white LEDs) Furthermore, even though it is more difficult to deal with comparing to the breakout boards and Neopixels, still easier than other LED drivers as I can get its library.
I ordered four of this chip from the Amazon. They delivered quickly but it was rather disappointing as they looked as old as second-hand goods and even one of them had been already broken so that I had to return it back. Anyway, I have three chips now and be able to have up to 16*3 = 48 PWM channels theoretically.
After choosing the solution, I dug into how to manipulate this chip for a couple of days. The materials that I found useful were like below:
The first attempt to connect 16 LEDs with a chip was easier than I expected, but I really struggled to daisy-chain two chips. Although my wiring and the code had no problem, the half of 32 LEDs which were connected to the second chip didn’t work as I intended. They just turned up in their full brightness and stayed in those states even though I programmed them to repeat fading. It was really hard to fix the problem and I almost gave up. Considering other options trying to hopelessly fix the circuit, I finally made it. I just moved the second chip and al its wires one row away from the first chip then it worked! There might have been an issue with the row of the breadboard or it might have been problematic putting two chips too close together. Anyway, I am very happy to solve this problem!