by Connor Maggio and Nina Yoo
Description: Bright Balance is like a game where you change the brightness through a pressure sensor and see the motor change the angle of the ramp according to the brightness level.
Images:
-
Pressure-> Photosensor-> Motor -
Showing how the mechanism looks when taken apart -
Wiring display -
Front view of the mechanism. When pressure is applied to the sensor, light is emitted to the LED panel, then the photosensor reads the brightness and moves the motor according to the level of brightness.
Process Images:
-
Implementing the motor(one that is stronger than the one that was provided before) seeing if the light and the motor worked together. Problems with this mechanism involved having it wired wrong so our first motor broke and then it jittering a lot due to the data being noisy. -
testing the pressure sensor with the light and playing with how sensitive it was. Problems occurred when the light was changing too rapidly or not at all -
plugging into a bigger power source due to the motor requiring 5 volts and the light requiring 12 volts. Asked the professor to oversee the wiring so no problems occurred.
Schematic:

- <span class="typ">Code</span><span class="pun">:</span><br><br><span class="typ">Bright</span><span class="pln"> </span><span class="typ">Balance</span><br><span class="typ">Nina</span><span class="pln"> </span><span class="typ">Yoo</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> </span><span class="typ">Connor</span><span class="pln"> </span><span class="typ">Maggio</span><br><br><span class="typ">Summary</span><span class="pun">:</span><span class="pln"> </span><span class="typ">The</span><span class="pln"> code below </span><span class="kwd">implements</span><span class="pln"> an FSR that maps brightness to an LED</span><span class="pun">,</span><span class="pln"> which </span><span class="kwd">is</span><span class="pln"> sensed </span><span class="kwd">by</span><span class="pln"> a photoresistor that maps angle to a servo motor</span><span class="pun">.</span><span class="pln"> </span><span class="typ">There</span><span class="pln"> </span><span class="kwd">is</span><span class="pln"> also an exponential filter on the photoresistor values so the servo motor </span><span class="kwd">is</span><span class="pln"> normalized</span><span class="pun">.</span><br><br><span class="typ">Inputs</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> FSR</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> photoresistor </span><span class="typ">Outputs</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> LED</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="typ">Servo</span><br><span class="pln">
- </span><span class="typ">Collaboration</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Robert</span><span class="pln"> </span><span class="typ">Zacharias</span><span class="pln"> helped us </span><span class="kwd">with</span><span class="pln">
- </span><span class="kwd">using</span><span class="pln"> a power source </span><span class="kwd">for</span><span class="pln"> a few elements </span><span class="kwd">in</span><span class="pln"> </span><span class="kwd">our</span><span class="pln"> project</span><span class="pun">.</span><span class="pln">
- </span><span class="typ">He</span><span class="pln"> also helped us implement a transistor </span><span class="kwd">in</span><span class="pln"> order to
- create a </span><span class="lit">12V</span><span class="pln"> </span><span class="kwd">switch</span><span class="pun">.</span><span class="pln">
- </span><span class="typ">Challenge</span><span class="pun">:</span><span class="pln"> </span><span class="typ">This</span><span class="pln"> project had more elements than any
- previous project</span><span class="pun">.</span><span class="pln"> </span><span class="typ">Thus</span><span class="pun">,</span><span class="pln"> there were a lot </span><span class="kwd">of</span><span class="pln"> wires to keep
- track </span><span class="kwd">of</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> it was a challenge making sure everything
- was </span><span class="kwd">in</span><span class="pln"> tact</span><span class="pun">.</span><span class="pln"> </span><span class="typ">For</span><span class="pln"> instance</span><span class="pun">,</span><span class="pln"> at some point </span><span class="kwd">our</span><span class="pln"> servo was </span><span class="kwd">not</span><span class="pln">
- grounded correctly </span><span class="kwd">and</span><span class="pln"> it would </span><span class="kwd">not</span><span class="pln"> move</span><span class="pun">.</span><span class="pln">
- </span><span class="typ">Next</span><span class="pln"> time</span><span class="pun">:</span><span class="pln"> </span><span class="typ">It</span><span class="pln"> would be beneficial to </span><span class="kwd">use</span><span class="pln"> a smaller arduino
- that we could fully house the project</span><span class="pun">.</span><span class="pln"> </span><span class="typ">In</span><span class="pln"> addition</span><span class="pun">,</span><span class="pln"> I will
- check the entire wiring </span><span class="kwd">of</span><span class="pln"> </span><span class="kwd">my</span><span class="pln"> projects before linking the
- power to prevent burning </span><span class="kwd">out</span><span class="pln"> elements</span><span class="pun">.</span><span class="pln">
- </span><span class="pun">*/</span><span class="pln">
- </span><span class="com">#include</span><span class="str"><Servo.h></span><span class="pln">
- </span><span class="kwd">int</span><span class="pln"> fsrAnalogPin </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> </span><span class="com">// FSR is connected to analog 0</span><span class="pln">
- </span><span class="kwd">int</span><span class="pln"> </span><span class="typ">LEDpin</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">6</span><span class="pun">;</span><span class="pln"> </span><span class="com">// connect LED to pin 6 (PWM pin)</span><span class="pln">
- </span><span class="kwd">int</span><span class="pln"> fsrReading</span><span class="pun">;</span><span class="pln"> </span><span class="com">// the analog reading from the FSR resistor divider</span><span class="pln">
- </span><span class="kwd">int</span><span class="pln"> </span><span class="typ">LEDbrightness</span><span class="pun">;</span><span class="pln">
- </span><span class="kwd">int</span><span class="pln"> motorAngle</span><span class="pun">;</span><span class="pln">
- </span><span class="kwd">int</span><span class="pln"> servoPin </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3</span><span class="pun">;</span><span class="pln"> </span><span class="com">// pin the servo data line is plugged into</span><span class="pln">
- </span><span class="kwd">int</span><span class="pln"> photocell </span><span class="pun">=</span><span class="pln"> A4</span><span class="pun">;</span><span class="pln">
- </span><span class="kwd">float</span><span class="pln"> cur_reading</span><span class="pun">;</span><span class="pln">
- </span><span class="kwd">float</span><span class="pln"> filtered_val </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> </span><span class="com">// this variable, of type float (decimal), holds the filtered sensor value</span><span class="pln">
- </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">float</span><span class="pln"> PREV_WEIGHT </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.85</span><span class="pun">;</span><span class="pln"> </span><span class="com">// this variable, of type float (decimal), determines the previously filtered value's weight.</span><span class="pln">
- </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">float</span><span class="pln"> CUR_WEIGHT </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> PREV_WEIGHT</span><span class="pun">;</span><span class="pln">
- </span><span class="typ">Servo</span><span class="pln"> myLittleMotor</span><span class="pun">;</span><span class="pln">
- </span><span class="kwd">void</span><span class="pln"> setup</span><span class="pun">(</span><span class="kwd">void</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
- </span><span class="typ">Serial</span><span class="pun">.</span><span class="kwd">begin</span><span class="pun">(</span><span class="lit">9600</span><span class="pun">);</span><span class="pln">
- pinMode</span><span class="pun">(</span><span class="pln">fsrAnalogPin</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
- pinMode</span><span class="pun">(</span><span class="typ">LEDpin</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
- myLittleMotor</span><span class="pun">.</span><span class="pln">attach</span><span class="pun">(</span><span class="pln">servoPin</span><span class="pun">);</span><span class="pln"> </span><span class="com">// set up the servo on that data pin</span><span class="pln">
- pinMode</span><span class="pun">(</span><span class="pln">photocell</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
- filtered_val </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">photocell</span><span class="pun">);</span><span class="pln">
- </span><span class="com">// Print the intial value so we can see it</span><span class="pln">
- </span><span class="typ">Serial</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"initial filtered value: "</span><span class="pun">);</span><span class="pln">
- </span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="pln">filtered_val</span><span class="pun">);</span><span class="pln">
- </span><span class="pun">}</span><span class="pln">
- </span><span class="kwd">void</span><span class="pln"> loop</span><span class="pun">(</span><span class="kwd">void</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
- fsrReading </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">fsrAnalogPin</span><span class="pun">);</span><span class="pln">
- </span><span class="com">// convert the integer value returned by analogRead </span><span class="pln">
- </span><span class="com">// to a float by casting it</span><span class="pln">
- cur_reading </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">float</span><span class="pun">)</span><span class="pln">analogRead</span><span class="pun">(</span><span class="pln">photocell</span><span class="pun">);</span><span class="pln">
- </span><span class="com">// Calculate the next filtered value</span><span class="pln">
- filtered_val </span><span class="pun">=</span><span class="pln"> filtered_val </span><span class="pun">*</span><span class="pln"> PREV_WEIGHT </span><span class="pun">+</span><span class="pln"> cur_reading </span><span class="pun">*</span><span class="pln"> CUR_WEIGHT</span><span class="pun">;</span><span class="pln">
- </span><span class="com">// Print the filtered value so we can see it</span><span class="pln">
- </span><span class="typ">Serial</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"filtered value: "</span><span class="pun">);</span><span class="pln">
- </span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="pln">filtered_val</span><span class="pun">);</span><span class="pln">
- </span><span class="com">// change the range from the analog reading (0-1023) </span><span class="pln">
- </span><span class="com">// down to the range used by analogWrite (0-255)</span><span class="pln">
- </span><span class="typ">LEDbrightness</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">fsrReading</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1023</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pun">);</span><span class="pln">
- </span><span class="com">// LED gets brighter the harder you press</span><span class="pln">
- analogWrite</span><span class="pun">(</span><span class="typ">LEDpin</span><span class="pun">,</span><span class="pln"> </span><span class="typ">LEDbrightness</span><span class="pun">);</span><span class="pln">
- motorAngle </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">filtered_val</span><span class="pun">,</span><span class="pln"> </span><span class="lit">50</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1000</span><span class="pun">,</span><span class="pln"> </span><span class="lit">35</span><span class="pun">,</span><span class="pln"> </span><span class="lit">120</span><span class="pun">);</span><span class="pln">
- myLittleMotor</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="pln">motorAngle</span><span class="pun">);</span><span class="pln">
- </span><span class="pun">}</span>
Discussion: From the start we just started to brainstorm ideas that were interesting. We settled on Bright Balance and when we first began we started with a schematic giving the overall view of how it would work and what components it would require. However, though this step did help us begin the project, we did not really follow it as much when proceeding with our project. We turned to website tutorials to help us with our code as well as the wiring. It would have been easier for us if we had mapped or continuously updated our schematic as we went through the process.
The first component that we set up were the lights. At first, we had used the simple LED lights that were provided from earlier projects, but we needed something stronger. We then proceeded to go to a stronger LED, but that was also too weak. The professor then introduced us to an LED panel that had more than enough light, but required a 12 volt battery. We then proceeded to learn how to use bigger batteries and how we can connect it to the light source as well as the Arduino. It was helpful that the professor was with us during the wiring of the 12 volt battery to make sure everything went smoothly.
The next components we tackled was the pressure sensor and the photocell. It was easy to wire and code, but the data was noisy so we implemented “float” in order to filter out the data. This allowed for a much smoother response when printing the numbers/ looking at the graph.
After implementing the FSR and photocell, we converted that data into the motor. We used the filtered value that the photocell got from the light, which was read from the FSR, to then move the motor at different angles. We played with values of the motor to see how much angle it needed to move the marble around as well as keeping in mind the space around it. In the beginning, we had a small servomotor that was given to us in class, but then was introduced to a larger servomotor which required 5 volts. We broke the first motor, and after trying to rewire and code for a while, we realized we just needed another one.
Comments are closed.