Πίνακας περιεχομένων:

Arduino CO Monitor χρησιμοποιώντας αισθητήρα MQ-7: 8 βήματα (με εικόνες)
Arduino CO Monitor χρησιμοποιώντας αισθητήρα MQ-7: 8 βήματα (με εικόνες)

Βίντεο: Arduino CO Monitor χρησιμοποιώντας αισθητήρα MQ-7: 8 βήματα (με εικόνες)

Βίντεο: Arduino CO Monitor χρησιμοποιώντας αισθητήρα MQ-7: 8 βήματα (με εικόνες)
Βίντεο: Μέτρηση 50Α έως 200Α με χρήση αισθητήρα ρεύματος Allegro ACS770 με βιβλιοθήκη Robojax 2024, Ιούλιος
Anonim
Arduino CO Monitor με αισθητήρα MQ-7
Arduino CO Monitor με αισθητήρα MQ-7
Arduino CO Monitor με αισθητήρα MQ-7
Arduino CO Monitor με αισθητήρα MQ-7

Λίγα λόγια γιατί δημιουργήθηκε αυτό το διδακτικό: μια μέρα η μητέρα της φίλης μου μας πήρε τηλέφωνο τα μεσάνυχτα γιατί ένιωθε πολύ αδιαθεσία - είχε ζάλη, ταχυκαρδία, ναυτία, υψηλή αρτηριακή πίεση, ακόμη και λιποθύμησε για άγνωστο χρόνο (πιθανώς 5 ~ λεπτά, αλλά δεν υπάρχει τρόπος να το πεις), όλα χωρίς κάποιο προφανή λόγο. Ζει σε ένα μικρό χωριό μακριά από νοσοκομεία (60 χιλιόμετρα από τον τόπο μας, 30 χιλιόμετρα από το πλησιέστερο νοσοκομείο, 10 χιλιόμετρα χωρίς κανονικό δρόμο ενδιάμεσα), οπότε σπεύσαμε σε αυτήν και φτάσαμε εκεί αμέσως μετά το ασθενοφόρο. Νοσηλεύτηκε και το πρωί ένιωσε σχεδόν καλά, αλλά οι γιατροί δεν μπόρεσαν να βρουν την αιτία. Την επόμενη μέρα είχαμε μια ιδέα: θα μπορούσε να είναι δηλητηρίαση με CO, καθώς έχει λέβητα νερού αερίου (στη φωτογραφία) και καθόταν κοντά του για όλο το βράδυ όταν συνέβη. Αγοράσαμε πρόσφατα αισθητήρα MQ-7 CO, αλλά ποτέ δεν είχα χρόνο να συγκεντρώσω ένα σχέδιο για αυτό, οπότε αυτή ήταν η τέλεια στιγμή για να το κάνετε. Μετά από μια ώρα αναζήτησης στο Διαδίκτυο για οποιεσδήποτε οδηγίες, συνειδητοποίησα ότι δεν μπορώ να βρω κάποιον οδηγό που να ακολουθεί ταυτόχρονα τις οδηγίες του κατασκευαστή του αισθητήρα που παρέχονται στο φύλλο δεδομένων του και να εξηγεί οτιδήποτε (ένα παράδειγμα φάνηκε να έχει αρκετά καλό κώδικα, αλλά δεν ήταν σαφές πώς να το εφαρμόσετε, άλλοι υπεραπλουστεύτηκαν και δεν θα λειτουργούσαν καλά). Έτσι αφιερώσαμε περίπου 12 ώρες για την ανάπτυξη σχημάτων, την κατασκευή και την εκτύπωση τρισδιάστατης θήκης, τον έλεγχο και τη βαθμονόμηση του αισθητήρα και την επόμενη μέρα πήγαμε στον ύποπτο λέβητα. Αποδείχθηκε ότι τα επίπεδα CO εκεί ήταν εξαιρετικά υψηλά και θα μπορούσαν να είναι θανατηφόρα αν ο χρόνος έκθεσης σε CO ήταν μεγαλύτερος. Έτσι πιστεύω ότι όποιος έχει παρόμοια κατάσταση (όπως λέβητας αερίου ή άλλη καύση που συμβαίνει μέσα σε ένα χώρο διαβίωσης) πρέπει να πάρει έναν τέτοιο αισθητήρα για να αποτρέψει κάτι κακό από το να συμβεί.

