Easy Arduino Light Following Robot
by JaceDuino in Circuits > Arduino
7672 Views, 18 Favorites, 0 Comments
Easy Arduino Light Following Robot
![806571c2c57ae5dbbe8fd53b6c682e51.jpg](/proxy/?url=https://content.instructables.com/FF4/EFTA/IBQCG9CK/FF4EFTAIBQCG9CK.jpg&filename=806571c2c57ae5dbbe8fd53b6c682e51.jpg)
![images.jpeg](/proxy/?url=https://content.instructables.com/FM2/WT9I/IBQCG9D1/FM2WT9IIBQCG9D1.jpg&filename=images.jpeg)
This is a tutorial on how to make a light following robot using Arduino, it has been simplified so that beginners can attempt this project too. This project should only take you at the most of an hour. I hope you enjoy.
Materials
![Unknown-1.jpeg](/proxy/?url=https://content.instructables.com/F8G/TBA9/IBQCG9GW/F8GTBA9IBQCG9GW.jpg&filename=Unknown-1.jpeg)
![Unknown-2.jpeg](/proxy/?url=https://content.instructables.com/FZ6/M4W4/IBQCG9H4/FZ6M4W4IBQCG9H4.jpg&filename=Unknown-2.jpeg)
![26249.jpg](/proxy/?url=https://content.instructables.com/F7Z/T7V8/IBQCG9H1/F7ZT7V8IBQCG9H1.jpg&filename=26249.jpg)
![Unknown.jpeg](/proxy/?url=https://content.instructables.com/F31/SEXU/IBQCG9GZ/F31SEXUIBQCG9GZ.jpg&filename=Unknown.jpeg)
Arduino Uno: http://www.freetronics.com.au/products/eleven#.VZn...
H-Bridge shield: http://www.freetronics.com.au/products/hbridge-dua...
Chassis: http://www.hobbyking.com/hobbyking/store/__26249__...
2X LDR/Light Dependant Resistors
2X 100k Ω Resistors
Jumper leads
3X 9v
Wiring
![Screen Shot 2015-07-06 at 12.00.05 pm.png](/proxy/?url=https://content.instructables.com/FC3/673J/IBQCGP1U/FC3673JIBQCGP1U.png&filename=Screen Shot 2015-07-06 at 12.00.05 pm.png)
![Screen Shot 2015-07-06 at 11.59.45 am.png](/proxy/?url=https://content.instructables.com/FG0/JADH/IBQCGP3S/FG0JADHIBQCGP3S.png&filename=Screen Shot 2015-07-06 at 11.59.45 am.png)
![Screen Shot 2015-07-06 at 12.01.09 pm.png](/proxy/?url=https://content.instructables.com/FR8/C7JP/IBQCGP2X/FR8C7JPIBQCGP2X.png&filename=Screen Shot 2015-07-06 at 12.01.09 pm.png)
![Screen Shot 2015-07-06 at 12.03.25 pm.png](/proxy/?url=https://content.instructables.com/F96/6QLC/IBQCGP0R/F966QLCIBQCGP0R.png&filename=Screen Shot 2015-07-06 at 12.03.25 pm.png)
![Screen Shot 2015-07-06 at 12.05.55 pm.png](/proxy/?url=https://content.instructables.com/FU4/5QNB/IBQCGOXQ/FU45QNBIBQCGOXQ.png&filename=Screen Shot 2015-07-06 at 12.05.55 pm.png)
With the wires on the bread board that go to the side, 2 go to 5v on arduino and the other one goes to GND
It is easier to follow the pictures then me explain.
First, connect the H-Bridge shield to the Arduino Uno
Then, connect the LDR's, like in the diagram
After, insert the positive and negative of the motors in to the shield
*Now, connect 2 9v batteries in a series and then positive and negative to the spots on the shield
*Finally plug a 9v battery into the Arduino
(*Last 2 are for when you have uploaded the code)
Put It on the Chassis
![images.jpeg](/proxy/?url=https://content.instructables.com/FGH/VOLV/IBQCGRKG/FGHVOLVIBQCGRKG.jpg&filename=images.jpeg)
Put the creation on your chassis how ever you please, make it look how ever you want as well. There is much I can say about this step though.
Code
Please respect that it took a while to figure out and write this code:
//Code by Jason McLaughlin
//2015
const int channel_a_enable = 6; //start motor a /left
const int channel_a_input_1 = 4; //positive/negative 1
const int channel_a_input_2 = 7; //positive/negative 2
const int channel_b_enable = 5; //start motor b /right
const int channel_b_input_3 = 3; //positive/negative 1
const int channel_b_input_4 = 2; //positive/negative 2
const int RightSensor = A1; // Read the right sensor
const int LeftSensor = A2; // Read the left sensor
// Variable definitions
int SensorLeft; // This stores the value of the Left Sensor pin to use later on in the sketch
int SensorRight; // This stores the value of the Right Sensor pin to use later on in the sketch
int SensorDifference; // This value is used to determine the difference between the Left and Right
void setup() {
pinMode( channel_a_enable, OUTPUT ); // Channel A enable
pinMode( channel_a_input_1, OUTPUT ); // Channel A input 1
pinMode( channel_a_input_2, OUTPUT ); // Channel A input 2
pinMode( channel_b_enable, OUTPUT ); // Channel B enable
pinMode( channel_b_input_3, OUTPUT ); // Channel B input 3
pinMode( channel_b_input_4, OUTPUT ); // Channel B input 4
pinMode(LeftSensor, INPUT); // Defines this pin as an input. The Arduino will read values from this pin.
pinMode(RightSensor, INPUT); // Defines this pin as an input. The Arduino will read values from this pin.
digitalWrite(A1, HIGH); // Enables LDR
digitalWrite(A2, HIGH); // Enables LDR
Serial.begin(9600); // Enables a serial connection through the Arduino to either USB or UART (pins 0&1). Note that the baud rate is set to 9600
Serial.println(" \nBeginning Light Seeking Behavior"); // Placed at the very end of void Setup() so that it is runs once, right before the void Loop() }
void loop() { SensorLeft = 1023 - analogRead(LeftSensor); // This reads the value of the sensor, then saves it to the corresponding integer.
delay(1);
SensorRight = 1023 - analogRead(RightSensor); // This reads the value of the sensor, then saves it to the corresponding integer.
delay(1);
SensorDifference = abs(SensorLeft - SensorRight); // This calculates the difference between the two sensors and then saves it to an integer.
// This section of the sketch is used to print the values of the // sensors through Serial to the computer. Useful for determining // if the sensors are working and if the code is also functioning properly.
Serial.print("Left Sensor = "); // Prints the text inside the quotes.
Serial.print(SensorLeft); // Prints the value of the Left Sensor.
Serial.print("\t"); // Prints a tab (space).
Serial.print("Right Sensor = "); // Prints the text inside the quotes.
Serial.print(SensorRight); // Prints the value of the Right Sensor.
Serial.print("\t"); // Prints a tab (space).
// This section of the sketch is what actually interperets the data and then runs the motors accordingly.
if (SensorLeft > SensorRight && SensorDifference > 75) { // This is interpreted as if the Left sensor reads more light than the Right Sensor, Do this:
analogWrite( channel_a_enable, 255);
digitalWrite( channel_a_input_1, LOW);
digitalWrite( channel_a_input_2, HIGH);
analogWrite( channel_b_enable, 255);
digitalWrite( channel_b_input_3, HIGH);
digitalWrite( channel_b_input_4, LOW);
Serial.println("Left"); // This prints Left when the robot would actually turn Left.
delay(50);
}
if (SensorLeft < SensorRight && SensorDifference > 75) { // This is interpreted as if the Left sensor reads less light than the Right Sensor, Do this:
analogWrite( channel_a_enable, 255);
digitalWrite( channel_a_input_1, HIGH);
digitalWrite( channel_a_input_2, LOW);
analogWrite( channel_b_enable, 255);
digitalWrite( channel_b_input_3, LOW);
digitalWrite( channel_b_input_4, HIGH);
Serial.println("Right"); // This prints Right when the robot would actually turn Right.
delay(50);
}
else if (SensorDifference < 75) { // This is interpreted as if the difference between the two sensors is under 125 (Experiment to suit our sensors), Do this:
analogWrite( channel_a_enable, 255);
digitalWrite( channel_a_input_1, HIGH);
digitalWrite( channel_a_input_2, LOW);
analogWrite( channel_b_enable, 255);
digitalWrite( channel_b_input_3, HIGH);
digitalWrite( channel_b_input_4, LOW);
Serial.println("Forward"); // This prints Forward when the robot would actually go forward.
delay(50);
}
Serial.print("\n");
}