Browse Source

Upload files to ''

master
Paris_Lizaj 5 years ago
parent
commit
035d2dd289
  1. 91
      IoT.adoc
  2. BIN
      motionDetected.mp4
  3. BIN
      robotloading.mp4
  4. BIN
      robotmove.mp4
  5. 254
      test1.ino

91
IoT.adoc

@ -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...) που του υποδεικνυει την χρονική στιγμή που ανιχνεύτηκε κίνηση και σε περίπτωση που ήταν συνεχόμενη του υποδεικνύει και τη χρονική στιγμή που σταμάτησε η κίνηση.

BIN
motionDetected.mp4

Binary file not shown.

BIN
robotloading.mp4

Binary file not shown.

BIN
robotmove.mp4

Binary file not shown.

254
test1.ino

@ -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…
Cancel
Save