Όλα αυτά συνέβησαν πριν από δύο εβδομάδες, από τότε βελτίωσα αρκετά τα σχήματα και το πρόγραμμα, και τώρα φαίνεται ότι είναι αρκετά καλό και σχετικά απλό (όχι απλό 3 γραμμές κώδικα, αλλά ακόμα). Αν και ελπίζω ότι κάποιος με ακριβή μετρητή CO θα μου δώσει κάποια ανατροφοδότηση σχετικά με την προεπιλεγμένη βαθμονόμηση που έβαλα στο σκίτσο - υποψιάζομαι ότι δεν είναι καθόλου καλό. Ακολουθεί ένας πλήρης οδηγός με ορισμένα πειραματικά δεδομένα.

Βήμα 1: Λογαριασμός Υλικών

Λογαριασμός Υλικών
Λογαριασμός Υλικών

Θα χρειαστείτε: 0. Πίνακας Arduino. Προτιμώ τον κινέζικο κλώνο του Arduino Nano για την εξαιρετική τιμή των $ 3, αλλά οποιοδήποτε arduino 8-bit θα λειτουργήσει εδώ. Το Sketch χρησιμοποιεί κάποια προηγμένη λειτουργία χρονοδιακόπτη και δοκιμάστηκε μόνο σε μικροελεγκτή atmega328 - αν και πιθανότατα θα λειτουργήσει καλά και σε άλλους. Αισθητήρας MQ-7 CO. Συνηθέστερα διαθέσιμος με αυτήν τη μονάδα αισθητήρα Flying Fish, πρέπει να περάσει από μια μικρή τροποποίηση, λεπτομέρειες στο επόμενο βήμα ή μπορείτε να χρησιμοποιήσετε έναν ξεχωριστό αισθητήρα MQ-7.

2. NPN διπολικό τρανζίστορ. Σχεδόν κάθε τρανζίστορ NPN που μπορεί να χειριστεί 300 mA ή περισσότερο θα λειτουργήσει εδώ. Το τρανζίστορ PNP δεν θα λειτουργεί με μια αναφερόμενη μονάδα Flying Fish (επειδή έχει πείρο θερμαντήρα συγκολλημένο στην έξοδο του αισθητήρα), αλλά μπορεί να χρησιμοποιηθεί με διακριτό αισθητήρα MQ-7.

3. Αντίσταση: 2 x 1k (από 0,5k έως 1,2k θα λειτουργήσει καλά) και 1 x 10k (αυτό είναι καλύτερο να διατηρείται ακριβές - αν και αν πρέπει οπωσδήποτε να χρησιμοποιήσετε διαφορετική τιμή, προσαρμόστε ανάλογα τη μεταβλητή reference_resistor_kOhm στο σκίτσο).

4. Πυκνωτές: 2 x 10uF ή περισσότερο. Απαιτούνται ταντάλια ή κεραμικά, τα ηλεκτρολυτικά δεν θα λειτουργούν καλά λόγω του υψηλού ESR (δεν θα μπορούν να παρέχουν αρκετό ρεύμα για να εξομαλύνουν τον κυματισμό υψηλού ρεύματος).5. Πράσινες και κόκκινες λυχνίες LED που υποδεικνύουν το τρέχον επίπεδο CO (μπορείτε επίσης να χρησιμοποιήσετε ένα μονόχρωμο LED με 3 ακροδέκτες, όπως χρησιμοποιήσαμε στο πρωτότυπο κίτρινου κουτιού μας).6. Piezo buzzer για ένδειξη υψηλού επιπέδου CO.7. Breadboard και σύρματα (μπορείτε επίσης να κολλήσετε τα πάντα σε καρφίτσες Nano ή να πιέσετε σε πρίζες Uno, αλλά είναι εύκολο να κάνετε λάθος με αυτόν τον τρόπο).

Βήμα 2: Τροποποίηση μονάδας ή καλωδίωση διακριτού αισθητήρα

Τροποποίηση μονάδας ή καλωδίωση διακριτού αισθητήρα
Τροποποίηση μονάδας ή καλωδίωση διακριτού αισθητήρα

