Μια ενδιαφέρουσα και συνάμα χρηστική ιδέα για κατασκευή αποτελεί αυτή του @Stelios, ο οποίος θέλοντας να παρακολουθεί ανά πάσα στιγμή τη στάθμη του νερού σε μια κλειστή δεξαμενή, χρησιμοποιήσε έναν αισθητήρα υπερήχων (ultrasonic sonar) HC-SR04 μαζί με ένα Arduino Nano, μια LCD για οπτική ένδειξη και ένα buzzer για την παραγωγή ήχων ειδοποίησης.
Παρακάτω, τα βήματα της κατασκευής:
HC-SR04 (ultrasonic sensor)
Διακόπτες (push button)
Συνδετήρας (4 pin connector m+f)
Κουτί (case)
Αν και για την αρχική ανάπτυξη και δοκιμές, χρησιμοποιήθηκε το Arduino Uno, το τελικό "προϊόν" περιελάμβανε το Arduino Nano το οποίο παρέχει τις ίδιες δυνατότητες σε πολύ μικρότερο μέγεθος.
Για τη σύνδεση της LCD που είναι βασισμένη στο HD44780 ανατρέξτε εδώ.
Ο αισθητήρας ultrasonic sonar HC-SR04 διαθέτει 4 pin (Vcc, Trigger, Echo, GND) εκ των οποίων 2, τα Trigger και Echo, συνδέοονται στα digital pins του Arduino. Στο Vcc pin συνδέουμε +5v από το Arduino. Η αρχή λειτουργίας του είναι απλή, το Trigger pin στέλνει ένα παλμό (HIGH) μικρής διάρκειας (~10μS) και το σήμα ανάκλασης από ένα αντικείμενο που επιστρέφει πίσω, εγείρει το Echo pin (HIGH). Η χρονική διάρκεια από τη μέταδοση μέχρι και τη λήψη του παλμού είναι γνωστή, οπότε η απόσταση υπολογίζεται εύκολα, αφού η ταχύτητας μετάδοσης είναι κι αυτή γνωστή και ισούται με 340m/s (ταχύτητα ήχου).
Επίσης, χρησιμοποιήθηκε το LM35 για τη μέτρηση θερμοκρασίας στο Analog pin 0.
Προσπαθώντας να χωρέσουν όλα αυτά σε ένα μικρό κουτί, υπήρξε αρκετό πριόνισμα και χρήση θερμόκολλας για να καταλήξει σε ικανοποιητικό αποτέλεσμα:
Τα 2 push-button και το buzzer έχουν "υποστηρικτό" ρόλο ως soft reset, mute και full/empty sound αντίστοιχα. Στον κώδικα ενσωματώνεται η βιβλιοθήκη <LiquidCrystal.h> για το χειρισμό της LCD και ο μηχανισμός για τα Trigger & Echo:
Τα 2 push-button και το buzzer έχουν "υποστηρικτό" ρόλο ως soft reset, mute και full/empty sound αντίστοιχα. Στον κώδικα ενσωματώνεται η βιβλιοθήκη <LiquidCrystal.h> για το χειρισμό της LCD και ο μηχανισμός για τα Trigger & Echo:
pinMode(TRIG, OUTPUT); digitalWrite(TRIG, LOW); delayMicroseconds(2); digitalWrite(TRIG, HIGH); delayMicroseconds(10); digitalWrite(TRIG, LOW); pinMode(ECHO, INPUT); float distance = pulseIn(ECHO, HIGH); distance=distance / 29.387 / 2; Serial.println(distance);
Παρακάτω, μια φωτογραφία με το τελικό κύκλωμα στο κουτί του. Στο πλάι διακρίνονται το κουμπί για soft reset, το mini usb για την τροφοδοσία και τον προγραμματισμό και ο 4-pin connector για τη σύνδεση του αισθητήρα sonar.
Ο πλήρης κώδικας είναι διαθέσιμος εδώ.
Δείτε κι ένα βίντεο από τη λειτουργία.
Καλημέρα,
ΑπάντησηΔιαγραφήδεν ξέρω τι ακρίβεια έχει η μέτρηση αλλά θα πρέπει να υπάρχει διόρθωση του αποτελέσματος βάση την θερμοκρασία του νερού αφού η στάθμη του νερού αλλάζει με την θερμοκρασία. (συντελεστής διαστολής του νερού σε σχέση με την θερμοκρασία http://levitostasia.net/viewtopic.php?t=97&p=109)
Σε μετρήσεις σε προιόντα όπως πετρέλαιο κτλ είναι πολύ σημαντικό ειδικά σε μεγάλες δεξαμενές που ένα χιλιοστό κάνει διαφορά χιλιάδων λίτρων.
Σταύρος
http://www.youtube.com/watch?v=HxJezrtjstw&list=WL84D334C99761D70B
ΑπάντησηΔιαγραφήhttp://www.youtube.com/watch?v=sXM8GH77MBI
Καλησπέρα, ένα παρόμοιο project με πληκτρολόγιο και προγραμματισμό που έχω αναπτύξει σε custom made πλακέτα με έναν ATmega328 προγραμματισμένο σε περιβάλλον Arduino...
υπαρχει κυνδινος αν χρησημοποιησουμε εναν τετοιο αισθητηρα αποστασης σε ενα ντεποζητο με βενζινα?
ΑπάντησηΔιαγραφήΟχι απλά κίνδυνος ολική καταστροφή, χρειάζετε στεγανό κουτί με αντίστοιχες πιστοποιήσεις για αντιεκρηκτικότητα και λειτουργία σε περιβάλλον εύφλεκτου προιόντας (explosion proof eexIIA , protection class IPX κτλ)
ΔιαγραφήΚαλησπέρα στον συγκεκριμένο κώδικα μπορώ να αλλάξω τα λίτρα της δεξαμενής.Αν ναι πως γίνεται.Ευχαριστώ πολύ.
ΑπάντησηΔιαγραφήστην αρχή του προγράμματος ορίζεις τις διαστάσεις της δεξαμενής:
Διαγραφή#define L_LENGTH 150.0 /* cm */
#define H_HEIGHT 40.0 /* cm */
#define W_WIDTH 50.0 /* cm */
Πολύ σωστά το αναφέρει ο @Nikos, απλά μια μικρή λεπτομέρεια είναι ότι θα πρέπει να ορισθεί η απόσταση του μέγιστου ύψους της στάθμης του νερού, μέχρι τον αισθητήρα:
Διαγραφή#define DISTANCE_PLUS 10 /* cm (distance plus from water to sonar*/
Η παραπάνω τιμή, λαμβάνεται υπόψιν στο υπολογισμό του ύψους της στάθμης του νερού(?) της δεξαμενής:
hWaterCm = H_HEIGHT - distance + DISTANCE_PLUS;
και κατ' επέκταση στο υπολογισμό του διαθέσιμου όγκου.
Γεια σας θα ήθελα να μου πείτε: α) Αν οι αισθητήρες είναι αδιάβροχοι (διότι θα χρησιμοποιηθούν σε δεξαμενή με νερό η οποία μετακινείτε) και αν όχι τότε τι μου προτείνετε , β) Αν υπάρχει η δυνατότητα αλλαγής της μέτρησης σε περισσότερα λίτρα (δηλ. από 0 – 1000) διότι η δεξαμενή μου είναι 1000 lit.
ΑπάντησηΔιαγραφήα) Ο συγκεκριμένος αισθητήρας (HC-SR04) ΔΕΝ είναι αδιάβροχος. Μπορείς να ψάξεις για τον: JSN-SR04T ή TE501 στο ebay.
Διαγραφήβ) Όπως έχει σχολιαστεί και πιο πάνω, για το σωστό υπολογισμό των λίτρων (L) θα πρέπει να οριστούν, αρχικά, οι ακριβείς διαστάσεις της δεξαμενής.
καλησπέρα, μπορεί να χρησιμοποιηθεί για μέτρηση σε δεξαμενή πετρελαίου ;
ΑπάντησηΔιαγραφήΣαφώς μπορεί, χρησιμοποιώντας την αδιάβροχη εκδοχή του αισθητήρα (πχ TE501) και πάντα λαμβάνοντας τα απαραίτητα μέτρα ασφάλειας για την εγκατάσταση σε δεξαμενές με εύφλεκτα υλικά.
Διαγραφή