Διαφήμιση

Εντοπίστε την κίνηση και, στη συνέχεια, τρομάξτε τον εαυτό σας από έναν εισβολέα με έναν ψηλό ήχο συναγερμού και φώτα που αναβοσβήνουν. Μήπως αυτή η μουσική διασκέδαση; Φυσικά το κάνει. Αυτός είναι ο στόχος του σημερινού έργου Arduino, κατάλληλο για αρχάριους. Θα γράψουμε εντελώς από το μηδέν και τις δοκιμές καθώς θα προχωρήσουμε, ώστε να έχετε την ελπίδα να έχετε κάποια ιδέα για το πώς γίνεται όλο αυτό παρά να εγκαταστήσετε απλά κάτι που έχω ήδη κάνει.

Αποποίηση: αυτό δεν πρόκειται πραγματικά να προστατεύσει το σπίτι σας. Το θα μπορούσε δώστε την αδελφή σας ένα άσχημο σοκ όταν γλιστράει στο δωμάτιό σας.

Θα χρειαστείς:

  • Ένας Arduino
  • Υπερηχητικός αισθητήρας "ping", χρησιμοποιώ HC-SR04 Ένα PIR θα ήταν καλύτερο, αλλά αυτά είναι ακριβά. Ένας αισθητήρας ping μπορεί να τοποθετηθεί κρυφά σε μια πόρτα και εξακολουθεί να εξυπηρετεί την ίδια βασική εργασία, και είναι μόνο $ 5
  • Ένας πιεζοηλεκτρικός βομβητής
  • LED λωρίδα φως, με την ίδια καλωδίωση που χρησιμοποιήσαμε πίσω σε αυτό το έργο Δημιουργήστε το δικό σας δυναμικό φωτισμό περιβάλλοντος για ένα κέντρο πολυμέσων
    instagram viewer
    Αν παρακολουθήσετε πολλές ταινίες στον υπολογιστή σας ή στο κέντρο πολυμέσων, είμαι βέβαιος ότι έχετε αντιμετωπίσει το δίλημμα φωτισμού. απενεργοποιείτε εντελώς όλα τα φώτα; Τους κρατάτε σε πλήρη έκρηξη; Ή... Διαβάστε περισσότερα
    .

Καθώς συνδέετε αυτό το έργο, μην αφαιρείτε τα πάντα κάθε φορά - απλά κρατήστε το κτίριο στο τελευταίο μπλοκ. Μέχρι τη στιγμή που θα φτάσετε στην ενότητα "Κωδικοποίηση του Συναγερμού", θα πρέπει να έχετε όλα τα κομμάτια καλωδιωμένα επάνω, ψάχνοντας κάτι τέτοιο:

τελειωμένη καλωδίωση

Φώτα που αναβοσβήνουν

Χρησιμοποιήστε το διάγραμμα καλωδίωσης από αυτό το έργο Δημιουργήστε το δικό σας δυναμικό φωτισμό περιβάλλοντος για ένα κέντρο πολυμέσωνΑν παρακολουθήσετε πολλές ταινίες στον υπολογιστή σας ή στο κέντρο πολυμέσων, είμαι βέβαιος ότι έχετε αντιμετωπίσει το δίλημμα φωτισμού. απενεργοποιείτε εντελώς όλα τα φώτα; Τους κρατάτε σε πλήρη έκρηξη; Ή... Διαβάστε περισσότερα για να συνδέσετε τη λωρίδα LED σας. μην αλλάζετε τις ακίδες, καθώς χρειαζόμαστε έξοδο PWM. Χρήση αυτόν τον κώδικα για να δοκιμάσετε γρήγορα την καλωδίωση σας. Εάν όλα πάνε καλά, θα πρέπει να έχετε το εξής:

δοκιμή led-rgb

Αισθητήρας απόστασης

Στη μονάδα SR04 θα βρείτε 4 ακίδες. VCC και GND μεταβείτε στη σιδηροδρομική γραμμή + 5V αντίστοιχα. ΚΟΜΨΟΣ είναι ο ακροδέκτης που χρησιμοποιείται για την αποστολή ενός σήματος σόναρ, βάλτε το στην ακίδα 6. ΗΧΩ χρησιμοποιείται για να διαβάσει το σήμα πίσω (και ως εκ τούτου να υπολογίσει την απόσταση) - το θέσει σε 7.

sr04

Για να γίνει απίστευτα απλό, υπάρχει μια βιβλιοθήκη που μπορούμε να χρησιμοποιήσουμε NewPing. Κατεβάστε και τοποθετήστε το σε Arduino σας Βιβλιοθήκη φάκελο και κάντε επανεκκίνηση του IDE προτού συνεχίσετε. Δοκιμή χρησιμοποιώντας αυτόν τον κώδικα; ανοίξτε τη σειριακή οθόνη και βεβαιωθείτε ότι η ταχύτητα είναι ρυθμισμένη στα 115200 baud. Με λίγη τύχη, θα πρέπει να δείτε κάποιες μετρήσεις απόστασης που θα σας στείλουν πίσω σε αρκετά μεγάλη ταχύτητα. Μπορεί να βρείτε διακύμανση 1 ή 2 εκατοστών, αλλά αυτό είναι καλό. Δοκιμάστε να τρέξετε το χέρι σας μπροστά από τον αισθητήρα, μετακινώντας το προς τα πάνω και προς τα κάτω για να παρατηρήσετε τις μεταβαλλόμενες ενδείξεις.

ping-output

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

Στο βρόχο αυτής της εφαρμογής δοκιμής, χρησιμοποιούμε το ping () λειτουργία για να στείλει ένα ping σόναρ, να πάρει πίσω μια τιμή σε χιλιοστά του δευτερολέπτου για πόσο καιρό πήρε για την αξία να επιστρέψει. Για να το κατανοήσουμε, χρησιμοποιούμε τις βιβλιοθήκες NewPing που είναι ενσωματωμένες σε σταθερές US_ROUNDTRIP_CM, η οποία καθορίζει πόσες μικροδευτερότητες χρειάζεται για να πάει ένα εκατοστό. Υπάρχει επίσης μια καθυστέρηση 50 ms μεταξύ pings για να αποφευχθεί η υπερφόρτωση του αισθητήρα.

Piezo Alarm

Ο αισθητήρας Piezo crystal είναι ένας απλός και φτηνός βομβητής και μπορούμε να χρησιμοποιήσουμε έναν ακροδέκτη PWM 3 για να φτιάχνουμε διαφορετικούς τόνους. Συνδέστε ένα καλώδιο στον ακροδέκτη 3, ένα στη γείωση - δεν έχει σημασία ποια.

Χρήση αυτόν τον κώδικα να δοκιμάσω.

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

Κωδικοποίηση του συστήματος συναγερμού

Τώρα που έχουμε όλα τα κομμάτια αυτού του παζλ, ας τα συνδυάσουμε.

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

#περιλαμβάνω  // Επιλέξτε ποιοι ακροδέκτες με δυνατότητα PWM θα χρησιμοποιηθούν. #define RED_PIN 10. #define GREEN_PIN 11. #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Το pin Arduino συνδέεται με την καρφίτσα ενεργοποίησης στον αισθητήρα υπερήχων. #define ECHO_PIN 7 // Το pin Arduino είναι συνδεδεμένο με την ακίδα echo στον υπερηχητικό αισθητήρα. #define MAX_DISTANCE 100 // Μέγιστη απόσταση που θέλουμε να ping για (σε εκατοστά). #define ALARM 3 επιπλέουν sinVal; int toneVal; 

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

void setup () {// set pinModes για την ταινία RGB pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT). // αναβοσβήνει τα φώτα analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0). καθυστέρηση (5000); }

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

// helper λειτουργία που μας επιτρέπει να στείλουμε ένα χρώμα σε μία εντολή. κενό χρώμα (μη υπογεγραμμένο κόκκινο, μη υπογεγραμμένο πράσινο χρώμα, μη υπογεγραμμένο μπλε χρώμα) // τη λειτουργία δημιουργίας χρώματος. {analogWrite (RED_PIN, κόκκινο); analogWrite (BLUE_PIN, μπλε); analogWrite (GREEN_PIN, πράσινο); }

Τέλος, ο βρόχος μας για τώρα θα αποτελείται από ένα απλό έγχρωμο φλας μεταξύ κόκκινου και κίτρινου χρώματος (ή ό, τι θέλετε να είναι ο συναγερμός σας - απλά αλλάξτε τις τιμές RGB).

κενός βρόχος () {χρώμα (255,0,0); // κόκκινη καθυστέρηση (100). χρώμα (255.255,0); // κίτρινη καθυστέρηση (100). }

Ανεβάστε και δοκιμάστε αυτό για να βεβαιωθείτε ότι βρίσκεστε στο σωστό δρόμο.

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

Sonar NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing ρύθμιση καρφίτσες και μέγιστη απόσταση. 

Κάτω από αυτό, προσθέστε μια μεταβλητή για να αποθηκεύσετε την κατάσταση του ξυπνητηριού που ενεργοποιείται ή όχι, προεπιλογή σε ψευδή, φυσικά.

boolean triggered = false; 

Προσθέστε μια γραμμή στο setup () έτσι ώστε να μπορούμε να παρακολουθήσουμε την έξοδο στη σειριακή και την αποσφαλμάτωση.

Serial.begin (115200); // Ανοίξτε τη σειριακή οθόνη στα 115200 baud για να δείτε τα αποτελέσματα ping. 

Στη συνέχεια, μετονομάστε τον τρέχοντα βρόχο τρομάζω() - αυτό είναι που θα καλείται αν έχει ενεργοποιηθεί ο συναγερμός.

άκυρο συναγερμό () {χρώμα (255,0,0); // κόκκινη καθυστέρηση (100). χρώμα (255.255,0); // καθυστέρηση yelow (100); }

Τώρα δημιουργήστε ένα νέο βρόχος() μια λειτουργία στην οποία θα φέρουμε ένα νέο ping, θα διαβάσουμε τα αποτελέσματα και θα ενεργοποιήσουμε τον συναγερμό εάν ανιχνευθεί κάτι μέσα στο εύρος του μετρητή.

άκυρη βρόχος () {if (ενεργοποιήθηκε == true) {συναγερμός (); } else {καθυστέρηση (50); // Περιμένετε 50ms μεταξύ pings (περίπου 20 pings / sec). Τα 29ms πρέπει να είναι η συντομότερη καθυστέρηση μεταξύ των pings. μη υπογεγραμμένο int uS = sonar.ping (); // Αποστολή ping, πάρτε χρόνο ping σε μικροδευτερόλεπτα (uS). μη υπογεγραμμένη απόσταση int = uS / US_ROUNDTRIP_CM; Serial.println (απόσταση); αν (απόσταση <100) {ενεργοποιημένη = αλήθεια; } } }

Επιτρέψτε μου να εξηγήσω σύντομα τον κώδικα:

  • Ξεκινήστε ελέγχοντας για να δείτε αν έχει ενεργοποιηθεί ο συναγερμός και αν ναι, σβήστε τη λειτουργία συναγερμού (μόλις αναβοσβήνουν τα φώτα αυτή τη στιγμή).
  • Αν δεν έχει ενεργοποιηθεί ακόμα, πάρτε την τρέχουσα ανάγνωση από τον αισθητήρα.
  • Εάν ο αισθητήρας διαβάζει <100 εκατοστά, κάτι έχει γεμίσει τη δέσμη (προσαρμόστε αυτήν την τιμή, αν προκληθεί πολύ νωρίς για σας, προφανώς).

Δώστε την δοκιμαστική λειτουργία τώρα, πριν προσθέσετε τον ενοχλητικό πιεζοηλεκτρικό βομβητή.

Εργαζόμενος? Μεγάλος. Τώρα ας προσθέσουμε αυτό το βομβητή πίσω. Προσθήκη pinMode στο setup () ρουτίνα.

pinMode (συναγερμός, έξοδος); 

Στη συνέχεια, προσθέστε το piezo buzzer loop στη λειτουργία συναγερμού ():

για (int x = 0; x <180; x ++) {// μετατρέψτε τους βαθμούς σε ακτίνια και στη συνέχεια λάβουμε τιμή sin sinVal = (sin (x * (3.1412 / 180))). / / παράγουν μια συχνότητα από την αξία του τόμου toneVal = 2000+ (int (sinVal * 1000))? τόνος (ALARM, toneVal); }

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

Δεν υπάρχει καμία ανησυχία. Είναι ένα κοινό πρόβλημα, και κάποιος έχει ήδη μια λύση - κατεβάστε και προσθέστε αυτό NewTone στο φάκελο Βιβλιοθήκες Arduino. Ρυθμίστε την αρχή του προγράμματος σας για να συμπεριλάβετε αυτό:

#περιλαμβάνω 

Και προσαρμόστε τη γραμμή:

 τόνος (ALARM, toneVal); 

προς το

 NewTone (ALARM, toneVal); 

αντι αυτου.

Αυτό είναι. Ρυθμίστε το συναγερμό σας στην πόρτα της κρεβατοκάμαράς σας για τον επόμενο ατυχή διαρρήκτη.

Ή, ένα σκυλί που έμοιαζε απαρατήρητο, που φαινόταν εντελώς άβολος από τον συναγερμό.

Έχετε πρόβλημα με τον κώδικα; Εδώ είναι το πλήρη εφαρμογή. Αν παίρνετε τυχαία λάθη, δοκιμάστε να τα επικολλήσετε παρακάτω και θα δω αν μπορώ να βοηθήσω.

Πιστοποίηση εικόνας: Συναγερμός πυρκαγιάς μέσω του Flickr

Ο James έχει πτυχίο στην Τεχνητή Νοημοσύνη και είναι πιστοποιημένος με CompTIA A + και Network +. Είναι ο κύριος προγραμματιστής της MakeUseOf, και ξοδεύει τον ελεύθερο χρόνο του παίζοντας VR paintball και boardgames. Κατασκευάζει υπολογιστές από τότε που ήταν παιδί.