Title

Double Transducer – Vibration Strength to Distance to Color

 Video of the machine doing it’s task

Description

The machine created first senses vibration strength using an accelerometer and depending on the vibration strength, will rotate a servo motor to a specific angle between 0 and 90 degrees. The rotation of the servo motor will push or pull a toy car to a specific linear location. This distance will be detected by an IR sensor and depending on the sensor’s reading, it will change the color of a diffused RGB LED.

Progress Images

accelerometer casee

Creating a case for the accelerometer

servo motor car

Creating a servo motor that pushes and pulls a toy car

RGB LED

Configuring of the RGB LED

Process Discussion

1. Detecting vibration strength

We decided to use an accelerometer to detect vibration strength. In order to ensure that it is stable, we built a case for it and ensured that it is attached to our board.

The readings for the accelerometer at rest was around 300 for all the three axis. We decided that we wanted to take into account all the different axis to detect the strength of the vibration to provide with more flexibility and accuracy for the orientation of the source of vibration. One thing we realized was that depending on slight movements of the case on the board or the position of the entire board, the readings for the accelerometer would change. This was not ideal because it meant that the baseline was constantly changing between runs. We decided to add a momentary pushbutton to set the baseline of the values.

We calculated the strength of vibration by taking the average of the absolute difference between the actual x, y and z axis accelerometer reading with the baseline x, y, z axis accelerometer reading.

In order to test out the accuracy of our vibration strength sensor, we used a pancake sensor, which the team before us are using. By using the 5V and 3.3V pins, we were able to create different vibration strengths. With this, we could also figure out what would be the upper bound of the vibration strength.

It was challenging working with the pancake motor because the legs were really short. In order to solve this, we would strip the legs and solder them to more sturdy wires. However, it was very fragile and did not last long. In the end, we settled with taping the pancake motor to the sensor.

2. Improving accuracy of intermediate step

One of the problems about using a servo motor to move a toy car is the accuracy of it.  In order to improve the accuracy, we decided to create railings for the car so that it would make it a linear movement.

 

Another thing we did to improve the readings from the IR sensor is attaching a black aluminium foil to the front of the toy car.

attaching foil to toy car

Increasing accuracy of IR sensor reading

3. selecting the colored lights

We took some time to figure out how to get the RGB LED working because there were different types of LED – some LEDs would require connection to ground whereas some others would require us to connect to power. We also found out that the readings for the LED we were using was inverse of the software code we had to write.

After we got past figuring out how to make the LED light up, we had to decide how to make the colors change from red to purple. We wanted to make it very gradual, where it would have multiple intermediate colors between two main colors (like red and yellow would go through the entire shade of red to red-orange, to orange to orange-yellow). This was taking a lot of time and we felt that it would be more efficient to hard code the specific colors.

One last problem we faced was that it was hard for the next team to detect the colors from the RGB LED we were using. We then explored different alternatives available and realized that diffused RGB LED make the colors eas

rgb led comparisonn

rgb led comparison

Comparing between RGB LED and Diffused RGB LED

testing diffused RGB LED

Testing diffused RGB LED

Schematic

