This device is designed to be placed on a bike, and signal to other vehicles with its lighting.
Video of it Working:
This video is taken in the dark to show its real-world effect as such a device is most crucial during nighttime.
Process & Decisions:
The first major decision I made is to utilize multiple small pieces of LED strip and orientate them in a specific way to show a signal for left turn, right turn, and breaking. In my initial design, I have a circle as part of my stop signal. However, bending LED strips isn’t really a choice, and the only solution to that is to place the LEDs perpendicular to the surface of the device, which then makes them very hard to mount as those LED strips already have tapes applied on the back. The final decision on this is to remove the circular shape LED strip and have a rectangular-shaped stop sign instead, which still looks very good as shown in the video above.
The second decision is about powering the whole system. LED strips take quite a bit of power, so I decided to use a battery pack with 4 rechargeable AA batteries to power both the Arduino, the LED strips, and all four switches. To organize all the power lines and prevent any possible shorts, I used a small circuit board to sort out all the wires. In addition, I added a small power switch that is embedded in the top wall of the case to control the power of the device.
Another decision I made are the inputs. The left turn and right turn inputs are non-toggled regular buttons, which I believe to be most convenient in actual usage as they are intended to be placed rider’s two thumbs on the handlebar. Needless to say, the night light switch is a toggled switch and the break switch is a hinge lever switch that will be placed between the break bar and the handlebar, so whenever the rider breaks, the lever switch gets pressed and actuates as well.
Discussion
One major criticism of this device is the night light color. Conventionally, white lights are located at the front of a vehicle, so having a night light being white and placed at the rear of the bike may very likely confuse the person behind especially in the dark. However, since those LED strips are programmable in terms of their colors, I could easily change the color for a night light, which could be a potential solution. Another criticism is the case of the device. Being weatherproof is a crucial part of any device that is intended to be used outside, and this one is no exception. Yet the wooden case isn’t the best choice in terms of weatherproofing.
Such an issue leads to my view of this project. I consider this device still at a development stage, as it is not ready to be brought outside and use in the real world. My original intention is to mount this device to the back of my bike, but that goal is still quite far as the mounting brackets are still to be made. Overall, I think I have achieved everything I want for this device to work in a lab, but further development is needed for it to be actually useful.
Though I may not be all that satisfied with the device itself, what I was satisfied with are the things that I learned and experienced throughout this project. Things that I have never heard of like potting and experiences using the laser cutter for the wooden casing. I also learned from other people who utilized acrylic for their projects as that would be a better material for me to use instead of plywood as it is at least waterproof if sealed properly and allow for a clear view of the inside for presentations. After all, the biggest lesson that this project has given me is to think ahead to real-world applications and challenges when designing.
It is on my schedule to make further improvements to this project, namely using the smaller Arduino micro or nano and going through the process of potting for a more secure and waterproof case. As for the buttons, I will look into some waterproofed switches and buttons and ways to mount them onto a bike.
Technical Information
/* Light Signal For Bike The following code is intended to lights up a set of LED strips according to the 4 inputs. When Left Turn is on, Upper Left, Lower Left, and Middle LED Strip turn "on", which is red When Right Turn is on, Upper Right, Lower Right, and Middle LED Strip turn "on", which is red When Break is on, All 5 LED strips turn "on", which is red When Night Light is on, All 5 LED strips turn "night", which is white Night Light has the lowest priority while other three action has equal priority. Pin Mapping: Arduino Pin / Role / Description 2 Output Upper Left LED Strip 3 Output Middle LED Strip 4 Output Upper Right LED Strip 5 Output Lower Right LED Strip 6 Output Lower Left LED Strip 7 Input Left Turn Signal 8 Input Right Turn Signal 9 Input Break Signal 10 Input Night Light Signal Ethan Hu, 2022 */ #include <PololuLedStrip.h> // setup PololuLedStrip and set each strip to a pin number PololuLedStrip<2> ledStripLU; PololuLedStrip<6> ledStripLD; PololuLedStrip<4> ledStripRU; PololuLedStrip<5> ledStripRD; PololuLedStrip<3> ledStripM; // defind the number of LED on each strip, the maximum LED count used in this project is 6 #define LED_COUNT 6 // define the input pin number for the four switches #define Left_Input 7 #define Right_Input 8 #define Nightlight_Input 10 #define Break_Input 9 // create lists of colors for the LED strips to show under different circumstances rgb_color on[LED_COUNT]; rgb_color off[LED_COUNT]; rgb_color night[LED_COUNT]; void setup() { pinMode(Left_Input, INPUT); pinMode(Right_Input, INPUT); pinMode(Nightlight_Input, INPUT); pinMode(Break_Input, INPUT); // set up the list of color for (int i = 0; i < LED_COUNT; i++) { // on is red on[i] = rgb_color(255, 0, 0); } for (int i = 0; i < LED_COUNT; i++) { // off is clear/nothing off[i] = rgb_color(0, 0, 0); } for (int i = 0; i < LED_COUNT; i++) { // night is white night[i] = rgb_color(255, 255, 255); } } void loop() { // if left turn if (digitalRead(Left_Input) == HIGH) { ledStripLU.write(on, LED_COUNT); ledStripLD.write(on, LED_COUNT); ledStripRU.write(off, LED_COUNT); ledStripRD.write(off, LED_COUNT); ledStripM.write(on, LED_COUNT); } // if right turn else if (digitalRead(Right_Input) == HIGH) { ledStripRU.write(on, LED_COUNT); ledStripRD.write(on, LED_COUNT); ledStripLU.write(off, LED_COUNT); ledStripLD.write(off, LED_COUNT); ledStripM.write(on, LED_COUNT); } // if break else if (digitalRead(Break_Input) == LOW) { ledStripRU.write(on, LED_COUNT); ledStripRD.write(on, LED_COUNT); ledStripLU.write(on, LED_COUNT); ledStripLD.write(on, LED_COUNT); ledStripM.write(on, LED_COUNT); } // the second else is used to check whether if night light is toggled else { // if night light is toggled on if (digitalRead(Nightlight_Input) == HIGH) { ledStripRU.write(night, LED_COUNT); ledStripRD.write(night, LED_COUNT); ledStripLU.write(night, LED_COUNT); ledStripLD.write(night, LED_COUNT); ledStripM.write(night, LED_COUNT); } // all the LED will turn off if no signal is sent to it and night light is not toggled on else { ledStripRU.write(off, LED_COUNT); ledStripRD.write(off, LED_COUNT); ledStripLU.write(off, LED_COUNT); ledStripLD.write(off, LED_COUNT); ledStripM.write(off, LED_COUNT); } } }