diff --git a/Photos/diagram.png b/Photos/diagram.png new file mode 100644 index 0000000..69a5dfc Binary files /dev/null and b/Photos/diagram.png differ diff --git a/autonomousCar/driver.ino b/autonomousCar/autonomousCar.ino similarity index 53% rename from autonomousCar/driver.ino rename to autonomousCar/autonomousCar.ino index da088b4..ca92a39 100644 --- a/autonomousCar/driver.ino +++ b/autonomousCar/autonomousCar.ino @@ -7,9 +7,18 @@ /* * Include all libraries. + * */ -//Include the Arduino Stepper Library -#include + +/* + * Include the Arduino Servo Library + */ +#include + +/* + * Include the Ping Ulptrasonic Library + */ +#include /* * ------------------------------------------------------- @@ -18,18 +27,18 @@ /* * All Definitions. */ -// Number of steps per internal motor revolution -#define STEPS_PER_REV 32 - -#define GEAR_RED 64 +#define ULTRASONIC_TIMEOUT 100000 +#define SERVO_SPEED 6 +#define MAX_DISTANCE 200 /* * ------------------------------------------------------- */ -// defines pins numbers +/* + * Define Ultrasonic Pins + */ const int trigPin = 12; -const int echoPin = 9; -//const int response = 13; +const int echoPin = 11; /* * For Motor Driver Pis. */ @@ -41,37 +50,51 @@ const int rightSpeed = 5; const int leftSpeed = 3; /* - * For Stepper Motor Pins + * For Servo Motor Pins */ -const int in1_1 = 6; -const int in1_2 = 10; -const int in1_3 = 11; -const int in1_4 = 13; - -const int stepper_motor_speed = 700; +const int servoPin = 6; -// Number of steps per geared output rotation -const float STEPS_PER_OUT_REV = STEPS_PER_REV * GEAR_RED; -const int StepsRequired = STEPS_PER_OUT_REV / 4; +/* + * Define Servo Data Struct + */ +Servo myServo; -// define Stepper -Stepper steppermotor(STEPS_PER_REV, in1_1, in1_2, in1_3, in1_4); +/* + * Define Ultrasonic Struct + */ +NewPing sonar1 (trigPin, echoPin, MAX_DISTANCE); -// defines variables +/* + * Define all useful variables + */ long duration; -int distance, distanceCm, pos; +float distance, distanceCm; +int pos, dir; + /* - * -*/ -void clearUltrasonic(){ - // Clears the trigPin - analogWrite(trigPin, LOW); - delayMicroseconds(2); + * Turn Servo using custom Speed + */ +void turnServo(int from, int deg){ + int d; + if (from > deg){ + for(d=from; d>=deg; d--){ + myServo.write(d); + delay(SERVO_SPEED); + } + } else{ + for(d=from; d<=deg; d++){ + myServo.write(d); + delay(SERVO_SPEED); + } + } } +/* + * Setup Wiring Components + */ void setup() { - pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output - pinMode(echoPin, INPUT); // Sets the echoPin as an Input + //pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output + //pinMode(echoPin, INPUT); // Sets the echoPin as an Input //pinMode(response, OUTPUT); // Sets to led aoutput. @@ -83,37 +106,49 @@ void setup() { pinMode(rightSpeed, OUTPUT); pinMode(leftSpeed, OUTPUT); + //Initialize Servo Motor + myServo.attach(servoPin); + pos = 1; + dir = 1; + + //Initialize car direction and make walk + absolute(); + forward(); + Serial.begin(9600); // Starts the serial communication - clearUltrasonic(); + + // Clears the trigPin + analogWrite(trigPin, LOW); + delayMicroseconds(2); } /* - * Stepper Function + * Stepper Function for Servo. + * 1st Step: straight + * 2nd Step: left + * 3rd Step: straight + * 4th Step: right */ void next_step() { if(pos == 1) - { - steppermotor.setSpeed(stepper_motor_speed); - steppermotor.step(StepsRequired); + { //Servo move to right + turnServo(90, 30); pos = 2; } else if(pos ==2) - { - steppermotor.setSpeed(stepper_motor_speed); - steppermotor.step(-1*StepsRequired); + { //Servo move to center + turnServo(30, 90); pos = 3; } else if(pos == 3) - { - steppermotor.setSpeed(stepper_motor_speed); - steppermotor.step(-1*StepsRequired); + { //Servo move to left + turnServo(90, 150); pos = 4; } else if(pos == 4) - { - steppermotor.setSpeed(stepper_motor_speed); - steppermotor.step(StepsRequired); + { //Servo move to center + turnServo(150, 90); pos = 1; } } @@ -122,51 +157,42 @@ void next_step() * Distance meter via Ultrasonic */ -int getDistance(int echoPin, int trigPin){ - clearUltrasonic(); - // Sets the trigPin on HIGH state for 10 micro seconds - digitalWrite(trigPin, HIGH); - delayMicroseconds(10); - digitalWrite(trigPin, LOW); - - // Reads the echbackwardoPin, returns the sound wave travel time in microseconds - duration = pulseIn(echoPin, HIGH); - distanceCm = duration * 0.0340 / 2; +float getDistance(int echoPin, int trigPin){ + do{ + int uS1 = sonar1.ping(); + distanceCm = uS1 / US_ROUNDTRIP_CM; + } while(distanceCm == 0); return distanceCm; } /* - * Stepper Function + * Left turn walk */ -void step(/*boolean dir,*/int steps){ -// digitalWrite(dirPin1,dir); -// digitalWrite(dirPin2,dir); - delay(50); - for(int i=0;ih2{page-b

