Ανίχνευση κίνησης με arduino και ειδοποίηση με buzzer

Ένας συναγερμός συνήθως είναι ένα σύστημα που παρακολουθεί το περιβάλλον και ειδοποιεί στον χρήστη αν κάτι αλλάξει. Πίσω από αυτή την ιδέα και προσπαθώντας να κρατήσουμε ένα εισαγωγικό επίπεδο στο Arduino σχεδιάσαμε έναν μηχανισμό ειδοποίησης με buzzer όταν ανιχνευτεί κίνηση στον χώρο.

Για την καλύτερη κατανόηση του project το έχουμε χωρίσει στις ακόλουθες ενότητες:

Ποιος είναι ο στόχος

Ο στόχος είναι η υλοποίηση ενός απλού συστήματος συναγερμού, το οποίο παρακολουθεί τον χώρο και ενεργοποιείται όταν ανιχνευτεί κάποια κίνηση.  Με την ενεργοποίηση του συστήματος, αναβοσβήνει ένα LED και ενεργοποιείται και ένα μικρό ηχείο (buzzer). Έπειτα το σύστημα μπαίνει σε κατάσταση παρακολούθησης.

Τι θα μάθετε

Το project αυτό αποσκοπεί στην κατανόηση και εξήγηση των παρακάτω:

  • Τι είναι ένα σύστημα ελέγχου και πως συσχετίζονται τα επιμέρους τμήματά του.
  • Πως γίνεται ο έλεγχος των ψηφιακών εισόδων και εξόδων στο Arduino.
  • Δημιουργία μονοφωνικού ήχου με βάση την συχνότητα.
  • Κατανόηση βασικών ηλεκτρονικών αρχών όπως η γείωση, η αντίσταση και το ρεύμα

Σύντομη περιγραφή

Το σύστημα είναι έτσι υλοποιημένο ώστε η προσθήκη επιπλέον χαρακτηριστικών και λειτουργιών να είναι σχετικά εύκολη υπόθεση. Ένας οποιοσδήποτε συναγερμός αποτελείται από εισόδους, εξόδους και ένα σύστημα ελέγχου. Στην περίπτωσή μας η είσοδος είναι ένας αισθητήρας κίνησης, η έξοδος είναι ένα LED και ένα μονοφωνικό buzzer και τέλος το σύστημα ελέγχου είναι το Arduino μας.

ΕΙΣΟΔΟΣ σε ένα σύστημα είναι κάθε αισθητήρας που καταγράφει μια κατάσταση από το περιβάλλον πχ. θερμοκρασία, φωτεινότητα, υγρασία ενός χώρου, μετατρέπει αυτή την κατάσταση σε ψηφιακή μορφή (0 και 1) και τέλος την προωθεί στο ΣΥΣΤΗΜΑ ΕΛΕΓΧΟΥ.

Το ΣΥΣΤΗΜΑ ΕΛΕΓΧΟΥ αναφέρεται στην επεξεργασία της εισόδου πχ. μετατροπή της θερμοκρασίας από κελσίου σε φαρενάιτ ή μετατροπή των εκατοστών σε μέτρα. Ακόμη και αν δεν χρειάζεται κάποια μετατροπή, ο έλεγχος του πότε θα ανάψει ένα LED ή θα ενεργοποιηθεί μια οθόνη αφορά το σύστημα ελέγχου. Άρα έχοντας μια κατάσταση από το περιβάλλον μέσω των ΕΙΣΟΔΩΝ, αποφασίζει τι θα κάνει όσον αφορά την ΕΞΟΔΟ.

ΕΞΟΔΟΣ είναι κάθε αισθητήρας και μηχανισμός που ενεργεί στο περιβάλλον πχ. μοτέρ, LED, ηχητικό Buzzer, οθόνη. Η έξοδος είναι το αποτέλεσμα που θα ενεργοποιηθεί από το ΣΥΣΤΗΜΑ ΕΛΕΓΧΟΥ. Υπάρχει περίπτωση η διαδικασία να ολοκληρώνεται εδώ αλλά και να πυροδοτεί μια νέα είσοδο πχ. σε ένα drone ή έξοδος είναι ένα μοτερ, το οποίο επηρεάζει την θέση του άρα επηρεάζεται και η νέα είσοδος κ.ο.κ.

