- Απαιτούμενα υλικά:
- Διάγραμμα κυκλώματος:
- Χρήση της μεθόδου παλινδρόμησης για τον υπολογισμό dB από την τιμή ADC:
- Πρόγραμμα Arduino για μέτρηση στάθμης ήχου σε dB:
- Εργασία του μετρητή στάθμης ήχου Arduino:
- Ενισχυτής με κύκλωμα φίλτρων:
Η ηχορύπανση έχει αρχίσει να αποκτά σημασία λόγω της υψηλής πυκνότητας του πληθυσμού. Ένα κανονικό ανθρώπινο αυτί θα μπορούσε να ακούσει επίπεδα ήχου από 0dB έως 140dB στα οποία η στάθμη του ήχου από 120dB έως 140dB θεωρείται θόρυβος. Η ένταση ήχου ή η ένταση του ήχου συνήθως μετράται σε ντεσιμπέλ (dB), έχουμε ορισμένα όργανα που θα μπορούσαν να μετρήσουν τα ηχητικά σήματα σε dB, αλλά αυτοί οι μετρητές είναι ελαφρώς ακριβοί και δυστυχώς δεν έχουμε μια μονάδα αισθητήρα εκτός κουτιού για τη μέτρηση των επιπέδων ήχου σε ντεσιμπέλ. Και δεν είναι οικονομικό να αγοράζετε ακριβά μικρόφωνα για ένα μικρό έργο Arduino, το οποίο θα πρέπει να μετρά τη στάθμη του ήχου σε μια μικρή τάξη ή σαλόνι.
Έτσι σε αυτό το έργο θα χρησιμοποιήσουμε ένα κανονικό μικρόφωνο Electret Condenser με το Arduino και θα προσπαθήσουμε να μετρήσουμε το επίπεδο ηχητικής ή ηχορύπανσης σε dB όσο το δυνατόν πιο κοντά στην πραγματική τιμή. Θα χρησιμοποιήσουμε ένα κανονικό κύκλωμα ενισχυτή για να ενισχύσουμε τα ηχητικά σήματα και να το τροφοδοτήσουμε στο Arduino στο οποίο θα χρησιμοποιήσουμε τη μέθοδο παλινδρόμησης για τον υπολογισμό των ηχητικών σημάτων σε dB. Για να ελέγξετε αν οι ληφθείσες τιμές είναι σωστές, μπορούμε να χρησιμοποιήσουμε την εφαρμογή Android "Sound Meter", εάν έχετε καλύτερο μετρητή μπορείτε να το χρησιμοποιήσετε για βαθμονόμηση. Λάβετε υπόψη ότι αυτό το έργο δεν στοχεύει στη μέτρηση του dB με ακρίβεια και θα δώσει τιμές όσο το δυνατόν πιο κοντά στην πραγματική τιμή.
Απαιτούμενα υλικά:
- Arduino UNO
- Μικρόφωνο
- LM386
- Μεταβλητή 10K POT
- Αντιστάσεις και πυκνωτές
Διάγραμμα κυκλώματος:
Το κύκλωμα για αυτόν τον μετρητή στάθμης ήχου Arduino είναι ένα πολύ απλό στο οποίο χρησιμοποιήσαμε το κύκλωμα ενισχυτή ήχου LM386 για να ενισχύσουμε τα σήματα από ένα μικρόφωνο συμπυκνωτή και να το παρέχουμε στην αναλογική θύρα του Arduino. Έχουμε ήδη χρησιμοποιήσει αυτό το LM386 IC για να χτίσουμε ένα κύκλωμα ενισχυτή ήχου χαμηλής τάσης και το κύκλωμα παραμένει το ίδιο.
Το κέρδος αυτού του συγκεκριμένου op-amp μπορεί να ρυθμιστεί από 20 έως 200 χρησιμοποιώντας μια αντίσταση ή πυκνωτή στους ακροδέκτες 1 και 8. Εάν παραμείνουν ελεύθερα, το κέρδος θα οριστεί ως 20 από προεπιλογή. Για το έργο μας έχουμε το μέγιστο δυνατό κέρδος από αυτό το κύκλωμα, οπότε χρησιμοποιούμε έναν πυκνωτή αξίας 10uF μεταξύ των ακίδων 1 και 8, σημειώστε ότι αυτός ο πείρος είναι ευαίσθητος στην πολικότητα και ο αρνητικός πείρος του πυκνωτή πρέπει να συνδεθεί στον ακροδέκτη 8. Ο πλήρης ενισχυτής Το κύκλωμα τροφοδοτείται από τον ακροδέκτη 5V από το Arduino.
Το Capacitor C2 χρησιμοποιείται για το φιλτράρισμα του θορύβου DC από το μικρόφωνο. Βασικά, όταν το μικρόφωνο αισθάνεται ήχο, τα ηχητικά κύματα θα μετατραπούν σε σήματα AC. Αυτό το σήμα AC μπορεί να έχει κάποιο θόρυβο DC σε συνδυασμό με αυτό που θα φιλτραριστεί από αυτόν τον πυκνωτή. Ομοίως, ακόμη και μετά την ενίσχυση χρησιμοποιείται ένας πυκνωτής C3 για το φιλτράρισμα τυχόν θορύβου DC που θα μπορούσε να έχει προστεθεί κατά την ενίσχυση.
Χρήση της μεθόδου παλινδρόμησης για τον υπολογισμό dB από την τιμή ADC:
Μόλις είμαστε έτοιμοι με το κύκλωμα μας, μπορούμε να συνδέσουμε το Arduino με τον υπολογιστή και να ανεβάσουμε το πρόγραμμα "Αναλογική ανάγνωση σειριακού" από το Arduino για να ελέγξουμε εάν λαμβάνουμε έγκυρες τιμές ADC από το μικρόφωνό μας. Τώρα πρέπει να μετατρέψουμε αυτές τις τιμές ADC σε dB.
Σε αντίθεση με άλλες τιμές όπως η μέτρηση της θερμοκρασίας ή της υγρασίας, η μέτρηση dB δεν είναι απλή εργασία. Επειδή η τιμή του dB δεν είναι γραμμική με την τιμή των ADC. Υπάρχουν μερικοί τρόποι με τους οποίους μπορείτε να φτάσετε, αλλά κάθε πιθανό βήμα που προσπάθησα δεν μου έδωσε καλά αποτελέσματα. Μπορείτε να διαβάσετε αυτό το φόρουμ Arduino εδώ εάν θέλετε να το δοκιμάσετε.
Για την εφαρμογή μου, δεν χρειάζομαι μεγάλη ακρίβεια κατά τη μέτρηση των τιμών dB και ως εκ τούτου αποφάσισα να χρησιμοποιήσω έναν ευκολότερο τρόπο άμεσης βαθμονόμησης των τιμών ADC με τιμές dB. Για αυτήν τη μέθοδο, θα χρειαζόμαστε έναν μετρητή SPL (Ένας μετρητής SPL είναι ένα όργανο που θα μπορούσε να διαβάσει τιμές dB και να το εμφανίσει), αλλά δυστυχώς δεν είχα ένα και σίγουρα οι περισσότεροι από εμάς δεν θα το έκαναν. Έτσι μπορούμε να χρησιμοποιήσουμε την εφαρμογή android που ονομάζεται "Sound meter", η οποία θα μπορούσε να κατεβάσει δωρεάν από το play store. Υπάρχουν πολλοί τέτοιοι τύποι εφαρμογών και μπορείτε να κατεβάσετε οτιδήποτε θέλετε. Αυτές οι εφαρμογές χρησιμοποιούν το ενσωματωμένο μικρόφωνο του τηλεφώνου για να ανιχνεύσουν το επίπεδο θορύβου και να το εμφανίσουν στο κινητό μας. Δεν είναι πολύ ακριβείς, αλλά σίγουρα θα λειτουργούσαν για το καθήκον μας. Ας ξεκινήσουμε λοιπόν εγκαθιστώντας την εφαρμογή Android, η δική μου όταν άνοιξε έμοιαζε έτσι παρακάτω
Όπως είπα νωρίτερα, η σχέση μεταξύ των τιμών dB και Analog δεν θα είναι γραμμική, επομένως πρέπει να συγκρίνουμε αυτές τις δύο τιμές σε διαφορετικά διαστήματα. Απλώς σημειώστε την τιμή του ADC που εμφανίζεται στην οθόνη για διαφορετικά dB που εμφανίζονται στο κινητό σας τηλέφωνο. Πήρα περίπου 10 αναγνώσεις και έμοιαζαν με αυτό παρακάτω, μπορεί να διαφέρει λίγο
Ανοίξτε μια σελίδα excel και πληκτρολογήστε αυτές τις τιμές, προς το παρόν θα χρησιμοποιούμε το Excel για να βρούμε τις τιμές παλινδρόμησης για τον παραπάνω αριθμό. Πριν από αυτό ας σχεδιάσουμε ένα γράφημα και να ελέγξουμε πώς σχετίζονται και οι δύο, το δικό μου έμοιαζε έτσι παρακάτω.
Όπως μπορούμε να δούμε, η τιμή του dB δεν σχετίζεται γραμμικά με το ADC, πράγμα που σημαίνει ότι δεν μπορείτε να έχετε έναν κοινό πολλαπλασιαστή για όλες τις τιμές ADC για να αποκτήσετε τις αντίστοιχες τιμές dB. Σε αυτήν την περίπτωση μπορούμε να χρησιμοποιήσουμε τη μέθοδο «γραμμικής παλινδρόμησης». Βασικά, θα μετατρέψει αυτήν την ακανόνιστη μπλε γραμμή στην πλησιέστερη δυνατή ευθεία γραμμή (μαύρη γραμμή) και θα μας δώσει την εξίσωση αυτής της ευθείας γραμμής. Αυτή η εξίσωση μπορεί να χρησιμοποιηθεί για να βρει την ισοδύναμη τιμή του dB για κάθε τιμή ADC που μετρά το Arduino.
Στο Excel έχουμε μια προσθήκη για ανάλυση δεδομένων η οποία θα υπολογίσει αυτόματα την παλινδρόμηση για το σύνολο τιμών σας και θα δημοσιεύσει τα δεδομένα της. Δεν πρόκειται να καλύψω πώς να το κάνω με το excel, καθώς δεν εμπίπτει στο πεδίο αυτού του έργου, είναι επίσης εύκολο για εσάς στο Google και να το μάθετε. Μόλις υπολογίσετε την παλινδρόμηση για την τιμή, το excel θα δώσει μερικές τιμές όπως φαίνεται παρακάτω. Μας ενδιαφέρει μόνο οι αριθμοί που επισημαίνονται παρακάτω.
Μόλις λάβετε αυτούς τους αριθμούς, θα είστε σε θέση να σχηματίσετε την παρακάτω εξίσωση όπως
ADC = (11.003 * dB) - 83.2073
Από την οποία μπορείτε να αντλήσετε το dB να είναι
dB = (ADC + 83.2073) / 11.003
Ίσως χρειαστεί να οδηγήσετε τη δική σας εξίσωση, καθώς η βαθμονόμηση ενδέχεται να διαφέρει. Ωστόσο, διατηρήστε αυτήν την τιμή ασφαλή γιατί θα τη χρειαζόμαστε κατά τον προγραμματισμό του Arduino.
Πρόγραμμα Arduino για μέτρηση στάθμης ήχου σε dB:
Το πλήρες πρόγραμμα μέτρησης dB δίνεται παρακάτω, μερικές σημαντικές γραμμές εξηγούνται παρακάτω
Σε αυτές τις δύο παραπάνω γραμμές, διαβάζουμε την τιμή ADC του πείρου A0 και τη μετατρέπουμε σε dB χρησιμοποιώντας την εξίσωση που μόλις δημιουργήσαμε. Αυτή η τιμή dB μπορεί να μην είναι ακριβής στην πραγματική τιμή dB, αλλά παραμένει σχεδόν κοντά στις τιμές που εμφανίζονται στην εφαρμογή για κινητά.
adc = analogRead (MIC); // Διαβάστε την τιμή ADC από τον ενισχυτή dB = (adc + 83.2073) / 11.003; // Μετατροπή τιμής ADC σε dB χρησιμοποιώντας τιμές παλινδρόμησης
Για να ελέγξουμε εάν το πρόγραμμα λειτουργεί σωστά, έχουμε προσθέσει επίσης ένα LED στον ψηφιακό πείρο 3, ο οποίος έχει σχεδιαστεί για να φτάσει ψηλά για 1 δευτερόλεπτο όταν το Arduino μετρά έναν δυνατό θόρυβο άνω των 60dB.
εάν (dB> 60) {digitalWrite (3, HIGH); // ανάψτε το LED (HIGH είναι το επίπεδο τάσης) καθυστέρηση (1000). // περιμένετε ένα δεύτερο digitalWrite (3, LOW). }
Εργασία του μετρητή στάθμης ήχου Arduino:
Μόλις είστε έτοιμοι με τον κωδικό και το υλικό, απλώς ανεβάστε τον κωδικό και ανοίξτε τη σειριακή οθόνη σας για να δείτε τις τιμές dB που μετρήθηκαν από το Arduino. Δοκίμασα αυτόν τον κωδικό στο δωμάτιό μου όπου δεν υπήρχε πολύς θόρυβος εκτός από την κυκλοφορία έξω και πήρα τις παρακάτω τιμές στη σειριακή οθόνη μου και η εφαρμογή Android έδειξε επίσης κάτι κοντά σε αυτό
Το πλήρες έργο του έργου βρίσκεται στο βίντεο που δίνεται στο τέλος αυτής της σελίδας. Μπορείτε να χρησιμοποιήσετε για προβολή για να εντοπίσετε ήχο στο δωμάτιο και να ελέγξετε αν υπάρχει δραστηριότητα ή πόσος θόρυβος παράγεται σε κάθε τάξη ή κάτι τέτοιο. Μόλις έφτιαξα ένα LED για να πάει ψηλά για 2 δευτερόλεπτα εάν υπάρχει ήχος εγγεγραμμένος πάνω από 60dB.
Η εργασία είναι περίεργα ικανοποιητική, αλλά σίγουρα μπορεί να χρησιμοποιηθεί για έργα και άλλα βασικά πρωτότυπα. Με λίγα ακόμη σκάψιμο, βρήκα ότι το πρόβλημα ήταν στην πραγματικότητα με το υλικό, το οποίο μου έκανε ακόμα θόρυβο. Δοκίμασα λοιπόν άλλα κυκλώματα που χρησιμοποιούνται στις πλακέτες μικροφώνου με σπινθήρα που έχουν φίλτρο χαμηλής και υψηλής διέλευσης. Έχω εξηγήσει το παρακάτω κύκλωμα για να το δοκιμάσετε.
Ενισχυτής με κύκλωμα φίλτρων:
Εδώ έχουμε χρησιμοποιήσει φίλτρα χαμηλής και υψηλής διέλευσης με ενισχυτή για να μειώσουμε τον θόρυβο σε αυτό το κύκλωμα μέτρησης στάθμης ήχου, έτσι ώστε να μπορεί να αυξηθεί η ακρίβεια.
Σε αυτό το παραπάνω κύκλωμα, χρησιμοποιήσαμε τον δημοφιλή ενισχυτή LM358 για να ενισχύσουμε τα σήματα από το μικρόφωνο. Μαζί με τον ενισχυτή χρησιμοποιήσαμε επίσης δύο φίλτρα, το φίλτρο διέλευσης διαμορφώνεται από τα R5, C2 και το φίλτρο χαμηλής διέλευσης χρησιμοποιείται από τα C1 και R2. Αυτά τα φίλτρα έχουν σχεδιαστεί για να επιτρέπουν τη συχνότητα μόνο από 8Hz έως 10KHz, καθώς το φίλτρο χαμηλής διέλευσης θα φιλτράρει οτιδήποτε κάτω από 8Hz και το φίλτρο High Pass θα φιλτράρει οτιδήποτε πάνω από 15KHz. Αυτό το εύρος συχνοτήτων είναι επιλεγμένο επειδή το μικρόφωνο συμπυκνωτή μου λειτουργεί μόνο από 10Hz έως 15KHZ, όπως φαίνεται στο φύλλο δεδομένων παρακάτω.
Εάν η ζήτηση συχνότητας αλλάξει, μπορείτε να χρησιμοποιήσετε τους παρακάτω τύπους για να υπολογίσετε την τιμή της αντίστασης και του πυκνωτή για την απαιτούμενη συχνότητα.
Συχνότητα (F) = 1 / (2πRC)
Επίσης, σημειώστε ότι η τιμή της αντίστασης που χρησιμοποιείται εδώ θα επηρεάσει επίσης το κέρδος του ενισχυτή. Ο υπολογισμός για την τιμή της αντίστασης και του πυκνωτή που χρησιμοποιείται σε αυτό το κύκλωμα φαίνεται παρακάτω. Μπορείτε να κατεβάσετε το φύλλο excel από εδώ για να τροποποιήσετε τις τιμές συχνότητας και να υπολογίσετε τις τιμές παλινδρόμησης.
Το προηγούμενο κύκλωμα λειτούργησε ικανοποιητικά για τις προσδοκίες μου, οπότε δεν το δοκίμασα ποτέ. Εάν τυχαίνει να δοκιμάσετε αυτό το κύκλωμα, ενημερώστε με εάν λειτουργεί καλύτερα από το προηγούμενο μέσω των σχολίων.