Για τη μονάδα, πρέπει να ξεκολλήσετε αντίσταση και πυκνωτή, όπως φαίνεται στη φωτογραφία. Μπορείτε να ξεκολλήσετε βασικά τα πάντα αν θέλετε - η ηλεκτρονική μονάδα είναι εντελώς άχρηστη, τη χρησιμοποιούμε μόνο ως βάση για τον ίδιο τον αισθητήρα, αλλά αυτά τα δύο εξαρτήματα θα σας εμποδίσουν να λάβετε σωστές ενδείξεις, Εάν χρησιμοποιείτε διακριτό αισθητήρα, συνδέστε τις ακίδες θερμαντήρα (H1 και H2) σε 5V και τον συλλέκτη τρανζίστορ αντίστοιχα. Συνδέστε μια πλευρά ανίχνευσης (οποιαδήποτε από τις ακίδες Α) σε 5V, μια άλλη πλευρά ανίχνευσης (οποιαδήποτε από τις ακίδες Β) σε αντίσταση 10k, ακριβώς όπως ο αναλογικός πείρος της μονάδας στα σχήματα.

Βήμα 3: Αρχή λειτουργίας

Αρχή Λειτουργίας
Αρχή Λειτουργίας
Αρχή Λειτουργίας
Αρχή Λειτουργίας

Γιατί χρειαζόμαστε όλες αυτές τις επιπλοκές, γιατί όχι να συνδέσουμε 5V, γείωση και να πάρουμε απλώς μετρήσεις; Λοιπόν, δυστυχώς δεν θα έχετε τίποτα χρήσιμο με αυτόν τον τρόπο. Σύμφωνα με το φύλλο δεδομένων MQ-7, ο αισθητήρας πρέπει να τρέχει σε υψηλή και κύκλους χαμηλής θέρμανσης προκειμένου να ληφθούν οι κατάλληλες μετρήσεις. Κατά τη φάση χαμηλής θερμοκρασίας, το CO απορροφάται στην πλάκα, παράγοντας σημαντικά δεδομένα. Κατά τη διάρκεια της φάσης υψηλής θερμοκρασίας, το απορροφημένο CO και άλλες ενώσεις εξατμίζονται από την πλάκα του αισθητήρα, καθαρίζοντάς το για την επόμενη μέτρηση.

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

1. Εφαρμόστε 5V για 60 δευτερόλεπτα, μην χρησιμοποιείτε αυτές τις μετρήσεις για τη μέτρηση CO.

2. Εφαρμόστε 1,4V για 90 δευτερόλεπτα, χρησιμοποιήστε αυτές τις μετρήσεις για τη μέτρηση CO.

3. Πηγαίνετε στο βήμα 1.

Αλλά εδώ είναι το πρόβλημα: Το Arduino δεν μπορεί να παρέχει αρκετή ισχύ για να τρέξει αυτόν τον αισθητήρα από τις ακίδες του - ο θερμαντήρας του αισθητήρα απαιτεί 150 mA, ενώ ο πείρος Arduino δεν μπορεί να υπερβαίνει τα 40 mA, οπότε αν συνδεθεί απευθείας, ο πείρος Arduino θα καεί και ο αισθητήρας εξακολουθεί να κερδίζει δεν δουλεύω. Πρέπει λοιπόν να χρησιμοποιήσουμε κάποιο είδος ενισχυτή ρεύματος που παίρνει μικρό ρεύμα εισόδου για τον έλεγχο του μεγάλου ρεύματος εξόδου. Ένα άλλο πρόβλημα είναι η απόκτηση 1,4V. Ο μόνος τρόπος για να λάβετε αξιόπιστα αυτήν την τιμή χωρίς την εισαγωγή πολλών αναλογικών εξαρτημάτων είναι να χρησιμοποιήσετε την προσέγγιση PWM (Pulse Width Modulation) με ανατροφοδότηση που θα ελέγχει την τάση εξόδου.

Το τρανζίστορ NPN λύνει και τα δύο προβλήματα: όταν είναι συνεχώς ενεργοποιημένο, η τάση στον αισθητήρα είναι 5V και θερμαίνεται για φάση υψηλής θερμοκρασίας. Όταν εφαρμόζουμε PWM στην είσοδό του, το ρεύμα πάλλεται, στη συνέχεια εξομαλύνεται από τον πυκνωτή και η μέση τάση διατηρείται σταθερή. Εάν χρησιμοποιούμε PWM υψηλής συχνότητας (στο σκίτσο έχει συχνότητα 62,5KHz) και κατά μέσο όρο πολλές αναλογικές αναγνώσεις (στο σκίτσο έχουμε κατά μέσο όρο πάνω από read 1000 αναγνώσεις), τότε το αποτέλεσμα είναι αρκετά αξιόπιστο.

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