Code submission

  1. <span class="com">/*
  2. * Project 1: Double Transducer
  3. * Estevan Chairez & Zoe Teoh
  4. *
  5. * Description:
  6. *
  7. * Double Transducer - Vibration Strength to Distance to Color
  8. * -------------------------------------------------------------
  9. * The machine created first senses vibration strength using an accelerometer and
  10. * depending on the vibration strength, will rotate a servo motor to a specific angle
  11. * between 0 and 90 degrees. The rotation of the servo motor will push or pull a toy
  12. * car to a specific linear location. This distance will be detected by an IR sensor
  13. * and depending on the sensor's reading, it will change the color of a diffused RGB LED.
  14. *
  15. * PHASE 1: Vibration strength
  16. * This code will wait for momentary button to be pressed to start
  17. * storing all the values of the accelerometer and convert it into a single value.
  18. *
  19. * PHASE 2: Distance
  20. * This will then be converted to a value between that a servo can accept. This value
  21. * will then cause the servo to push a car closer/further to an IR Sensor.
  22. *
  23. * PHASE 3: Color
  24. * The IR Sensor will detect the car's distance and convert
  25. * that to a separate RGB value with a function to power an RGB LED with a
  26. * certain color.
  27. *
  28. *
  29. * Pin mapping:
  30. *
  31. * pin | mode | description
  32. * ------|--------|------------
  33. * A0 input Y-Axis of accelerometer
  34. * A1 input X-Axis of accelerometer
  35. * A2 input Z-Axis of accelerometer
  36. * A3 input IR Sensor
  37. * SCL output LCD Screen
  38. * SDL output LCD Screen
  39. * 2 input momentary push button
  40. * 6 output servo motor
  41. * 9 output blue LED
  42. * 10 output green LED
  43. * 11 output red LED
  44. */</span><span class="pln">
  45. </span><span class="com">#include</span><span class="pln"> </span><span class="str"><LiquidCrystal_I2C.h></span><span class="pln">
  46. </span><span class="com">#include</span><span class="pln"> </span><span class="str"><Wire.h></span><span class="pln">
  47. </span><span class="com">#include</span><span class="pln"> </span><span class="str"><Servo.h></span><span class="pln">
  48. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> RED </span><span class="pun">=</span><span class="pln"> </span><span class="lit">11</span><span class="pun">;</span><span class="pln">
  49. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> GREEN </span><span class="pun">=</span><span class="pln"> </span><span class="lit">10</span><span class="pun">;</span><span class="pln">
  50. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> BLUE </span><span class="pun">=</span><span class="pln"> </span><span class="lit">9</span><span class="pun">;</span><span class="pln">
  51. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> Z </span><span class="pun">=</span><span class="pln"> A2</span><span class="pun">;</span><span class="pln">
  52. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> Y </span><span class="pun">=</span><span class="pln"> A0</span><span class="pun">;</span><span class="pln">
  53. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> X </span><span class="pun">=</span><span class="pln"> A1</span><span class="pun">;</span><span class="pln">
  54. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> SERVO </span><span class="pun">=</span><span class="pln"> </span><span class="lit">6</span><span class="pun">;</span><span class="pln">
  55. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> IR </span><span class="pun">=</span><span class="pln"> A3</span><span class="pun">;</span><span class="pln">
  56. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> BUTTON </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
  57. </span><span class="kwd">int</span><span class="pln"> baseX</span><span class="pun">;</span><span class="pln">
  58. </span><span class="kwd">int</span><span class="pln"> baseY</span><span class="pun">;</span><span class="pln">
  59. </span><span class="kwd">int</span><span class="pln"> baseZ</span><span class="pun">;</span><span class="pln">
  60. </span><span class="kwd">int</span><span class="pln"> angle</span><span class="pun">;</span><span class="pln">
  61. </span><span class="kwd">int</span><span class="pln"> middle_1</span><span class="pun">;</span><span class="pln">
  62. </span><span class="kwd">int</span><span class="pln"> input</span><span class="pun">;</span><span class="pln">
  63. </span><span class="kwd">int</span><span class="pln"> accel_difference</span><span class="pun">;</span><span class="pln">
  64. </span><span class="kwd">bool</span><span class="pln"> start </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
  65. </span><span class="com">// RGB values to send to LED</span><span class="pln">
  66. </span><span class="kwd">int</span><span class="pln"> colors</span><span class="pun">[][</span><span class="lit">3</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{{</span><span class="lit">255</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">0</span><span class="pun">},</span><span class="pln"> </span><span class="pun">{</span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">},</span><span class="pln"> </span><span class="pun">{</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="lit">0</span><span class="pun">},</span><span class="pln"> </span><span class="pun">{</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="lit">255</span><span class="pun">},</span><span class="pln"> </span><span class="pun">{</span><span class="lit">0</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="pun">{</span><span class="lit">255</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">
  67. </span><span class="com">// command to send RGB [R, G, B] color to RBG LED</span><span class="pln">
  68. </span><span class="kwd">void</span><span class="pln"> rgb</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> red_light_value</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> green_light_value</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> blue_light_value</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  69. analogWrite</span><span class="pun">(</span><span class="pln">RED</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> red_light_value</span><span class="pun">);</span><span class="pln">
  70. analogWrite</span><span class="pun">(</span><span class="pln">GREEN</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> green_light_value</span><span class="pun">);</span><span class="pln">
  71. analogWrite</span><span class="pun">(</span><span class="pln">BLUE</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> blue_light_value</span><span class="pun">);</span><span class="pln">
  72. </span><span class="pun">}</span><span class="pln">
  73. </span><span class="com">// command to convert an int to a color in R, G, B spectrum "int -> [R, G, B]"</span><span class="pln">
  74. </span><span class="kwd">void</span><span class="pln"> intToRGB</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> val</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  75. </span><span class="kwd">int</span><span class="pln"> r </span><span class="pun">=</span><span class="pln"> colors</span><span class="pun">[</span><span class="pln">val</span><span class="pun">][</span><span class="lit">0</span><span class="pun">];</span><span class="pln">
  76. </span><span class="kwd">int</span><span class="pln"> g </span><span class="pun">=</span><span class="pln"> colors</span><span class="pun">[</span><span class="pln">val</span><span class="pun">][</span><span class="lit">1</span><span class="pun">];</span><span class="pln">
  77. </span><span class="kwd">int</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> colors</span><span class="pun">[</span><span class="pln">val</span><span class="pun">][</span><span class="lit">2</span><span class="pun">];</span><span class="pln">
  78. rgb</span><span class="pun">(</span><span class="pln">r</span><span class="pun">,</span><span class="pln"> g</span><span class="pun">,</span><span class="pln"> b</span><span class="pun">);</span><span class="pln">
  79. </span><span class="pun">}</span><span class="pln">
  80. </span><span class="com">// set up LCD and display certain values in the form</span><span class="pln">
  81. </span><span class="com">// i: input m: middle_1</span><span class="pln">
  82. </span><span class="com">// middle_2 o: output</span><span class="pln">
  83. </span><span class="com">//</span><span class="pln">
  84. </span><span class="kwd">void</span><span class="pln"> lcd</span><span class="pun">(</span><span class="typ">LiquidCrystal_I2C</span><span class="pln"> screen</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> input</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> middle_1</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> middle_2</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> output</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  85. input </span><span class="pun">=</span><span class="pln"> constrain</span><span class="pun">(</span><span class="pln">input</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">99</span><span class="pun">);</span><span class="pln">
  86. middle_1 </span><span class="pun">=</span><span class="pln"> constrain</span><span class="pun">(</span><span class="pln">middle_1</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">99</span><span class="pun">);</span><span class="pln">
  87. middle_2 </span><span class="pun">=</span><span class="pln"> constrain</span><span class="pun">(</span><span class="pln">middle_2</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">99</span><span class="pun">);</span><span class="pln">
  88. output </span><span class="pun">=</span><span class="pln"> constrain</span><span class="pun">(</span><span class="pln">output</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">99</span><span class="pun">);</span><span class="pln">
  89. screen</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
  90. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  91. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"i:"</span><span class="pun">);</span><span class="pln">
  92. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  93. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">input</span><span class="pun">);</span><span class="pln">
  94. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">6</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  95. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"m:"</span><span class="pun">);</span><span class="pln">
  96. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  97. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">middle_1</span><span class="pun">);</span><span class="pln">
  98. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  99. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">middle_2</span><span class="pun">);</span><span class="pln">
  100. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">12</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  101. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"o:"</span><span class="pun">);</span><span class="pln">
  102. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">14</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  103. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">output</span><span class="pun">);</span><span class="pln">
  104. delay</span><span class="pun">(</span><span class="lit">500</span><span class="pun">);</span><span class="pln">
  105. </span><span class="pun">}</span><span class="pln">
  106. </span><span class="typ">LiquidCrystal_I2C</span><span class="pln"> screen</span><span class="pun">(</span><span class="lit">0x27</span><span class="pun">,</span><span class="pln"> </span><span class="lit">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln">
  107. </span><span class="typ">Servo</span><span class="pln"> servo</span><span class="pun">;</span><span class="pln">
  108. </span><span class="kwd">void</span><span class="pln"> setup</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  109. </span><span class="com">// ACCELEROMETER Setup</span><span class="pln">
  110. pinMode</span><span class="pun">(</span><span class="pln">Z</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
  111. pinMode</span><span class="pun">(</span><span class="pln">Y</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
  112. pinMode</span><span class="pun">(</span><span class="pln">X</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
  113. </span><span class="com">// LCD Screen Setup</span><span class="pln">
  114. screen</span><span class="pun">.</span><span class="pln">init</span><span class="pun">();</span><span class="pln">
  115. screen</span><span class="pun">.</span><span class="pln">backlight</span><span class="pun">();</span><span class="pln">
  116. screen</span><span class="pun">.</span><span class="pln">home</span><span class="pun">();</span><span class="pln">
  117. </span><span class="com">// SERVO Setup</span><span class="pln">
  118. servo</span><span class="pun">.</span><span class="pln">attach</span><span class="pun">(</span><span class="pln">SERVO</span><span class="pun">);</span><span class="pln">
  119. </span><span class="com">// OTHER PINS </span><span class="pln">
  120. pinMode</span><span class="pun">(</span><span class="pln">BUTTON</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
  121. pinMode</span><span class="pun">(</span><span class="pln">RED</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  122. pinMode</span><span class="pun">(</span><span class="pln">BLUE</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  123. pinMode</span><span class="pun">(</span><span class="pln">GREEN</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  124. pinMode</span><span class="pun">(</span><span class="pln">IR</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
  125. </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">
  126. </span><span class="pun">}</span><span class="pln">
  127. </span><span class="kwd">void</span><span class="pln"> loop</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  128. </span><span class="com">// ACCELEROMETER CODE</span><span class="pln">
  129. </span><span class="kwd">int</span><span class="pln"> zVal </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">Z</span><span class="pun">);</span><span class="pln">
  130. </span><span class="kwd">int</span><span class="pln"> yVal </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">Y</span><span class="pun">);</span><span class="pln">
  131. </span><span class="kwd">int</span><span class="pln"> xVal </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">X</span><span class="pun">);</span><span class="pln">
  132. </span><span class="kwd">int</span><span class="pln"> buttonState </span><span class="pun">=</span><span class="pln"> digitalRead</span><span class="pun">(</span><span class="pln">BUTTON</span><span class="pun">);</span><span class="pln">
  133. </span><span class="com">// will not do anything until momentary push button is pressed</span><span class="pln">
  134. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">buttonState </span><span class="pun">&&</span><span class="pln"> </span><span class="pun">!</span><span class="pln">start</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  135. baseX </span><span class="pun">=</span><span class="pln"> xVal</span><span class="pun">;</span><span class="pln">
  136. baseY </span><span class="pun">=</span><span class="pln"> yVal</span><span class="pun">;</span><span class="pln">
  137. baseZ </span><span class="pun">=</span><span class="pln"> zVal</span><span class="pun">;</span><span class="pln">
  138. start </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  139. </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  140. accel_difference </span><span class="pun">=</span><span class="pln"> abs</span><span class="pun">(</span><span class="pln">baseX </span><span class="pun">-</span><span class="pln"> xVal</span><span class="pun">)</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> abs</span><span class="pun">(</span><span class="pln">baseY </span><span class="pun">-</span><span class="pln"> yVal</span><span class="pun">)</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> abs</span><span class="pun">(</span><span class="pln">baseZ </span><span class="pun">-</span><span class="pln"> zVal</span><span class="pun">);</span><span class="pln">
  141. input </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">accel_difference</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">250</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">99</span><span class="pun">);</span><span class="pln">
  142. </span><span class="com">// CAR - SERVO CODE</span><span class="pln">
  143. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">baseX </span><span class="pun">!=</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> baseY </span><span class="pun">!=</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> baseZ </span><span class="pun">!=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">){</span><span class="pln">
  144. angle </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">accel_difference</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">250</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">90</span><span class="pun">);</span><span class="pln">
  145. servo</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="pln">angle</span><span class="pun">);</span><span class="pln">
  146. middle_1 </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">angle</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">90</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">99</span><span class="pun">);</span><span class="pln">
  147. </span><span class="pun">}</span><span class="pln">
  148. </span><span class="com">// DISTANCE SENSOR CODE</span><span class="pln">
  149. </span><span class="kwd">int</span><span class="pln"> dis </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">IR</span><span class="pun">);</span><span class="pln">
  150. </span><span class="kwd">int</span><span class="pln"> middle_2 </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">dis</span><span class="pun">,</span><span class="pln"> </span><span class="lit">465</span><span class="pln"> </span><span class="pun">,</span><span class="pln"> </span><span class="lit">300</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">99</span><span class="pun">);</span><span class="pln">
  151. </span><span class="com">// LED CODE</span><span class="pln">
  152. </span><span class="kwd">int</span><span class="pln"> convertedVal </span><span class="pun">=</span><span class="pln"> constrain</span><span class="pun">(</span><span class="pln">map</span><span class="pun">(</span><span class="pln">dis</span><span class="pun">,</span><span class="pln"> </span><span class="lit">465</span><span class="pun">,</span><span class="pln"> </span><span class="lit">300</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">5</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">5</span><span class="pun">);</span><span class="pln">
  153. intToRGB</span><span class="pun">(</span><span class="pln">convertedVal</span><span class="pun">);</span><span class="pln">
  154. </span><span class="kwd">int</span><span class="pln"> output </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">convertedVal</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">5</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">99</span><span class="pun">);</span><span class="pln">
  155. </span><span class="com">// LCD DISPLAY</span><span class="pln">
  156. lcd</span><span class="pun">(</span><span class="pln">screen</span><span class="pun">,</span><span class="pln"> input</span><span class="pun">,</span><span class="pln"> middle_1</span><span class="pun">,</span><span class="pln"> middle_2</span><span class="pun">,</span><span class="pln"> output</span><span class="pun">);</span><span class="pln">
  157. </span><span class="pun">}</span><span class="pln">
  158. </span><span class="pun">}</span>
<span class="com">/*
 * Project 1: Double Transducer
 * Estevan Chairez & Zoe Teoh
 * 
 * Description:  
 * 
 * Double Transducer - Vibration Strength to Distance to Color
 * -------------------------------------------------------------
 * The machine created first senses vibration strength using an accelerometer and 
 * depending on the vibration strength, will rotate a servo motor to a specific angle 
 * between 0 and 90 degrees. The rotation of the servo motor will push or pull a toy 
 * car to a specific linear location. This distance will be detected by an IR sensor 
 * and depending on the sensor's reading, it will change the color of a diffused RGB LED.
 * 
 * PHASE 1: Vibration strength
 * This code will wait for momentary button to be pressed to start
 * storing all the values of the accelerometer and convert it into a single value.
 * 
 * PHASE 2: Distance
 * This will then be converted to a value between that a servo can accept. This value
 * will then cause the servo to push a car closer/further to an IR Sensor.
 * 
 * PHASE 3: Color
 * The IR Sensor will detect the car's distance and convert
 * that to a separate RGB value with a function to power an RGB LED with a 
 * certain color.
 * 
 * 
 * Pin mapping:
 * 
 * pin   | mode   | description
 * ------|--------|------------
 * A0      input    Y-Axis of accelerometer   
 * A1      input    X-Axis of accelerometer 
 * A2      input    Z-Axis of accelerometer
 * A3      input    IR Sensor
 * SCL     output   LCD Screen
 * SDL     output   LCD Screen
 * 2       input    momentary push button
 * 6       output   servo motor
 * 9       output   blue LED
 * 10      output   green LED
 * 11      output   red LED
 */</span><span class="pln">
 
</span><span class="com">#include</span><span class="pln"> </span><span class="str"><LiquidCrystal_I2C.h></span><span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str"><Wire.h></span><span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str"><Servo.h></span><span class="pln">


</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> RED </span><span class="pun">=</span><span class="pln"> </span><span class="lit">11</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> GREEN </span><span class="pun">=</span><span class="pln"> </span><span class="lit">10</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> BLUE </span><span class="pun">=</span><span class="pln"> </span><span class="lit">9</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> Z </span><span class="pun">=</span><span class="pln"> A2</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> Y </span><span class="pun">=</span><span class="pln"> A0</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> X </span><span class="pun">=</span><span class="pln"> A1</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> SERVO </span><span class="pun">=</span><span class="pln"> </span><span class="lit">6</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> IR </span><span class="pun">=</span><span class="pln"> A3</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> BUTTON </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">

</span><span class="kwd">int</span><span class="pln"> baseX</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> baseY</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> baseZ</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> angle</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> middle_1</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> input</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> accel_difference</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">bool</span><span class="pln"> start </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">


</span><span class="com">// RGB values to send to LED</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> colors</span><span class="pun">[][</span><span class="lit">3</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{{</span><span class="lit">255</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">0</span><span class="pun">},</span><span class="pln"> </span><span class="pun">{</span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">},</span><span class="pln"> </span><span class="pun">{</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="lit">0</span><span class="pun">},</span><span class="pln"> </span><span class="pun">{</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="lit">255</span><span class="pun">},</span><span class="pln"> </span><span class="pun">{</span><span class="lit">0</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="pun">{</span><span class="lit">255</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">// command to send RGB [R, G, B] color to RBG LED</span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> rgb</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> red_light_value</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> green_light_value</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> blue_light_value</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  analogWrite</span><span class="pun">(</span><span class="pln">RED</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> red_light_value</span><span class="pun">);</span><span class="pln">
  analogWrite</span><span class="pun">(</span><span class="pln">GREEN</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> green_light_value</span><span class="pun">);</span><span class="pln">
  analogWrite</span><span class="pun">(</span><span class="pln">BLUE</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> blue_light_value</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">


</span><span class="com">// command to convert an int to a color in R, G, B spectrum "int -> [R, G, B]"</span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> intToRGB</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> val</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">int</span><span class="pln"> r </span><span class="pun">=</span><span class="pln"> colors</span><span class="pun">[</span><span class="pln">val</span><span class="pun">][</span><span class="lit">0</span><span class="pun">];</span><span class="pln">
  </span><span class="kwd">int</span><span class="pln"> g </span><span class="pun">=</span><span class="pln"> colors</span><span class="pun">[</span><span class="pln">val</span><span class="pun">][</span><span class="lit">1</span><span class="pun">];</span><span class="pln">
  </span><span class="kwd">int</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> colors</span><span class="pun">[</span><span class="pln">val</span><span class="pun">][</span><span class="lit">2</span><span class="pun">];</span><span class="pln">
  rgb</span><span class="pun">(</span><span class="pln">r</span><span class="pun">,</span><span class="pln"> g</span><span class="pun">,</span><span class="pln"> b</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">


</span><span class="com">// set up LCD and display certain values in the form</span><span class="pln">
</span><span class="com">// i: input  m: middle_1</span><span class="pln">
</span><span class="com">//              middle_2  o: output</span><span class="pln">
</span><span class="com">//</span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> lcd</span><span class="pun">(</span><span class="typ">LiquidCrystal_I2C</span><span class="pln"> screen</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> input</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> middle_1</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> middle_2</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> output</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  input </span><span class="pun">=</span><span class="pln"> constrain</span><span class="pun">(</span><span class="pln">input</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">99</span><span class="pun">);</span><span class="pln">
  middle_1 </span><span class="pun">=</span><span class="pln"> constrain</span><span class="pun">(</span><span class="pln">middle_1</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">99</span><span class="pun">);</span><span class="pln">
  middle_2 </span><span class="pun">=</span><span class="pln"> constrain</span><span class="pun">(</span><span class="pln">middle_2</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">99</span><span class="pun">);</span><span class="pln">
  output </span><span class="pun">=</span><span class="pln"> constrain</span><span class="pun">(</span><span class="pln">output</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">99</span><span class="pun">);</span><span class="pln">
  
  screen</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
  screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"i:"</span><span class="pun">);</span><span class="pln">
  screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">input</span><span class="pun">);</span><span class="pln">
  screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">6</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"m:"</span><span class="pun">);</span><span class="pln">
  screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">middle_1</span><span class="pun">);</span><span class="pln">
  screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">middle_2</span><span class="pun">);</span><span class="pln">
  screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">12</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"o:"</span><span class="pun">);</span><span class="pln">
  screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">14</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">output</span><span class="pun">);</span><span class="pln">
  delay</span><span class="pun">(</span><span class="lit">500</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="typ">LiquidCrystal_I2C</span><span class="pln"> screen</span><span class="pun">(</span><span class="lit">0x27</span><span class="pun">,</span><span class="pln"> </span><span class="lit">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln">
</span><span class="typ">Servo</span><span class="pln"> servo</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="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">// ACCELEROMETER Setup</span><span class="pln">
  pinMode</span><span class="pun">(</span><span class="pln">Z</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="pln">Y</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="pln">X</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">

  </span><span class="com">// LCD Screen Setup</span><span class="pln">
  screen</span><span class="pun">.</span><span class="pln">init</span><span class="pun">();</span><span class="pln">
  screen</span><span class="pun">.</span><span class="pln">backlight</span><span class="pun">();</span><span class="pln">
  screen</span><span class="pun">.</span><span class="pln">home</span><span class="pun">();</span><span class="pln">

  </span><span class="com">// SERVO Setup</span><span class="pln">
  servo</span><span class="pun">.</span><span class="pln">attach</span><span class="pun">(</span><span class="pln">SERVO</span><span class="pun">);</span><span class="pln">

  </span><span class="com">// OTHER PINS </span><span class="pln">
  pinMode</span><span class="pun">(</span><span class="pln">BUTTON</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="pln">RED</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  pinMode</span><span class="pun">(</span><span class="pln">BLUE</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  pinMode</span><span class="pun">(</span><span class="pln">GREEN</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  pinMode</span><span class="pun">(</span><span class="pln">IR</span><span class="pun">,</span><span class="pln"> INPUT</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">
</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="pln"> </span><span class="pun">{</span><span class="pln">

                                                                                   
  </span><span class="com">// ACCELEROMETER CODE</span><span class="pln">

  </span><span class="kwd">int</span><span class="pln"> zVal </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">Z</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">int</span><span class="pln"> yVal </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">Y</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">int</span><span class="pln"> xVal </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">X</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">int</span><span class="pln"> buttonState </span><span class="pun">=</span><span class="pln"> digitalRead</span><span class="pun">(</span><span class="pln">BUTTON</span><span class="pun">);</span><span class="pln">

  

  </span><span class="com">// will not do anything until momentary push button is pressed</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">buttonState </span><span class="pun">&&</span><span class="pln"> </span><span class="pun">!</span><span class="pln">start</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

    baseX </span><span class="pun">=</span><span class="pln"> xVal</span><span class="pun">;</span><span class="pln">
    baseY </span><span class="pun">=</span><span class="pln"> yVal</span><span class="pun">;</span><span class="pln">
    baseZ </span><span class="pun">=</span><span class="pln"> zVal</span><span class="pun">;</span><span class="pln">
    start </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

    accel_difference </span><span class="pun">=</span><span class="pln"> abs</span><span class="pun">(</span><span class="pln">baseX </span><span class="pun">-</span><span class="pln"> xVal</span><span class="pun">)</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> abs</span><span class="pun">(</span><span class="pln">baseY </span><span class="pun">-</span><span class="pln"> yVal</span><span class="pun">)</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> abs</span><span class="pun">(</span><span class="pln">baseZ </span><span class="pun">-</span><span class="pln"> zVal</span><span class="pun">);</span><span class="pln">
    input </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">accel_difference</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">250</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">99</span><span class="pun">);</span><span class="pln">

    </span><span class="com">// CAR - SERVO CODE</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">baseX </span><span class="pun">!=</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> baseY </span><span class="pun">!=</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">&&</span><span class="pln"> baseZ </span><span class="pun">!=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">){</span><span class="pln">
      angle </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">accel_difference</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">250</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">90</span><span class="pun">);</span><span class="pln">
      servo</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="pln">angle</span><span class="pun">);</span><span class="pln">
      middle_1 </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">angle</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">90</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">99</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
    
  
    
    </span><span class="com">// DISTANCE SENSOR CODE</span><span class="pln">
    </span><span class="kwd">int</span><span class="pln"> dis </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">IR</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">int</span><span class="pln"> middle_2 </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">dis</span><span class="pun">,</span><span class="pln"> </span><span class="lit">465</span><span class="pln"> </span><span class="pun">,</span><span class="pln"> </span><span class="lit">300</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">99</span><span class="pun">);</span><span class="pln">
  
    
    </span><span class="com">// LED CODE</span><span class="pln">
    </span><span class="kwd">int</span><span class="pln"> convertedVal </span><span class="pun">=</span><span class="pln"> constrain</span><span class="pun">(</span><span class="pln">map</span><span class="pun">(</span><span class="pln">dis</span><span class="pun">,</span><span class="pln"> </span><span class="lit">465</span><span class="pun">,</span><span class="pln"> </span><span class="lit">300</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">5</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">5</span><span class="pun">);</span><span class="pln">
    intToRGB</span><span class="pun">(</span><span class="pln">convertedVal</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">int</span><span class="pln"> output </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">convertedVal</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">5</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">99</span><span class="pun">);</span><span class="pln">
  
  
    </span><span class="com">// LCD DISPLAY</span><span class="pln">
    lcd</span><span class="pun">(</span><span class="pln">screen</span><span class="pun">,</span><span class="pln"> input</span><span class="pun">,</span><span class="pln"> middle_1</span><span class="pun">,</span><span class="pln"> middle_2</span><span class="pun">,</span><span class="pln"> output</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
    
</span><span class="pun">}</span>