Google+

Πέμπτη, 3 Ιανουαρίου 2013

Water Tank Level Display

Μια ενδιαφέρουσα και συνάμα χρηστική ιδέα για κατασκευή αποτελεί αυτή του @Stelios, ο οποίος θέλοντας να παρακολουθεί ανά πάσα στιγμή τη στάθμη του νερού σε μια κλειστή δεξαμενή, χρησιμοποιήσε έναν αισθητήρα υπερήχων (ultrasonic sonar) HC-SR04 μαζί με ένα Arduino Nano, μια LCD για οπτική ένδειξη και ένα buzzer για την παραγωγή ήχων ειδοποίησης.


Παρακάτω, τα βήματα της κατασκευής:

Συγκέντρωση Υλικών:

HC-SR04 (ultrasonic sensor)
LCD 16x2 (HD44780)
LM35 (temp sensor)
Buzzer (ηχείο)
Διακόπτες (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:

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.


Ο πλήρης κώδικας είναι διαθέσιμος εδώ.


Δείτε κι ένα βίντεο από τη λειτουργία.