aboutsummaryrefslogtreecommitdiff
path: root/doc/Lesson 4 Obstacle Avoidance Car
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-08-26 20:33:02 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-08-26 20:33:02 +0200
commitba216919262d7f888bfb99debf81babe1ce88e0e (patch)
tree16c19610a7a3a77c97b99a63f6ba85d11ebde4ec /doc/Lesson 4 Obstacle Avoidance Car
parentd80736ab6e8e3cad2f1a30c6eaba2d6883dbe967 (diff)
Move lessons to doc
Diffstat (limited to 'doc/Lesson 4 Obstacle Avoidance Car')
-rwxr-xr-xdoc/Lesson 4 Obstacle Avoidance Car/Lesson 4 Obstacle Avoidance Car.avibin0 -> 21564216 bytes
-rwxr-xr-xdoc/Lesson 4 Obstacle Avoidance Car/Obstacle Avoidance Car.pdfbin0 -> 853690 bytes
-rw-r--r--doc/Lesson 4 Obstacle Avoidance Car/Obstacle_Avoidance_Car/Obstacle_Avoidance_Car.ino185
3 files changed, 185 insertions, 0 deletions
diff --git a/doc/Lesson 4 Obstacle Avoidance Car/Lesson 4 Obstacle Avoidance Car.avi b/doc/Lesson 4 Obstacle Avoidance Car/Lesson 4 Obstacle Avoidance Car.avi
new file mode 100755
index 0000000..71ef5b1
--- /dev/null
+++ b/doc/Lesson 4 Obstacle Avoidance Car/Lesson 4 Obstacle Avoidance Car.avi
Binary files differ
diff --git a/doc/Lesson 4 Obstacle Avoidance Car/Obstacle Avoidance Car.pdf b/doc/Lesson 4 Obstacle Avoidance Car/Obstacle Avoidance Car.pdf
new file mode 100755
index 0000000..25b20a5
--- /dev/null
+++ b/doc/Lesson 4 Obstacle Avoidance Car/Obstacle Avoidance Car.pdf
Binary files differ
diff --git a/doc/Lesson 4 Obstacle Avoidance Car/Obstacle_Avoidance_Car/Obstacle_Avoidance_Car.ino b/doc/Lesson 4 Obstacle Avoidance Car/Obstacle_Avoidance_Car/Obstacle_Avoidance_Car.ino
new file mode 100644
index 0000000..c76feea
--- /dev/null
+++ b/doc/Lesson 4 Obstacle Avoidance Car/Obstacle_Avoidance_Car/Obstacle_Avoidance_Car.ino
@@ -0,0 +1,185 @@
+//www.elegoo.com
+//2016.09.12
+
+#define send 1
+
+#include <Servo.h> //servo library
+Servo myservo; // create servo object to control servo
+
+int Echo = A1;
+int Trig = A0;
+
+int ENA = 10;
+int in1 = 9;
+int in2 = 8;
+
+int in3 = 7;
+int in4 = 6;
+int ENB = 5;
+
+int ABS = 130;
+
+int dist = 50;
+
+int rightDistance = 0, leftDistance = 0, middleDistance = 0;
+
+void _mForward()
+{
+ analogWrite(ENA, ABS);
+ analogWrite(ENB, ABS);
+
+ digitalWrite(in1, LOW);
+ digitalWrite(in2, HIGH);
+
+ digitalWrite(in3, LOW);
+ digitalWrite(in4, HIGH);
+
+ Serial.println("go forward!");
+}
+
+void _mBack()
+{
+ analogWrite(ENA, ABS);
+ analogWrite(ENB, ABS);
+
+ digitalWrite(in1, HIGH);
+ digitalWrite(in2, LOW);
+
+ digitalWrite(in3, HIGH);
+ digitalWrite(in4, LOW);
+
+ Serial.println("go back!");
+}
+
+void _mleft()
+{
+ analogWrite(ENA, ABS);
+ analogWrite(ENB, ABS);
+
+ digitalWrite(in1, LOW);
+ digitalWrite(in2, HIGH);
+
+ digitalWrite(in3, HIGH);
+ digitalWrite(in4, LOW);
+
+ Serial.println("go left!");
+}
+
+void _mright()
+{
+ analogWrite(ENA, ABS);
+ analogWrite(ENB, ABS);
+
+ digitalWrite(in1, HIGH);
+ digitalWrite(in2, LOW);
+
+ digitalWrite(in3, LOW);
+ digitalWrite(in4, HIGH);
+
+ Serial.println("go right!");
+}
+
+void _mStop()
+{
+ digitalWrite(ENA, LOW);
+ digitalWrite(ENB, LOW);
+
+ Serial.println("Stop!");
+}
+/*Ultrasonic distance measurement Sub function*/
+int Distance_test()
+{
+ digitalWrite(Trig, LOW);
+ delayMicroseconds(2);
+ digitalWrite(Trig, HIGH);
+
+ delayMicroseconds(20);
+ digitalWrite(Trig, LOW);
+
+ float Fdistance = pulseIn(Echo, HIGH);
+ Fdistance = Fdistance / 58; // cm
+
+ return (int)Fdistance;
+}
+
+void setup()
+{
+ myservo.attach(3); // attach servo on pin 3 to servo object
+ Serial.begin(9600);
+
+ pinMode(Echo, INPUT);
+ pinMode(Trig, OUTPUT);
+
+ pinMode(in1, OUTPUT);
+ pinMode(in2, OUTPUT);
+ pinMode(in3, OUTPUT);
+ pinMode(in4, OUTPUT);
+
+ pinMode(ENA, OUTPUT);
+ pinMode(ENB, OUTPUT);
+
+ _mStop();
+}
+
+void
+loop()
+{
+ myservo.write(90);//setservo position according to scaled value
+ delay(500);
+
+ middleDistance = Distance_test();
+
+#ifdef send
+ Serial.print("middleDistance=");
+ Serial.println(middleDistance);
+#endif
+
+ if (middleDistance > dist) {
+ _mForward();
+ return;
+ }
+
+ _mStop();
+ delay(500);
+ myservo.write(5);
+
+ delay(1000);
+ rightDistance = Distance_test();
+
+#ifdef send
+ Serial.print("rightDistance=");
+ Serial.println(rightDistance);
+#endif
+
+ delay(500);
+ myservo.write(90);
+
+ delay(1000);
+ myservo.write(180);
+
+ delay(1000);
+ leftDistance = Distance_test();
+
+#ifdef send
+ Serial.print("leftDistance=");
+ Serial.println(leftDistance);
+#endif
+
+ delay(500);
+ myservo.write(90);
+
+ delay(1000);
+
+ if (rightDistance > leftDistance) {
+ _mright();
+ }
+ if (rightDistance < leftDistance) {
+ _mleft();
+ }
+ if ((rightDistance <= dist) || (leftDistance <= dist)) {
+ _mBack();
+ }
+
+ delay(180);
+}
+