- Απαιτούμενα υλικά
- Ο αισθητήρας ήχου λειτουργεί
- Μέτρηση συχνότητας ήχου σε παλμογράφο
- Διάγραμμα κυκλώματος ανιχνευτή σφυρίγματος Arduino
- Μέτρηση συχνότητας με Arduino
- Προγραμματισμός του Arduino για τον εντοπισμό Whistle
- Ο ανιχνευτής σφυρίγματος Arduino λειτουργεί
Ως παιδί με γοήτευε ένα αυτοκίνητο μουσικής παιχνιδιών που ενεργοποιείται όταν χτυπάς τα χέρια σου, και τότε καθώς μεγάλωσα αναρωτήθηκα αν μπορούμε να χρησιμοποιήσουμε το ίδιο για να αλλάξουμε τα φώτα και τους θαυμαστές στο σπίτι μας. Θα ήταν ωραίο να ενεργοποιώ απλώς τους Ανεμιστήρες και τα φώτα μου χειροκρότημα αντί να περπατάω τον τεμπέλης εαυτό μου στον πίνακα διακοπτών. Αλλά πολλές φορές θα δυσλειτουργούσε, καθώς αυτό το κύκλωμα θα ανταποκρίνεται σε κάθε δυνατό θόρυβο στο περιβάλλον, όπως ένα δυνατό ραδιόφωνο ή για το χλοοκοπτικό του γείτονά μου. Παρόλο που η κατασκευή ενός διακόπτη χειροκρότημα είναι επίσης ένα διασκεδαστικό έργο.
Τότε, όταν συνάντησα αυτή τη μέθοδο ανίχνευσης σφυρίγματος στην οποία το κύκλωμα θα ανιχνεύσει για σφύριγμα. Ένα σφυρίχτρα σε αντίθεση με άλλους ήχους θα έχει ομοιόμορφη συχνότητα για μια συγκεκριμένη διάρκεια και ως εκ τούτου μπορεί να διακριθεί από την ομιλία ή τη μουσική. Έτσι, σε αυτό το σεμινάριο θα μάθουμε πώς να ανιχνεύουμε τον ήχο σφυρίγματος διασυνδέοντας τον αισθητήρα ήχου με το Arduino και όταν ανιχνεύεται ένα σφυρίχτρα θα αλλάζουμε μια λάμπα AC μέσω ενός ρελέ. Στην πορεία θα μάθουμε επίσης πώς λαμβάνονται ηχητικά σήματα από το μικρόφωνο και πώς να μετράμε τη συχνότητα χρησιμοποιώντας το Arduino. Ακούγεται ενδιαφέρον, οπότε ας ξεκινήσουμε με το Έργο οικιακού αυτοματισμού με βάση το Arduino.
Απαιτούμενα υλικά
- Arduino UNO
- Μονάδα αισθητήρα ήχου
- Μονάδα ρελέ
- Λάμπα AC
- Σύνδεση καλωδίων
- Ψωμί
Ο αισθητήρας ήχου λειτουργεί
Πριν βυθίσουμε τη σύνδεση υλικού και τον κώδικα για αυτό το Έργο οικιακού αυτοματισμού, ας ρίξουμε μια ματιά στον αισθητήρα ήχου Ο αισθητήρας ήχου που χρησιμοποιείται σε αυτήν την ενότητα εμφανίζεται παρακάτω. Η αρχή λειτουργίας των περισσότερων αισθητήρων ήχου που διατίθεται στην αγορά είναι παρόμοια με αυτήν, αν και η εμφάνιση μπορεί να αλλάξει λίγο.
Όπως γνωρίζουμε, το πρωτόγονο στοιχείο ενός αισθητήρα ήχου είναι το μικρόφωνο. Ένα μικρόφωνο είναι ένας τύπος μετατροπέα που μετατρέπει τα ηχητικά κύματα (ακουστική ενέργεια) σε ηλεκτρική ενέργεια. Βασικά το διάφραγμα μέσα στο μικρόφωνο δονείται στα ηχητικά κύματα στην ατμόσφαιρα που παράγει ηλεκτρικό σήμα στον πείρο εξόδου του. Αλλά αυτά τα σήματα θα είναι πολύ χαμηλού μεγέθους (mV) και ως εκ τούτου δεν μπορούν να επεξεργαστούν απευθείας από έναν μικροελεγκτή όπως το Arduino. Επίσης, από προεπιλογή, τα ηχητικά σήματα είναι αναλογικής φύσης, επομένως η έξοδος από το μικρόφωνο θα είναι ημιτονοειδές κύμα με μεταβλητή συχνότητα, αλλά οι μικροελεγκτές είναι ψηφιακές συσκευές και ως εκ τούτου λειτουργούν καλύτερα με το τετραγωνικό κύμα.
Για να ενισχύσει αυτά τα ημιτονοειδή κύματα χαμηλού σήματος και να τα μετατρέψει σε τετράγωνα κύματα, η μονάδα χρησιμοποιεί την ενσωματωμένη μονάδα LM393 Comparator όπως φαίνεται παραπάνω. Η έξοδος ήχου χαμηλής τάσης από το μικρόφωνο παρέχεται σε έναν ακροδέκτη του συγκριτή μέσω ενός τρανζίστορ ενισχυτή, ενώ μια τάση αναφοράς ρυθμίζεται στον άλλο ακροδέκτη χρησιμοποιώντας ένα κύκλωμα διαχωριστή τάσης που περιλαμβάνει ένα ποτενσιόμετρο. Όταν η τάση εξόδου ήχου από το μικρόφωνο υπερβαίνει την προκαθορισμένη τάση, ο συγκριτής ανεβαίνει υψηλά με 5V (τάση λειτουργίας), αλλιώς ο συγκριτής παραμένει χαμηλός στα 0V. Με αυτόν τον τρόπο το ημιτονοειδές κύμα χαμηλού σήματος μπορεί να μετατραπεί σε τετραγωνικό κύμα υψηλής τάσης (5V). Το στιγμιότυπο παλμογράφου παρακάτω δείχνει το ίδιο όπου το κίτρινο κύμα είναι το ημιτονοειδές κύμα χαμηλού σήματος και το μπλε είναι το τετράγωνο κύμα εξόδου. οΗ ευαισθησία μπορεί να ελεγχθεί μεταβάλλοντας το ποτενσιόμετρο στη μονάδα.
Μέτρηση συχνότητας ήχου σε παλμογράφο
Αυτή η μονάδα αισθητήρα ήχου θα μετατρέψει τα ηχητικά κύματα στην ατμόσφαιρα σε τετραγωνικά κύματα, η συχνότητα των οποίων θα είναι ίση με τη συχνότητα των ηχητικών κυμάτων. Έτσι, μετρώντας τη συχνότητα του τετραγωνικού κύματος μπορούμε να βρούμε τη συχνότητα των ηχητικών σημάτων στην ατμόσφαιρα. Για να βεβαιωθώ ότι τα πράγματα λειτουργούν όπως υποτίθεται, σύνδεσα τον αισθητήρα ήχου στο πεδίο εφαρμογής μου για να ανιχνεύσω το σήμα εξόδου του, όπως φαίνεται στο παρακάτω βίντεο.
Ενεργοποίησα τη λειτουργία μέτρησης στο πεδίο εφαρμογής μου για να μετρήσω τη συχνότητα και χρησιμοποίησα μια εφαρμογή Android (Frequency Sound Generator) από το Play Store για να δημιουργήσω ηχητικά σήματα γνωστής συχνότητας. Όπως μπορείτε να δείτε στο παραπάνω GID, το εύρος μπόρεσε να μετρήσει τα ηχητικά σήματα με αρκετά αξιοπρεπή ακρίβεια, η τιμή της συχνότητας που εμφανίζεται στο εύρος είναι πολύ κοντά σε αυτήν που εμφανίζεται στο τηλέφωνό μου. Τώρα, που γνωρίζουμε ότι η μονάδα λειτουργεί, ας προχωρήσουμε με τη διασύνδεση του αισθητήρα ήχου με το Arduino.
Διάγραμμα κυκλώματος ανιχνευτή σφυρίγματος Arduino
Το πλήρες διάγραμμα κυκλώματος για το κύκλωμα Arduino Whistle Detector Switch χρησιμοποιώντας Sound Sensor φαίνεται παρακάτω. Το κύκλωμα σχεδιάστηκε χρησιμοποιώντας λογισμικό Fritzing.
Ο αισθητήρας ήχου και η μονάδα ρελέ τροφοδοτούνται από τον πείρο 5V του Arduino. Ο ακροδέκτης εξόδου του αισθητήρα ήχου συνδέεται με τον ψηφιακό ακροδέκτη 8 του Arduino, αυτό οφείλεται στην ιδιότητα χρονοδιακόπτη αυτού του πείρου και θα συζητήσουμε περισσότερα σχετικά με αυτό στην ενότητα προγραμματισμού. Η μονάδα ρελέ ενεργοποιείται από τον ακροδέκτη 13 ο οποίος είναι επίσης συνδεδεμένος με το ενσωματωμένο LED στην πλακέτα UNO.
Στην πλευρά τροφοδοσίας AC το ουδέτερο καλώδιο συνδέεται απευθείας με τον ακροδέκτη Common (C) της μονάδας ρελέ ενώ η φάση συνδέεται με τον πείρο Normally Open (NO) του ρελέ μέσω του φορτίου AC (λαμπτήρας). Με αυτόν τον τρόπο όταν ενεργοποιείται το ρελέ, ο πείρος ΟΧΙ θα συνδεθεί με τον πείρο C και έτσι ο λαμπτήρας θα ανάψει. Διαφορετικά, το blub θα παραμείνει απενεργοποιημένο. Μόλις γίνουν οι συνδέσεις, το υλικό μου έμοιαζε κάπως έτσι.
Προειδοποίηση: Η εργασία με κύκλωμα εναλλασσόμενου ρεύματος μπορεί να είναι επικίνδυνη, να είστε προσεκτικοί κατά το χειρισμό ζωντανών καλωδίων και να αποφεύγετε βραχυκύκλωμα. Συνιστάται διακοπή κυκλώματος ή επίβλεψη ενηλίκων για άτομα που δεν έχουν εμπειρία με ηλεκτρονικά είδη. Σε έχω προειδοποιήσει!!
Μέτρηση συχνότητας με Arduino
Παρόμοια με το εύρος της ανάγνωσης της συχνότητας των εισερχόμενων τετραγωνικών κυμάτων, πρέπει να προγραμματίσουμε το Arduino για τον υπολογισμό της συχνότητας. Έχουμε ήδη μάθει πώς να το κάνουμε αυτό στο φροντιστήριο μετρητή συχνότητας χρησιμοποιώντας τη λειτουργία παλμού. Αλλά σε αυτό το σεμινάριο θα χρησιμοποιήσουμε τη βιβλιοθήκη Freqmeasure για να μετρήσουμε τη συχνότητα για να έχουμε ακριβή αποτελέσματα. Αυτή η βιβλιοθήκη χρησιμοποιεί την εσωτερική διακοπή χρονοδιακόπτη στον ακροδέκτη 8 για να μετρήσει πόσο καιρό παραμένει ένας παλμός. Μόλις μετρηθεί ο χρόνος, μπορούμε να υπολογίσουμε τη συχνότητα χρησιμοποιώντας τους τύπους F = 1 / T. Ωστόσο, δεδομένου ότι χρησιμοποιούμε τη βιβλιοθήκη απευθείας, δεν χρειάζεται να μπει στις λεπτομέρειες του μητρώου και στα μαθηματικά του τρόπου μέτρησης της συχνότητας. Μπορείτε να κατεβάσετε τη βιβλιοθήκη από τον παρακάτω σύνδεσμο:
- Βιβλιοθήκη μέτρησης συχνότητας από pjrc
Ο παραπάνω σύνδεσμος θα κατεβάσει ένα αρχείο zip, μπορείτε στη συνέχεια να προσθέσετε αυτό το αρχείο zip στο Arduino IDE ακολουθώντας τη διαδρομή Σκίτσο -> Συμπερίληψη βιβλιοθήκης -> Προσθήκη βιβλιοθήκης.ZIP.
Σημείωση: Η χρήση της βιβλιοθήκης θα απενεργοποιήσει τηλειτουργία analogWrite στους ακροδέκτες 9 και 10 στο UNO, καθώς ο χρονοδιακόπτης θα καταληφθεί από αυτήν τη βιβλιοθήκη. Επίσης, αυτές οι καρφίτσες θα αλλάξουν εάν χρησιμοποιούνται άλλες σανίδες.
Προγραμματισμός του Arduino για τον εντοπισμό Whistle
Το πλήρες πρόγραμμα με ένα βίντεο επίδειξης βρίσκεται στο κάτω μέρος αυτής της σελίδας. Σε αυτόν τον τίτλο θα εξηγήσω το πρόγραμμα χωρίζοντάς το σε μικρά αποσπάσματα.
Όπως πάντα ξεκινάμε το πρόγραμμα συμπεριλαμβάνοντας τις απαιτούμενες βιβλιοθήκες και δηλώνοντας τις απαιτούμενες μεταβλητές. Βεβαιωθείτε ότι έχετε προσθέσει τη βιβλιοθήκη FreqMeasure.h ήδη όπως εξηγείται στην παραπάνω επικεφαλίδα. Η μεταβλητή κατάσταση αντιπροσωπεύει την κατάσταση του LED και η συχνότητα και η συνέχεια των μεταβλητών χρησιμοποιείται για την έξοδο της μετρούμενης συχνότητας και της συνέχειάς της αντίστοιχα.
#περιλαμβάνω
Μέσα στη λειτουργία ρύθμισης κενού , ξεκινάμε τη σειριακή οθόνη με ρυθμό baud 9600 για εντοπισμό σφαλμάτων. Στη συνέχεια, χρησιμοποιήστε τη συνάρτηση FreqMeasure.begin () για να αρχικοποιήσετε τον πείρο 8 για τη μέτρηση της συχνότητας. Δηλώνουμε επίσης ότι εξάγεται ο ακροδέκτης 13 (LED_BUILTIN).
άκυρη ρύθμιση () { Serial.begin (9600); FreqMeasure.begin (); // Μέτρα στον ακροδέκτη 8 από προεπιλογή pinMode (LED_BUILTIN, OUTPUT); }
Μέσα στον άπειρο βρόχο , συνεχίζουμε να ακούμε στον ακροδέκτη 8 χρησιμοποιώντας τη λειτουργία FreqMeasure.available (). Εάν υπάρχει ένα εισερχόμενο σήμα μετράμε τη συχνότητα χρησιμοποιώντας το FreqMeasure.read (). Για να αποφευχθεί το σφάλμα λόγω θορύβου, μετρήσαμε 100 δείγματα και πάρουμε κατά μέσο όρο αυτό. Ο κώδικας για να κάνετε το ίδιο φαίνεται παρακάτω.
if (FreqMeasure.available ()) { // μέσος όρος αρκετών ανάγνωσης μαζί άθροισμα = άθροισμα + FreqMeasure.read (); μέτρηση = μέτρηση + 1; εάν (μέτρηση> 100) { συχνότητα = FreqMeasure.countToFrequency (άθροισμα / μέτρηση); Serial.println (συχνότητα); άθροισμα = 0; μέτρηση = 0; } }
Μπορείτε να χρησιμοποιήσετε τη συνάρτηση Serial.println () εδώ για να ελέγξετε την τιμή της συχνότητας για το σφυρίχτρα σας. Στην περίπτωσή μου η τιμή που ελήφθη ήταν από 1800Hz έως 2000Hz. Η συχνότητα σφυρίγματος των περισσότερων ανθρώπων θα μειωθεί σε αυτό το συγκεκριμένο εύρος. Αλλά ακόμη και άλλοι ήχοι όπως η μουσική ή η φωνή ενδέχεται να εμπίπτουν σε αυτήν τη συχνότητα, έτσι ώστε να τους ξεχωρίσουμε θα παρακολουθούμε τη συνέχεια. Εάν η συχνότητα είναι συνεχής για 3 φορές, τότε επιβεβαιώνουμε ότι είναι ήχος σφυρίγματος. Έτσι, εάν η συχνότητα κυμαίνεται μεταξύ 1800 και 2000, τότε αυξάνουμε τη μεταβλητή που ονομάζεται συνέχεια.
εάν (συχνότητα> 1800 && συχνότητα <2000) {συνέχεια ++; Serial.print ("Συνέχεια ->"); Serial.println (συνέχεια); συχνότητα = 0;}
Εάν η τιμή της συνέχειας φτάσει ή υπερβαίνει τα τρία, τότε αλλάζουμε την κατάσταση του LED αλλάζοντας τη μεταβλητή που ονομάζεται κατάσταση. Εάν το κράτος είναι ήδη αληθινό, το αλλάζουμε σε ψευδές και αντίστροφο.
εάν (συνέχεια> = 3 && state == false) {state = true; συνέχεια = 0; Serial.println ("Φως ενεργοποιημένο"); καθυστέρηση (1000);} if (συνέχεια> = 3 && state == true) {state = false; συνέχεια = 0; Serial.println ("Απενεργοποιημένο φως"); καθυστέρηση (1000);}
Ο ανιχνευτής σφυρίγματος Arduino λειτουργεί
Μόλις ο κωδικός και το υλικό είναι έτοιμα, μπορούμε να αρχίσουμε να τον δοκιμάζουμε. Βεβαιωθείτε ότι οι συνδέσεις είναι σωστές και ενεργοποιήστε τη μονάδα. Ανοίξτε τη σειριακή οθόνη και ξεκινήστε να σφυρίζετε, μπορείτε να παρατηρήσετε ότι αυξάνεται η αξία της συνέχειας και τελικά ενεργοποιείτε ή σβήνετε τη Λάμπα. Ένα δείγμα στιγμιότυπου της σειριακής οθόνης μου φαίνεται παρακάτω.
Όταν η σειριακή οθόνη λέει ότι το φως που ενεργοποιείται ο πείρος 13 θα γίνει ψηλός και το ρελέ θα ενεργοποιηθεί για να ανάψει η Λάμπα. Παρομοίως, η λυχνία θα σβήσει όταν η σειριακή οθόνη αναφέρει ότι το φως είναι απενεργοποιημένο . Μόλις δοκιμάσετε τη λειτουργία, μπορείτε να ενεργοποιήσετε τη ρύθμιση χρησιμοποιώντας έναν προσαρμογέα 12V και να αρχίσετε να ελέγχετε το AC Home Appliance χρησιμοποιώντας σφυρίχτρα.
Η πλήρης εργασία αυτού του έργου βρίσκεται στο παρακάτω βίντεο. Ελπίζω να καταλάβατε το σεμινάριο και να απολαύσατε να μάθετε κάτι νέο. Εάν έχετε κάποιο πρόβλημα να δουλέψετε, αφήστε τα στην ενότητα σχολίων ή χρησιμοποιήστε το φόρουμ μας για άλλες τεχνικές ερωτήσεις.