├── Project Report.pdf
├── README.md
├── Robot-Line_Following
└── Robot-Line_Following.ino
├── Robot-Obstacle
└── Robot-Obstacle.ino
├── arduino-icon.svg
├── arduino-ide-logo.svg
├── myRobot
└── myRobot.ino
├── myRobotX
└── myRobotX.ino
├── newlineFollower
└── newlineFollower.ino
└── readme-essentials
├── LIFOD.jfif
├── LIFOD.jpg
├── RAD Doc.docx
├── RAD lf.png
├── RAD oa1.png
├── RAD oa2.png
└── ~$AD Doc.docx
/Project Report.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noel319/Arduino-Robot/cfe593d5743f8b30175152b90b757df060bbf393/Project Report.pdf
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
Arduino Robot
7 |
Making Line Followign & Object Avoiding Robot using Arduino
8 |
9 |
10 |
11 |
12 |
13 | ## Instructions:
14 | - All Files of Robot
15 | - Testing Files Also included
16 | - myRobot code is made by our own hand
17 | - [compounents](#items-we-used) are mentioned below
18 | - [newlineFollower](/newlineFollower) just included the Line Following code
19 | - [myRobotX](/myRobotX) is the Final Code
20 |
21 |
22 |
23 | ## Items we used
24 | 1. [Arduino Uno R3](https://store.arduino.cc/products/arduino-uno-rev3)
25 | 2. [L298 Motor Driver](https://components101.com/modules/l293n-motor-driver-module)
26 | 3. Car chassis pack
27 | 4. Battries
28 | 5. Wheels
29 | 6. Ultra Sonic Sensor
30 | 7. Infared Sensors
31 | 8. Servo Motor
32 | 9. Bread Board
33 | 10. Jumpers
34 |
35 |
36 |
37 | ## Apps and Tools
38 |
39 |
40 |
41 |
42 | ## How It follows the line
43 |
44 |
45 |
46 | A) Both IR LEDs are on the line. Robot car should move forward.
47 |
48 | B) The Right IR LED is on the line while the left deviates to the left. Robot car should turn to the right.
49 |
50 | C) The Left IR LED is on the line while the right deviates to the right. Robot car should turn to the left.
51 |
52 |
53 |
54 |
55 | ## How It avoids obstacles
56 |
57 | The basic principle behind the working of ultrasonic sensor is to note down the time
58 | taken by sensor to transmit ultrasonic beams and receiving the ultrasonic beams after
59 | hitting the surface. Then further the distance is calculated.
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | ## Special Thanks:
68 | - [Tharusha Perera](https://github.com/tharusha1004)
69 | - [Pruthuvi De Silva](https://github.com/PruthuviDe)
70 | - [Yasiru Ravishan](https://github.com/yasiruravishan24)
71 |
72 |
73 |
74 | ## Checkout Our Documentation:
75 | [Project Proposal](/Project%20Report.pdf)
76 |
77 |
78 | ---
79 |
80 |
81 |
82 |
83 | LinkedIn Post: [click here!](https://www.linkedin.com/posts/janith-disanayake-8511b0240_team-robot-roboticsengineering-activity-6954856546669400064-tL5p?utm_source=linkedin_share&utm_medium=member_desktop_web)
84 |
85 |
86 |
87 |
--------------------------------------------------------------------------------
/Robot-Line_Following/Robot-Line_Following.ino:
--------------------------------------------------------------------------------
1 |
2 | const int LeftF = 11; // orange
3 | const int LeftR = 10; // yello
4 | const int RightF = 6; // green
5 | const int RightR = 5; // blue
6 |
7 | const int IRl = 9; //white
8 | const int IRr = 8; //purple
9 | const int IRm = 7; //blue
10 |
11 | #define echo 4 //yello
12 | #define trig 3 //green
13 |
14 | void setup() {
15 | pinMode(LeftF, OUTPUT);
16 | pinMode(RightF, OUTPUT);
17 | pinMode(LeftR, OUTPUT);
18 | pinMode(RightR, OUTPUT);
19 |
20 | pinMode(IRl,INPUT);
21 | pinMode(IRr,INPUT);
22 | pinMode(IRm,INPUT);
23 |
24 | Serial.begin(9600);
25 | }
26 |
27 | void loop() {
28 | int x = digitalRead(IRl);
29 | int y = digitalRead(IRr);
30 | int z = digitalRead(IRm);
31 |
32 | if(digitalRead(IRl)==HIGH && digitalRead(IRr)==HIGH) //IR will not glow on black line
33 | {
34 | Stop();
35 | }
36 |
37 | else if(digitalRead(IRl)==LOW && digitalRead(IRr)==LOW) //IR not on black line
38 | {
39 | Forward();
40 | }
41 |
42 | else if(digitalRead(IRl)==LOW && digitalRead(IRr)==HIGH)
43 | {
44 | turnRight();
45 | delay(10);
46 | }
47 |
48 | else if(digitalRead(IRl)==HIGH && digitalRead(IRr)==LOW)
49 | {
50 | turnLeft();
51 | delay(10);
52 | }
53 |
54 | else
55 | {
56 | Stop();
57 | }
58 | }
59 |
60 |
61 | void Forward()
62 | {
63 | Serial.println("Forward");
64 | analogWrite(LeftF, 100);
65 | analogWrite(RightF, 100);
66 | analogWrite(LeftR, 0);
67 | analogWrite(RightR, 0);
68 | }
69 |
70 | void Reverse()
71 | {
72 | Serial.println("Reverse");
73 | analogWrite(LeftR, 100);
74 | analogWrite(RightR, 100);
75 | analogWrite(LeftF, 0);
76 | analogWrite(RightF, 0);
77 | }
78 |
79 | void turnRight()
80 | {
81 |
82 | Serial.println("Right");
83 | analogWrite(LeftF, 100);
84 | analogWrite(LeftR, 0);
85 | analogWrite(RightR, 0);
86 | analogWrite(RightF, 0);
87 |
88 | }
89 |
90 | void turnLeft()
91 | {
92 |
93 | Serial.println("Left");
94 | analogWrite(LeftF, 0);
95 | analogWrite(LeftR, 0);
96 | analogWrite(RightR, 0);
97 | analogWrite(RightF, 100);
98 | }
99 |
100 |
101 | void Stop()
102 | {
103 | Serial.println("Stop");
104 | analogWrite(LeftF, 0);
105 | analogWrite(LeftR, 0);
106 | analogWrite(RightF, 0);
107 | analogWrite(RightR, 0);
108 | }
109 |
--------------------------------------------------------------------------------
/Robot-Obstacle/Robot-Obstacle.ino:
--------------------------------------------------------------------------------
1 | #include
2 |
3 | Servo myservo;
4 |
5 | const int LeftF = 11; // orange
6 | const int LeftR = 10; // yello
7 | const int RightF = 6; // green
8 | const int RightR = 5; // blue
9 |
10 | const int IRl = 9; //white
11 | const int IRr = 8; //purple
12 | const int IRm = 7; //blue
13 |
14 | #define echo 4 //yello
15 | #define trig 3 //green
16 |
17 | void setup() {
18 | Serial.begin(9600);
19 |
20 | pinMode(trig, OUTPUT);
21 | pinMode(echo, INPUT);
22 |
23 | pinMode(LeftF, OUTPUT);
24 | pinMode(RightF, OUTPUT);
25 | pinMode(LeftR, OUTPUT);
26 | pinMode(RightR, OUTPUT);
27 |
28 | myservo.attach(2); int x = digitalRead(IRl);
29 | int y = digitalRead(IRr);
30 |
31 |
32 | if (detectObj())
33 | { turnUSsensorMiddle();
34 | obstacleDetector();
35 | }
36 | else
37 | { Forward();
38 | }
39 | }
40 |
41 | void loop()
42 | {
43 |
44 |
45 | }
46 |
47 | void obstacleDetector()
48 | {
49 | Stop();
50 | turnUSsensorMiddle();
51 | delay(3000);
52 |
53 | if (detectObj())
54 | { turnUSsensorLeft();
55 | delay(1000);
56 | if (detectObj())
57 | { turnUSsensorMiddle();
58 | Stop();
59 | delay(100);
60 | }
61 | else
62 | { offRoadL();
63 | }
64 | }
65 | else
66 | { Forward();
67 | delay(100);
68 | }
69 | }
70 |
71 |
72 | void Forward()
73 | { Serial.println("Forward");
74 | analogWrite(LeftF, 100);
75 | analogWrite(RightF, 100);
76 | analogWrite(LeftR, 0);
77 | analogWrite(RightR, 0);
78 | }
79 |
80 | void turnLeft()
81 | { Serial.println("Left");
82 | analogWrite(LeftF, 0);
83 | analogWrite(LeftR, 0);
84 | analogWrite(RightR, 0);
85 | analogWrite(RightF, 100);
86 | }
87 |
88 | void turnRight()
89 | { Serial.println("Right");
90 | analogWrite(LeftF, 100);
91 | analogWrite(LeftR, 0);
92 | analogWrite(RightR, 0);
93 | analogWrite(RightF, 0);
94 | }
95 |
96 | void Reverse()
97 | { Serial.println("Reverse");
98 | analogWrite(LeftR, 150);
99 | analogWrite(RightR, 150);
100 | analogWrite(LeftF, 0);
101 | analogWrite(RightF, 0);
102 | }
103 |
104 | void Stop()
105 | { Serial.println("Stop");
106 | analogWrite(LeftF, 0);
107 | analogWrite(LeftR, 0);
108 | analogWrite(RightF, 0);
109 | analogWrite(RightR, 0);
110 | }
111 |
112 | void turnUSsensorLeft()
113 | { Serial.println("sensor turned left");
114 | myservo.write(135);
115 | }
116 |
117 | void turnUSsensorRight()
118 | { Serial.println("sensor turned right");
119 | myservo.write(2);
120 | }
121 |
122 | void turnUSsensorMiddle()
123 | { Serial.println("sensor turned middle");
124 | myservo.write(90);
125 | }
126 |
127 | bool detectLineIRm()
128 | { int z = digitalRead(IRm);
129 | if (z == 1)
130 | { return true;
131 | }
132 | else
133 | { return false;
134 | }
135 | }
136 |
137 | void offRoadL()
138 | { turnUSsensorMiddle();
139 | delay(500);
140 | while (detectObj())
141 | { turnLeft();
142 | delay(50);
143 | Stop();
144 | delay(50);
145 | }
146 | while (detectObjDistance() > 20) {
147 | turnUSsensorRight();
148 | delay(1000);
149 | Forward();
150 | delay(50);
151 | Stop();
152 | delay(50);
153 | }
154 | delay(1000);
155 | turnUSsensorRight();
156 | delay(500);
157 | while (!detectLineIRm ())
158 | { if (detectObjDistance() < 20) {
159 | turnLeft();
160 | Serial.println(detectObjDistance());
161 | }
162 | else if (detectObjDistance() > 30) {
163 | turnRight();
164 | Serial.println(detectObjDistance());
165 | }
166 | else if (detectObjDistance() > 20 && detectObjDistance() < 30)
167 | { Forward(); Serial.println(detectObjDistance());
168 | }
169 | }
170 | }
171 |
172 | void offRoadR()
173 | {
174 | turnUSsensorMiddle();
175 | while (detectObj())
176 | { turnRight();
177 | }
178 | turnUSsensorLeft();
179 | while (!detectLineIRm())
180 | { if (detectObjDistance() < 20) {
181 | turnRight();
182 | Serial.println(detectObjDistance());
183 | }
184 | else if (detectObjDistance() > 30) {
185 | turnLeft();
186 | Serial.println(detectObjDistance());
187 | }
188 | else if (detectObjDistance() > 20 && detectObjDistance() < 30)
189 | { Forward(); Serial.println(detectObjDistance());
190 | }
191 | }
192 |
193 | }
194 |
195 | bool detectObj()
196 | { digitalWrite(trig, HIGH);
197 | delayMicroseconds(10);
198 | digitalWrite(trig, LOW);
199 | unsigned long t = pulseIn(echo, HIGH); //microseconds
200 | float d = 340.0 * (t / 1000000.0) / 2 * 100; //cm
201 | Serial.println(d);
202 | if (d < 35)
203 | { return true;
204 | }
205 | else
206 | { return false;
207 | }
208 | }
209 |
210 | int detectObjDistance()
211 | { digitalWrite(trig, HIGH);
212 | delayMicroseconds(10);
213 | digitalWrite(trig, LOW);
214 | unsigned long t = pulseIn(echo, HIGH); //microseconds
215 | float d = 340.0 * (t / 1000000.0) / 2 * 100; //cm
216 | return d;
217 | }
218 |
--------------------------------------------------------------------------------
/arduino-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/arduino-ide-logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/myRobot/myRobot.ino:
--------------------------------------------------------------------------------
1 | #include
2 |
3 | #define SPEED 120
4 |
5 | #define echo 4 //yello
6 | #define trig 3 //green
7 |
8 | Servo myservo;
9 | const int servoPin = 2; // orange
10 |
11 | const int LeftF = 11; // orange
12 | const int LeftR = 10; // yello
13 | const int RightF = 6; // green
14 | const int RightR = 5; // blue
15 |
16 | const int IRl = A2; //white
17 | const int IRm = A1; //blue
18 | const int IRr = A0; //purple
19 |
20 |
21 |
22 | void setup() {
23 | Serial.begin(9600);
24 |
25 | pinMode(trig, OUTPUT);
26 | pinMode(echo, INPUT);
27 |
28 | pinMode(LeftF, OUTPUT);
29 | pinMode(RightF, OUTPUT);
30 | pinMode(LeftR, OUTPUT);
31 | pinMode(RightR, OUTPUT);
32 |
33 | pinMode(IRl,INPUT);
34 | pinMode(IRr,INPUT);
35 | pinMode(IRm,INPUT);
36 |
37 | myservo.attach(servoPin);
38 | }
39 |
40 | void loop()
41 | {
42 | int x = digitalRead(IRl);
43 | int y = digitalRead(IRm);
44 | int z = digitalRead(IRr);
45 |
46 | if(x == HIGH && z == LOW)
47 | { turnLeft();
48 | delay(10);
49 | }
50 | else if(x == LOW && z == HIGH)
51 | { turnRight();
52 | delay(10);
53 | }
54 | else if (x == HIGH && z == HIGH && y==HIGH)
55 | { Stop();
56 | delay(500);
57 | turnRight();
58 | delay(100);
59 | Stop();
60 | delay(100);
61 | }
62 | else if (x == LOW && z == LOW && y==LOW){
63 | Stop();
64 | }
65 | else
66 | { Forward();
67 | }
68 |
69 | if(detectObj())
70 | { turnUSsensorMiddle();
71 | obstacleDetector();
72 | }
73 | else
74 | { Forward();
75 | }
76 |
77 | }
78 |
79 | void obstacleDetector()
80 | {
81 | Stop();
82 | turnUSsensorMiddle();
83 | delay(3000);
84 |
85 | if(detectObj())
86 | { turnUSsensorLeft();
87 | delay(1000);
88 | if(detectObj())
89 | { turnUSsensorMiddle();
90 | Stop();
91 | delay(100);
92 | }
93 | else
94 | { offRoadL();
95 | }
96 | }
97 | else
98 | { Forward();
99 | delay(100);
100 | }
101 | }
102 |
103 |
104 | void Forward()
105 | { Serial.println("Forward");
106 | analogWrite(LeftF, SPEED);
107 | analogWrite(RightF, SPEED);
108 | analogWrite(LeftR, 0);
109 | analogWrite(RightR, 0);
110 | }
111 |
112 | void turnLeft()
113 | { Serial.println("Left");
114 | analogWrite(LeftF, 0);
115 | analogWrite(LeftR, 0);
116 | analogWrite(RightR, 0);
117 | analogWrite(RightF, SPEED);
118 | }
119 |
120 | void turnRight()
121 | { Serial.println("Right");
122 | analogWrite(LeftF, SPEED);
123 | analogWrite(LeftR, 0);
124 | analogWrite(RightR, 0);
125 | analogWrite(RightF, 0);
126 | }
127 |
128 | void Reverse()
129 | { Serial.println("Reverse");
130 | analogWrite(LeftR, SPEED);
131 | analogWrite(RightR, SPEED);
132 | analogWrite(LeftF, 0);
133 | analogWrite(RightF, 0);
134 | }
135 |
136 | void Stop()
137 | { Serial.println("Stop");
138 | analogWrite(LeftF, 0);
139 | analogWrite(LeftR, 0);
140 | analogWrite(RightF, 0);
141 | analogWrite(RightR, 0);
142 | }
143 |
144 | void turnUSsensorLeft()
145 | { Serial.println("sensor turned left");
146 | myservo.write(135);
147 | }
148 |
149 | void turnUSsensorRight()
150 | { Serial.println("sensor turned right");
151 | myservo.write(2);
152 | }
153 |
154 | void turnUSsensorMiddle()
155 | { Serial.println("sensor turned middle");
156 | myservo.write(90);
157 | }
158 |
159 | bool detectLineIR()
160 | { int z = digitalRead(IRr);
161 | if(z==1)
162 | { return true;
163 | }
164 | else
165 | { return false;
166 | }
167 | }
168 |
169 | void offRoadL()
170 | { turnUSsensorMiddle();
171 | delay(500);
172 | while(detectObj())
173 | { turnLeft();
174 | delay(50);
175 | Stop();
176 | delay(50);
177 | }
178 |
179 | turnLeft();
180 | delay(50);
181 | Stop();
182 | delay(50);
183 |
184 | while(detectObjDistance()>20){
185 | turnUSsensorRight();
186 | delay(100);
187 | Forward();
188 | delay(100);
189 | Stop();
190 | delay(10);
191 | }
192 | delay(1000);
193 | turnUSsensorRight();
194 | delay(500);
195 | while(!detectLineIRm())
196 | { if(detectObjDistance()<20)
197 | { turnLeft();delay(100);
198 | stop_Stop();delay(50);
199 | Serial.println(detectObjDistance());
200 | }
201 | else if(detectObjDistance()>30)
202 | { turnRight();delay(100);
203 | stop_Stop();delay(50);
204 | Serial.println(detectObjDistance());
205 | }
206 | else if(detectObjDistance()>20 && detectObjDistance()<30)
207 | { Forward();Serial.println(detectObjDistance());
208 | }
209 | }turnUSsensorMiddle();
210 | }
211 |
212 | //void offRoadR()
213 | //{
214 | // turnUSsensorMiddle();
215 | // while(detectObj())
216 | // { turnRight();
217 | // }
218 | // turnUSsensorLeft();
219 | // while(!detectLineIR())
220 | // { if(detectObjDistance()<20){turnRight();Serial.println(detectObjDistance());}
221 | // else if(detectObjDistance()>30){turnLeft();Serial.println(detectObjDistance());}
222 | // else if(detectObjDistance()>20 && detectObjDistance()<30)
223 | // { Forward();Serial.println(detectObjDistance());
224 | // }
225 | // }
226 | //
227 | //}
228 |
229 | bool detectObj()
230 | { digitalWrite(trig,HIGH);
231 | delayMicroseconds(10);
232 | digitalWrite(trig,LOW);
233 | unsigned long t = pulseIn(echo,HIGH); //microseconds
234 | float d = 340.0*(t/1000000.0)/2 *100; //cm
235 | Serial.println(d);
236 | if(d<35)
237 | { return true;
238 | }
239 | else
240 | { return false;
241 | }
242 | }
243 |
244 | int detectObjDistance()
245 | { digitalWrite(trig,HIGH);
246 | delayMicroseconds(10);
247 | digitalWrite(trig,LOW);
248 | unsigned long t = pulseIn(echo,HIGH); //microseconds
249 | float d = 340.0*(t/1000000.0)/2 *100; //cm
250 | return d;
251 | }
252 |
--------------------------------------------------------------------------------
/myRobotX/myRobotX.ino:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | #define speedPinR 5
5 | #define RightMotorDirPin1 4
6 | #define RightMotorDirPin2 7
7 | #define speedPinL 6
8 | #define LeftMotorDirPin1 8
9 | #define LeftMotorDirPin2 12
10 |
11 | #define SERVO_PIN 10
12 |
13 | #define Echo_PIN 2
14 | #define Trig_PIN 3
15 |
16 | #define SPEED1 130
17 | #define SPEED2 120
18 | #define SPEED3 100
19 |
20 | #define max_dist 150
21 | #define stop_range 10
22 | #define stop_wait 4
23 |
24 | #define IRSensorL A2
25 | #define IRSensorM A1
26 | #define IRSensorR A0
27 |
28 | #define buzzer 13
29 |
30 | int cm;
31 | bool turning;
32 | int counter;
33 |
34 |
35 | NewPing sonar(Trig_PIN, Echo_PIN, max_dist);
36 | Servo myservo;
37 |
38 | void setup() {
39 |
40 | pinMode(RightMotorDirPin1, OUTPUT);
41 | pinMode(RightMotorDirPin2, OUTPUT);
42 | pinMode(speedPinL, OUTPUT);
43 |
44 | pinMode(LeftMotorDirPin1, OUTPUT);
45 | pinMode(LeftMotorDirPin2, OUTPUT);
46 | pinMode(speedPinR, OUTPUT);
47 |
48 | pinMode(Trig_PIN, OUTPUT);
49 | pinMode(Echo_PIN, INPUT);
50 |
51 | pinMode(IRSensorL, INPUT);
52 | pinMode(IRSensorM, INPUT);
53 | pinMode(IRSensorR, INPUT);
54 |
55 | pinMode(buzzer, OUTPUT);
56 |
57 |
58 | myservo.attach(SERVO_PIN);
59 | myservo.write(85);
60 | delay(200);
61 |
62 | Serial.begin(9600);
63 |
64 | stop_Stop();
65 | // counter = 0;
66 | }
67 |
68 | void loop() {
69 |
70 |
71 | // int counter2 = 0;
72 | // cm = readDistance();
73 | // Serial.println(cm);
74 |
75 | int x = digitalRead(IRSensorL);
76 | int y = digitalRead(IRSensorR);
77 |
78 |
79 | if(detectObj())
80 | { turnUSsensorMiddle();
81 | obstacleDetector();
82 | }
83 | else
84 | { followLine();
85 | }
86 | }
87 |
88 |
89 | void followLine() {
90 |
91 | int valueLeft = digitalRead(IRSensorL);
92 | int valueRight = digitalRead(IRSensorR);
93 | int valueMiddle = digitalRead(IRSensorM);
94 |
95 | if ((valueLeft == HIGH && valueRight == LOW )) {
96 | go_Left();delay(10);
97 | stop_Stop();delay(10);
98 | } else if ((valueLeft == LOW && valueRight == HIGH)) {
99 | go_Right();delay(10);
100 | stop_Stop();delay(10);
101 | } else if (valueLeft == HIGH && valueRight == HIGH && valueMiddle == HIGH) {
102 | go_Right();
103 | } else if (valueLeft == LOW && valueRight == LOW && valueMiddle == LOW) {
104 | turn_back();
105 | }
106 | else {
107 | go_Advance();
108 | }
109 | }
110 |
111 | //Set Motor Speed
112 | void set_Motorspeed(char g) {
113 | if (g == 'L' || g == 'R' || g == 'S') {
114 | analogWrite(speedPinL, SPEED2);
115 | analogWrite(speedPinR, SPEED2);
116 | }else if(g == 'T'){
117 | analogWrite(speedPinL, SPEED3);
118 | analogWrite(speedPinR, SPEED3);
119 | }
120 | else {
121 | analogWrite(speedPinL, SPEED1);
122 | analogWrite(speedPinR, SPEED1);
123 | }
124 |
125 | }
126 |
127 | //Read Ultrasonic Sensor
128 | int readDistance() {
129 | int cm = sonar.ping_cm();
130 | return cm;
131 | }
132 |
133 | void go_Advance() {
134 | digitalWrite(RightMotorDirPin1, LOW);
135 | digitalWrite(RightMotorDirPin2, HIGH);
136 | digitalWrite(LeftMotorDirPin1, LOW);
137 | digitalWrite(LeftMotorDirPin2, HIGH);
138 | set_Motorspeed('A');
139 | }
140 | void go_Right() {
141 | digitalWrite(RightMotorDirPin1, LOW);
142 | digitalWrite(RightMotorDirPin2, HIGH);
143 | digitalWrite(LeftMotorDirPin1, HIGH);
144 | digitalWrite(LeftMotorDirPin2, LOW);
145 | set_Motorspeed('R');
146 | }
147 |
148 | void go_Left() {
149 | digitalWrite(RightMotorDirPin1, HIGH);
150 | digitalWrite(RightMotorDirPin2, LOW);
151 | digitalWrite(LeftMotorDirPin1, LOW);
152 | digitalWrite(LeftMotorDirPin2, HIGH);
153 | set_Motorspeed('L');
154 | }
155 |
156 | void stop_Stop() {
157 | digitalWrite(RightMotorDirPin1, LOW);
158 | digitalWrite(RightMotorDirPin2, LOW);
159 | digitalWrite(LeftMotorDirPin1, LOW);
160 | digitalWrite(LeftMotorDirPin2, LOW);
161 | set_Motorspeed('S');
162 | }
163 |
164 | void turn_back() {
165 | digitalWrite(RightMotorDirPin1, LOW);
166 | digitalWrite(RightMotorDirPin2, HIGH);
167 | digitalWrite(LeftMotorDirPin1, HIGH);
168 | digitalWrite(LeftMotorDirPin2, LOW);
169 | set_Motorspeed('T');
170 | }
171 |
172 | void obstacleDetector()
173 | {
174 | stop_Stop();
175 | turnUSsensorMiddle();
176 | delay(3000);
177 |
178 | if(detectObj())
179 | { turnUSsensorLeft();
180 | delay(1000);
181 | if(detectObj())
182 | { turnUSsensorMiddle();
183 | stop_Stop();
184 | delay(100);
185 | }
186 | else
187 | { offRoadL();
188 | }
189 | }
190 | else
191 | { go_Advance();
192 | delay(100);
193 | }
194 | }
195 |
196 | void turnUSsensorLeft()
197 | { Serial.println("sensor turned left");
198 | myservo.write(135);
199 | }
200 |
201 | void turnUSsensorRight()
202 | { Serial.println("sensor turned right");
203 | myservo.write(2);
204 | }
205 |
206 | void turnUSsensorMiddle()
207 | { Serial.println("sensor turned middle");
208 | myservo.write(90);
209 | }
210 |
211 |
212 | void offRoadL()
213 | { turnUSsensorMiddle();
214 | delay(500);
215 | while(detectObj())
216 | { go_Right();
217 | delay(50);
218 | stop_Stop();
219 | delay(50);
220 | }
221 |
222 | go_Right();
223 | delay(50);
224 | stop_Stop();
225 | delay(50);
226 |
227 | while(detectObjDistance()>20)
228 | { turnUSsensorRight();
229 | delay(100);
230 | go_Advance();
231 | delay(100);
232 | stop_Stop();
233 | delay(10);
234 | }
235 | delay(1000);
236 | turnUSsensorRight();
237 | delay(500);
238 | while(!detectLineIRm())
239 | { if(detectObjDistance()<20)
240 | { go_Right();delay(100);
241 | go_Advance();delay(20);
242 | stop_Stop();delay(50);
243 | Serial.println(detectObjDistance());
244 | }
245 | else if(detectObjDistance()>30)
246 | { go_Left();delay(100);
247 | go_Advance();delay(20);
248 | stop_Stop();delay(50);
249 | Serial.println(detectObjDistance());
250 | }
251 | else if(detectObjDistance()>20 && detectObjDistance()<30)
252 | { go_Advance();delay(100);
253 | stop_Stop();delay(50);
254 | Serial.println(detectObjDistance());
255 | }
256 | }turnUSsensorMiddle();
257 | }
258 |
259 | bool detectObj()
260 | { digitalWrite(Trig_PIN,HIGH);
261 | delayMicroseconds(10);
262 | digitalWrite(Trig_PIN,LOW);
263 | unsigned long t = pulseIn(Echo_PIN,HIGH); //microseconds
264 | float d = 340.0*(t/1000000.0)/2 *100; //cm
265 | Serial.println(d);
266 | if(d<25)
267 | { return true;
268 | }
269 | else
270 | { return false;
271 | }
272 | }
273 |
274 | int detectObjDistance()
275 | { digitalWrite(Trig_PIN,HIGH);
276 | delayMicroseconds(10);
277 | digitalWrite(Trig_PIN,LOW);
278 | unsigned long t = pulseIn(Echo_PIN,HIGH); //microseconds
279 | float d = 340.0*(t/1000000.0)/2 *100; //cm
280 | return d;
281 | }
282 |
283 | bool detectLineIRm()
284 | { int z = digitalRead(IRSensorM);
285 | if(z==1)
286 | { return true;
287 | }
288 | else
289 | { return false;
290 | }
291 | }
292 |
--------------------------------------------------------------------------------
/newlineFollower/newlineFollower.ino:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | #define speedPinR 5
5 | #define RightMotorDirPin1 4
6 | #define RightMotorDirPin2 7
7 | #define speedPinL 6
8 | #define LeftMotorDirPin1 8
9 | #define LeftMotorDirPin2 12
10 |
11 | #define SERVO_PIN 10
12 |
13 | #define Echo_PIN 2
14 | #define Trig_PIN 3
15 |
16 | #define SPEED1 130
17 | #define SPEED2 110
18 | #define SPEED3 100
19 |
20 | #define max_dist 150
21 | #define stop_range 10
22 | #define stop_wait 4
23 |
24 | #define IRSensorL A2
25 | #define IRSensorM A1
26 | #define IRSensorR A0
27 |
28 | #define buzzer 13
29 |
30 | int cm;
31 | bool turning;
32 | int counter;
33 |
34 |
35 | NewPing sonar(Trig_PIN, Echo_PIN, max_dist);
36 | Servo servo;
37 |
38 | void setup() {
39 |
40 | pinMode(RightMotorDirPin1, OUTPUT);
41 | pinMode(RightMotorDirPin2, OUTPUT);
42 | pinMode(speedPinL, OUTPUT);
43 |
44 | pinMode(LeftMotorDirPin1, OUTPUT);
45 | pinMode(LeftMotorDirPin2, OUTPUT);
46 | pinMode(speedPinR, OUTPUT);
47 |
48 | pinMode(Trig_PIN, OUTPUT);
49 | pinMode(Echo_PIN, INPUT);
50 |
51 | pinMode(IRSensorL, INPUT);
52 | pinMode(IRSensorM, INPUT);
53 | pinMode(IRSensorR, INPUT);
54 |
55 | pinMode(buzzer, OUTPUT);
56 |
57 |
58 | servo.attach(SERVO_PIN);
59 | servo.write(85);
60 | delay(200);
61 |
62 | Serial.begin(9600);
63 |
64 | stop_Stop();
65 | counter = 0;
66 | }
67 |
68 | void loop() {
69 |
70 |
71 | int counter2 = 0;
72 | cm = readDistance();
73 |
74 | Serial.println(cm);
75 |
76 | if (cm <= stop_range && cm != 0) {
77 | digitalWrite(buzzer, HIGH);
78 | delay(500);
79 | digitalWrite(buzzer, LOW);
80 | counter++;
81 | }
82 |
83 | if (counter >= stop_wait) {
84 | counter = 0;
85 | stop_Stop();
86 | turning = true;
87 |
88 | go_Right();
89 | delay(380);
90 | stop_Stop();
91 | delay(500);
92 | servo.write(0);
93 | delay(500);
94 |
95 | while (turning) {
96 | delay(100);
97 | cm = readDistance();
98 | if (cm < 20 && cm != 0) {
99 | go_Advance();
100 | delay(50);
101 | stop_Stop();
102 | }
103 | else {
104 | counter2++;
105 | }
106 | if (counter2 > 10) {
107 | go_Advance();
108 | delay(500);
109 | stop_Stop();
110 | turning = false;
111 | }
112 | }
113 |
114 | go_Left();
115 | delay(310);
116 | go_Advance();
117 | delay(500);
118 | stop_Stop();
119 | delay(500);
120 | turning = true;
121 | counter2 = 0;
122 |
123 | while (turning) {
124 | delay(100);
125 | cm = readDistance();
126 | if (cm < 20 && cm != 0) {
127 | go_Advance();
128 | delay(50);
129 | stop_Stop();
130 | }
131 | else {
132 | counter2++;
133 | }
134 | if (counter2 > 10) {
135 | go_Advance();
136 | delay(500);
137 | stop_Stop();
138 | turning = false;
139 | }
140 | }
141 | go_Left();
142 | delay(305);
143 | stop_Stop();
144 | delay(500);
145 | turning = true;
146 |
147 | while (turning) {
148 | int valueLeft = digitalRead(IRSensorL);
149 | int valueRight = digitalRead(IRSensorR);
150 | if (valueLeft == LOW || valueRight == LOW) {
151 | go_Advance();
152 | delay(50);
153 | stop_Stop();
154 | } else { // line found
155 | turning = false;
156 | go_Right();
157 | delay(300);
158 | stop_Stop();
159 | servo.write(103);
160 | }
161 | }
162 | } else {
163 | followLine();
164 | }
165 | }
166 |
167 |
168 | void followLine() {
169 |
170 | int valueLeft = digitalRead(IRSensorL);
171 | int valueRight = digitalRead(IRSensorR);
172 | int valueMiddle = digitalRead(IRSensorM);
173 |
174 | if ((valueLeft == HIGH && valueRight == LOW )) {
175 | go_Left();
176 | } else if ((valueLeft == LOW && valueRight == HIGH)) {
177 | go_Right();
178 | } else if (valueLeft == HIGH && valueRight == HIGH && valueMiddle == HIGH) {
179 | go_Right();
180 | } else if (valueLeft == LOW && valueRight == LOW && valueMiddle == LOW) {
181 | turn_back();
182 | }
183 | else {
184 | go_Advance();
185 | }
186 | }
187 |
188 | //Set Motor Speed
189 | void set_Motorspeed(char g) {
190 | if (g == 'L' || g == 'R' || g == 'S') {
191 | analogWrite(speedPinL, SPEED2);
192 | analogWrite(speedPinR, SPEED2);
193 | }else if(g == 'T'){
194 | analogWrite(speedPinL, SPEED3);
195 | analogWrite(speedPinR, SPEED3);
196 | }
197 | else {
198 | analogWrite(speedPinL, SPEED1);
199 | analogWrite(speedPinR, SPEED1);
200 | }
201 |
202 | }
203 |
204 | //Read Ultrasonic Sensor
205 | int readDistance() {
206 | int cm = sonar.ping_cm();
207 | return cm;
208 | }
209 |
210 | void go_Advance() {
211 | digitalWrite(RightMotorDirPin1, LOW);
212 | digitalWrite(RightMotorDirPin2, HIGH);
213 | digitalWrite(LeftMotorDirPin1, LOW);
214 | digitalWrite(LeftMotorDirPin2, HIGH);
215 | set_Motorspeed('A');
216 | }
217 | void go_Right() {
218 | digitalWrite(RightMotorDirPin1, LOW);
219 | digitalWrite(RightMotorDirPin2, HIGH);
220 | digitalWrite(LeftMotorDirPin1, HIGH);
221 | digitalWrite(LeftMotorDirPin2, LOW);
222 | set_Motorspeed('R');
223 | }
224 |
225 | void go_Left() {
226 | digitalWrite(RightMotorDirPin1, HIGH);
227 | digitalWrite(RightMotorDirPin2, LOW);
228 | digitalWrite(LeftMotorDirPin1, LOW);
229 | digitalWrite(LeftMotorDirPin2, HIGH);
230 | set_Motorspeed('L');
231 | }
232 |
233 | void stop_Stop() {
234 | digitalWrite(RightMotorDirPin1, LOW);
235 | digitalWrite(RightMotorDirPin2, LOW);
236 | digitalWrite(LeftMotorDirPin1, LOW);
237 | digitalWrite(LeftMotorDirPin2, LOW);
238 | set_Motorspeed('S');
239 | }
240 |
241 | void turn_back() {
242 | digitalWrite(RightMotorDirPin1, LOW);
243 | digitalWrite(RightMotorDirPin2, HIGH);
244 | digitalWrite(LeftMotorDirPin1, HIGH);
245 | digitalWrite(LeftMotorDirPin2, LOW);
246 | set_Motorspeed('T');
247 | }
248 |
--------------------------------------------------------------------------------
/readme-essentials/LIFOD.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noel319/Arduino-Robot/cfe593d5743f8b30175152b90b757df060bbf393/readme-essentials/LIFOD.jfif
--------------------------------------------------------------------------------
/readme-essentials/LIFOD.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noel319/Arduino-Robot/cfe593d5743f8b30175152b90b757df060bbf393/readme-essentials/LIFOD.jpg
--------------------------------------------------------------------------------
/readme-essentials/RAD Doc.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noel319/Arduino-Robot/cfe593d5743f8b30175152b90b757df060bbf393/readme-essentials/RAD Doc.docx
--------------------------------------------------------------------------------
/readme-essentials/RAD lf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noel319/Arduino-Robot/cfe593d5743f8b30175152b90b757df060bbf393/readme-essentials/RAD lf.png
--------------------------------------------------------------------------------
/readme-essentials/RAD oa1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noel319/Arduino-Robot/cfe593d5743f8b30175152b90b757df060bbf393/readme-essentials/RAD oa1.png
--------------------------------------------------------------------------------
/readme-essentials/RAD oa2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noel319/Arduino-Robot/cfe593d5743f8b30175152b90b757df060bbf393/readme-essentials/RAD oa2.png
--------------------------------------------------------------------------------
/readme-essentials/~$AD Doc.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noel319/Arduino-Robot/cfe593d5743f8b30175152b90b757df060bbf393/readme-essentials/~$AD Doc.docx
--------------------------------------------------------------------------------