Η είσοδος, έξοδος και επεξεργασία σε ένα σύστημα συνδέονται όπως φαίνεται παρακάτω.

Ο αισθητήρας κίνησης μας δίνει την πληροφορία αν υπάρχει ή όχι κίνηση όταν του το ζητήσουμε. Το μονοφωνικό ηχείο (buzzer) μας δημιουργεί κάποια ηχητικά κύματα βάση της συχνότητας που του έχουμε δώσει. Το LED είναι αναμμένο ή σβηστό ανάλογα με την εντολή που του δίνουμε. Έχοντας λοιπόν πει, δυο πράγματα για το κάθε υλικό που θα χρησιμοποιήσουμε ξεκινάμε;

Απαιτούμενος εξοπλισμός

Αν και παρακάτω, παραθέτουμε μια λίστα με τον εξοπλισμό που απαιτείται, think out of the box και χρησιμοποιείστε οτι εσείς πιστεύετε πως χρειάζεται. Εάν δεν είστε σίγουροι για κάτι, μπορείτε να επικοινωνήστε μαζί μας και να μας ρωτήσετε.

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

  1. PIR αισθητήρας κίνησης
  2. Μονοφωνικό ψηφιακό buzzer
  3. LED 3mm
  4. Καλώδια σύνδεσης F – M
  5. Αντίσταση 220ohm
  6. Breadboard
  7. Arduino UNO

Ανάλυση του hardware

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

Το παρακάτω παράδειγμα χρησιμοποιεί ένα Breadboard και σε αυτό συνδέονται δύο αισθητήρες. Σε αυτό το σχέδιο χρειαζόμαστε καλώδια σύνδεσης F – M (Female to Male). Εναλλακτικά θα μπορούσαμε να τοποθετήσουμε τον αισθητήρα πάνω στο breadboard χρησιμοποιώντας M – M (Male to Male) καλώδια σύνδεσης για την σύνδεση του arduino με το breadboard.

Αν για κάποιον λόγο δεν υπάρχουν τα σύμβολα +, -, s πάνω στον αισθητήρα και δεν γνωρίζετε ποιό pin είναι ποιό, θα πρέπει να ελέγξετε με ένα πολύμετρο τις τάσεις σε δυο pin. Θα πρέπει να ψάξετε το + και το – , το ρεύμα και την γείωση δηλαδη. Έχοντας αυτά τα δύο αυτό που μένει είναι το pin του σήματος.

Το pin του σήματος στον αισθητήρα κίνησης και στο buzzer θα πρέπει να συνδεθούν στα ψηφιακά pin 9 Και 8 αντίστοιχα. Έχετε επίσης υπόψιν σας οτι αν θέλετε να χρησιμοποιείσετε άλλα pins αντί του ψηφιακού 8 και 9 θα πρέπει να κάνετε και την αλλαγή στον κώδικα.

Τροφοδοτούμε με το arduino την πλακέτα (κάποιες από τις πλακέτες της αγοράς δεν είναι συνδεδεμένες σωστά και χρειάζονται απαραίτητα τα δύο μικρά καλωδια που φαίνονται στην μέση της πλακέτας – αν γνωρίζετε πως η δικιά σας τροφοδοτείται σωστά, μπορείτε να τα παραλείψετε).

Υπάρχει η δυνατότητα να μην χρησιμοποιηθεί το breadboard αλλά χρειαζόμαστε ένα κολλητήρι γι αυτό.

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

Το παρακάτω παράδειγμα χρησιμοποιεί ένα Breadboard και σε αυτό συνδέονται δύο αισθητήρες. Σε αυτό το σχέδιο χρειαζόμαστε καλώδια σύνδεσης F – M (Female to Male). Εναλλακτικά θα μπορούσαμε να τοποθετήσουμε τον αισθητήρα πάνω στο breadboard χρησιμοποιώντας M – M (Male to Male) καλώδια σύνδεσης για την σύνδεση του arduino με το breadboard.

Αν για κάποιον λόγο δεν υπάρχουν τα σύμβολα +, -, s πάνω στον αισθητήρα και δεν γνωρίζετε ποιό pin είναι ποιό, θα πρέπει να ελέγξετε με ένα πολύμετρο τις τάσεις σε δυο pin. Θα πρέπει να ψάξετε το + και το – , το ρεύμα και την γείωση δηλαδη. Έχοντας αυτά τα δύο αυτό που μένει είναι το pin του σήματος.

Το pin του σήματος στον αισθητήρα κίνησης και στο buzzer θα πρέπει να συνδεθούν στα ψηφιακά pin 9 Και 8 αντίστοιχα. Έχετε επίσης υπόψιν σας οτι αν θέλετε να χρησιμοποιείσετε άλλα pins αντί του ψηφιακού 8 και 9 θα πρέπει να κάνετε και την αλλαγή στον κώδικα.

Σχεδιάγραμμα σύνδεσης

Υπάρχει κάτι το οποίο δεν είναι ξεκάθρο; Μην διστάσετε να βοηθήσετε τον επόμενο που θα διαβάσει το άρθρο, στέλνοντας μας ένα μήνυμα ή σχολιάζοντας στο τέλος.

Ανάλυση του software

Στην ενότητα αυτή θα δούμε πως μπορούμε να προγραμματίσουμε το arduino. Κάθε arduino που παίζει το ρόλο του ελεγκή θα πρέπει να τρέχει έναν κώδικα. Ο κώδικας δίνεται έτοιμος και μπορείτε με απλά βήματα να τον ετοιμάσετε στο arduino σας. Ωστόσο, το καλύτερο θα ήταν να προσπαθήσετε να τον καταλάβετε. Στο τέλος μπορείτε να βρείτε τον ολοκληρωμένο κώδικα για να τον χρησιμοποιείσετε.

Αρχικά για να μπορούμε να έχουμε καλύτερη και πιο ξεκάθαρη εικόνα του τι ακριβώς γράφουε, ορίζουμε με την εντολή #define μια αντιστοιχία ανάμεσα στα pins που χρησιμοποιούμε και σε κάποια αυθαίρετα δικά μας ονόματα, τα οποία βέβαια χαρακτηρίζουν το κάθε pin, ώστε να θυμόμαστε τι ακριβώς είναι συνδεδεμένο σε αυτό.Η μεταβλητή _LED πλέον είναι συνδεδεμένη με το ψηφιακό pin 13, η μεταβλητή _MOTION είναι συνδεδεμένη με το ψηφιακό pin 8 και τέλος η μεταβλητή _BUZZER είναι συνδεδεμένη με το ψηφιακό pin 8. Ως αποτέλεσμα των παραπάνω αντιστοιχείσεων, όταν θα βλέπουμε για παράδειγμα την μεταβλητή _LED θα σκεφτόμαστε το 13 και στο μυαλό μας μπορούμε να κάνουμε την αντικατάσταση.

#define _LED 13
#define _MOTION 8
#define _BUZZER 9

Έπειτα, δημιουργούμε την απαραίτητη συνάρτηση setup() και εκεί ορίζουμε τα εξής. Αρχικά θα πρέπει να καθορίσουμε έναν δίαυλο επικοινωνίας με την οθόνη μας. Αυτό σημαίνει κάθε φορά που θέλουμε να εκτυπώσουμε ένα μήνυμα στην οθόνη μας, χρησιμοποιούμε αυτόν τον δίαυλο επικοινωνίας. Αυτό γίνεται με την εντολή:

Serial.begin(9600);

Έπειτα πρέπει για κάθε μια απο τις μεταβλητές μας να ορίσουμε αν είναι έξοδος ή είσοδος στο σύστημα.

pinMode(_LED, OUTPUT);
pinMode(_MOTION, INPUT);
pinMode(_BUZZER, OUTPUT);

Τέλος εκτυπώνουμε το μήνυμα «Arduino initialized… » στην οθόνη του υπολογιστή μας για να ξέρουμε οτι το arduino μας πήρε ρεύμα και ξεκίνησε μια χαρά.

Serial.println("Arduino initialized...");

Έτσι λοιπόν η συνολική συνάρτηση setup() είναι η ακόλουθη

void setup() {
    Serial.begin(9600);
  
    pinMode(_LED, OUTPUT);
    pinMode(_MOTION, INPUT);
    pinMode(_BUZZER, OUTPUT);
    Serial.println("Arduino initialized...");
  }

Το επόμενο βήμα είναι να δημιουργήσουμε μια συνάρτηση που θα την ονομάσουμε activateAlarm(), θα παίρνει ως όρισμα μια μεταβλητή με όνομα times και τύπο ακέραια. Η συνάρτηση αυτή θα έχει ως στόχο να εκτελέσει οτι ακριβώς θέλουμε να εκτελεστεί κατά την ενεργοποίηση του συναγερμού.Αρχικά ορίζουμε μια μεταβλητή delayTime με τιμή 1000ms δηλαδή 1sec. Αυτό που θέλουμε να κάνουμε είναι να ενεργοποιήσουμε το pin με το LED και να το ανάψουμε κάτι που γίνεται με την εντολή:

digitalWrite(_LED, HIGH);

Έπειτα θέλουμε να ενεργοποιήσουμε και το buzzer μας και αυτό γίνεται με την εντολή:

tone(_BUZZER, 1000);

Περιμένουμε χωρίς να κάνουμε τίποτα με την εντολή:

delay(delayTime);

όπου το delayTime είναι η τιμή που είχαμε ορίσει πιο πάνω. Στο μυαλό σας μπορείτε να κάνετε αντικατάσταση του αριθμού. Απενεργοποιούμε το LED και το buzzer με τις εντολές:

digitalWrite(_LED, LOW);
noTone(_BUZZER);

Τέλος, περιμένουμε πάλι delayTime χρόνο χωρίς να κάνουμε τίποτα.

delay(delayTime);

Το παραπάνω έχει ως αποτέλεσμα να χτυπήσει και να ανάψει μια φορά το buzzer και το LED αντίστοιχα. Συνήθως οι συναγερμοί έχουν κάποιου είδους επανάληψη, έτσι ας πούμε οτι και εμείς θέλουμε η παραπάνω διαδικασία να μην γίνει μόνο μια φορά αλλά τρείς. Αυτό μπορούμε να το καταφέρουμε βάζοντας όλον τον παραπάνω κώδικα σε ένα for.

for(int t=0; t<times; t++)

Το αποτέλεσμα είναι να εκτελεστεί ο κώδικας που είναι μέσα στο for τόσες φορές όσες η τιμή του times. Θυμηθείτε οτι το times είναι το όρισμα της συνάρτησης και το όρισμα το καθορίζουμε όταν καλούμε την συνάρτηση αυτή. Μέχρι στιγμής δεν την έουμε καλέσει πουθενά, την έχω απλά δημιουργήσει. Ο συνολικός κώδικας της συνάρτησης είναι ο ακόλουθος:

void activateAlarm(int times) {
    int delayTime = 1000;
    for(int t=0; t<times; t++) {
      digitalWrite(_LED, HIGH);
      tone(_BUZZER, 1000);
      delay(delayTime);
      digitalWrite(_LED, LOW);
      noTone(_BUZZER);
      delay(delayTime);
    }
  }

Το απόμενο και τελευταίο βήμα είναι η δημιουργία της συνάρτησης loop. Η συνάρτηση loop εκτελείται συνέχεια επ άπειρο. Αρχικά διαβάζουμε την τιμή που έχει ο αισθητήρας κίνησης:

int motionValue = digitalRead(_MOTION);

Στην μεταβλητή motionValue έχουμε τιμή 0 ή 1. Αν έχει ανιχνευτεί κίνηση η τιμή είναι 1 και σε διαφορετική περίπτωση είναι 0.

Έτσι λοιπόν, με τον παρακάτω κώδικα, ελέγχουμε αν υπάρχει κίνηση ή όχι και εκτελούμε τον αντίστοιχο κώδικα.

if(motionValue == 1) {
      Serial.println("Arduino detected some motion in the area! Activating alarm 5 times...");
      activateAlarm(5);
    }else {
      Serial.println("The quiter you become the more you are able to hear - RAM DASS");
  }

Αν υπάρχει κίνηση εκτυπώνετε το μήνυμα «Arduino detected some motion in the area! Activating alarm 5 times» και έπειτα εκτελείται η συνάρτηση activateAlarm(5) με όρισμα το 5 που σημαίνει οτι θα εκτελεστεί το for 5 φορές. Σε διαφορετική περίπτωση εκτυπώνεται το μήνυμα «The quiter you become the more you are able to hear – RAM DASS». Η ολοκληρωμένη συνάρτηση loop() είναι η ακόλουθη:

void loop() {
    int motionValue = digitalRead(_MOTION);
    if(motionValue == 1) {
      Serial.println("Arduino detected some motion in the area! Activating alarm 5 times...");
      activateAlarm(5);
    }else {
      Serial.println("The quiter you become the more you are able to hear - RAM DASS");
    }
  }

Εφαρμογές

Ένα σύστημα όπως αυτό που δημιουργήσαμε πιο πάνω θα λέγαμε πως δύσκολα έχει εφαρμογές όπως ακριβώς είναι.
Ο κύριος λόγος είναι οτι μοιάζει πιο πολύ με ένα προτύτυπο που είναι οτι καλύτερο μπορεί να κάνει κάποιος αν θέλει να ελέγξει μια ιδέα που έχει. Αν θέλει δηλαδή να περάσει από την θεωρία στην πράξη.Συνήθως τα συστήματα που είναι ήδη εγκατεστημένα έχουν έναν σαφώς πιο μεγάλο ηχητικό buzzer ώστε να είναι αισθητό στον εισβολέα. Διαθέτουν κάποια επιπλέον LED συνήθως σε χρώματα κόκκινο μπλέ ώστε να προκαλούν τα σωστά ερεθίσματα στον εισβολέα. Τέλος διαθέλουν και άλλες λειτουργίες όπως αποστολή sms, ειδοποίηση του κέντρου άμεσης επέμβασης της εταιρείας που το έχει κατασκευάσει καθώς και αποστολή σήματος σε κάποια άλλη συσκευή

Μελλοντικές σκέψεις

  • Αντί του μονοφονικού buzzer του οποίου η ένταση δεν είναι και τόσο μεγάλη θα μπορούσαμε να χρησιμοποιήσουμε κάποιο άλλο. Σημειώστε πως όσο μεγαλύτερο είναι ένα buzzer τόσο παραπάνω τάση χρειάζεται. Έτσι λοιπόν, ίσως χρειαστεί η τροφοδοσία του να είναι από κάποια εξωτερική πηγή και το σήμα να έρχεται από το arduino. Αυτό σημαίνει τα καλώδια ρεύματος και γείωσης (+ και -) θα είναι συνδεδεμένα σε καποια εξωτερική πηγή πχ. 12V μπαταρία και το σήμα (s) σε κάποιο από τα ψηφιακά pins του arduino.
  • Ο αισθητήρας κίνησης καλύπτει μια περιοχή. Μια σκέψη είναι να χρησιμοποιηθούν παραπάνω από ένας αισθητήρες καλύπτοντας ένα ευρύτερο φάσμα και φυσικά κάνοντας και τις ανάλογες τροποποιήσεις στον κώδικα.
  • Επιπλέον, εκτός από τον αισθητήρα κίνησης θα μπορούσαμε να χρησιμοποιήσουμε αιθητήρα απόστασης ή κα΄ποιον μαγνητικό αισθητηρα (που συνήθως έχουν οι πόρτες και τα παράθυρα) για μεγαλύτερη ακρίβεια.
  • Η χρήση ενός GPS module με μια SIM κάρτα θα μας επιτρέπει την αποστολή SMS προς έναν αριθμό τηλεφώνου. Αυτό είναι κάτι που υπο κάποιες καταστάσεις είναι απαραίτητο.
  • Όσον αφορά τις ειδοποιήσεις, μπορούμε να προσθέσουμε ένα Wi-Fi shield ή κάποιο Ethernet module και να συνδέσουμε το arduino μας με το τοπικό μας δίκτυο (εφόσον υπάρχει). Αυτό μπορεί να μην έχει μηνιαίο κόστος αλλα απαίτεί να υπάρχει σύνδεση στο Internet.

Αυτές λοιπόν, είναι κάποιες από τις σκέψεις μας, για την δημιουργία του version 2. Μην διστάσετε να σχολιάσετε και να μας στείλετε τις δικές σας σκέψεις, ιδέες αλλά και κατασκευές!

Υποβολή απάντησης