Βήμα 4: Διαγράμματα και Breadboard

Σχήματα και Breadboard
Σχήματα και Breadboard
Σχήματα και Breadboard
Σχήματα και Breadboard
Σχήματα και Breadboard
Σχήματα και Breadboard

Εδώ είναι το σχήμα και η συναρμολόγηση του breadboard.

ΠΡΟΕΙΔΟΠΟΙΗΣΗ! Απαιτείται τροποποίηση μιας τυπικής μονάδας διάσπασης! Χωρίς τροποποίηση η μονάδα είναι άχρηστη. Η τροποποίηση περιγράφεται στο δεύτερο βήμα

Είναι σημαντικό να χρησιμοποιείτε τις ακίδες D9 και D10 για LED, καθώς εκεί έχουμε εξόδους υλικού Timer1, θα επιτρέψει την ομαλή αλλαγή των χρωμάτων τους. Οι ακίδες D5 και D6 χρησιμοποιούνται για βομβητή, επειδή οι D5 και D6 είναι έξοδοι υλικού Timer0. Θα τα διαμορφώσουμε ώστε να είναι αντίστροφα το ένα με το άλλο, έτσι ώστε να αλλάζουν μεταξύ (5V, 0V) και (0V, 5V) καταστάσεων, παράγοντας έτσι ήχο στον βομβητή. Προειδοποίηση: αυτό επηρεάζει την κύρια διακοπή χρονισμού του Arduino, οπότε όλες οι εξαρτώμενες από το χρόνο λειτουργίες (όπως millis ()) δεν θα παράγουν σωστά αποτελέσματα σε αυτό το σκίτσο (περισσότερα για αυτό αργότερα). Το Pin D3 έχει συνδεδεμένο με αυτό την έξοδο υλικού Timer2 (καθώς και D11 - αλλά είναι λιγότερο βολικό να τοποθετήσετε σύρμα στο D11 από ό, τι στο D3) - έτσι το χρησιμοποιούμε για να παρέχουμε PWM για τρανζίστορ ελέγχου τάσης. Το Resistor R1 χρησιμοποιείται για τον έλεγχο της φωτεινότητας των LED. Μπορεί να είναι οπουδήποτε από 300 έως 3000 Ohm, το 1k είναι μάλλον βέλτιστο σε φωτεινότητα/κατανάλωση ενέργειας. Το Resistor R2 χρησιμοποιείται για τον περιορισμό του ρεύματος βάσης του τρανζίστορ. Δεν πρέπει να είναι χαμηλότερο από 300 Ohms (για να μην υπερφορτώνεται η καρφίτσα Arduino) και όχι υψηλότερο από 1500 Ohms. 1k υπάρχει μια ασφαλής επιλογή.

Η αντίσταση R3 χρησιμοποιείται σε σειρά με την πλάκα του αισθητήρα για τη δημιουργία διαχωριστή τάσης. Η τάση στην έξοδο του αισθητήρα είναι ίση με R3 / (R3 + Rs) * 5V, όπου Rs είναι η αντίσταση του τρέχοντος αισθητήρα. Η αντίσταση του αισθητήρα εξαρτάται από τη συγκέντρωση CO, οπότε η τάση αλλάζει ανάλογα. Ο πυκνωτής C1 χρησιμοποιείται για την εξομάλυνση της τάσης εισόδου PWM στον αισθητήρα MQ -7, όσο μεγαλύτερη είναι η χωρητικότητά του τόσο καλύτερο, αλλά επίσης πρέπει να έχει χαμηλό ESR - τόσο κεραμικό (ή ταντάλιο) ο πυκνωτής προτιμάται εδώ, ο ηλεκτρολυτικός δεν θα λειτουργεί καλά.

Ο πυκνωτής C2 χρησιμοποιείται για την εξομάλυνση της αναλογικής εξόδου του αισθητήρα (η τάση εξόδου εξαρτάται από την τάση εισόδου - και έχουμε αρκετά υψηλό ρεύμα PWM εδώ, που επηρεάζει όλα τα σχήματα, οπότε χρειαζόμαστε C2). Η απλούστερη λύση είναι να χρησιμοποιήσετε τον ίδιο πυκνωτή με το τρανζίστορ C1. NPN είτε μεταφέρει ρεύμα όλη την ώρα για να παρέχει υψηλό ρεύμα στη θερμάστρα του αισθητήρα, είτε λειτουργεί σε λειτουργία PWM μειώνοντας έτσι το ρεύμα θέρμανσης.

Βήμα 5: Πρόγραμμα Arduino

Πρόγραμμα Arduino
Πρόγραμμα Arduino

ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Ο ΑΙΣΘΗΤΗΡΑΣ ΑΠΑΙΤΕΙ ΧΕΙΡΟΚΙΝΗΤΗ ΒΑΘΜΟΝΟΜΗΣΗ ΓΙΑ ΟΠΟΙΑΔΗΠΟΤΕ ΠΡΑΚΤΙΚΗ ΧΡΗΣΗ. ΧΩΡΙΣ ΒΑΘΜΟΝΟΜΗΣΗ, ΕΞΑΡΤΗΣΗ ΤΩΝ ΠΑΡΑΜΕΤΡΩΝ ΤΟΥ ΣΥΓΚΕΚΡΙΜΕΝΟΥ ΑΙΣΘΗΤΗΡΑ ΣΑΣ, ΑΥΤΟ ΤΟ ΣΚΙΤΣΙΟ ΜΠΟΡΕΙ ΝΑ ΕΝΕΡΓΟΠΟΙΕΙ ΣΥΝΑΓΕΡΜΟ ΣΕ ΚΑΘΑΡΟ ΑΕΡΑ NOT ΟΧΙ ΑΠΟΣΤΟΛΗ ΣΥΓΚΕΝΤΡΩΣΗΣ ΜΟΝΟΞΕΙΔΙΟΥ ΑΝΘΡΑΚΑ ΑΝΘΡΑΚΑ

Η βαθμονόμηση περιγράφεται στα ακόλουθα βήματα. Η πρόχειρη βαθμονόμηση είναι πολύ απλή, η ακριβής είναι αρκετά πολύπλοκη.

Σε γενικό επίπεδο, το πρόγραμμα είναι μάλλον απλό:

Πρώτα βαθμονομούμε το PWM μας για να παράγουμε σταθερό 1,4V που απαιτείται από τον αισθητήρα (το σωστό πλάτος PWM εξαρτάται από πολλές παραμέτρους όπως ακριβείς τιμές αντίστασης, αντίσταση του συγκεκριμένου αισθητήρα, καμπύλη VA τρανζίστορ κλπ κλπ - οπότε ο καλύτερος τρόπος είναι να δοκιμάσετε διάφορες τιμές και χρησιμοποιήστε αυτό που ταιριάζει καλύτερα). Στη συνέχεια, συνεχίζουμε συνεχώς τον κύκλο θέρμανσης 60 δευτερολέπτων και μέτρησης 90 δευτερολέπτων. Στην εφαρμογή γίνεται κάπως περίπλοκο. Πρέπει να χρησιμοποιήσουμε χρονοδιακόπτες υλικού επειδή όλα όσα έχουμε εδώ χρειάζονται σταθερό PWM υψηλής συχνότητας για να λειτουργήσουν σωστά. Ο κώδικας επισυνάπτεται εδώ και μπορεί να μεταφορτωθεί από το github μας, καθώς και την πηγή σχηματικών παραστάσεων στο Fritzing. Στο πρόγραμμα υπάρχουν 3 λειτουργίες που χειρίζονται χρονοδιακόπτες: setTimer0PWM, setTimer1PWM, setTimer2PWM. Καθένα από αυτά ορίζει χρονοδιακόπτη σε λειτουργία PWM με δεδομένες παραμέτρους (σχολιάζεται στον κώδικα) και ορίζει το πλάτος του παλμού σύμφωνα με τις τιμές εισόδου. Οι φάσεις μέτρησης αλλάζουν χρησιμοποιώντας τις λειτουργίες startMeasurementPhase και startHeatingPhase, χειριστείτε τα πάντα μέσα. και ορίστε τις σωστές τιμές χρονομέτρου για εναλλαγή μεταξύ θέρμανσης 5V και 1.4V. Η κατάσταση των οδηγήσεων ορίζεται από τις λειτουργίες setLED που δέχεται πράσινη και κόκκινη φωτεινότητα στην είσοδό της (σε γραμμική κλίμακα 1-100) και τη μετατρέπει σε αντίστοιχη ρύθμιση χρονοδιακόπτη.

Η κατάσταση του βομβητή ελέγχεται χρησιμοποιώντας συναρτήσεις buzz_on, buzz_off, buzz_beep. Οι λειτουργίες ενεργοποίησης/απενεργοποίησης ενεργοποιούν και απενεργοποιούν τον ήχο, η λειτουργία μπιπ παράγει συγκεκριμένη ακολουθία μπιπ με περίοδο 1,5 δευτερολέπτου εάν καλείται περιοδικά (αυτή η λειτουργία επιστρέφει αμέσως, ώστε να μην κάνει παύση στο κύριο πρόγραμμα - αλλά πρέπει να το καλείτε ξανά και ξανά για την παραγωγή μοτίβου μπιπ).

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

Στον κύριο βρόχο, το πρόγραμμα ελέγχει αν περάσαμε αρκετό χρόνο στην τρέχουσα φάση (90 δευτερόλεπτα για τη φάση μέτρησης, 60 δευτερόλεπτα για τη φάση θέρμανσης) και αν ναι, τότε αλλάζει η τρέχουσα φάση. Επίσης, ενημερώνει συνεχώς τις ενδείξεις αισθητήρων χρησιμοποιώντας εκθετική εξομάλυνση: new_value = 0.999*old_value + 0.001*new_reading. Με τέτοιες παραμέτρους και κύκλο μέτρησης, ο μέσος όρος του σήματος διαρκεί περίπου τα τελευταία 300 χιλιοστά του δευτερολέπτου. ΧΩΡΙΣ ΒΑΘΜΟΝΟΜΗΣΗ, ΕΞΑΡΤΗΣΗ ΤΩΝ ΠΑΡΑΜΕΤΡΩΝ ΤΟΥ ΣΥΓΚΕΚΡΙΜΕΝΟΥ ΣΑΣ ΑΙΣΘΗΤΗΡΑ, ΑΥΤΟ ΤΟ ΣΚΙΤΣΙΟ ΜΠΟΡΕΙ ΝΑ ΕΝΕΡΓΟΠΟΙΕΙ ΣΥΝΑΓΕΡΜΟ ΣΕ ΚΑΘΑΡΟ ΑΕΡΑ NOT ΟΧΙ ΑΠΟΣΤΟΛΗ ΣΥΓΚΕΝΤΡΩΣΗΣ ΜΟΝΟΞΕΙΔΙΟΥ ΑΝΘΡΑΚΑ ΑΝΘΡΑΚΑ.

Βήμα 6: Πρώτη εκτέλεση: Τι να περιμένετε

Πρώτη εκτέλεση: Τι να περιμένετε
Πρώτη εκτέλεση: Τι να περιμένετε

Εάν έχετε συναρμολογήσει τα πάντα σωστά, μετά την εκτέλεση του σκίτσου θα δείτε κάτι τέτοιο στο Serial monitor:

ρύθμιση PWM w = 0, V = 4.93

ρύθμιση PWM w = 17, V = 3.57PWM αποτέλεσμα: πλάτος 17, τάση 3.57

και στη συνέχεια μια σειρά αριθμών που αντιπροσωπεύουν τις τρέχουσες ενδείξεις αισθητήρων. Αυτό το μέρος ρυθμίζει το πλάτος PWM για να παράγει την τάση του θερμαντήρα του αισθητήρα όσο το δυνατόν πιο κοντά στα 1,4V, η μετρημένη τάση αφαιρείται από τα 5V, οπότε η ιδανική μετρημένη τιμή μας είναι 3,6V. Εάν αυτή η διαδικασία δεν τελειώσει ποτέ ή τελειώσει μετά από ένα μόνο βήμα (με αποτέλεσμα πλάτος ίσο με 0 ή 254) - τότε κάτι δεν πάει καλά. Ελέγξτε αν το τρανζίστορ σας είναι πραγματικά NPN και είναι σωστά συνδεδεμένο (βεβαιωθείτε ότι χρησιμοποιήσατε βάση, συλλέκτη, ακίδες εκπομπής δεξιά - η βάση πηγαίνει στο D3, ο συλλέκτης στο MQ -7 και ο εκπομπός στο έδαφος, μην υπολογίζετε στην προβολή Fritzing breadboard - είναι λάθος για ορισμένα τρανζίστορ) και βεβαιωθείτε ότι έχετε συνδέσει την είσοδο του αισθητήρα στην είσοδο A1 του Arduino. Εάν όλα είναι εντάξει, θα πρέπει να δείτε στο Serial Plotter από το Arduino IDE κάτι παρόμοιο με την εικόνα. Οι κύκλοι θέρμανσης και μέτρησης διάρκειας 60 και 90 δευτερολέπτων εκτελούνται ο ένας μετά τον άλλο, με το CO ppm να μετράται και να ενημερώνεται στο τέλος κάθε κύκλου. Μπορείτε να πάρετε κάποια ανοιχτή φλόγα κοντά στον αισθητήρα όταν ο κύκλος μέτρησης έχει σχεδόν ολοκληρωθεί και να δείτε πώς θα επηρεάσει τις ενδείξεις (ανάλογα με τον τύπο της φλόγας, μπορεί να παράγει έως και 2000 ppm συγκέντρωση CO σε υπαίθριο χώρο - οπότε ακόμα κι αν μόνο ένα μικρό μέρος Στην πραγματικότητα μπαίνει στον αισθητήρα, θα ενεργοποιήσει τον συναγερμό και δεν θα σβήσει μέχρι το τέλος του επόμενου κύκλου). Το έδειξα στην εικόνα, καθώς και την απάντηση στη φωτιά από τον αναπτήρα.

Βήμα 7: Βαθμονόμηση αισθητήρα

Βαθμονόμηση αισθητήρα
Βαθμονόμηση αισθητήρα
Βαθμονόμηση αισθητήρα
Βαθμονόμηση αισθητήρα

Σύμφωνα με το φύλλο δεδομένων του κατασκευαστή, ο αισθητήρας θα πρέπει να λειτουργεί κύκλους θέρμανσης-ψύξης για 48 ώρες στη σειρά προτού μπορέσει να βαθμονομηθεί. Και πρέπει να το κάνετε εάν σκοπεύετε να το χρησιμοποιήσετε για μεγάλο χρονικό διάστημα: στην περίπτωσή μου, η ένδειξη του αισθητήρα στον καθαρό αέρα άλλαξε για περίπου 30% σε διάστημα 10 ωρών. Εάν δεν το λάβετε υπόψη σας, μπορείτε να λάβετε αποτέλεσμα 0 ppm όπου υπάρχει πραγματικά 100 ppm CO. Εάν δεν θέλετε να περιμένετε για 48 ώρες, μπορείτε να παρακολουθείτε την έξοδο του αισθητήρα στο τέλος του κύκλου μέτρησης. Όταν πάνω από μία ώρα δεν αλλάζει για περισσότερους από 1-2 πόντους - μπορείτε να σταματήσετε να θερμαίνετε εκεί.

Πρόχειρη βαθμονόμηση:

Αφού εκτελέσετε το σκίτσο για τουλάχιστον 10 ώρες σε καθαρό αέρα, πάρτε την τιμή ακατέργαστου αισθητήρα στο τέλος του κύκλου μέτρησης, 2-3 δευτερόλεπτα πριν ξεκινήσει η φάση θέρμανσης και γράψτε το στη μεταβλητή sensor_reading_clean_air (γραμμή 100). Αυτό είναι. Το πρόγραμμα θα εκτιμήσει άλλες παραμέτρους αισθητήρα, δεν θα είναι ακριβείς, αλλά θα πρέπει να είναι αρκετές για να γίνει διάκριση μεταξύ συγκέντρωσης 10 και 100 ppm.

Ακριβής βαθμονόμηση:

Συνιστώ ανεπιφύλακτα να βρείτε ένα βαθμονομημένο μετρητή CO, να φτιάξετε 100 ppm δείγμα CO (αυτό μπορεί να γίνει λαμβάνοντας καπναέρια στη σύριγγα - η συγκέντρωση CO μπορεί εύκολα να κυμαίνεται από αρκετές χιλιάδες ppm - και τοποθετώντας το αργά σε κλειστό βάζο με βαθμονομημένο μετρητή και αισθητήρα MQ-7), πάρτε την ένδειξη ακατέργαστου αισθητήρα σε αυτήν τη συγκέντρωση και τοποθετήστε τη στη μεταβλητή sensor_reading_100_ppm_CO. Χωρίς αυτό το βήμα, η μέτρηση ppm μπορεί να είναι λανθασμένη πολλές φορές προς οποιαδήποτε κατεύθυνση (ακόμα εντάξει εάν χρειάζεστε συναγερμό για επικίνδυνη συγκέντρωση CO στο σπίτι, όπου κανονικά δεν πρέπει να υπάρχει καθόλου CO, αλλά δεν είναι καλό για οποιαδήποτε βιομηχανική εφαρμογή).

