Πίνακας περιεχομένων:
- Βήμα 1: Γνωριμία με τον αισθητήρα υπερήχων απόστασης
- Βήμα 2: Επιλογή του πίνακα ESP8266
- Βήμα 3: Δημιουργήστε ένα κανάλι ThingSpeak
- Βήμα 4: Πώς να προγραμματίσετε το ESP-12F
- Βήμα 5: Μεταφόρτωση του σκίτσου
- Βήμα 6: Δημιουργία του ηλεκτρονικού κυκλώματος
- Βήμα 7: Τελειώνοντας τον αισθητήρα
Βίντεο: Αισθητήρας στάθμης συλλέκτη νερού με μπαταρία: 7 βήματα (με εικόνες)
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:31
Το σπίτι μας έχει μια δεξαμενή νερού που τρέφεται από τη βροχή που πέφτει στην οροφή και χρησιμοποιείται για την τουαλέτα, το πλυντήριο ρούχων και τα ποτίσματα στον κήπο. Τα τελευταία τρία χρόνια τα καλοκαίρια ήταν πολύ ξηρά, οπότε παρακολουθήσαμε την στάθμη του νερού στη δεξαμενή. Μέχρι στιγμής, χρησιμοποιήσαμε ένα ξύλινο ραβδί, το οποίο βάλαμε στη δεξαμενή και σημειώσαμε το επίπεδο. Σίγουρα όμως πρέπει να είναι δυνατόν να βελτιωθεί σε αυτό!
Εδώ έρχεται αυτό το έργο. Η ιδέα είναι να τοποθετήσετε έναν υπερηχητικό αισθητήρα απόστασης στην κορυφή της δεξαμενής. Αυτός ο αισθητήρας λειτουργεί ως ηχητικό κύμα που εκπέμπει ηχητικά κύματα, τα οποία στη συνέχεια αντανακλώνται από την επιφάνεια του νερού. Από τη στιγμή που χρειάζεται για να επιστρέψουν τα κύματα και την ταχύτητα του ήχου, μπορείτε να υπολογίσετε την απόσταση μέχρι την επιφάνεια του νερού και να καθορίσετε πόσο γεμάτη είναι η δεξαμενή.
Δεδομένου ότι δεν έχω σύνδεση με το δίκτυο κοντά στη δεξαμενή, είναι απαραίτητο η πλήρης συσκευή να λειτουργεί με μπαταρίες. Αυτό σημαίνει ότι έπρεπε να έχω επίγνωση της κατανάλωσης ενέργειας όλων των εξαρτημάτων. Για να στείλω πίσω τα δεδομένα, αποφάσισα να χρησιμοποιήσω το ενσωματωμένο Wifi ενός μικροτσίπ ESP8266. Ενώ το Wifi είναι αρκετά ενεργό, έχει ένα πλεονέκτημα έναντι ενός άλλου τύπου ραδιοσύνδεσης: μπορείτε να συνδεθείτε απευθείας στον ασύρματο δρομολογητή του σπιτιού σας χωρίς να χρειαστεί να δημιουργήσετε άλλη συσκευή που λειτουργεί ως ρελέ.
Για εξοικονόμηση ενέργειας θα βάζω τον ESP8266 σε βαθύ ύπνο τις περισσότερες φορές και θα κάνω μια μέτρηση κάθε ώρα. Για τον σκοπό μου να παρακολουθήσω την στάθμη του νερού αυτό αρκεί. Τα δεδομένα θα σταλούν στο ThingSpeak και μπορούν στη συνέχεια να διαβαστούν σε ένα smartphone μέσω μιας εφαρμογής.
Μια ακόμη λεπτομέρεια! Η ταχύτητα του ήχου, απαραίτητη για τη μέτρηση της απόστασης, εξαρτάται από τη θερμοκρασία και σε μικρότερο βαθμό από την υγρασία. Για μια ακριβή εξωτερική μέτρηση κατά τη διάρκεια των εποχών, θα ρίξουμε έναν αισθητήρα BME280, ο οποίος μετρά τη θερμοκρασία, την υγρασία και την πίεση. Ως μπόνους, αυτό γίνεται από τον αισθητήρα στάθμης νερού, καθώς και έναν μίνι μετεωρολογικό σταθμό.
Μέρη:
- 1x ESP8266 ESP-12F.
- 1x πλάκα προσαρμογέα ESP-12F.
- 1x FT232RL FTDI: Προσαρμογέας USB σε σειριακό.
- 1x HC-SR04-P: μονάδα μέτρησης απόστασης υπερήχων. Σημειώστε ότι το P είναι σημαντικό, αφού αυτή είναι η έκδοση που έχει χαμηλή ελάχιστη τάση λειτουργίας 3V.
- 1x έκδοση BME280 3.3V: αισθητήρας θερμοκρασίας, πίεσης και υγρασίας.
- 1x IRL2203N: τρανζίστορ n-channel MOSFET.
- 1x έκδοση MCP1700-3302E 3.3V: ρυθμιστής τάσης.
- 3x επαναφορτιζόμενη μπαταρία ΑΑ, π.χ. 2600mAh.
- 1x θήκη μπαταρίας για 3 μπαταρίες.
- 1x breadboard.
- Αντιστάσεις: 1x 470K, 1x 100K, 4x 10K.
- Πυκνωτές: 2x κεραμικό 1uF.
- 3x διακόπτης εναλλαγής.
- Σύρματα σανίδων σε σχήμα U.
- Καλώδια βραχυκυκλωτήρων.
- Πλαστικό δοχείο σούπας 1l.
- Δαχτυλίδι στερέωσης για το δοχείο.
Έκανα τον κωδικό διαθέσιμο στο GitHub.
Βήμα 1: Γνωριμία με τον αισθητήρα υπερήχων απόστασης
Θα μετρήσουμε την απόσταση από την επιφάνεια του νερού με έναν υπερηχητικό αισθητήρα, τον HC-SR04-P. Ακριβώς όπως μια νυχτερίδα, αυτός ο αισθητήρας χρησιμοποιεί σόναρ: στέλνει έναν παλμό ήχου με πολύ υψηλή συχνότητα για το ανθρώπινο αυτί, επομένως υπερηχητικό, και περιμένει να χτυπήσει ένα αντικείμενο, να αντανακλά και να επιστρέψει. Η απόσταση μπορεί στη συνέχεια να υπολογιστεί από το χρόνο που απαιτείται για τη λήψη της ηχώ και την ταχύτητα του ήχου.
Συγκεκριμένα, εάν ο πείρος Trig τραβηχτεί ψηλά για τουλάχιστον 10 μs, ο αισθητήρας στέλνει μια έκρηξη 8 παλμών με συχνότητα 40 Hz. Η απάντηση λαμβάνεται στη συνέχεια στην καρφίτσα Echo με τη μορφή παλμού με διάρκεια ίση με το χρόνο μεταξύ της αποστολής και λήψης του παλμού υπερήχων. Στη συνέχεια πρέπει να διαιρέσουμε με το 2, αφού ο υπερηχητικός παλμός πηγαίνει μπρος-πίσω και χρειαζόμαστε τον χρόνο διαδρομής μονής κατεύθυνσης και πολλαπλασιάζουμε με την ταχύτητα του ήχου, η οποία είναι περίπου 340 m/s.
Περίμενε όμως λίγο! Στην πραγματικότητα, η ταχύτητα του ήχου εξαρτάται από τη θερμοκρασία και σε μικρότερο βαθμό από την υγρασία. Μήπως τσιμπώ ή είναι σχετικό; Χρησιμοποιώντας ένα εργαλείο υπολογισμού διαπιστώνουμε ότι το χειμώνα (λαμβάνοντας -5 ° C) θα μπορούσαμε να έχουμε 328,5 m/s και το καλοκαίρι (με 25 ° C) 347,1 m/s. Ας υποθέσουμε λοιπόν ότι βρίσκουμε μονόδρομο ταξιδιού 3 ms. Το χειμώνα, αυτό θα σήμαινε 98,55 εκατοστά και το καλοκαίρι 104,13 εκατοστά. Αυτή είναι μια μεγάλη διαφορά! Έτσι, για να αποκτήσουμε αρκετή ακρίβεια κατά τη διάρκεια των εποχών, ακόμη και μέρα και νύχτα, πρέπει να προσθέσουμε ένα θερμόμετρο στη ρύθμισή μας. Αποφάσισα να συμπεριλάβω το BME280, το οποίο μετρά τη θερμοκρασία, την υγρασία και την πίεση. Στον κώδικα που χρησιμοποίησα στη συνάρτηση speedOfSound ένας τύπος που υπολογίζει την ταχύτητα του ήχου και από τις τρεις παραμέτρους, αν και η θερμοκρασία είναι πραγματικά ο πιο σημαντικός παράγοντας. Η υγρασία εξακολουθεί να έχει μικρότερη επίδραση, αλλά ο αντίκτυπος της πίεσης είναι αμελητέος. Θα μπορούσαμε να χρησιμοποιήσουμε έναν απλούστερο τύπο λαμβάνοντας υπόψη μόνο τη θερμοκρασία που εφάρμοσα στο speedOfSoundSimple.
Υπάρχει ένα ακόμη σημαντικό σημείο στο HC-SR04. Υπάρχουν δύο διαθέσιμες εκδόσεις: η τυπική έκδοση λειτουργεί στα 5V, ενώ το HC-SR04-P μπορεί να λειτουργήσει σε μια σειρά τάσεων από 3V έως 5V. Δεδομένου ότι οι 3 επαναφορτιζόμενες μπαταρίες AA παρέχουν περίπου 3x1.25V = 3.75V, είναι σημαντικό να αποκτήσετε την έκδοση P. Ορισμένοι πωλητές μπορεί να στείλουν λάθος. Ρίξτε μια ματιά στις εικόνες αν αγοράσετε μία. Οι δύο εκδόσεις φαίνονται διαφορετικές τόσο στο πίσω όσο και στο μπροστινό μέρος όπως εξηγείται σε αυτήν τη σελίδα. Στο πίσω μέρος της έκδοσης P και τα τρία τσιπ είναι οριζόντια ενώ στην τυπική έκδοση το ένα είναι κάθετο. Μπροστά η στάνταρ έκδοση διαθέτει ένα επιπλέον ασημί εξάρτημα.
Στο ηλεκτρονικό κύκλωμα θα χρησιμοποιήσουμε ένα τρανζίστορ ως διακόπτη για να απενεργοποιήσουμε την τροφοδοσία του αισθητήρα υπερήχων όταν η ρύθμισή μας πάει σε βαθύ ύπνο για εξοικονόμηση ζωής μπαταρίας. Διαφορετικά, θα εξακολουθούσε να καταναλώνει περίπου 2mA. Το BME280 από την άλλη καταναλώνει μόνο περίπου 5 μ όταν είναι ανενεργό, οπότε δεν είναι απαραίτητο να το απενεργοποιήσετε με το τρανζίστορ.
Βήμα 2: Επιλογή του πίνακα ESP8266
Για να λειτουργήσουμε τον αισθητήρα όσο το δυνατόν περισσότερο σε μια μπαταρία, πρέπει να κάνουμε οικονομία στην κατανάλωση ενέργειας. Ενώ το Wifi του ESP8266 παρέχει έναν πολύ βολικό τρόπο για να συνδέσετε τον αισθητήρα μας στο σύννεφο, είναι επίσης πολύ ενεργός. Σε λειτουργία το ESP8266 καταναλώνει περίπου 80mA. Έτσι, με μπαταρίες 2600 mAh θα μπορούσαμε να λειτουργήσουμε τη συσκευή μας το πολύ για 32 ώρες πριν αυτές αδειάσουν. Στην πράξη, θα είναι λιγότερο αφού δεν θα μπορούμε να χρησιμοποιήσουμε την πλήρη χωρητικότητα των 2600 mAh προτού η τάση πέσει σε πολύ χαμηλό επίπεδο.
Ευτυχώς, το ESP8266 διαθέτει επίσης λειτουργία βαθύ ύπνου, στην οποία σχεδόν όλα είναι απενεργοποιημένα. Έτσι, το σχέδιο είναι να θέσουμε το ESP8266 σε βαθύ ύπνο τις περισσότερες φορές και να το ξυπνάμε τόσο συχνά για να κάνουμε μια μέτρηση και να στείλουμε τα δεδομένα μέσω του Wifi στο ThingSpeak. Σύμφωνα με αυτήν τη σελίδα, ο μέγιστος χρόνος βαθύ ύπνου ήταν περίπου 71 λεπτά, αλλά από το ESP8266 Arduino core 2.4.1 αυξήθηκε σε περίπου 3,5 ώρες. Στον κωδικό μου τακτοποιήθηκα για μία ώρα.
Δοκίμασα για πρώτη φορά τον βολικό πίνακα ανάπτυξης NodeMCU, αλλά δυσάρεστο, σε βαθύ ύπνο κατανάλωνε ακόμα περίπου 9 mA, το οποίο μας δίνει το πολύ 12 ημέρες καθαρού βαθύ ύπνου χωρίς καν να λάβουμε υπόψη τα διαστήματα αφύπνισης. Ένας σημαντικός ένοχος είναι ο ρυθμιστής τάσης AMS1117, ο οποίος χρησιμοποιεί ενέργεια ακόμη και αν προσπαθήσετε να την παρακάμψετε συνδέοντας την μπαταρία απευθείας στον ακροδέκτη 3,3V. Αυτή η σελίδα εξηγεί πώς να αφαιρέσετε τον ρυθμιστή τάσης και το USB UART. Ωστόσο, δεν κατάφερα ποτέ να το κάνω χωρίς να καταστρέψω τον πίνακα μου. Επιπλέον, μετά την αφαίρεση του USB UART δεν μπορείτε να συνδεθείτε πλέον με το ESP8266 για να καταλάβετε τι πήγε στραβά.
Οι περισσότεροι πίνακες ανάπτυξης ESP8266 φαίνεται να χρησιμοποιούν τον σπάταλο ρυθμιστή τάσης AMS1117. Μια εξαίρεση είναι το WEMOS D1 mini (εικόνα στα αριστερά) που συνοδεύει το πιο οικονομικό ME6211. Πράγματι, διαπίστωσα ότι το WEMOS D1 mini χρησιμοποιεί περίπου 150 μA σε βαθύ ύπνο, κάτι που του μοιάζει περισσότερο. Τα περισσότερα οφείλονται πιθανώς στο USB UART. Με αυτόν τον πίνακα πρέπει να κολλήσετε μόνοι σας τις κεφαλίδες για τις καρφίτσες.
Ωστόσο, μπορούμε να κάνουμε πολύ καλύτερα χρησιμοποιώντας έναν πίνακα γυμνού οστού, όπως το ESP-12F (εικόνα στα δεξιά), ο οποίος δεν διαθέτει USB UART ή ρυθμιστή τάσης. Τροφοδοτώντας τον πείρο 3.3V Βρήκα κατανάλωση βαθύ ύπνου μόνο 22 μA!
Αλλά για να λειτουργήσει το ESP-12F να προετοιμαστεί για κάποια συγκόλληση και λίγο περισσότερο κόπο, προγραμματίζοντάς το! Επιπλέον, εκτός εάν οι μπαταρίες παρέχουν απευθείας τη σωστή τάση, η οποία είναι μεταξύ 3V και 3.6V, πρέπει να παρέχουμε τον δικό μας ρυθμιστή τάσης. Στην πράξη, αποδεικνύεται ότι είναι δύσκολο να βρεθεί ένα σύστημα μπαταριών που παρέχει τάση σε αυτό το εύρος σε ολόκληρο τον κύκλο εκφόρτισης. Να θυμάστε ότι πρέπει επίσης να τροφοδοτήσουμε τον αισθητήρα HC-SR04-P, ο οποίος θεωρητικά μπορεί να λειτουργήσει με τάση έως 3V, αλλά λειτουργεί με μεγαλύτερη ακρίβεια εάν η τάση είναι υψηλότερη. Επιπλέον στο διάγραμμά μου το HC-SR04-P ενεργοποιείται από ένα τρανζίστορ, το οποίο προκαλεί μια μικρή επιπλέον πτώση τάσης. Θα χρησιμοποιήσουμε τον ρυθμιστή τάσης MCP1700-3302E. Η μέγιστη τάση εισόδου είναι 6V, οπότε το τροφοδοτούμε με έως και 4 μπαταρίες ΑΑ. Αποφάσισα να χρησιμοποιήσω 3 μπαταρίες ΑΑ.
Βήμα 3: Δημιουργήστε ένα κανάλι ThingSpeak
Θα χρησιμοποιήσουμε το ThingSpeak, μια υπηρεσία IoT cloud, για την αποθήκευση των δεδομένων μας. Μεταβείτε στη διεύθυνση https://thingspeak.com/ και δημιουργήστε έναν λογαριασμό. Μόλις συνδεθείτε, κάντε κλικ στο κουμπί Νέο κανάλι για να δημιουργήσετε ένα κανάλι. Στις Ρυθμίσεις καναλιού συμπληρώστε το όνομα και την περιγραφή όπως θέλετε. Στη συνέχεια, ονομάζουμε τα πεδία καναλιού και τα ενεργοποιούμε κάνοντας κλικ στα πλαίσια ελέγχου στα δεξιά. Εάν χρησιμοποιείτε αμετάβλητο τον κωδικό μου, τα πεδία είναι τα εξής:
- Πεδίο 1: στάθμη νερού (cm)
- Πεδίο 2: Επίπεδο μπαταρίας (V)
- Πεδίο 3: θερμοκρασία (° C)
- Πεδίο 4: υγρασία (%)
- Πεδίο 5: πίεση (Pa)
Για μελλοντική αναφορά, σημειώστε το αναγνωριστικό καναλιού, το κλειδί API ανάγνωσης και το κλειδί εγγραφής API, το οποίο μπορείτε να βρείτε στα πλήκτρα API του μενού.
Μπορείτε να διαβάσετε τα δεδομένα ThingSpeak στο smartphone σας χρησιμοποιώντας μια εφαρμογή. Στο τηλέφωνό μου Android χρησιμοποιώ το γραφικό στοιχείο IoT ThingSpeak Monitor. Πρέπει να το ρυθμίσετε με το αναγνωριστικό καναλιού και το κλειδί API ανάγνωσης.
Βήμα 4: Πώς να προγραμματίσετε το ESP-12F
Χρειαζόμαστε έναν γυμνό πίνακα για εξοικονόμηση ζωής μπαταρίας, αλλά το μειονέκτημα είναι ότι είναι λίγο πιο δύσκολο να προγραμματιστεί από έναν πίνακα ανάπτυξης με ενσωματωμένο USB UART.
Θα χρησιμοποιήσουμε το Arduino IDE. Υπάρχουν και άλλα εγχειρίδια που εξηγούν πώς να το χρησιμοποιήσετε, οπότε θα είμαι σύντομος εδώ. Τα βήματα για να είναι έτοιμο για το ESP8266 είναι:
- Κατεβάστε το Arduino IDE.
- Εγκαταστήστε υποστήριξη για την πλακέτα ESP8266. Στο μενού Αρχείο - Προτιμήσεις - Ρυθμίσεις προσθέστε τη διεύθυνση URL https://arduino.esp8266.com/stable/package_esp8266com_index.json σε πρόσθετες διευθύνσεις URL διαχειριστή πίνακα. Στη συνέχεια, στο μενού Εργαλεία - Πίνακας - Διαχειριστής πινάκων εγκαταστήστε την κοινότητα esp8266 by esp8266.
- Επιλέξτε ως πίνακα: Γενική μονάδα ESP8266.
Για να χειριστώ το ESP-12F χρησιμοποίησα μια πλάκα προσαρμογέα, που συνήθως διατίθεται στα ηλεκτρονικά καταστήματα. Κόλλησα το τσιπ στο πιάτο και μετά κόλλησα τις κεφαλίδες στο πιάτο. Μόνο τότε ανακάλυψα ότι η πλάκα του προσαρμογέα είναι πολύ μεγάλη για ένα τυπικό ψωμί! Δεν αφήνει δωρεάν καρφίτσες στο πλάι για να κάνετε τις συνδέσεις σας.
Η λύση για την οποία πήγα είναι να χρησιμοποιήσω σύρματα σχήματος U και να τα συνδέσω όπως στην εικόνα στα δεξιά πριν βάλω το ESP8266 με την πλάκα προσαρμογέα στο ψωμί. Έτσι, το GND και το VCC συνδέονται με τις ράγες του breadboard και οι υπόλοιπες καρφίτσες διατίθενται πιο κάτω στο breadboard. Το μειονέκτημα είναι ότι το breadboard σας θα γεμίσει αρκετά με καλώδια μόλις ολοκληρώσετε το πλήρες κύκλωμα. Μια άλλη λύση είναι να τοποθετήσετε δύο σανίδες ψωμιού μαζί όπως φαίνεται σε αυτό το βίντεο.
Στη συνέχεια, για τον προγραμματισμό του ESP-12F μέσω της θύρας USB του υπολογιστή σας χρειαζόμαστε έναν προσαρμογέα USB σε σειριακό. Χρησιμοποίησα τον προγραμματιστή FT232RL FTDI. Ο προγραμματιστής διαθέτει βραχυκυκλωτήρα για να επιλέξει μεταξύ 3,3V ή 5V. Θα πρέπει να τεθεί σε 3,3V για το ESP8266. Μην το ξεχνάτε καθώς 5V μπορεί να τηγανίσει το τσιπ σας! Η εγκατάσταση των προγραμμάτων οδήγησης θα πρέπει να είναι αυτόματη, αλλά αν ο προγραμματισμός δεν λειτουργεί μπορείτε να προσπαθήσετε να τα εγκαταστήσετε με μη αυτόματο τρόπο από αυτήν τη σελίδα.
Το ESP8266 διαθέτει μια λειτουργία προγραμματισμού για τη μεταφόρτωση νέου υλικολογισμικού στο φλας και μια λειτουργία φλας για την εκτέλεση του τρέχοντος υλικολογισμικού από τη μνήμη flash. Για να επιλέξετε μεταξύ αυτών των τρόπων λειτουργίας, ορισμένες ακίδες πρέπει να λάβουν μια ορισμένη τιμή κατά την εκκίνηση:
- Προγραμματισμός: GPIO0: χαμηλό, CH-PD: υψηλό, GPIO2: υψηλό, GPIO15: χαμηλό
- Flash: GPIO0: υψηλό, CH-PD: υψηλό, GPIO2: υψηλό, GPIO15: χαμηλό
Η πλάκα προσαρμογέα φροντίζει ήδη να τραβά το CH-PD και να κατεβάζει το GPIO15 με αντιστάσεις 10K.
Επομένως, στο ηλεκτρονικό μας κύκλωμα πρέπει ακόμα να τραβήξουμε το GPIO2. Παρέχουμε επίσης έναν διακόπτη για να θέσετε το ESP8266 σε προγραμματισμό ή σε λειτουργία flash και ένα διακόπτη για να το επαναφέρετε, το οποίο γίνεται με τη σύνδεση του RST στη γείωση. Επιπλέον, βεβαιωθείτε ότι έχετε συνδέσει τον πείρο TX του FT232RL στον πείρο RXD του ESP8266 και αντίστροφα.
Η ακολουθία προγραμματισμού έχει ως εξής:
- Ορίστε το GPIO2 σε χαμηλό κλείνοντας τον διακόπτη προγραμματισμού.
- Επαναφέρετε το ESP8266 κλείνοντας και ανοίγοντας ξανά τον διακόπτη επαναφοράς. Το ESP8266 εκκινεί τώρα σε λειτουργία προγραμματισμού.
- Ρυθμίστε ξανά το GPIO2 ανοίγοντας τον διακόπτη προγραμματισμού.
- Ανεβάστε το νέο υλικολογισμικό από το Arduino IDE.
- Επαναφέρετε ξανά το ESP8266 κλείνοντας και ανοίγοντας ξανά το διακόπτη επαναφοράς. Το ESP8266 εκκινεί τώρα σε λειτουργία flash και τρέχει το νέο υλικολογισμικό.
Τώρα μπορείτε να ελέγξετε αν ο προγραμματισμός λειτουργεί ανεβάζοντας το περίφημο σκίτσο Blink.
Εάν όλα αυτά λειτουργούν τουλάχιστον, οι ακίδες GND, VCC, GPIO2, RST, TXD και RXD είναι σωστά συγκολλημένες και συνδεδεμένες. Τι ανακούφιση! Αλλά προτού προχωρήσετε, θα συνιστούσα να δοκιμάσετε επίσης τις άλλες καρφίτσες με το πολύμετρό σας. Είχα ένα πρόβλημα με μια από τις καρφίτσες. Μπορείτε να χρησιμοποιήσετε αυτό το σκίτσο, το οποίο θέτει όλες τις καρφίτσες σε υψηλή θέση μία προς μία για 5 δευτερόλεπτα και στη συνέχεια θέτει το ESP8266 σε βαθύ ύπνο για 20 δευτερόλεπτα. Για να ενεργοποιήσετε το ESP8266 να ξυπνήσει μετά από βαθύ ύπνο, πρέπει να συνδέσετε το RST στο GPIO16, το οποίο δίνει το σήμα αφύπνισης.
Βήμα 5: Μεταφόρτωση του σκίτσου
Έχω κάνει τον κωδικό διαθέσιμο στο GitHub, είναι μόνο ένα αρχείο: Level-Sensor-Deepsleep.ino. Απλώς κατεβάστε το και ανοίξτε το στο Arduino IDE. Or μπορείτε να επιλέξετε Αρχείο - Νέο και απλά αντιγράψτε/επικολλήστε τον κώδικα.
Υπάρχουν κάποιες πληροφορίες που πρέπει να συμπληρώσετε στην αρχή του αρχείου: το όνομα και τον κωδικό πρόσβασης του WLAN για χρήση, στατικές λεπτομέρειες IP και το αναγνωριστικό καναλιού και το κλειδί API εγγραφής του καναλιού ThingSpeak.
Ακολουθώντας τη συμβουλή σε αυτό το ιστολόγιο, αντί για DHCP όπου ο δρομολογητής εκχωρεί δυναμικά μια IP, χρησιμοποιούμε στατική IP, όπου ορίζουμε μόνοι μας τη διεύθυνση IP του ESP8266. Αυτό αποδεικνύεται πολύ πιο γρήγορο, επομένως εξοικονομούμε ενεργό χρόνο και επομένως ενέργεια μπαταρίας. Πρέπει λοιπόν να παρέχουμε μια διαθέσιμη στατική διεύθυνση IP καθώς και την IP του δρομολογητή (πύλη), τη μάσκα υποδικτύου και έναν διακομιστή DNS. Εάν δεν είστε σίγουροι για το τι πρέπει να συμπληρώσετε, διαβάστε σχετικά με τη ρύθμιση μιας στατικής IP στο εγχειρίδιο του δρομολογητή σας. Σε έναν υπολογιστή Windows που είναι συνδεδεμένος μέσω Wifi στο δρομολογητή σας, ξεκινήστε ένα κέλυφος (κουμπί Windows-r, cmd) και πληκτρολογήστε ipconfig /all. Θα βρείτε τις περισσότερες πληροφορίες που χρειάζεστε στην ενότητα Wi-Fi.
Εξετάζοντας τον κώδικα, βλέπετε ότι σε αντίθεση με άλλους κώδικες Arduino, η περισσότερη ενέργεια συμβαίνει στη λειτουργία εγκατάστασης αντί για τη λειτουργία βρόχου. Αυτό συμβαίνει επειδή το ESP8266 πηγαίνει σε βαθύ ύπνο αφού ολοκληρώσει τη λειτουργία ρύθμισης (εκτός εάν ξεκινήσαμε σε λειτουργία OTA). Αφού ξυπνήσει, είναι σαν μια νέα επανεκκίνηση και εκτελεί ξανά τη ρύθμιση.
Εδώ είναι τα κύρια χαρακτηριστικά του κώδικα:
- Μετά την αφύπνιση, ο κωδικός ορίζει το switchPin (προεπιλεγμένο GPIO15) σε υψηλό. Αυτό ενεργοποιεί το τρανζίστορ, το οποίο με τη σειρά του ενεργοποιεί τον αισθητήρα HC-SR04-P. Πριν πάει για βαθύ ύπνο, επαναφέρει τον πείρο στο χαμηλό, απενεργοποιώντας το τρανζίστορ και το HC-SR04-P, διασφαλίζοντας ότι δεν καταναλώνει πολύτιμη μπαταρία.
- Εάν ο κωδικός PIN (προεπιλεγμένο GPIO14) είναι χαμηλός, ο κωδικός μεταβαίνει σε λειτουργία OTA αντί για λειτουργία μέτρησης. Με το OTA (ενημέρωση μέσω αέρα) μπορούμε να ενημερώσουμε το υλικολογισμικό μέσω Wifi αντί για τη σειριακή θύρα. Στην περίπτωσή μας, αυτό είναι αρκετά βολικό, καθώς δεν χρειάζεται να συνδέσουμε τη σειρά με τον προσαρμογέα USB για περαιτέρω ενημερώσεις. Απλώς ρυθμίστε το GPIO14 σε χαμηλό (με το διακόπτη OTA στο ηλεκτρονικό κύκλωμα), επαναφέρετε το ESP8266 (με το διακόπτη επαναφοράς) και θα πρέπει να είναι διαθέσιμο στο Arduino IDE για μεταφόρτωση.
- Στον αναλογικό PIN (A0), μετράμε την τάση της μπαταρίας. Αυτό μας επιτρέπει να απενεργοποιήσουμε τη συσκευή μας, γνωστή και ως μόνιμος βαθύς ύπνος, εάν η τάση πέσει πολύ χαμηλά, κάτω από το minVoltage, για να προστατεύσουμε τις μπαταρίες από υπερβολική εκφόρτιση. Η αναλογική μέτρηση δεν είναι πολύ ακριβής, κάνουμε numMeasuresBattery (προεπιλογή 10) μέτρα και λαμβάνουμε το μέσο όρο για να βελτιώσουμε την ακρίβεια.
- Η μέτρηση απόστασης του αισθητήρα HC-SR04-P γίνεται στη λειτουργία απόστασηςΜέτρηση. Για να βελτιωθεί η ακρίβεια, η μέτρηση επαναλαμβάνεται numMeasuresDistance (προεπιλογή 3) φορές.
- Υπάρχει μια λειτουργία για τον υπολογισμό του speedOfSound από τη μέτρηση της θερμοκρασίας, της υγρασίας και της πίεσης από τον αισθητήρα BME280. Η προεπιλεγμένη διεύθυνση I2C του BME280 είναι 0x76, αλλά αν δεν λειτουργεί ίσως χρειαστεί να την αλλάξετε σε 0x77: bool bme280Started = bme280.begin (0x77);
- Θα χρησιμοποιήσουμε το BME280 σε αναγκαστική λειτουργία, πράγμα που σημαίνει ότι χρειάζεται μία μέτρηση και ξανακοιμάται για εξοικονόμηση ενέργειας.
- Εάν ορίσετε χωρητικότητα (l), πλήρη απόσταση (cm) και περιοχή (m2), ο κωδικός υπολογίζει τον υπόλοιπο όγκο της δεξαμενής νερού από τη μέτρηση της απόστασης: διπλάσιο υπόλοιποΤόμος = χωρητικότητα+10,0*(πλήρης απόσταση-απόσταση)*περιοχή. και ανεβάστε το στο ThingSpeak. Εάν διατηρήσετε τις προεπιλεγμένες τιμές, ανεβάζει την απόσταση στην επιφάνεια του νερού σε cm.
Βήμα 6: Δημιουργία του ηλεκτρονικού κυκλώματος
Πάνω είναι το διάγραμμα του ηλεκτρονικού κυκλώματος. Είναι αρκετά μεγάλο για ένα breadboard, ειδικά με την υπερμεγέθη πλάκα προσαρμογέα και το κόλπο με τα καλώδια σχήματος U. Κάποια στιγμή σίγουρα θα ήθελα να είχα χρησιμοποιήσει την εναλλακτική λύση να συνδέσω δύο σανίδες, αλλά στο τέλος τα κατάφερα.
Ακολουθούν τα σημαντικά χαρακτηριστικά του κυκλώματος:
- Υπάρχουν δύο τάσεις που παίζουν ρόλο: η τάση εισόδου από την μπαταρία (περίπου 3,75V) και η 3,3V που τροφοδοτεί το ESP8266 και το BME280. Έβαλα το 3.3V στην αριστερή ράγα του breakboard και το 3.75V στη δεξιά ράγα. Ο ρυθμιστής τάσης μετατρέπει το 3,75V σε 3,3V. Ακολουθώντας τις οδηγίες στο φύλλο δεδομένων πρόσθεσα 1 μF πυκνωτές στην είσοδο και την έξοδο του ρυθμιστή τάσης για αύξηση της σταθερότητας.
- Το GPIO15 του ESP8266 είναι συνδεδεμένο στην πύλη του τρανζίστορ. Αυτό επιτρέπει στο ESP8266 να ενεργοποιήσει το τρανζίστορ και συνεπώς τον αισθητήρα υπερήχων όταν είναι ενεργό και να το απενεργοποιήσει όταν πηγαίνει σε βαθύ ύπνο.
- Το GPIO14 είναι συνδεδεμένο με έναν διακόπτη, τον διακόπτη OTA. Το κλείσιμο του διακόπτη δίνει το σήμα στο ESP8266 που θέλουμε να ξεκινήσει στη λειτουργία OTA στη συνέχεια, δηλαδή αφού πατήσουμε (κλείσουμε και ανοίξουμε) τον διακόπτη RESET και φορτώσουμε ένα νέο σκίτσο στον αέρα.
- Οι ακίδες RST και GPIO2 συνδέονται όπως στο διάγραμμα προγραμματισμού. Η καρφίτσα RST είναι τώρα επίσης συνδεδεμένη με το GPIO16 για να επιτρέψει στο ESP8266 να ξυπνήσει από βαθύ ύπνο.
- Οι ακίδες TRIG και ECHO του αισθητήρα υπερήχων συνδέονται με GPIO12 και GPIO13, ενώ οι ακίδες SCL και SDA του BME280 συνδέονται με GPIO5 και GPIO4.
- Τέλος, ο αναλογικός πείρος ADC είναι μέσω ενός διαχωριστή τάσης συνδεδεμένου στην τάση εισόδου. Αυτό επιτρέπει τη μέτρηση της τάσης εισόδου για τον έλεγχο της φόρτισης των μπαταριών. Ο πείρος ADC μπορεί να μετρήσει τάσεις μεταξύ 0V και 1V. Για το διαχωριστή τάσης επιλέξαμε αντιστάσεις 100Κ και 470Κ. Αυτό σημαίνει ότι η τάση στον πείρο ADC δίνεται από: V_ADC = 100K/(100K+470K) V_in. Λαμβάνοντας V_ADC = 1V αυτό σημαίνει ότι μπορούμε να μετρήσουμε τάσεις εισόδου έως V_in = 570/100 V_ADC = 5,7V. Όσον αφορά την κατανάλωση ενέργειας, υπάρχει επίσης κάποια διαρροή ρεύματος μέσω του διαχωριστή τάσης. Με V_in = 3.75V από τις μπαταρίες βρίσκουμε I_leak = 3.75V/570K = 6.6 μA.
Ακόμη και όταν το κύκλωμα λειτουργεί από μπαταρίες, είναι δυνατό να συνδέσετε το USB στον σειριακό προσαρμογέα. Απλώς βεβαιωθείτε ότι έχετε αποσυνδέσει το VCC του προσαρμογέα και συνδέστε τα GND, RX και TX όπως στο διάγραμμα προγραμματισμού. Αυτό καθιστά δυνατό το άνοιγμα της Σειριακής οθόνης στο Arduino IDE για να διαβάσετε τα μηνύματα εντοπισμού σφαλμάτων και να βεβαιωθείτε ότι όλα λειτουργούν όπως αναμένεται.
Για το πλήρες κύκλωμα μέτρησα μια τρέχουσα κατανάλωση 50 μA σε βαθύ ύπνο όταν τρέχω από μπαταρίες. Αυτό περιλαμβάνει το ESP8266, το BME280, τον αισθητήρα υπερήχων (απενεργοποιημένο από το τρανζίστορ) και διαρροή μέσω του διαχωριστή τάσης και ίσως άλλες διαρροές. Αυτό λοιπόν δεν είναι πολύ κακό!
Διαπίστωσα ότι ο συνολικός ενεργός χρόνος είναι περίπου 7 δευτερόλεπτα, εκ των οποίων 4,25 δευτερόλεπτα για σύνδεση στο Wifi και 1,25 δευτερόλεπτα για την αποστολή των δεδομένων στο ThingSpeak. Έτσι με ενεργό ρεύμα 80mA βρήκα 160 μAh ανά ώρα για τον ενεργό χρόνο. Προσθέτοντας 50 μAh ανά ώρα για την κατάσταση βαθύ ύπνου έχουμε συνολικά 210 μAh ανά ώρα. Αυτό σημαίνει ότι οι μπαταρίες 2600 mAh θεωρητικά διαρκούν 12400 ώρες = 515 ημέρες. Αυτό είναι το απόλυτο μέγιστο εάν μπορούσαμε να χρησιμοποιήσουμε την πλήρη χωρητικότητα των μπαταριών (κάτι που δεν συμβαίνει) και δεν υπάρχουν διαρροές που δεν βρήκα με τις τρέχουσες μετρήσεις μου. Οπότε δεν έχω δει ακόμη αν αυτό εξελίσσεται.
Βήμα 7: Τελειώνοντας τον αισθητήρα
Έβαλα τον αισθητήρα σε ένα πλαστικό δοχείο 1 λίτρου, το οποίο παλιά περιείχε σούπα. Στο κάτω μέρος έκανα δύο τρύπες για να ταιριάζουν στα "μάτια" του αισθητήρα HC-SR04-P. Εκτός από τις τρύπες, το δοχείο πρέπει να είναι αδιάβροχο. Στη συνέχεια στερεώνεται στον τοίχο της δεξαμενής νερού με έναν κυκλικό δακτύλιο που συνήθως χρησιμοποιείται για σωλήνα αποστράγγισης ομβρίων υδάτων.
Διασκεδάστε με το έργο!
Συνιστάται:
Μετρητής στάθμης νερού σε πραγματικό χρόνο: 6 βήματα (με εικόνες)
Ένας μετρητής στάθμης νερού σε πραγματικό χρόνο: Αυτές οι οδηγίες περιγράφουν τον τρόπο κατασκευής ενός μετρητή στάθμης νερού χαμηλού κόστους σε πραγματικό χρόνο για χρήση σε σκαμμένα πηγάδια. Ο μετρητής στάθμης νερού έχει σχεδιαστεί για να κρέμεται μέσα σε ένα σκαμμένο πηγάδι, να μετρά τη στάθμη του νερού μία φορά την ημέρα και να στέλνει τα δεδομένα μέσω WiFi ή κυψελοειδούς σύνδεσης
Μετρητής θερμοκρασίας νερού, αγωγιμότητας και στάθμης νερού σε πραγματικό χρόνο: 6 βήματα (με εικόνες)
Μετρητής θερμοκρασίας νερού, αγωγιμότητας και στάθμης νερού σε πραγματικό χρόνο: Αυτές οι οδηγίες περιγράφουν πώς να φτιάξετε ένα μετρητή νερού χαμηλού κόστους, σε πραγματικό χρόνο, για την παρακολούθηση της θερμοκρασίας, την ηλεκτρική αγωγιμότητα (EC) και τα επίπεδα νερού σε σκαμμένα πηγάδια. Ο μετρητής έχει σχεδιαστεί για να κρέμεται μέσα σε ένα σκαμμένο πηγάδι, να μετρά τη θερμοκρασία του νερού
Σύστημα παρακολούθησης στάθμης νερού: 9 βήματα (με εικόνες)
Σύστημα Παρακολούθησης Επιπέδου Νερού: Ως DIY Maker, προσπαθώ πάντα να βρίσκω έναν τρόπο να κάνω τη ζωή μου και τη ζωή των άλλων πιο εύκολη και ασφαλέστερη. Στις 30 Μαρτίου 2013, τουλάχιστον 11 άνθρωποι έχασαν τη ζωή τους μετά από ξαφνική βροχή που προκάλεσε πλημμύρες στο Mauritian Capital Port louis. Την ίδια μέρα πολλά σπίτια
Δείκτες στάθμης νερού/ροής: 10 βήματα (με εικόνες)
Δείκτες στάθμης νερού/ζωοτροφών: Σε αυτό το διδακτικό θα σας δείξω πώς έφτιαξα έναν δείκτη στάθμης νερού χωρίς τη χρήση μικροεπεξεργαστών, μικροελεγκτών, Raspberry Pi, Arduino κ.λπ. Όταν πρόκειται για ηλεκτρονικά, είμαι ολοκληρωμένος " ομοίωμα ". Χρησιμοποιώ κάποια ηλεκτρονική συσκευή
Δείκτης στάθμης μπαταρίας DIY/Αυτόματη διακοπή για μπαταρία 12v: 5 βήματα (με εικόνες)
Δείκτης στάθμης μπαταρίας DIY/Αυτόματη διακοπή για μπαταρία 12v: DIYers … Όλοι έχουμε περάσει από την κατάσταση όταν οι φορτιστές υψηλής τεχνολογίας είναι απασχολημένοι με τη φόρτιση αυτών των μπαταριών πολυμερών λιθίου, αλλά πρέπει ακόμα να φορτίσετε αυτήν την μπαταρία μολύβδου 12v και τον μοναδικό φορτιστή που έχετε το γκοτ είναι τυφλό…. Ναι, ένα τυφλό