Download as pdf or txt
Download as pdf or txt
You are on page 1of 30

SRI LANKA INSTITUTE OF INFORMATION TECHNOLOGY

Faculty of Engineering

ME2610 – MECHATRONICS DESIGN PROJECT


Year 2 Semester 1
Final Evaluation

Name: Perera P N D
EN Number: EN20401412
Date of Performance:
Date of Submission: 27-06-2021
1. Snapshots of finished Prototype

Figure 1 Front View

Figure 2 Back View


Figure 3 Right Side view

Figure 4 Left Side view


Figure 5 Top view
Motors and the wheels

LED Panel

IR panel

Figure 6 Components

Switch
Battery Pack

IR

Figure 7 Components
Buck Converter
(Voltage step down
unit)

Figure 8 Components
2. List of components

Component Specifications
Arduino MEGA Arduino MEGA 2560 is the microcontroller
which I have used for the line following robot.
It’s a 10-bit microcontroller which can be power
up using 7v-12v. It’s a programmable unit
where we put all the commands of the robot.
L293D Motor shield L293D is motor shield which is used to control
the motors using the commands according to the
Arduino MEGA. L298N does the same thing.
L298N model has H bridge switches.
18650 Li-ion Battery To control all these components, we need a
power source. We can use rechargeable Li-Ion
batteries. Here I used 4, 3.7v Li-Ion 18650
batteries.
4 gear motors We can use dc motors but using a gear motor
gives the vehicle more torque than using the dc
motor.
4 wheel car chassis We need a chassis to carry the components. It’s
where we assemble the Arduino board and
shield or the driver 4 motors and the batteries.
4 wheels 4 wheels are used to move the robot. Wheels are
rotating using the gear motors.
switch Switch is used to turn On and Off the Arduino
board and shield. (Arduino board and the shield
is powered separately)
8Channel IR 8 TCRT5000 IR sensors assembled as a line of
IR. This IR is used to identify the robot’s path.
IR gives the reflection value and according to
that value robot finds his path to follow.
Buck converter (Optional) It’s a step-down voltage controller. When we
supply it 12V voltage it can reduce the voltage
to 7-3V. For the safety of Arduino mega board I
used a 12v to 5 v step down voltage controller
4LEDs 4 LEDs are used to indicate a junctions
IR sensor (Optional) Another IR is used to avoid accidents
Jumpers Jumper wires are used to connect the
components and to complete the circuit.
Battery casing Battery casing is used to hold the batteries.
Nuts and bolts Nuts and bolts are used to assemble the chassis
and the components to the chassis

Table 1 List of components and their specifications


3. Snapshot of sensor array with sensor IDs labeled as per the
code

#define ir0 A8//left


#define ir1 A9
#define ir2 A10
#define ir3 A11//center
#define ir4 A12//center
#define ir5 A13//right
#define ir6 A14
#define ir7 A15

#define ABS A7// this is optional IR i used to avoid accidents

//defining motors
AF_DCMotor M1(1);//rear left
AF_DCMotor M3(3);// front right
AF_DCMotor M2(2);// front left
AF_DCMotor M4(4);//rear right

Straight line

Figure 9 Forward line detection


//forward
//to move forward black line should be detected 3rd 4th (2nd and 5th some
times) IRs

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0) &&
(digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) && (digitalRead(ir5) ==
0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){forward();return(0);}//ir3 only

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0) &&
(digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) && (digitalRead(ir5) ==
0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){forward();return(0);}//ir4 only

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0) &&
(digitalRead(ir3) == 1) && (digitalRead(ir4) == 1) && (digitalRead(ir5) ==
0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){forward();return(0);}//ir 3 and ir4

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) && (digitalRead(ir2)


== 1) &&
(digitalRead(ir3) == 1) && (digitalRead(ir4) == 1) && (digitalRead(ir5) ==
0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){forward();return(0);}//ir 3 and ir4 ir2

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0) &&
(digitalRead(ir3) == 1) && (digitalRead(ir4) == 1) && (digitalRead(ir5) ==
1) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){forward();return(0);}//ir 3 and ir4 ir5
Right turn

Figure 10 Turn right junction detection

// turn right

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 1)){right();return(0);}
//ir 7

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
(digitalRead(ir6) == 1) && (digitalRead(ir7) == 0)){right();return(0);}
//ir6

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 1) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){right();return(0);}
//ir5
/*if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){right();} //ir 4*/

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
(digitalRead(ir6) == 1) && (digitalRead(ir7) == 1)){right();return(0);}
//ir 6 ir7

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 1) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 1)){right();return(0);}
//ir 7 ir 5

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 1)){right();return(0);}
//ir 7 ir 4

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 1)){right();return(0);}
//ir 7 ir3

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 1) &&
(digitalRead(ir6) == 1) && (digitalRead(ir7) ==
0)){delay(d);right();return(0);} // ir 6 ir 5

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
(digitalRead(ir6) == 1) && (digitalRead(ir7) == 0)){right();return(0);}
// ir 6 ir 4

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
(digitalRead(ir6) == 1) && (digitalRead(ir7) == 0)){right();return(0);}
// ir 6 ir 3

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){right();return(0);}
// ir 5 ir 4

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){right();return(0);}
// ir 5 ir 3

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 1) &&
(digitalRead(ir6) == 1) && (digitalRead(ir7) == 1)){right();return(0);}
//it 7 ir6 ir 5

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
(digitalRead(ir6) == 1) && (digitalRead(ir7) == 1)){right();return(0);}
//it 7 ir6 ir 4

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
(digitalRead(ir6) == 1) && (digitalRead(ir7) == 1)){right();return(0);}
//it 7 ir6 ir 3

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 1) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 1)){right();return(0);}
//it 7 ir5 ir 4

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 1) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 1)){right();return(0);}
//it 7 ir5 ir 3

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 1) &&
(digitalRead(ir6) == 1) && (digitalRead(ir7) ==
0)){right();return(0);}//ir 6 ir 5 ir 4

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 1) &&
(digitalRead(ir6) == 1) && (digitalRead(ir7) ==
0)){right();return(0);}//ir 6 ir 5 ir 3

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 1) &&
(digitalRead(ir6) == 1) && (digitalRead(ir7) ==
1)){right();return(0);}//ir 7 ir 6 ir 5 ir 4

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 1) &&
(digitalRead(ir6) == 1) && (digitalRead(ir7) ==
1)){right();return(0);}//ir 7 ir 6 ir 5 ir 3

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0)
&& (digitalRead(ir3) == 1) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 1) &&
(digitalRead(ir6) == 1) && (digitalRead(ir7) ==
1)){right();return(0);}//ir 7 ir 6 ir 5 ir 3
Left Turn

Figure 11 Left turn junction detection

//left
if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0) &&
(digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);}// ir 0

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 1) &&


(digitalRead(ir2) == 0) &&
(digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){left();return(0);}
//ir 1

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 1) &&
(digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);}//ir 2

/*if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0) &&
(digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){left();}//ir3*/

if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 1) &&


(digitalRead(ir2) == 0) &&
(digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){left();return(0);}
// ir 0 ir1

if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 1) &&
(digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){left();return(0);}
//ir0 ir2

if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0) &&
(digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){left();return(0);}
//ir0 ir3

if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 0) &&
(digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){delay(d);left();return(0);} //ir0 ir4

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 1) &&


(digitalRead(ir2) == 1) &&
(digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){left();return(0);}
//ir1 ir2

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 1) &&


(digitalRead(ir2) == 0) &&
(digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){left();return(0);}
//ir1 ir3

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 1) &&


(digitalRead(ir2) == 0) &&
(digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){left();return(0);}
//ir1 ir4

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 1) &&
(digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){left();return(0);}
//ir2 ir3

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 1) &&
(digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){left();return(0);}
//ir2 ir4

if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 1) &&


(digitalRead(ir2) == 1) &&
(digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){delay(d);left();return(0);} //ir0 ir1 ir2

if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 1) &&


(digitalRead(ir2) == 0) &&
(digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){left();return(0);}
//ir0 ir1 ir3

if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 1) &&


(digitalRead(ir2) == 0) &&
(digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){left();return(0);}
//ir0 ir1 ir4

if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 1) &&
(digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){left();return(0);}
//ir0 ir2 ir3

if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 0) &&


(digitalRead(ir2) == 1) &&
(digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){left();return(0);}
//ir0 ir2 ir4

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 1) &&


(digitalRead(ir2) == 1) &&
(digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){delay(d);left();return(0);} //ir1 ir2 ir3

if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 1) &&


(digitalRead(ir2) == 1) &&
(digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){left();return(0);}
//ir1 ir2 ir4

if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 1) &&


(digitalRead(ir2) == 1) &&
(digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){left();return(0);}
//ir1 ir2 ir3 ir0

if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 1) &&


(digitalRead(ir2) == 1) &&
(digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){left();return(0);}
//ir1 ir2 ir4 ir0

if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 1) &&


(digitalRead(ir2) == 1) &&
(digitalRead(ir3) == 1) && (digitalRead(ir4) == 1) && (digitalRead(ir5)
== 0) &&
(digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){left();return(0);}
//ir1 ir2 ir4 ir3 ir0
4. Completed code for Arduino line following robot

5. //Arduino Line following robot by Perera P N D EN20401412


6. #include <AFMotor.h>//including the library for the L293D motor
shield I have used.
7. int s=100, r=100,t=100,d=50,k=100;//different speeds I used to go
forward turn right and left
8. //defining pins and variables
9. #define ir0 A8//left
10. #define ir1 A9
11. #define ir2 A10
12. #define ir3 A11//center
13. #define ir4 A12//center
14. #define ir5 A13//right
15. #define ir6 A14
16. #define ir7 A15
17.
18. #define ABS A7// this is optional IR i used to avoid accidents
19.
20. //defining motors
21. AF_DCMotor M1(1);//rear left
22. AF_DCMotor M3(3);// front right
23. AF_DCMotor M2(2);// front left
24. AF_DCMotor M4(4);//rear right
25.
26.
27.
28. void setup() {
29. //declaring pin types
30. pinMode(ir0,INPUT);
31. pinMode(ir1,INPUT);
32. pinMode(ir2,INPUT);
33. pinMode(ir3,INPUT);
34. pinMode(ir4,INPUT);
35. pinMode(ir5,INPUT);
36. pinMode(ir6,INPUT);
37. pinMode(ir7,INPUT);
38. pinMode(ABS,INPUT);
39. pinMode(30,OUTPUT);//left
40. pinMode(31,OUTPUT);//right
41.
42. //begin serial communication
43. Serial.begin(9600);
44. }
45.
46. void loop(){
47.
48. //printing values of the sensors to the serial monitor
49. Serial.print(digitalRead(ir0)); Serial.print(" ");
Serial.print(digitalRead(ir1)); Serial.print(" ");
50. Serial.print(digitalRead(ir2)); Serial.print(" ");
Serial.print(digitalRead(ir3)); Serial.print(" ");
51. Serial.print(digitalRead(ir4)); Serial.print(" ");
Serial.print(digitalRead(ir5)); Serial.print(" ");
52. Serial.print(digitalRead(ir6)); Serial.print(" ");
Serial.print(digitalRead(ir7));Serial.print("
");Serial.print(digitalRead(ABS)); Serial.println();
53. //from the serial monitor we can see how the values change in
different lines. 0 for white 1 for black
54. /*
55. if (ABS== 0 && (digitalRead(ir0) == 0) && (digitalRead(ir1) ==
0) && (digitalRead(ir2) == 0)
56. && (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
57. (digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){
58. pause();}
59. if (ABS== 0 && (digitalRead(ir0) == 1) && (digitalRead(ir1) ==
1) && (digitalRead(ir2) == 1)
60. && (digitalRead(ir3) == 1) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 1) &&
61. (digitalRead(ir6) == 1) && (digitalRead(ir7) == 1)){
62. pause();}
63. //either in black line of white surface if the robot detects a
barrier it stops all motors. This is an optional I used to avoid
accidents.
64. */
65.
66.
67.
68.
69. //left
70. if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0) &&
71. (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
72. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);}// ir 0
73.
74. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 1) &&
(digitalRead(ir2) == 0) &&
75. (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
76. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);} //ir 1
77.
78. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 1) &&
79. (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
80. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);}//ir 2
81.
82. /*if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0) &&
83. (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
84. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();}//ir3*/
85.
86. if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 1) &&
(digitalRead(ir2) == 0) &&
87. (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
88. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);} // ir 0 ir1
89.
90. if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 1) &&
91. (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
92. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);} //ir0 ir2
93.
94. if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0) &&
95. (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
96. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);} //ir0 ir3
97.
98. if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0) &&
99. (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
100. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){delay(d);left();return(0);} //ir0 ir4
101.
102. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 1) &&
(digitalRead(ir2) == 1) &&
103. (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
104. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);} //ir1 ir2
105.
106. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 1) &&
(digitalRead(ir2) == 0) &&
107. (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
108. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);} //ir1 ir3
109.
110. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 1) &&
(digitalRead(ir2) == 0) &&
111. (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
112. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);} //ir1 ir4
113.
114. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 1) &&
115. (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
116. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);} //ir2 ir3
117.
118. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 1) &&
119. (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
120. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);} //ir2 ir4
121.
122. if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 1) &&
(digitalRead(ir2) == 1) &&
123. (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
124. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){delay(d);left();return(0);} //ir0 ir1 ir2
125.
126.
127. if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 1) &&
(digitalRead(ir2) == 0) &&
128. (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
129. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);} //ir0 ir1 ir3
130.
131. if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 1) &&
(digitalRead(ir2) == 0) &&
132. (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
133. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);} //ir0 ir1 ir4
134.
135.
136. if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 1) &&
137. (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
138. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);} //ir0 ir2 ir3
139.
140. if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 1) &&
141. (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
142. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);} //ir0 ir2 ir4
143.
144. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 1) &&
(digitalRead(ir2) == 1) &&
145. (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
146. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){delay(d);left();return(0);} //ir1 ir2 ir3
147.
148. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 1) &&
(digitalRead(ir2) == 1) &&
149. (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
150. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);} //ir1 ir2 ir4
151.
152. if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 1) &&
(digitalRead(ir2) == 1) &&
153. (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
154. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);} //ir1 ir2 ir3 ir0
155.
156. if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 1) &&
(digitalRead(ir2) == 1) &&
157. (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
158. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);} //ir1 ir2 ir4 ir0
159.
160. if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 1) &&
(digitalRead(ir2) == 1) &&
161. (digitalRead(ir3) == 1) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
162. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){left();return(0);} //ir1 ir2 ir4 ir3 ir0
163.
164. //turning left using 0th 1st 2nd 3rd and 4th IRs
165.
166.
167.
168.
169. // turn right
170.
171. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
172. && (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
173. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
1)){right();return(0);} //ir 7
174.
175. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
176. && (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
177. (digitalRead(ir6) == 1) && (digitalRead(ir7) ==
0)){right();return(0);} //ir6
178.
179. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
180. && (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 1) &&
181. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){right();return(0);} //ir5
182.
183. /*if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
184. && (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
185. (digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){right();}
//ir 4*/
186.
187. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
188. && (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
189. (digitalRead(ir6) == 1) && (digitalRead(ir7) ==
1)){right();return(0);} //ir 6 ir7
190.
191. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
192. && (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 1) &&
193. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
1)){right();return(0);} //ir 7 ir 5
194.
195. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
196. && (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
197. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
1)){right();return(0);} //ir 7 ir 4
198.
199. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
200. && (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
201. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
1)){right();return(0);} //ir 7 ir3
202.
203. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
204. && (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 1) &&
205. (digitalRead(ir6) == 1) && (digitalRead(ir7) ==
0)){delay(d);right();return(0);} // ir 6 ir 5
206.
207. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
208. && (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
209. (digitalRead(ir6) == 1) && (digitalRead(ir7) ==
0)){right();return(0);} // ir 6 ir 4
210.
211. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
212. && (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
213. (digitalRead(ir6) == 1) && (digitalRead(ir7) ==
0)){right();return(0);} // ir 6 ir 3
214.
215. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
216. && (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
217. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){right();return(0);} // ir 5 ir 4
218.
219. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
220. && (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
221. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){right();return(0);} // ir 5 ir 3
222.
223. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
224. && (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 1) &&
225. (digitalRead(ir6) == 1) && (digitalRead(ir7) ==
1)){right();return(0);} //it 7 ir6 ir 5
226.
227. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
228. && (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
229. (digitalRead(ir6) == 1) && (digitalRead(ir7) ==
1)){right();return(0);} //it 7 ir6 ir 4
230.
231. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
232. && (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
233. (digitalRead(ir6) == 1) && (digitalRead(ir7) ==
1)){right();return(0);} //it 7 ir6 ir 3
234.
235. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
236. && (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 1) &&
237. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
1)){right();return(0);} //it 7 ir5 ir 4
238.
239. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
240. && (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 1) &&
241. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
1)){right();return(0);} //it 7 ir5 ir 3
242.
243. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
244. && (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 1) &&
245. (digitalRead(ir6) == 1) && (digitalRead(ir7) ==
0)){right();return(0);}//ir 6 ir 5 ir 4
246.
247. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
248. && (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 1) &&
249. (digitalRead(ir6) == 1) && (digitalRead(ir7) ==
0)){right();return(0);}//ir 6 ir 5 ir 3
250.
251. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
252. && (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 1) &&
253. (digitalRead(ir6) == 1) && (digitalRead(ir7) ==
1)){right();return(0);}//ir 7 ir 6 ir 5 ir 4
254.
255. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
256. && (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 1) &&
257. (digitalRead(ir6) == 1) && (digitalRead(ir7) ==
1)){right();return(0);}//ir 7 ir 6 ir 5 ir 3
258.
259. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
260. && (digitalRead(ir3) == 1) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 1) &&
261. (digitalRead(ir6) == 1) && (digitalRead(ir7) ==
1)){right();return(0);}//ir 7 ir 6 ir 5 ir 3
262.
263.
264. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0)
265. && (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
266. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){pause();delay(1);reverse();}
267. //turning left using 3rd 4th 5th 6th and 7th IRs
268.
269.
270. //forward
271. //to move forward black line should be detected 3rd 4th (2nd and
5th some times) IRs
272.
273. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0) &&
274. (digitalRead(ir3) == 1) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
275. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){forward();return(0);}//ir3 only
276.
277. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0) &&
278. (digitalRead(ir3) == 0) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
279. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){forward();return(0);}//ir4 only
280.
281. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0) &&
282. (digitalRead(ir3) == 1) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
283. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){forward();return(0);}//ir 3 and ir4
284.
285. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 1) &&
286. (digitalRead(ir3) == 1) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
287. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){forward();return(0);}//ir 3 and ir4 ir2
288.
289.
290. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0) &&
291. (digitalRead(ir3) == 1) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 1) &&
292. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){forward();return(0);}//ir 3 and ir4 ir5
293.
294. /*
295. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0) &&
296. (digitalRead(ir3) == 1) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 1) &&
297. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){forward();return(0);}//ir 3 and ir4 ir5
298.
299. if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 1) &&
300. (digitalRead(ir3) == 1) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 0) &&
301. (digitalRead(ir6) == 0) && (digitalRead(ir7) ==
0)){forward();return(0);}//ir 3 and ir4 ir2*/
302. /*
303. if ((digitalRead(ir0) == 1) && (digitalRead(ir1) == 1) &&
(digitalRead(ir2) == 1) &&
304. (digitalRead(ir3) == 1) && (digitalRead(ir4) == 1) &&
(digitalRead(ir5) == 1) &&
305. (digitalRead(ir6) == 1) && (digitalRead(ir7) ==
1)){pause();delay(t);left();delay(t);right();delay(t);}*/
306.
307. /*if ((digitalRead(ir0) == 0) && (digitalRead(ir1) == 0) &&
(digitalRead(ir2) == 0) &&
308. (digitalRead(ir3) == 0) && (digitalRead(ir4) == 0) &&
(digitalRead(ir5) == 0) &&
309. (digitalRead(ir6) == 0) && (digitalRead(ir7) == 0)){
310. pause();
311.
312. }*/
313. //if all white it stops becuase it's the end of the grid
314. }
315.
316. void forward(){
317.
318. //I used little bit low value to move forward then only robot
can detects junction and decide where to turn
319.
320. hazzard();
321. M1.setSpeed(k);
322. M2.setSpeed(k);
323. M3.setSpeed(k);
324. M4.setSpeed(k);
325.
326. M1.run(FORWARD);
327. M2.run(FORWARD);
328. M3.run(FORWARD);
329. M4.run(FORWARD);
330. return(0);
331.
332.
333. }
334. void left(){
335. //little bit high value because robot is litlle bit heavy to
turn in low speeds
336. Leftsig();
337. M1.setSpeed(r);
338. M2.setSpeed(r);
339. M3.setSpeed(r);
340. M4.setSpeed(r);
341. M1.run(BACKWARD);
342. M2.run(BACKWARD);
343. M3.run(FORWARD);
344. M4.run(FORWARD);
345. return(0);
346. }
347.
348. void right(){//little bit high value because robot is litlle
bit heavy to turn in low speeds
349. Rightsig();
350. M1.setSpeed(r);
351. M2.setSpeed(r);
352. M3.setSpeed(r);
353. M4.setSpeed(r);
354. M1.run(FORWARD);
355. M2.run(FORWARD);
356. M3.run(BACKWARD);
357. M4.run(BACKWARD);
358. return(0);}
359.
360.
361. //If the robot can't find its way it slowly turn left and right
until it detects a black line
362. void leftlow(){
363.
364. M1.setSpeed(k);
365. M2.setSpeed(k);
366. M3.setSpeed(k);
367. M4.setSpeed(k);
368. M1.run(BACKWARD);
369. M2.run(BACKWARD);
370. M3.run(FORWARD);
371. M4.run(FORWARD);
372. return(0);
373. }
374.
375. void rightlow(){
376. M1.setSpeed(k);
377. M2.setSpeed(k);
378. M3.setSpeed(k);
379. M4.setSpeed(k);
380. M1.run(FORWARD);
381. M2.run(FORWARD);
382. M3.run(BACKWARD);
383. M4.run(BACKWARD);
384. return(0);}
385.
386. void pause(){//all motors stop position
387. M1.setSpeed(0);
388. M2.setSpeed(0);
389. M3.setSpeed(0);
390. M4.setSpeed(0);
391. digitalWrite(30,LOW);
392. digitalWrite(31,LOW);return(0);
393. }
394. void reverse(){//reverse
395. M1.setSpeed(k);
396. M2.setSpeed(k);
397. M3.setSpeed(k);
398. M4.setSpeed(k);
399.
400. M1.run(BACKWARD);
401. M2.run(BACKWARD);
402. M3.run(BACKWARD);
403. M4.run(BACKWARD);
404. return(0);}
405.
406. //From here below is signal indicators Hazzard left signal and
right signal
407. void hazzard() {
408. digitalWrite(30,HIGH);
409. digitalWrite(31,HIGH);
410. delay(500);
411. digitalWrite(30,LOW);
412. digitalWrite(31,LOW);
413. delay(500);
414. return;
415.
416. }
417.
418. void Rightsig() {
419. digitalWrite(30,HIGH);
420. digitalWrite(31,LOW);
421. delay(500);
422. digitalWrite(30,LOW);
423. digitalWrite(31,LOW);
424. delay(500);
425. return;
426.
427. }
428. void Leftsig() {
429. digitalWrite(30,LOW);
430. digitalWrite(31,HIGH);
431. delay(500);
432. digitalWrite(30,LOW);
433. digitalWrite(31,LOW);
434. delay(500);
435. return;
436.
437. }
438.
439. void Stopsig() {
440. digitalWrite(30,LOW);
441. digitalWrite(31,LOW);
442. delay(500);
443. digitalWrite(30,HIGH);
444. digitalWrite(31,HIGH);
445. delay(500);
446. digitalWrite(30,LOW);
447. digitalWrite(31,LOW);
448. delay(500);
449. return;}
450. Conclusion

First, I bought all the components need for the line following robot. I used QTR 8 Array IR panel.
Although it has libraries auto calibration and many more functions it did not meet the requirements I
need. Then I used 3 single IRs for the references I used YouTube videos. It also did not work for me.
Then I used Aptinex Reykha S8 IR panel which has 8 TCRT500 IRs. It was fine but for the analog
reads I could not give the command robot to move. Maybe it’s because of the light condition where I
have tested my robot. Then I used digital reads value either 1 or 0 it works very fine. Only hard thing I
found was calibrating the IR panel manually. My first IR panel broke while I was trying to calibrate.
Then I used a potential meter (10k variable resistor) externally to calibrate. Unless I have to remove
all the nuts and bolts to calibrate the IR panel. After doing so many changes to the code I found
something work better than the previously uploaded codes. Then I found another issue on my wheels.
When the robot is trying to turn its wheels are getting slipped. Then I realized it is because of
unplanned weight distribution. I corrected it but it did not work perfectly but it’s fair. The very first
code I used is if 3 and 4 detect go forward 0, 1, 2 detects turn left, if 5, 6, 7 detects turn right. It
worked but there were some issues. What is 2, 3, 4 detects? what if 3, 4, 5 detects? likewise there
were some confusion points. Then I used permutations and combinations knowledge to get all the
possible inputs. Then I was able to make kind of lengthy but working code. Another issue I met is
robot is too fast to identify the junction. It detects junctions and passes the junction go straight
forward. Reacting time was not sufficient to take a decision to the robot. Then I used different speeds
for different commands. Then I was able to find a better speed for the robot after doing so many test
runs. Now it runs on the black line it detects junctions. And unfortunately, my chassis was broken
during a repair on the place I have circled in red. I used glue and 2 pieces of acrylic boards to fix it.
But wheels started to slip more than before. Anyhow it performs well. It needs a support when it
needs to turn, because of the slipping. Only issue right now is the wheels are slipping. It can be seen
in the video. It was trying to turn but the unbalance of the wheels does not let it turn. Overall, the
project is successful. Robot turns go forward and act to every command. Throughout this project I
have learnt lot of things. Arduino coding, planning, how to face problems occurs while doing the
project and working on time. It was a great experience.

You might also like