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

Αισθητήρας ειδοποίησης πλυντηρίου: 6 βήματα (με εικόνες)
Αισθητήρας ειδοποίησης πλυντηρίου: 6 βήματα (με εικόνες)

Βίντεο: Αισθητήρας ειδοποίησης πλυντηρίου: 6 βήματα (με εικόνες)

Βίντεο: Αισθητήρας ειδοποίησης πλυντηρίου: 6 βήματα (με εικόνες)
Βίντεο: Δεν το περιμενα ετσι 2024, Νοέμβριος
Anonim
Image
Image
Πρωτότυπο
Πρωτότυπο

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

Μπορείτε να βρείτε τον κωδικό εδώ:

Πλήρης λίστα ανταλλακτικών:

  • WEMOS LOLIN32
  • Μισό μέγεθος Breadboard (για πρωτότυπο)
  • ABS Project Box με πίνακα Matrix 59x88x30mm
  • Sparkfun LIS3DH - Επιταχυνσιόμετρο τριπλού άξονα Breakout
  • 1x ZVP3306A P-channel MOSFET, 160 mA, 60 V, 3-pin E-Line
  • 1x τρανζίστορ BC549B TO92 30V NPN
  • 5mm LED μπλε 68 mcd
  • 1x 100k 0.125W CF Resistor
  • 1x 330k 0.125W CF Resistor
  • 2x 10k 0.250W CF Resistor
  • 1x 100 0.250W CF Resistor
  • 2-pin θηλυκό καλώδιο JST PH-Style (14cm)
  • Μαγνήτης δίσκου νεοδυμίου 4x M1219-8 6x4mm

Βήμα 1: Πρωτότυπο

Πρωτότυπο
Πρωτότυπο

Η συσκευή χρησιμοποιεί μικροελεγκτή ESP32. Σε αυτήν την περίπτωση χρησιμοποιώ τον πίνακα ανάπτυξης Lolin32 της Wemos, τον οποίο μπορείτε να αγοράσετε στο AliExpress για περίπου $ 7. Το επιταχυνσιόμετρο είναι το Sparkfun LIS3DH - είναι σημαντικό το επιταχυνσιόμετρο να είναι ψηφιακό και όχι αναλογικό, όπως θα δείτε αργότερα. Η μπαταρία πήρα από ένα παλιό σετ ηχείων bluetooth.

Το ESP32 συνδέεται με το επιταχυνσιόμετρο μέσω I2C. Η πρώτη έκδοση του κώδικα απλώς δημοσκόπησε τους τρεις άξονες επιτάχυνσης (x, y και z) για τη μετρούμενη τιμή επιτάχυνσης κάθε 20ms. Τοποθετώντας το πρωτότυπο του breadboard στο πλυντήριο και δημιούργησα το παραπάνω γράφημα που δείχνει κορυφές επιτάχυνσης σε διάφορες φάσεις του κύκλου πλύσης. Αυτές οι κορυφές όπου η απόλυτη επιτάχυνση ήταν μεγαλύτερη από 125mg (125 χιλιοστά κανονικής βαρύτητας) εμφανίζονται με πορτοκαλί χρώμα. Θέλουμε να εντοπίσουμε αυτές τις περιόδους και να τις χρησιμοποιήσουμε για να καθορίσουμε την κατάσταση του πλυντηρίου.

Πώς να καθορίσετε εάν το μηχάνημα είναι ενεργοποιημένο ή απενεργοποιημένο;

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

Ευτυχώς, το επιταχυνσιόμετρο LIS3DH διαθέτει ένα χαρακτηριστικό όπου μπορεί να προκαλέσει διακοπή όταν η επιτάχυνση υπερβεί ένα δεδομένο όριο (σημειώστε, αυτό απαιτεί τη χρήση του ενσωματωμένου φίλτρου επιταχυνσιόμετρου-δείτε τον κωδικό στο Github για λεπτομέρειες) και το ESP32 μπορεί να αφυπνιστεί από τη λειτουργία βαθύ ύπνου μέσω διακοπής. Μπορούμε να χρησιμοποιήσουμε αυτόν τον συνδυασμό λειτουργιών για να δημιουργήσουμε μια κατάσταση ύπνου πολύ χαμηλής ισχύος που ενεργοποιείται από την κίνηση.

Ο ψευδοκώδικας θα μοιάζει κάπως έτσι:

# Ξυπνήστε τη συσκευή

notification_threshold = 240 counter = 10 accelerometer.set_threshold (96) # 96mg ενώ counter> 0: if accelerometer.above_threshold (): counter ++ else: counter-- if counter> notification_threshold: # final κύκλος περιστροφής ανίχνευσε ύπνο (1 δευτερόλεπτο) accelerometer.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt () esp32.deep_sleep ()

Μπορείτε να δείτε εδώ ότι χρησιμοποιούμε έναν μετρητή για να ανιχνεύσουμε πόσα δευτερόλεπτα επιτάχυνσης έχουμε εντοπίσει κατά την τρέχουσα περίοδο αφύπνισης. Εάν ο μετρητής πέσει στο μηδέν, μπορούμε να θέσουμε ξανά τη συσκευή σε κατάσταση αναστολής λειτουργίας. Εάν ο μετρητής φτάσει το 240 (το όριο ειδοποιήσεων), τότε αυτό σημαίνει ότι έχουμε εντοπίσει 4 λεπτά δόνησης. Μπορούμε να αλλάξουμε τις τιμές αυτών των ορίων για να βεβαιωθούμε ότι η συσκευή ανιχνεύει σωστά τον τελικό κύκλο περιστροφής. Μόλις εντοπιστούν επαρκείς δονήσεις, μπορούμε απλά να κοιμηθούμε για άλλα 5 λεπτά (στην περίπτωσή μου αυτός είναι ο χρόνος που χρειάζεται μέχρι να ολοκληρωθεί το πλύσιμο) πριν στείλουμε μια ειδοποίηση.

Βήμα 2: Αποστολή ειδοποίησης μέσω του Blynk

Αποστολή ειδοποίησης μέσω Blynk
Αποστολή ειδοποίησης μέσω Blynk

Το Blynk είναι μια υπηρεσία που έχει σχεδιαστεί για να επιτρέπει την αλληλεπίδραση με συσκευές IoT με μια εφαρμογή στο τηλέφωνό σας. Σε αυτήν την περίπτωση, χρησιμοποιώ το API ειδοποίησης push που ενεργοποιείται από ένα απλό HTTP POST στο Blynk API.

Βήμα 3: Μέτρηση της κατανάλωσης ενέργειας και εκτίμηση της διάρκειας ζωής της μπαταρίας

Μέτρηση της κατανάλωσης ισχύος και εκτίμηση της διάρκειας ζωής της μπαταρίας
Μέτρηση της κατανάλωσης ισχύος και εκτίμηση της διάρκειας ζωής της μπαταρίας

Το τσιπ ESP32 διαφημίζεται ότι έχει πολύ χαμηλή κατανάλωση ενέργειας όταν βρίσκεστε σε βαθύ ύπνο (τόσο χαμηλά όσο 5uA). Δυστυχώς, τα κυκλώματα στους πολλούς διαφορετικούς πίνακες ανάπτυξης παρέχουν πολύ διαφορετικά χαρακτηριστικά κατανάλωσης ενέργειας - δεν δημιουργούνται όλοι οι πίνακες dev ESP32 ίσοι. Για παράδειγμα, όταν ξεκίνησα για πρώτη φορά αυτό το έργο, χρησιμοποίησα το Sparkfun ESP32 Thing το οποίο θα κατανάλωνε περίπου 1mA ισχύος σε κατάσταση ύπνου βαθύ (ακόμη και μετά την απενεργοποίηση της λυχνίας LED ισχύος). Έκτοτε χρησιμοποιώ το Lolin32 (όχι την έκδοση Lite) στο οποίο μέτρησα ένα ρεύμα 144,5uA ενώ βρισκόμουν σε κατάσταση βαθύ ύπνου. Για να κάνω αυτή τη μέτρηση, απλώς ένωσα ένα πολύμετρο σε σειρά με τη μπαταρία και τη συσκευή. Αυτό είναι σίγουρα πιο εύκολο να γίνει ενώ δημιουργείτε πρωτότυπα με ένα breadboard. Επίσης μέτρησα την τρέχουσα χρήση όταν η συσκευή είναι ξύπνια:

  • Βαθύς ύπνος: 144,5uA
  • Ξύπνιο: 45mA
  • Wifi ενεργοποιημένο: 150mA

Υποθέτοντας ότι χρησιμοποιώ το μηχάνημα δύο φορές την εβδομάδα, υπολόγισα τους ακόλουθους χρονισμούς για το χρόνο που περνά ο αισθητήρας σε κάθε κατάσταση:

  • Βαθύς ύπνος: 604090 δευτερόλεπτα (week 1 εβδομάδα)
  • Ξύπνα: 720 δευτερόλεπτα (12 λεπτά)
  • Wi -Fi ενεργοποιημένο: 10 δευτερόλεπτα

Από αυτά τα στοιχεία, μπορούμε να υπολογίσουμε πόσο καιρό θα διαρκέσει η μπαταρία. Χρησιμοποίησα αυτόν τον εύχρηστο υπολογιστή για να λάβω μια μέση κατανάλωση ενέργειας 0,2mA. Η εκτιμώμενη διάρκεια ζωής της μπαταρίας είναι 201 ημέρες ή περίπου 6 μήνες! Στην πραγματικότητα έχω διαπιστώσει ότι η συσκευή θα σταματήσει να λειτουργεί μετά από περίπου 2 μήνες, ώστε να υπάρξουν κάποια λάθη στις μετρήσεις ή την χωρητικότητα της μπαταρίας.

Βήμα 4: Μέτρηση της στάθμης της μπαταρίας

Μέτρηση στάθμης μπαταρίας
Μέτρηση στάθμης μπαταρίας
Μέτρηση στάθμης μπαταρίας
Μέτρηση στάθμης μπαταρίας

Σκέφτηκα ότι θα ήταν ωραίο αν η συσκευή μπορούσε να μου πει πότε τελειώνει η μπαταρία, ώστε να ξέρω πότε να τη φορτίσω. Για να το μετρήσουμε αυτό πρέπει να μετρήσουμε την τάση της μπαταρίας. Η μπαταρία έχει εύρος τάσης 4,3V - 2,2V (η ελάχιστη τάση λειτουργίας του ESP32). Δυστυχώς, το εύρος τάσης των ακίδων ADC του ESP32 είναι 0-3,3V. Αυτό σημαίνει ότι πρέπει να μειώσουμε την τάση της μπαταρίας από το μέγιστο 4,3 σε 3,3 για να αποφύγουμε την υπερφόρτωση του ADC. Αυτό είναι δυνατό να γίνει με ένα διαχωριστή τάσης. Απλά συνδέστε δύο αντιστάσεις με τις κατάλληλες τιμές από τη μπαταρία στη γείωση και μετρήστε την τάση στη μέση.

Δυστυχώς, ένα απλό κύκλωμα διαίρεσης τάσης θα εξαντλήσει την ισχύ από την μπαταρία ακόμη και όταν η τάση δεν μετριέται. Μπορείτε να το μετριάσετε χρησιμοποιώντας αντιστάσεις υψηλής αξίας, αλλά η κάτω πλευρά είναι ότι το ADC μπορεί να μην είναι σε θέση να αντλήσει αρκετό ρεύμα για να κάνει μια ακριβή μέτρηση. Αποφάσισα να χρησιμοποιήσω αντιστάσεις με τιμές 100kΩ και 330kΩ οι οποίες θα πέσουν 4,3V στα 3,3V σύμφωνα με αυτόν τον τύπο διαχωριστή τάσης. Δεδομένης μιας συνολικής αντίστασης 430kΩ, θα περιμέναμε μια τρέχουσα ισοπαλία 11,6uA (χρησιμοποιώντας το νόμο του Ohm). Δεδομένου ότι η τρέχουσα χρήση μας σε βαθύ ύπνο είναι 144uA, είναι μια αρκετά σημαντική αύξηση.

Καθώς θέλουμε να μετρήσουμε μόνο μία φορά την τάση της μπαταρίας λίγο πριν στείλουμε μια ειδοποίηση, είναι λογικό να απενεργοποιήσουμε το κύκλωμα διαχωριστή τάσης κατά τη διάρκεια του χρόνου που δεν μετράμε τίποτα. Ευτυχώς, μπορούμε να το κάνουμε αυτό με δύο τρανζίστορ συνδεδεμένα σε έναν από τους ακροδέκτες GPIO. Χρησιμοποίησα το κύκλωμα που δόθηκε σε αυτήν την απάντηση στοίβας. Μπορείτε να με δείτε να δοκιμάζω το κύκλωμα με ένα Arduino και ένα breadboard στην παραπάνω φωτογραφία (σημειώστε ότι υπάρχει ένα σφάλμα στο κύκλωμα που είναι ο λόγος που μετράω υψηλότερη τάση από την αναμενόμενη).

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

Ποσοστό μπαταρίας():

# ενεργοποίηση κυκλώματος τάσης μπαταρίας gpio_set_level (BATTERY_EN_PIN, HIGH) # Η στάθμη της μπαταρίας επιστρέφεται ως ακέραιος μεταξύ 0 και 4095 adc_value = adc1_get_value (ADC_PIN) # ενεργοποίηση κυκλώματος τάσης μπαταρίας gpio_set_level (BATTERY_EN_PIN, LOW) float adc_volt = adc_volt ο διαιρέτης χρησιμοποιεί αντιστάσεις 100k/330k ohm # 4.3V -> 3.223, 2.4 -> 1.842 expect_max = 4.3*330/(100+330) expect_min = 2.4*330/(100+330) battery_level = (adc_voltage -expect_min)/(expect_max -expected_min) επιστροφή μπαταρίας_επίπεδο * 100.0

Βήμα 5: Να γίνει πιο όμορφο

Κάνοντας το πιο όμορφο
Κάνοντας το πιο όμορφο
Κάνοντας το πιο όμορφο
Κάνοντας το πιο όμορφο
Κάνοντας το πιο όμορφο
Κάνοντας το πιο όμορφο

Ενώ η έκδοση του breadboard λειτουργεί καλά, ήθελα να το βάλω σε ένα πακέτο που θα ήταν πιο προσεγμένο και πιο αξιόπιστο (χωρίς καλώδια που μπορεί να χαλαρώσουν ή να βραχούν). Κατάφερα να βρω το τέλειο κουτί έργου για τις ανάγκες μου το οποίο ήταν το σωστό μέγεθος, που περιλάμβανε μια σανίδα καρφιτσών, στηρίγματα στήριξης και βίδες για να τα συνδυάσω όλα. Επίσης, ήταν φθηνό σε λιγότερο από 2 λίρες. Μετά την παραλαβή του κουτιού, το μόνο που έπρεπε να κάνω ήταν να κολλήσω τα εξαρτήματα στον πίνακα καρφιτσών.

Perhapsσως το πιο δύσκολο μέρος αυτού ήταν η τοποθέτηση όλων των εξαρτημάτων του κυκλώματος τάσης της μπαταρίας στο μικρό χώρο δίπλα στο Lolin32. Ευτυχώς με λίγο τρελλό πόκερ και τις κατάλληλες συνδέσεις που γίνονται με κόλληση το κύκλωμα ταιριάζει τακτοποιημένα. Επίσης, δεδομένου ότι το Wemos Lolin32 δεν διαθέτει πείρο για να εκθέσει τον θετικό ακροδέκτη της μπαταρίας, έπρεπε να κολλήσω ένα καλώδιο από το βύσμα της μπαταρίας στον πίνακα ακίδων.

Πρόσθεσα επίσης ένα LED που αναβοσβήνει όταν η συσκευή εντοπίσει κίνηση.

Βήμα 6: Τελειώνοντας τις πινελιές

Image
Image
Τελευταίες πινελιές
Τελευταίες πινελιές
Τελευταίες πινελιές
Τελευταίες πινελιές

Κόλλησα υπερβολικά 4 μαγνήτες νεοδυμίου 6mm x 4mm στη βάση του κουτιού που του επιτρέπουν να κολλήσει με ασφάλεια στη μεταλλική κορυφή του πλυντηρίου.

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

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

github.com/alexspurling/washingmachine

Συνιστάται: