5 changed files with 345 additions and 0 deletions
@ -0,0 +1,91 @@ |
|||
|
|||
Πανεπιστήμιο Δυτικής Αττικής |
|||
|
|||
Σχολή Μηχανικών |
|||
|
|||
Τμήμα Μηχανικών Πληροφορικής και Υπολογιστών |
|||
|
|||
Διαδίκτυο των Αντικειμένων |
|||
|
|||
Χειμερινό εξάμηνο 2019 – 2020 |
|||
|
|||
Στοιχεία ομάδας : |
|||
Γκίκα Χριστίνα 151066 |
|||
Λιζάι Πάρις 151039 |
|||
|
|||
Τεκμηρίωση |
|||
1.Περιγραφή του Project |
|||
Σκοπός του project είναι το "αυτοκίνητο" με τη βοήθεια αισθητήρων να μπορεί να κινείται στον χώρο και να αποφεύγει ότι εμπόδια υπάρχουν αναλύοντας τον χώρο και αποφασίζοντας ποια είναι η βέλτιστη κίνηση. Ταυτόχρονα μπορεί να ανιχνεύει κινήσεις με τη βοήθεια ενός αισθητήρα κίνησης και να ειδοποιεί τον χρήστη ανάβοντας ένα λαμπάκι led αλλά και ταυτόχρονα προβαλλοντας στην οθονη το χρονο που ανιχνευτηκε η κινηση αλλά και το ποτέ σταμάτησε να γίνεται αντιληπτή. Βασική ιδέα του project είναι να έχουμε ένα security-robot. |
|||
|
|||
|
|||
2.Υλικά που χρησιμοποιήθηκαν κατά την υλοποίησή του project |
|||
|
|||
|
|||
|
|||
Τα υλικα που χρησιμοποιήσαμε είναι τα εξής: |
|||
|
|||
|
|||
Ενα Αυτοκινητάκι με 4 dc motors για την κινηση των 4 ροδών |
|||
|
|||
Ένα arduino uno |
|||
|
|||
Ενας αισθητήρας κίνησης pir sensor |
|||
|
|||
Ένα breadboard |
|||
|
|||
Ένα deep switch |
|||
|
|||
Ένα l298n ολοκληρωμένο κύκλωμα το οποίο συνδέει τα dc motors καθώς και το servo motor |
|||
|
|||
Ένα servo motor για την διευκόλυνση της κίνησης του αισθητήρα απόστασης |
|||
|
|||
Ένα proximity sensor για την ανίχνευση αντικειμένων σε κοντινη αποσταση |
|||
|
|||
1 9V μπαταρια και καλωδια συνδεσης με το arduino |
|||
|
|||
4 2A μπαταρίες |
|||
|
|||
Καλώδια MM MF |
|||
|
|||
1 led για την ενδειξη κίνησης μέσα στο χωρο |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
3. Συνδεσμολογία |
|||
|
|||
|
|||
image:./IoT_151039_151066/συνδεσμολογια1.jpg[ |
|||
"car",width=400, |
|||
link="./IoT_151039_151066/συνδεσμολογια1.jpg] |
|||
|
|||
|
|||
image:./IoT_151039_151066/συνδεσμολογια2.jpg[ |
|||
"car",width=400, |
|||
link="./IoT_151039_151066/συνδεσμολογια2.jpg] |
|||
|
|||
image:./IoT_151039_151066/συνδεσμολογια3.jpg[ |
|||
"car",width=400, |
|||
link="./IoT_151039_151066/συνδεσμολογια3.jpg] |
|||
|
|||
|
|||
|
|||
Πάνω στο breadboard είναι συνδεδεμενο το arduino uno το οποιο με τη βοήθεια ενός ολοκληρωμένου l298n συμβάλει στην κίνηση των 4 dc motors και του servo motor. Ο αισθητήρας κίνησης είναι στερεωμένος σε κομμάτι φελιζόλ σε μεγαλύτερο ύψος ώστε να μην επηρεάζεται από την κίνηση του cer motor και να μπορεί να ανιχνεύσει σωστα τις κινησεις στον χωρο. Το servo motor βοηθα στην κίνηση του αισθητήρα απόστασης και είναι επίσης στερεωμένο με φελιζολ για την βέλτιστη λειτουργία του. |
|||
|
|||
|
|||
4. Λειτουργία |
|||
|
|||
|
|||
|
|||
image:./IoT_151039_151066/workingc.png[ |
|||
"car",width=400, |
|||
link="./IoT_151039_151066/workingc.png] |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
Στην παραπάνω εικόνα φαίνονται οι κινήσεις του robot καθώς αυτό με τον αισθητήρα απόστασης υπολογίζει τις αποστάσεις δεξια αριστερά και ευθεία και επιλέγει να κινηθεί προς την πλευρά με τη μεγαλύτερη απόσταση.Σε περίπτωση αδιεξόδου το robot κάνει όπισθεν μέχρι ο αισθητήρας να εντοπίσει μια καλύτερη λύση δηλαδη να ελευθερωθεί από δεξιά ή αριστερα.Επιπλέον σε περίπτωση ανίχνευσης κίνησης ο χρήστης λαμβάνει ειδοποίηση (Motion detected at...) που του υποδεικνυει την χρονική στιγμή που ανιχνεύτηκε κίνηση και σε περίπτωση που ήταν συνεχόμενη του υποδεικνύει και τη χρονική στιγμή που σταμάτησε η κίνηση. |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,254 @@ |
|||
#include <Servo.h> // Includes servo library. |
|||
// defines pins numbers
|
|||
const int trigPin = 12; |
|||
const int echoPin = 11; |
|||
const int lm1=7; |
|||
const int lm2=6; |
|||
const int rm1=5; |
|||
const int rm2=4; |
|||
const int servoPin=13; |
|||
|
|||
|
|||
|
|||
//the time we give the sensor to calibrate (10-60 secs according to the datasheet)
|
|||
int calibrationTime = 30; |
|||
|
|||
//the time when the sensor outputs a low impulse
|
|||
long unsigned int lowIn; |
|||
|
|||
//the amount of milliseconds the sensor has to be low
|
|||
//before we assume all motion has stopped
|
|||
long unsigned int pause = 5000; |
|||
|
|||
boolean lockLow = true; |
|||
boolean takeLowTime; |
|||
|
|||
int pirPin = 2; //the digital pin connected to the PIR sensor's output
|
|||
int ledPin = 9; |
|||
|
|||
|
|||
|
|||
Servo myservo; |
|||
|
|||
// orizw katholikes metavlites gia na tis peirazw apo tis sunartiseis kai na boroun na allazoun kai timh
|
|||
long duration; |
|||
int distance; |
|||
int distance_f; //apostash tou amaksiou apo antikeimeno eutheia
|
|||
int distance_r; //apostash tou amaksiou apo antikeimeno deksia
|
|||
int distance_l; //apostash tou amaksiou apo antikeimeno aristera
|
|||
int maxLowDistance=20; //elaxisth apostash sthn opia ama vrethw stamataw
|
|||
|
|||
void setup() { |
|||
|
|||
|
|||
pinMode(pirPin, INPUT); |
|||
pinMode(ledPin, OUTPUT); |
|||
digitalWrite(pirPin, LOW); |
|||
|
|||
//give the sensor some time to calibrate
|
|||
Serial.print("calibrating sensor "); |
|||
for(int i = 0; i < calibrationTime; i++){ |
|||
Serial.print("."); |
|||
delay(1000); |
|||
} |
|||
Serial.println(" done"); |
|||
Serial.println("SENSOR ACTIVE"); |
|||
delay(50); |
|||
|
|||
|
|||
pinMode(trigPin, OUTPUT); |
|||
pinMode(echoPin, INPUT); |
|||
|
|||
pinMode(lm1,OUTPUT); //orizw tis metavlites gia tous kinitires mou gia na borw na tous diaxiristw
|
|||
pinMode(lm2,OUTPUT); |
|||
pinMode(rm1,OUTPUT); |
|||
pinMode(rm2,OUTPUT); |
|||
|
|||
myservo.attach(servoPin); |
|||
myservo.write(90); |
|||
|
|||
Serial.begin(9600); // Starts the serial communication
|
|||
} |
|||
void loop() { |
|||
|
|||
|
|||
|
|||
|
|||
if(digitalRead(pirPin) == HIGH){ |
|||
digitalWrite(ledPin, HIGH); //the led visualizes the sensors output pin state
|
|||
if(lockLow){ |
|||
//makes sure we wait for a transition to LOW before any further output is made:
|
|||
lockLow = false; |
|||
Serial.println("---"); |
|||
Serial.print("motion detected at "); |
|||
Serial.print(millis()/1000); |
|||
Serial.println(" sec"); |
|||
delay(50); |
|||
} |
|||
takeLowTime = true; |
|||
} |
|||
|
|||
if(digitalRead(pirPin) == LOW){ |
|||
digitalWrite(ledPin, LOW); //the led visualizes the sensors output pin state
|
|||
|
|||
if(takeLowTime){ |
|||
lowIn = millis(); //save the time of the transition from high to LOW
|
|||
takeLowTime = false; //make sure this is only done at the start of a LOW phase
|
|||
} |
|||
//if the sensor is low for more than the given pause,
|
|||
//we assume that no more motion is going to happen
|
|||
if(!lockLow && millis() - lowIn > pause){ |
|||
//makes sure this block of code is only executed again after
|
|||
//a new motion sequence has been detected
|
|||
lockLow = true; |
|||
Serial.print("motion ended at "); //output
|
|||
Serial.print((millis() - pause)/1000); |
|||
Serial.println(" sec"); |
|||
delay(50); |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
distance_f=ping(); //Psaxnw gia thn apostash pou exw brosta mou
|
|||
if(distance_f > maxLowDistance){ //An einai megaluteri apo 20cm h apostash tou amaksiou apo to prwto ebodio (diladi thn elaxisth apostash pou tou exw orisei) tote tha paei eutheia
|
|||
displayDistance(); //to kanw gia na kanw debug kai na kserw oti leitourgei o aisthititras apostashs
|
|||
front(); //kalw thn sunartisi gia na paei brosta to amaksi mou
|
|||
delay(300); |
|||
}else{ //An den einai megaluteri apo 20cm h apostash tou amaksiou apo to prwto ebodio
|
|||
Break(); //Kalw thn sunartisi break gia na stamatisei na kineite to amaksi
|
|||
get_Distance(); //kalw thn get_distance kai pernw plirofories gia tis apo staseis pou exw gyrw mou
|
|||
if(distance_r > maxLowDistance){ //pleon gnorizw ti exw deksia mou kai elegxw an yparxei ebodio sta epomena 20cm brosta mou.
|
|||
right(); //an den exw ebodio stivw epitopou deksia
|
|||
delay(300); |
|||
front(); |
|||
}else if(distance_l > maxLowDistance){ |
|||
left(); |
|||
delay(300); |
|||
front(); |
|||
}else{ |
|||
back(); |
|||
delay(300); |
|||
Break(); |
|||
} |
|||
|
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
//thn exw gia debug ayth thn sunartisi gia na dw an leitourgei o esthitiras swsta kai an katagrafontai oi times gia tis apostaseis eutheia deksia kai aristera
|
|||
void displayDistance(){ |
|||
Serial.print("Right Distance : "); |
|||
Serial.print(distance_r); |
|||
Serial.println(""); |
|||
Serial.print("Front Distance : "); |
|||
Serial.print(distance_f); |
|||
Serial.println(""); |
|||
Serial.print("Left Distance : "); |
|||
Serial.print(distance_l); |
|||
Serial.println(""); |
|||
|
|||
} |
|||
|
|||
//Logo tou oloklirwmenou LM298 borw na diaxiristw kai pio eukola to amaksaki mou
|
|||
//exw ftiaksei 5 sunartiseis gia na boreis na pigainei brosta pisw aristera deksia kai na stamataei
|
|||
|
|||
//shnarthsh gia na pigenei brosta to amaksi
|
|||
void front(){ |
|||
Serial.println("Forward Move"); //vazw se leitourgeia kai tous 4 troxous
|
|||
digitalWrite(lm2,HIGH); |
|||
digitalWrite(rm2,HIGH); |
|||
digitalWrite(lm1,LOW); |
|||
digitalWrite(rm1,LOW); |
|||
|
|||
} |
|||
|
|||
|
|||
//shnarthsh gia na pigenei pisw to amaksi
|
|||
void back(){ |
|||
Serial.println("Back Move"); //vazw se leitourgeia kai tous 4 troxous alla antistrefw thn polikothta gia na paei pros ta pisw
|
|||
digitalWrite(lm1,HIGH); |
|||
digitalWrite(rm1,HIGH); |
|||
digitalWrite(lm2,LOW); |
|||
digitalWrite(rm2,LOW); |
|||
} |
|||
|
|||
|
|||
//shnarthsh gia na pigenei aristera to amaksi
|
|||
void left(){ |
|||
Serial.println("Left Move"); |
|||
digitalWrite(rm2,HIGH); //vazw se leitourgeia mono tous dyo deksious troxous
|
|||
digitalWrite(rm1,LOW); |
|||
digitalWrite(lm1,HIGH); |
|||
digitalWrite(lm2,LOW); |
|||
} |
|||
|
|||
|
|||
//shnarthsh gia na pigenei deksia to amaksi
|
|||
void right(){ |
|||
Serial.println("Right Move"); |
|||
digitalWrite(lm2,HIGH); //vazw se leitourgeia mono tous dyo aristerous troxous
|
|||
digitalWrite(lm1,LOW); |
|||
digitalWrite(rm1,HIGH); |
|||
digitalWrite(rm2,LOW); |
|||
} |
|||
|
|||
|
|||
//shnarthsh gia na pigenei stamataei to amaksi
|
|||
void Break(){ |
|||
digitalWrite(lm2,LOW); //vgazw apo thn leitourgeia kai tous 4 troxous
|
|||
digitalWrite(lm1,LOW); |
|||
digitalWrite(rm1,LOW); |
|||
digitalWrite(rm2,LOW); |
|||
} |
|||
|
|||
void get_Distance(){ |
|||
myservo.write(0); //gurnaw to servo mou deksia gia na boresei na parei metrisi o aisthitiras
|
|||
delay(500); |
|||
int temp_r1=ping(); //pernw thn apostash deksia mou
|
|||
myservo.write(45); //gurnaw to servo mou 45 moires (diladi loksa deksia)
|
|||
delay(500); |
|||
int temp_r2=ping(); //pernw thn apostash gia tis 45 moires
|
|||
if(temp_r1<temp_r2){ //kai apo tis duo apostaseis tha parw thn mikroteri gia na borw na exw mia pio kathari eikona tou ti vriksete deksia mou. Peiramatika apodikniete oti einai polu kalutero na kserw ti vriskete diksia mou gnorizontas kai gia tis 0 moires
|
|||
distance_r=temp_r1; //kai gia tis 45 gia na borw na stripsw me asfaleia
|
|||
}else{ |
|||
distance_r=temp_r2; |
|||
} |
|||
myservo.write(90); //pleon o servo mou einai stis 90 moires ara o aisthitiras "koitaei" eutheia
|
|||
delay(500); |
|||
distance_f=ping(); //pernw thn apostash eutheia mou
|
|||
|
|||
myservo.write(135); //kai omoia gia thn diadikasia pou ekana gia ta deksia tha kanw kai gia ta aristera.Tha parw metrisi kai apo tis 135 moires kai apo tis 180 moires (diladi teleiws aristera) kai apo tis duo tha thewrisw gia thn apostash aristera mou thn mikroteri
|
|||
delay(500); |
|||
int temp_l1=ping(); |
|||
myservo.write(180); |
|||
delay(500); |
|||
int temp_l2=ping(); |
|||
if(temp_l1<temp_l2){ |
|||
distance_l=temp_l1; |
|||
}else{ |
|||
distance_l=temp_l2; |
|||
} |
|||
myservo.write(90); |
|||
|
|||
} |
|||
//thn xrisimopoiw gia na parw tis metriseis tou aisthitira kai na kanw thn katalili metatropi.
|
|||
int ping(){ |
|||
// Clears the trigPin
|
|||
digitalWrite(trigPin, LOW); |
|||
delayMicroseconds(2); |
|||
// Sets the trigPin on HIGH state for 10 micro seconds
|
|||
digitalWrite(trigPin, HIGH); |
|||
delayMicroseconds(10); |
|||
digitalWrite(trigPin, LOW); |
|||
// Reads the echoPin, returns the sound wave travel time in microseconds
|
|||
duration = pulseIn(echoPin, HIGH); |
|||
// Calculating the distance
|
|||
distance= duration*0.034/2; |
|||
// Prints the distance on the Serial Monitor
|
|||
return distance; |
|||
} |
Loading…
Reference in new issue