2. Autonomous Parking

+
+

Το αυτότομο πρκάριμα αποτελείται από το όχημα με εκατεστημένους τους απάραίτητους αισθητήρες και ελεγκτές +καθός και έναν μικροελεγκτή (Arduino) για τον έλεγχο αυτών των ελεγκτών. Σκοπός είναι το όχημα να μπορεί +να μάθει μέσω του διαδικτύου το "Status" του parking και να παρκάρει στην 1η διαθέσιμη θέση εφ' όσων +υπάρχει μία τουλάχιστων διαθέσιμη θέση στον χώρο στάθμευσης.

+
+
+

Η υλοποίηση χωρίζεται σε δύο βασικά μέρη.

+
+
+
    +
  • +

    Το 1ο μέρος αποτελείται από τον μικροελεγκτή για τον έλεγχο των αισθητήρων και των κινητήρων του οχήματος και +εκτελώντας τα απαραίτητα βήματα, να μπορέσει να παρκάρει το όχημα.

    +
  • +
  • +

    Το 2ο μέρος αποτείται από τον κόμβο ο οποίος θα έχει πρόσβαση στο διαδίκτυο, ο οποίος αφού ελέγξει αν υπάρχει +διαθέσιμη θέση και γνωρίζει ποια είναι η πρώτη ελεύθερη θέση, να δώσει εντολή στον μικροελεγκτή να παρκάρει σε αυτή.

    +
  • +
+
+
+

2.1. Microcotroller and Car

+
+

2.1.1. Υλικά Κόμβου

+
+
    +
  • +

    1 x Arduino Uno

    +
  • +
  • +

    1 x Servo Motor

    +
  • +
  • +

    1 x Motor Driver

    +
  • +
  • +

    4 x Moter για τους 4 τροχούς

    +
  • +
  • +

    1 x Ultrasonic

    +
  • +
  • +

    1 x 9V Battery

    +
  • +
  • +

    1 x 4,8V Battery

    +
  • +
  • +

    1 x Car

    +
  • +
  • +

    1 x Raspberry Pi

    +
  • +
+
+
+
+

2.1.2. Υλοποίηση και Προγραμματισμός

+
+

Ο motor driver, το Servo motor καθώς και ο Ultrasonic αισθητήρας κουμπώνουν στον μικροελεγκτή Arduino Uno που χρησιμοποιούμε, +τον οποίο τον εγκαθηστούμε πάνω στο καλούπι του οχήματος το οποίο έχει εγκατεστημένα 4 τροχούς. Οι τροχοί οδηοούνται από 4 moters +τα οποία τροφοδοτούνται από τον motor driver.

+
+
+

Η συνδεσμολογία έχει την διάταξη που παρουσιάζεται παρακάτω:

+
+
+
+
+
+1000 +
+
Figure 3. Συνδεσμολογία moter, motor driver, arduino, ultrasonic sensor και servo motor.
+
+
+
@@ -629,9 +706,11 @@ SLOW SUCCESS BUILDS CHARACTER, FAST SUCCESS BUILDS EGO. + + diff --git a/servo_pins_description.jpg b/servo_pins_description.jpg new file mode 100644 index 0000000..1f41f48 Binary files /dev/null and b/servo_pins_description.jpg differ