Καθώς δεν είχα μετρητή CO, χρησιμοποίησα μια πιο εξελιγμένη προσέγγιση. Πρώτα ετοίμασα υψηλή συγκέντρωση CO χρησιμοποιώντας καύση σε απομονωμένο όγκο (πρώτη φωτογραφία). Σε αυτό το έγγραφο βρήκα τα πιο χρήσιμα δεδομένα, συμπεριλαμβανομένης της απόδοσης CO για διαφορετικούς τύπους φλόγας - δεν είναι στη φωτογραφία, αλλά στο τελικό πείραμα χρησιμοποιήθηκε καύση αερίου προπανίου, με την ίδια ρύθμιση, με αποτέλεσμα τη συγκέντρωση CO ~ 5000 ppm. Στη συνέχεια, αραιώθηκε 1:50 για να επιτευχθούν 100 ppm, όπως απεικονίζεται στη δεύτερη φωτογραφία, και χρησιμοποιήθηκε για τον προσδιορισμό του σημείου αναφοράς του αισθητήρα.

Βήμα 8: Ορισμένα πειραματικά δεδομένα

Μερικά πειραματικά δεδομένα
Μερικά πειραματικά δεδομένα

Στην περίπτωσή μου, ο αισθητήρας λειτούργησε αρκετά καλά - δεν είναι πολύ ευαίσθητος για πραγματικά χαμηλές συγκεντρώσεις, αλλά αρκετά καλός για τον εντοπισμό οτιδήποτε υψηλότερο από 50ppm. Προσπάθησα να αυξήσω τη συγκέντρωση σταδιακά, κάνοντας μετρήσεις και έχτισα ένα σύνολο γραφημάτων. Υπάρχουν δύο σύνολα γραμμών 0ppm - καθαρό πράσινο πριν από την έκθεση σε CO και κίτρινο πράσινο μετά. Ο αισθητήρας φαίνεται να αλλάζει ελαφρώς την αντίσταση του καθαρού αέρα μετά την έκθεση, αλλά αυτό το αποτέλεσμα είναι μικρό. Δεν φαίνεται να είναι σε θέση να διακρίνει σαφώς τις συγκεντρώσεις 8 και 15, 15 και 26, 26 και 45 ppm-αλλά η τάση είναι πολύ σαφής, οπότε μπορεί να πει εάν η συγκέντρωση είναι στο εύρος 0-20 ή 40-60 ppm Το Για υψηλότερες συγκεντρώσεις η εξάρτηση είναι πολύ πιο διακριτική - όταν εκτίθεται στην εξάτμιση μιας ανοιχτής φλόγας, η καμπύλη ανεβαίνει από την αρχή χωρίς να πέφτει καθόλου και η δυναμική της είναι τελείως διαφορετική. Έτσι, για υψηλές συγκεντρώσεις δεν υπάρχει αμφιβολία ότι λειτουργεί αξιόπιστα, αν και δεν μπορώ να επιβεβαιώσω την ακρίβειά του, καθώς δεν έχω κανένα ονομαστικό μετρητή CO. Επίσης, αυτό το σύνολο πειραμάτων έγινε με αντίσταση φορτίου 20k - και μετά από αυτό αποφάσισα για να προτείνετε 10k ως προεπιλεγμένη τιμή, θα πρέπει να είναι πιο ευαίσθητη με αυτόν τον τρόπο. Αυτό είναι. Εάν έχετε αξιόπιστο μετρητή CO και έχετε συναρμολογήσει αυτόν τον πίνακα, μοιραστείτε κάποια σχόλια σχετικά με την ακρίβεια του αισθητήρα - θα ήταν υπέροχο να συλλέξετε στατιστικά στοιχεία για διάφορους αισθητήρες και να βελτιώσετε τις προεπιλεγμένες υποθέσεις σκίτσων.

Συνιστάται: