Μετρητής υπερηχητικής δεξαμενής βρόχινου νερού: 10 βήματα (με εικόνες)
Μετρητής υπερηχητικής δεξαμενής βρόχινου νερού: 10 βήματα (με εικόνες)
Anonim
Μετρητής υπερηχητικής δεξαμενής νερού βροχής
Μετρητής υπερηχητικής δεξαμενής νερού βροχής

Αν είστε κάτι σαν εμένα και έχετε λίγη περιβαλλοντική συνείδηση (ή είστε απλώς πεταλούδες που θέλουν να εξοικονομήσουν λίγα δολάρια - που είμαι και εγώ…), μπορεί να έχετε μια δεξαμενή νερού βροχής. Έχω μια δεξαμενή για να μαζέψω την μάλλον σπάνια βροχή που έχουμε στην Αυστραλία - αλλά αγόρι μου, όταν βρέχει εδώ, ΠΡΑΓΜΑΤΙΚΑ βρέχει! Το ρεζερβουάρ μου έχει ύψος περίπου 1,5μ και βρίσκεται σε πλίνθο, που σημαίνει ότι πρέπει να βγω βήματα για να ελέγξω τη στάθμη του νερού (ή - επειδή είμαι τόσο τεμπέλης, ισορροπώ επισφαλώς πάνω από μια παλιά φιάλη αερίου από το μπάρμπεκιου που έχει πάρει τώρα μόνιμη κατοικία ως «βήμα» δίπλα στη δεξαμενή).

Wantedθελα κάποιον τρόπο για να μπορώ να ελέγξω τη στάθμη του νερού στη δεξαμενή, χωρίς όλη την αναρρίχηση και την ανάρτηση στον σωλήνα αποχέτευσης με το ένα χέρι (ενώ ανησυχώ για το τι μπορεί να είναι αράχνες πίσω του - έχετε ακούσει για Αυστραλικές αράχνες - σωστά;) … Έτσι, με ένα ανανεωμένο ενδιαφέρον για τα ηλεκτρονικά και φθηνούς κλώνους Arduino από την Κίνα στο ebay, αποφάσισα να ξεκινήσω την κατασκευή ενός «widget» για να κάνω τη δουλειά για μένα.

Τώρα, το widget του «ονείρου» μου ήταν να εγκατασταθώ μόνιμα στη δεξαμενή, να χρησιμοποιήσω μια ηλιακή πηγή ενέργειας, με μια απομακρυσμένη ανάγνωση στο γκαράζ μου, ή ίσως έναν ασύρματο πομπό χρησιμοποιώντας Bluetooth που θα μπορούσα να ελέγξω από το τηλέφωνό μου, ή ίσως ακόμη και ένα Συσκευή τύπου ESP που φιλοξενεί μια αυτόματα ενημερωμένη ιστοσελίδα, έτσι ώστε να μπορώ να ελέγξω τη στάθμη του νερού στη δεξαμενή μου από οπουδήποτε στον κόσμο μέσω διαδικτύου … αλλά πραγματικά - γιατί τα χρειάζομαι όλα αυτά; Έτσι, επέλεξα λίγο τα μεγάλα ιδανικά μου (πολύ, αρκετά) και έφυγα από την ασύρματη λύση, τη μόνιμη εγκατάσταση, την ηλιακή φόρτιση και τη δυνατότητα να ελέγξω το επίπεδο της δεξαμενής μου από το πίσω άκρο και πέρα (πάντα υποθέτοντας ότι το πίσω άκρο του πέραν του έχει διαθέσιμο WiFi, δηλαδή…)

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

Βήμα 1: Τα μαθηματικά…

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

ΣΗΜΕΙΩΣΗ - στην πραγματικότητα, η τιμή που επιστρέφεται από τον αισθητήρα είναι πραγματικά ο χρόνος που απαιτείται για να φύγει το σήμα από την πλευρά του πομπού και να επιστρέψει στον δέκτη. Αυτό είναι σε δευτερόλεπτα - αλλά γνωρίζοντας ότι η ταχύτητα του ήχου είναι 29 μικροδευτερόλεπτα ανά εκατοστό (Τι; Δεν το ξέρατε αυτό; Pfft…) κάνει μια εύκολη μετατροπή από μια χρονική περίοδο σε μέτρηση απόστασης.

Εικόνα
Εικόνα

Πρώτον - φυσικά, πρέπει να διαιρέσουμε την απόσταση με 2 για να φτάσουμε τον αισθητήρα στην απόσταση επιφάνειας. Στη συνέχεια, αφαιρέστε τη σταθερή απόσταση από τον αισθητήρα στο «μέγιστο» βάθος νερού. Η υπόλοιπη τιμή είναι το βάθος του νερού που έχει χρησιμοποιηθεί. Στη συνέχεια, αφαιρέστε αυτήν την τιμή από το μέγιστο βάθος νερού, για να βρείτε το βάθος του νερού που έχει απομείνει στη δεξαμενή.

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

Βήμα 2: Πρακτικές

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

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

Ένα κουμπί ενεργοποιεί τη μονάδα (εξαλείφοντας έτσι την ανάγκη για διακόπτη ενεργοποίησης/απενεργοποίησης και την πιθανότητα τυχαίας εξάντλησης της μπαταρίας) και ενεργοποιεί το σκίτσο στο Arduino. Αυτό απαιτεί μια σειρά από αναγνώσεις από το HC-SR04 και λαμβάνει το μέσο όρο αυτών (για να μετριάσει τυχόν ακανόνιστες ενδείξεις).

Έβαλα επίσης ένα κομμάτι κώδικα για έλεγχο για υψηλό ή χαμηλό σε μία από τις ψηφιακές ακίδες εισόδου/εξόδου Arduino και χρησιμοποιήστε αυτόν για να θέσετε τη μονάδα σε αυτό που αποκαλούσα "Βαθμονόμηση". Σε αυτήν τη λειτουργία, η οθόνη απλώς δείχνει την πραγματική απόσταση (διαιρούμενη με 2) που επιστρέφει ο αισθητήρας, ώστε να μπορώ να ελέγξω την ακρίβειά του σε σχέση με ένα μέτρο ταινίας.

Βήμα 3: Τα συστατικά

Η μονάδα αποτελείται από τρία κύρια στοιχεία…

Εικόνα
Εικόνα
  1. Μια μονάδα πομπού/δέκτη υπερήχων HC-SR04
  2. Ένας μικροελεγκτής Arduino Pro Mini
  3. Μια 4ψήφια οθόνη LED 7 τμημάτων ή «μονάδα» οθόνης, όπως ένα TM1637

Όλα τα παραπάνω μπορούν εύκολα να βρεθούν στο ebay, απλά αναζητώντας τους όρους που εμφανίζονται με έντονη εκτύπωση.

Σε αυτήν την εφαρμογή, η οθόνη απλώς χρησιμοποιεί 3 ψηφία για να εμφανίσει % τιμή 0-100 ή 4 ψηφία για να εμφανίσει τον αριθμό των λίτρων (μέγιστο 2000 στην περίπτωσή μου), οπότε οποιαδήποτε τετραψήφια οθόνη θα κάνει - δεν χρειάζεται ανησυχείτε για το αν η μονάδα έχει δεκαδικά ψηφία ή άνω και κάτω τελεία. Μια «μονάδα» οθόνης (LED που είναι τοποθετημένη σε έναν πίνακα ανάρτησης, με ένα τσιπ διασύνδεσης) είναι ευκολότερη, καθώς χρησιμοποιεί λιγότερες συνδέσεις ακίδων, αλλά μια ακατέργαστη οθόνη LED με 12 ακίδες θα μπορούσε να φιλοξενηθεί από το Arduino με μερικές μικρές τροποποιήσεις στον κώδικα (Στην πραγματικότητα, ο αρχικός μου σχεδιασμός βασίστηκε σε αυτήν τη ρύθμιση). Σημειώστε, ωστόσο, ότι η χρήση μιας ακατέργαστης οθόνης LED απαιτεί επίσης 7 αντιστάσεις για να περιορίσουν το ρεύμα που αντλεί κάθε τμήμα. Έτυχε να έχω μια μονάδα οθόνης ρολογιού TM1637 διαθέσιμη, οπότε αποφάσισα να το χρησιμοποιήσω.

Τα συμπληρωματικά κομμάτια περιλαμβάνουν ένα κλιπ μπαταρίας 9v (και μπαταρία, προφανώς), ένα στιγμιαίο διακόπτη κουμπιού "push-to-make", ένα πλαίσιο έργου, καρφίτσες κεφαλίδας, καλώδια σύνδεσης και μήκος ξύλου 2 "x4" που υπερβαίνει τη διάμετρο του ανοίγματος της δεξαμενής.

Τα συμπληρωματικά κομμάτια (εκτός από το κομμάτι της ξυλείας) αγοράστηκαν από την τοπική μου αλυσίδα εξόδων ηλεκτρονικών ειδών - που είναι το Jaycar στην Αυστραλία. Φαντάζομαι ότι το Maplin στο Ηνωμένο Βασίλειο θα ήταν μια βιώσιμη εναλλακτική λύση και νομίζω ότι υπάρχουν μερικές στις ΗΠΑ, όπως οι Digikey και Mouser. Για άλλες χώρες, φοβάμαι ότι δεν ξέρω, αλλά είμαι βέβαιος ότι εάν σας λείπει ένας κατάλληλος προμηθευτής υψηλής οδού ή διαδικτυακός προμηθευτής στη χώρα σας, τότε οι Κινέζοι πωλητές ebay θα έρθουν για εσάς, αν δεν το κάνετε το μυαλό περιμένει μερικές εβδομάδες για παράδοση (ειρωνικά, παρά το γεγονός ότι είμαστε ένας από τους πιο κοντινούς μας γείτονες, 6 εβδομάδες ή περισσότερο δεν είναι ασυνήθιστο για παράδοση στην Αυστραλία από την Κίνα!).

Βεβαιωθείτε ότι έχετε ένα κουτί έργου που είναι αρκετά μεγάλο - μάντεψα στο δικό μου πριν διαθέσω τα εξαρτήματα και είναι πραγματικά πολύ σφιχτό - μπορεί να χρειαστεί να πάρω ένα διαφορετικό κουμπί που χρησιμοποιεί λιγότερο χώρο.

Ω, και παρεμπιπτόντως, το μήκος της ξυλείας προήλθε από κάποιες θραύσεις που κρατάω στη γωνία του γκαράζ μου (ως σπίτι για περισσότερες από αυτές τις υπέροχες αράχνες).

Μόλις κατανοήσετε τη γραφική παράσταση και τη λειτουργικότητα, μπορείτε να αποφασίσετε να προσαρμόσετε την έκδοσή σας και να συμπεριλάβετε έναν διακόπτη on/off ή να χρησιμοποιήσετε μια πηγή ισχύος 18650 Li-Ion, με ηλιακό πάνελ και ελεγκτή φόρτισης για να τη διατηρείτε συνεχώς ανανεωμένη και έτοιμη να ξεκινήσει, ή αλλάξτε την απλή οθόνη LED για LCD πολλαπλών γραμμών ή γραφικό OLED με περισσότερες επιλογές εμφάνισης πληροφοριών, όπως την εμφάνιση του ποσοστού ΚΑΙ λίτρων που απομένουν ταυτόχρονα. Or μπορείτε να πάτε για την ολοκαίνουργια ασύρματη μονάδα IoT που χορεύει μονίμως εγκατεστημένη στη δεξαμενή με ηλιακή φόρτιση. Θα ήθελα πολύ να ακούσω τις παραλλαγές και τις τροποποιήσεις σας.

Βήμα 4: Δοκιμή του Πρωτότυπου (και του Κώδικα)

Έχοντας αγοράσει το HC-SR04 από μια φθηνή κινεζική πηγή στο ebay, δεν περίμενα να λάβω μια μονάδα εξαιρετικά ακριβούς, οπότε ήθελα να το δοκιμάσω πρώτα στο breadboard, σε περίπτωση που χρειαστεί να προσθέσω κάποιον κωδικό διόρθωσης απόστασης σε το σκίτσο μου

Σε αυτό το σημείο, έψαχνα για βασικές πληροφορίες σχετικά με τον τρόπο σύνδεσης και χρήσης του HC-SR04 και πρέπει να αναγνωρίσω το οδηγό του jsvester "Simple Arduino and HC-SR04 example". Το παράδειγμα και η εμπειρία του ήταν ένα μεγάλο σημείο εκκίνησης για να ξεκινήσω την κωδικοποίηση.

Βρήκα τη βιβλιοθήκη συναρτήσεων NewPing για το HC-SR04, η οποία περιλαμβάνει ενσωματωμένη λειτουργικότητα για να λάβει το μέσο όρο πολλαπλών ενδείξεων, καθιστώντας έτσι τον κώδικα μου πολύ πιο απλό.

Βρήκα μια βιβλιοθήκη και για τη μονάδα οθόνης ρολογιού TM1637, η οποία έκανε την εμφάνιση των αριθμών πολύ πιο απλή. Στον αρχικό μου κώδικα (για την 4ψήφια οθόνη 7 τμημάτων), έπρεπε να χωρίσω τον αριθμό σε μεμονωμένα ψηφία, στη συνέχεια να δημιουργήσω κάθε μεμονωμένο ψηφίο στην οθόνη γνωρίζοντας ποια τμήματα θα φωτιστούν και στη συνέχεια να κάνω ποδήλατο σε κάθε ψηφίο του αριθμού, και τη δημιουργία αυτού του αριθμού στο κατάλληλο ψηφίο οθόνης. Αυτή η μέθοδος ονομάζεται πολυπλεξία και εμφανίζει αποτελεσματικά μόνο ένα ψηφίο τη φορά, αλλά περνάει από αυτά από ένα ψηφίο στο επόμενο τόσο γρήγορα, ώστε το ανθρώπινο μάτι να μην το παρατηρεί και σας ξεγελάει να πιστεύετε ότι όλα τα ψηφία είναι ενεργοποιημένα. Την ίδια στιγμή. Όπως και με τη βιβλιοθήκη HC-SR04 που διευκολύνει τις λειτουργίες μέτρησης, αυτή η βιβλιοθήκη οθόνης φροντίζει για όλο το χειρισμό της πολυπλεξίας και των ψηφίων. Οι σελίδες αναφοράς Arduino που συνδέονται με παραπάνω, δίνουν μερικά παραδείγματα και φυσικά, κάθε βιβλιοθήκη συνοδεύεται από δείγμα κώδικα που μπορεί να είναι μεγάλη βοήθεια.

Εικόνα
Εικόνα
Εικόνα
Εικόνα

ν

Έτσι, οι παραπάνω εικόνες δείχνουν τη δοκιμαστική μου πλατφόρμα - το δοκιμάζω στο Arduino Uno για απλότητα, καθώς αυτό έχει ήδη ρυθμιστεί για προσωρινές επαναχρησιμοποιήσιμες συνδέσεις για πρωτότυπο. Η μονάδα λειτουργεί εδώ στη λειτουργία «Βαθμονόμηση» (προσέξτε ότι ο ψηφιακός πείρος 10 - το λευκό σύρμα - είναι συνδεδεμένος στη γείωση) και με ακριβή ανάγνωση 39 εκατοστών στο κουτί που είχα τοποθετήσει τυχαία μπροστά του, όπως φαίνεται από το μέτρο ταινίας. Σε αυτήν τη λειτουργία, εμφανίζω το μικρό 'c' μπροστά από τη μέτρηση, απλώς για να δείξω ότι δεν είναι η κανονική μέτρηση.

Εκτός από το Vcc (5v) και το Ground, το HC -SR04 χρειάζεται 2 άλλες συνδέσεις - τη σκανδάλη (κίτρινη στην καρφίτσα 6) και την ηχώ (πράσινη στην καρφίτσα 7). Η οθόνη χρειάζεται επίσης Vcc (5v) και Ground και 2 ακόμη συνδέσεις - ρολόι (μπλε στον ακροδέκτη 8) και DIO (μοβ στον πείρο 9). Όπως ήδη αναφέρθηκε, ο τρόπος λειτουργίας ελέγχεται από ένα υψηλό ή χαμηλό στο pin 10 (λευκό). Οι συνδέσεις θα χρησιμοποιούν τις ίδιες ακίδες στο Arduino Pro Mini, αλλά θα κολληθούν μόνιμα. Ο τρόπος λειτουργίας θα μπορεί να επιλεγεί χρησιμοποιώντας έναν βραχυκυκλωτήρα σε δύο από τους τρεις πείρους κεφαλίδας, που συνδέονται με το Vcc, τον πείρο 10 και τη γείωση αντίστοιχα.

Οι επίσημες προδιαγραφές για το HC -SR04 ισχυρίζονται κάτι σαν ένα μέγιστο σφάλμα μόλις 3 χιλιοστών έως τη μέγιστη σχεδιασμένη απόσταση λειτουργίας των 4 μέτρων, οπότε φανταστείτε την έκπληξή μου όταν διαπίστωσα ότι η μονάδα μου ήταν σίγουρα ακριβής σε αυτόν τον βαθμό έως 2 μέτρα - που είναι πολύ περισσότερο από αυτό που χρειάζομαι. Λόγω του περιορισμένου χώρου για μια γρήγορη και βρώμικη ρύθμιση δοκιμών, τα αποτελέσματα της δοκιμής μου πέρα από αυτήν την απόσταση καταστρέφονταν από αντανακλάσεις από άλλες επιφάνειες εκτός του στόχου δοκιμής, καθώς η δέσμη από τον πομπό απλώθηκε και πήρε σε μια ευρύτερη περιοχή. Αλλά όσο είναι καλό σε 1,5 μέτρα - αυτό θα με κάνει ωραία, σας ευχαριστώ πολύ:-)

Βήμα 5: Σκίτσο Ino Rainwater Gauge

Ο πλήρης κώδικας επισυνάπτεται, αλλά θα συμπεριλάβω μερικά αποσπάσματα παρακάτω για να εξηγήσω μερικά από τα βήματα.

Πρώτα απ 'όλα, η ρύθμιση…

#περιλαμβάνω

#include #include // pins for HC-SR04 #define pinTrig 6 #define pinEcho 7 NewPing sonar (pinTrig, pinEcho, 155); // 400cms είναι μέγιστο για HC-SR04, 155cms είναι μέγιστο για δεξαμενή // Καρφίτσες σύνδεσης μονάδας LED (Digitalηφιακές ακίδες) #define CLK 8 #define DIO 9 TM1637Εμφάνιση οθόνης (CLK, DIO). // Άλλες καρφίτσες #define opMode 10

Εκτός από τις βιβλιοθήκες TM1637 και NewPing, έχω επίσης συμπεριλάβει μια βιβλιοθήκη μαθηματικών, η οποία μου δίνει πρόσβαση στη λειτουργία «στρογγυλοποίησης». Το χρησιμοποιώ σε ορισμένα μαθηματικά για να μου επιτρέψει να εμφανίσω το ποσοστό στο πλησιέστερο 5%, για παράδειγμα.

Στη συνέχεια, καθορίζονται οι ακίδες για τις δύο συσκευές και ξεκινούν οι συσκευές.

Τέλος, ορίζω το pin 10 για τον τρόπο λειτουργίας.

// απενεργοποιήστε όλα τα τμήματα για όλα τα ψηφία

uint8_t bytes = {0x00, 0x00, 0x00, 0x00}; display.setSegments (byte);

Αυτό το τμήμα κώδικα δείχνει έναν τρόπο ελέγχου της μονάδας οθόνης, επιτρέποντας τον ατομικό έλεγχο κάθε τμήματος σε κάθε ψηφίο. Έχω ορίσει τα 4 στοιχεία του πίνακα που ονομάζονται bytes, όλα μηδενικά. Αυτό σημαίνει ότι κάθε bit κάθε byte είναι μηδέν. Τα 8 bits χρησιμοποιούνται για τον έλεγχο καθενός από τα 7 τμήματα και την υποδιαστολή (ή το άνω και κάτω τελεία σε οθόνη τύπου ρολογιού). Αν λοιπόν όλα τα δυαδικά ψηφία είναι μηδέν, τότε κανένα από τα τμήματα δεν θα ανάψει. Η λειτουργία setSegments στέλνει τα περιεχόμενα του πίνακα στην οθόνη και δεν δείχνει (σε αυτή την περίπτωση) τίποτα. Όλα τα τμήματα είναι απενεργοποιημένα.

Εικόνα
Εικόνα

Το πιο σημαντικό bit σε ένα byte ελέγχει το DP και στη συνέχεια τα υπόλοιπα 7 bits ελέγχουν τα 7 τμήματα από το G στο A με αντίστροφη σειρά. Έτσι, για να εμφανιστεί ο αριθμός 1 για παράδειγμα, απαιτούνται τμήματα Β και Γ, οπότε η δυαδική αναπαράσταση θα είναι «0b00000110». (Χάρη στο CircuitsToday.com για την παραπάνω εικόνα).

// Πάρτε 10 μετρήσεις και χρησιμοποιήστε μέση διάρκεια.

int διάρκεια = sonar.ping_median (10); // η διάρκεια είναι σε μικροδευτερόλεπτα εάν (διάρκεια == 0) // Σφάλμα μέτρησης - ασαφές ή χωρίς ηχώ {uint8_t bytes = {0x00, 0b01111001, 0b01010000, 0b01010000}; // Τμήματα προς ορθογραφία "Err" display.setSegments (bytes); }

Εδώ, λέω στο HC-SR04 να κάνει 10 μετρήσεις και να μου δώσει το μέσο αποτέλεσμα. Εάν δεν επιστρέψει καμία τιμή, τότε η μονάδα είναι εκτός εμβέλειας. Στη συνέχεια, χρησιμοποιώ την ίδια τεχνική όπως παραπάνω για τον έλεγχο συγκεκριμένων τμημάτων στα 4 ψηφία, για να γράψω τα γράμματα (κενά), E, r και r. Η χρήση δυαδικής σημειογραφίας διευκολύνει λίγο τη συσχέτιση των επιμέρους δυαδικών ψηφίων με τα τμήματα.

Βήμα 6: Φόρτωση κώδικα σε Arduino Pro Mini (χωρίς USB)

Όπως είπα νωρίτερα, τα προϊόντα από τους Κινέζους πωλητές ebay χρειάζονται συχνά 6 εβδομάδες ή περισσότερο για να φτάσουν και πολλά από τα πρωτότυπα και τα κείμενα που γράφτηκα έγιναν περιμένοντας να φτάσουν κάποια από τα εξαρτήματα - το Arduino Pro Mini είναι ένα από αυτά.

Ένα πράγμα που δεν παρατήρησα στο Pro Mini, μέχρι που το είχα ήδη παραγγείλει, είναι ότι δεν διαθέτει θύρα USB για τη λήψη του σκίτσου. Έτσι, μετά από ένα ξέφρενο googling, διαπίστωσα ότι υπάρχουν δύο τρόποι για να φορτώσετε ένα σκίτσο σε αυτήν την περίπτωση - ένας απαιτεί ένα ειδικό καλώδιο που πηγαίνει από το USB στον υπολογιστή σας, σε 6 συγκεκριμένες ακίδες στο Pro Mini. Αυτή η ομάδα 6 ακίδων είναι γνωστή ως καρφίτσα ISP (προγραμματιστής στο σύστημα) και μπορείτε πραγματικά να χρησιμοποιήσετε αυτήν τη μέθοδο σε οποιοδήποτε Arduino, αν θέλετε - αλλά καθώς η διασύνδεση USB είναι διαθέσιμη σχεδόν σε όλες τις άλλες παραλλαγές Arduino (I σκέψου), η χρήση αυτής της επιλογής είναι πολύ πιο απλή. Η άλλη μέθοδος απαιτεί να έχετε ένα άλλο Arduino με διεπαφή USB σε αυτό, για να λειτουργεί ως «ενδιάμεσος».

Ευτυχώς, το Arduino Uno μου σήμαινε ότι θα μπορούσα να χρησιμοποιήσω τη δεύτερη μέθοδο, την οποία θα σας περιγράψω παρακάτω. Ονομάζεται χρησιμοποιώντας το 'Arduino ως ISP'. Με λίγα λόγια, φορτώνετε ένα ειδικό σκίτσο στο «ενδιάμεσο» Arduino σας, το οποίο το μετατρέπει σε σειριακή διασύνδεση. Στη συνέχεια, φορτώστε το πραγματικό σας σκίτσο, αλλά αντί για την κανονική επιλογή μεταφόρτωσης, χρησιμοποιείτε μια επιλογή από το μενού IDE που ανεβάζει "χρησιμοποιώντας το Arduino ως ISP". Το «ενδιάμεσο» Arduino στη συνέχεια παίρνει το πραγματικό σας σκίτσο από το IDE και το μεταφέρει στις καρφίτσες του ISP του Pro Mini, αντί να το φορτώσει στη δική του μνήμη. Δεν είναι δύσκολο μόλις καταλάβετε πώς λειτουργεί, αλλά είναι ένα επιπλέον επίπεδο πολυπλοκότητας που ίσως θέλετε να αποφύγετε. Εάν συμβαίνει αυτό, ή δεν έχετε άλλο Arduino που μπορείτε να χρησιμοποιήσετε ως «ενδιάμεσο», τότε ίσως θελήσετε να αγοράσετε ένα Arduino Nano, ή ένα από τα άλλα μικρά μοντέλα συντελεστών μορφής, που περιλαμβάνει τη διασύνδεση USB και καθιστά τον προγραμματισμό πιο απλή προοπτική.

Ακολουθούν μερικοί πόροι που μπορεί να σας φανούν χρήσιμοι για την κατανόηση της διαδικασίας. Η αναφορά Arduino αναφέρεται συγκεκριμένα στην καύση ενός νέου bootloader στη συσκευή προορισμού, αλλά μπορείτε εξίσου εύκολα να φορτώσετε ένα σκίτσο με τον ίδιο τρόπο. Βρήκα ότι το βίντεο του Julian Ilett κάνει την ιδέα πολύ πιο ξεκάθαρη, αν και παραλείπει το μέρος στην αναφορά Arduino που εξηγεί πώς να συνδέσετε τα δύο Arduinos μαζί και αντ 'αυτού προγραμματίζει ένα γυμνό τσιπ σε ένα breadboard.

  • Εγχειρίδιο αναφοράς Arduino - Χρήση του Arduino ως ISP
  • Το βίντεο του Julian Ilett στο YouTube - Χρήση ενός Arduino ως ISP

Καθώς το Pro Mini δεν διαθέτει τις 6 ακίδες ISP ομαδοποιημένες μεταξύ τους, πρέπει να αποκωδικοποιήσετε ποιες από τις ψηφιακές ακίδες σχετίζονται με τις 4 ακίδες προγραμματισμού (οι άλλες δύο συνδέσεις είναι μόνο Vcc και Gnd - έτσι είναι αρκετά απλές). Ευτυχώς για εσάς, το έχω ήδη περάσει αυτό - και είμαι πρόθυμος να μοιραστώ τη γνώση μαζί σας - τι γενναιόδωρος άνθρωπος είμαι !!

Το Arduino Uno και πολλοί άλλοι στην οικογένεια Arduino, έχουν τις 6 καρφίτσες που είναι διατεταγμένες χειροκίνητα σε ένα τετράγωνο 3x2, όπως αυτό (εικόνα από το www.arduino.cc).

Εικόνα
Εικόνα

Δυστυχώς, το Pro Mini όχι. Όπως μπορείτε να δείτε παρακάτω, είναι πραγματικά πολύ εύκολο να εντοπιστούν και εξακολουθούν να είναι διατεταγμένα σε 2 τετράγωνα των 3 ακίδων. Το MOSI, το MISO και το SCK είναι τα ίδια με τις ψηφιακές ακίδες 11, 12 και 13 αντίστοιχα τόσο στο Pro Mini όσο και στο Arduino Uno, και για προγραμματισμό ISP, απλώς συνδέστε 11 με 11, 12 με 12 και 13 με 13. Το Pro Ο πείρος Reset του Mini πρέπει να είναι συνδεδεμένος με τον πείρο Uno 10 και το Pro Mini Vcc (5v)/Ground πρέπει να συνδεθεί με το Arduino +5v/Ground. (Εικόνα από www.arduino.cc)

Εικόνα
Εικόνα

Βήμα 7: Συναρμολόγηση

Συνέλευση
Συνέλευση

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

Τρύπησα 2 οπές στη θήκη για να περάσουν οι αισθητήρες υπερήχων. Τρύπησα τις τρύπες λίγο πολύ μικρές και στη συνέχεια τις αύξησα σταδιακά χρησιμοποιώντας έναν μικρό περιστροφικό μύλο, έτσι ώστε να μπορώ να τις κάνω να είναι μια ωραία «προσαρμογή ώθησης». Δυστυχώς, ήταν πολύ κοντά στις πλευρές για να μπορέσουν να χρησιμοποιήσουν το μύλο από το εσωτερικό του κιβωτίου, και αυτό έπρεπε να γίνει από έξω, με αποτέλεσμα πολλές γρατζουνιές και σημάδια πατινάζ όπου ο μύλος γλίστρησε - καλά, αυτό είναι όλο στο κάτω μέρος τέλος πάντων - ποιος νοιάζεται..;

Στη συνέχεια, κόβω μια υποδοχή στο ένα άκρο που έχει το σωστό μέγεθος για να περάσει η οθόνη. Και πάλι - η εικασία μου για το μέγεθος του κουτιού με δάγκωσε στο πίσω μέρος καθώς η υποδοχή μου άφησε ένα πολύ λεπτό κομμάτι πάνω από την οθόνη, το οποίο αναπόφευκτα έσπασε ενώ το αρχειοθέτησα ομαλά. Λοιπόν - για αυτό εφευρέθηκε η υπερ -κόλλα…

Τέλος, με όλα τα εξαρτήματα τοποθετημένα χοντρικά στο κουτί, μέτρησα πού να βάλω την τρύπα στο καπάκι, έτσι ώστε το σώμα του κουμπιού να πέσει στον τελικό διαθέσιμο χώρο. ΜΟΛΙΣ!!!

Στη συνέχεια, κόλλησα όλα τα εξαρτήματα μαζί για να δοκιμάσω ότι όλα εξακολουθούσαν να λειτουργούν μετά την κάμψη, το λείανμα και το κόψιμο, πριν τα συναρμολογήσω όλα στη θήκη. Μπορείτε να δείτε τη σύνδεση βραχυκυκλωτήρα ακριβώς κάτω από τη μονάδα οθόνης, με τον πείρο 10 στο Arduino (λευκό καλώδιο) να είναι συνδεδεμένος στο Gnd, θέτοντας έτσι τη μονάδα σε λειτουργία βαθμονόμησης. Η οθόνη διαβάζει 122 εκατοστά από τον πάγκο μου - πρέπει να έχει πάρει σήμα που αντανακλάται πίσω από την κορυφή του πλαισίου του παραθύρου (είναι πολύ χαμηλό για να είναι το ταβάνι).

Εικόνα
Εικόνα

Στη συνέχεια, ήταν μια περίπτωση να σπάσει το πιστόλι θερμής κόλλας και να κορνάρουν παπούτσια όλα τα εξαρτήματα στη θέση τους. Αφού το έκανα αυτό, διαπίστωσα ότι η μικρή απόσταση μεταξύ του επάνω μέρους της μονάδας οθόνης και του καπακιού, όταν η μονάδα ήταν κολλημένη στη θέση της, άφησε μια μικρή διόγκωση όπου το καπάκι δεν θα ταιριάζει τόσο άνετα όσο θα ήθελα Το Mightσως προσπαθήσω να κάνω κάτι γι 'αυτό μια μέρα - ή πιθανότατα, δεν θα…

Εικόνα
Εικόνα

Βήμα 8: Το τελικό άρθρο

Μετά από μερικές δοκιμές μετά τη συναρμολόγηση και μια διόρθωση στον κωδικό μου για να υπολογίσω το βάθος του τεμαχίου ξύλου που είχα βιδώσει τη συσκευή (την οποία αγνόησα εντελώς στους υπολογισμούς μου - d'oh !!), όλα είναι έτοιμα Ε Τελικά!

Συναρμολογημένες δοκιμές

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

Εικόνα
Εικόνα

Φαίνεται ότι από την κορυφή του πάγκου μου στο πάτωμα είναι 76 εκατοστά (καλά, 72 εκατοστά συν το βάθος 4 εκατοστών του τεμαχίου ξύλου).

Εικόνα
Εικόνα

Το κάτω μέρος της μονάδας, που δείχνει τον πομπό και τον δέκτη να ξεχειλίζουν το κομμάτι ξύλου - θα έπρεπε πραγματικά να σταματήσω να το αποκαλώ κομμάτι ξύλου - θα αναφέρεται στο εξής ως πλατφόρμα σταθεροποίησης και τοποθέτησης ακριβείας μετρητή! Ευτυχώς, είναι ίσως η τελευταία φορά που το αναφέρω;-)

Ωχ - μπορείτε να δείτε όλες αυτές τις δυσάρεστες γρατσουνιές και τα σημάδια πατινάζ σε αυτό…

Εικόνα
Εικόνα

… Και εδώ είναι το τελικό προϊόν, τοποθετημένο σε κανονική κατάσταση λειτουργίας, που μετρά πραγματικά την χωρητικότητα της δεξαμενής μου στο πλησιέστερο 5%. Wasταν ένα (πολύ) βροχερό απόγευμα της Κυριακής που με είδε να ολοκληρώσω αυτό το έργο, εξ ου και οι σταγόνες βροχής στη μονάδα και το πολύ ευχάριστο 90%.

Εικόνα
Εικόνα

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

Διαβάστε παρακάτω - για ό, τι συνέβη την επόμενη μέρα…!

Βήμα 9: Υστερόγραφο - Εκατό (και πέντε) τοις εκατό;

Έτσι, τη Δευτέρα μετά τη βροχερή Κυριακή, η δεξαμενή ήταν απολύτως γεμάτη όσο θα μπορούσε να είναι. Δεδομένου ότι είναι από τις ελάχιστες φορές που το έχω δει εντελώς γεμάτο, σκέφτηκα ότι θα ήταν η ιδανική στιγμή για να συγκριθεί ο δείκτης, αλλά μαντέψτε τι - καταγράφηκε ως 105%, οπότε προφανώς κάτι δεν πήγαινε καλά.

Έβγαλα τη ράβδο μέτρησης και διαπίστωσα ότι οι αρχικές μου υποθέσεις 140 εκατοστών ως το μέγιστο βάθος νερού και 16 εκατοστά χώρου κεφαλής (βασισμένες σε οπτικές υποδείξεις που έγιναν έξω από τη δεξαμενή), ήταν και οι δύο λίγο έξω από τις πραγματικές μετρήσεις. Έτσι οπλισμένος με τα πραγματικά δεδομένα για το 100% σημείο αναφοράς μου, ήμουν σε θέση να τροποποιήσω τον κώδικα μου και να φορτώσω ξανά το Arduino.

Το μέγιστο βάθος νερού αποδεικνύεται ότι είναι 147 εκατοστά, με το σημείο μέτρησης να βρίσκεται στα 160 εκατοστά, δίνοντας 13 εκατοστά χώρο για το κεφάλι (το άθροισμα του κεφαλιού μέσα στη δεξαμενή, το ύψος του λαιμού της δεξαμενής και το βάθος του …, όχι, τι;! Εννοώ το βάθος της πλατφόρμας σταθεροποίησης και τοποθέτησης ακριβείας!).

Μετά τη διόρθωση των μεταβλητών maxDepth και headroom ανάλογα, καθώς και την επαναφορά της μέγιστης εμβέλειας του αντικειμένου σόναρ στα 160 εκατοστά, μια γρήγορη επανάληψη έδειξε 100% που έπεσε στο 95% καθώς σήκωσα λίγο το μετρητή (για να προσομοιώσω μια μικρή ποσότητα νερό που έχει χρησιμοποιηθεί).

Δουλειά έγινε!

Υ. Γ. - αυτή είναι η πρώτη μου προσπάθεια να διδάξω. Αν σας αρέσει το στυλ μου, η αίσθηση του χιούμορ, η ειλικρίνεια να παραδεχτώ τα λάθη (γεια - ακόμη και εγώ δεν είμαι τέλειος …), κλπ - ενημερώστε με και μπορεί να μου δώσει την ώθηση να κάνω ένα άλλο.

Βήμα 10: Μεταγενέστερες σκέψεις

Χρησιμοποιούμενη χωρητικότητα

Έτσι, έχουν περάσει μερικές εβδομάδες από τότε που δημοσίευσα αυτό το Instructable, και είχα πολλά σχόλια σε απάντηση, μερικά από τα οποία πρότειναν κάποιους εναλλακτικούς μηχανισμούς - τόσο ηλεκτρονικούς όσο και χειροκίνητους. Αλλά αυτό με έβαλε σε σκέψεις και υπάρχει κάτι που μάλλον θα έπρεπε να είχα επισημάνει στην αρχή.

  • Η δεξαμενή μου έχει μια αντλία, η οποία είναι εγκατεστημένη στο επίπεδο του εδάφους - λίγο πιο κάτω από τη βάση της δεξαμενής. Καθώς η αντλία είναι το χαμηλότερο σημείο στο σύστημα και το νερό από την αντλία είναι υπό πίεση, μπορώ να χρησιμοποιήσω ολόκληρη τη χωρητικότητα της δεξαμενής μου.
  • ΠΑΝΤΩΣ - εάν η δεξαμενή σας δεν διαθέτει αντλία και βασίζεται σε τροφοδοσία βαρύτητας, τότε η πραγματική χωρητικότητα της δεξαμενής περιορίζεται από το ύψος της βρύσης σας. Μόλις το νερό που παραμένει στη δεξαμενή σας είναι χαμηλότερο από τη βρύση, τότε δεν θα ρέει νερό.

Έτσι, ανεξάρτητα από το αν χρησιμοποιείτε ηλεκτρονικό μετρητή ή χειροκίνητο γυαλί οράσεως ή σύστημα τύπου πλωτήρα και σημαίας, να γνωρίζετε ότι χωρίς αντλία, η αποτελεσματική «βάση» της δεξαμενής σας είναι στην πραγματικότητα το ύψος της εξόδου της δεξαμενής ή παρακέντηση.

Συνιστάται: