Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
64 lines (52 sloc) 7.11 KB
#include <LiquidCrystal.h> //Δήλωση βιβλιοθήκης LiquidCrystal.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Αρχικοποιεί την βιβλιοθήκη με τα pins της πλακέτας που συνδέεται η οθόνη.
void setup() { //Κλήση συνάρτησης αρχικοποίησης setup().
lcd.begin(16, 2); //Αρχικοποίηση και δήλωση στηλών και γραμμών οθόνης LCD.
lcd.clear(); /*Καθαρισμός οθόνης LCD από τους χαρακτήρες και τοποθέτηση κέρσορα κειμένου στην
πάνω αριστερή γωνία της οθόνης*/
}
void loop() { //Κλήση συνάρτησης κυρίως προγράμματος loop().
// Εμφάνιση θερμοκρασίας νερού μέσω του TMP36.
lcd.setCursor(0,1); //Τοποθέτηση του κέρσορα στην στήλη 0 και στην γραμμή 1.
int w_temp_analog_in = analogRead(A8); //Διαβάζει το pin A8 και καταχωρεί το περιεχόμενό του σε μία μεταβλητή.
delay(20); //Παύει την εκτέλεση του προγράμματος για 20 ms.
w_temp_analog_in = analogRead(A8); //Διαβάζει πάλι το pin A8 και καταχωρεί το περιεχόμενό του στην ίδια μεταβλητή.
delay(20); //Παύει πάλι την εκτέλεση του προγράμματος για 20 ms.
float voltage = w_temp_analog_in* 0.0042; //Μετατρέπει το περιεχόμενο του pin A8 σε τάση.
float w_temp_analog_in_to_temp=(voltage-0.5)*100; //Μετατρέπει την προηγούμενη τάση σε θερμοκρασία και την καταχωρεί σε μία μεταβλητή.
lcd.print(w_temp_analog_in_to_temp,1); //Τυπώνει στην οθόνη την θερμοκρασία με ένα δεκαδικό ψηφίο.
lcd.print((char)223); //Τυπώνει στην οθόνη το χαρακτήρα ο.
lcd.print("C"); //Τυπώνει στην οθόνη το κείμενο C.
//Ανάγνωση αναλογικής τάσης που διαρρέει το νερό.
lcd.setCursor(0,0); //Τοποθέτηση του κέρσορα στην στήλη 0 και στην γραμμή 0.
int voltage_analog_in = analogRead(A14); //Διαβάζει το pin A14 και καταχωρεί το περιεχόμενό του σε μία μεταβλητή.
delay(20); //Παύει την εκτέλεση του προγράμματος για 20 ms.
voltage_analog_in = analogRead(A14); //Διαβάζει πάλι το pin A14 και καταχωρεί το περιεχόμενό του στην ίδια μεταβλητή.
delay(20); //Παύει πάλι την εκτέλεση του προγράμματος για 20 ms.
float Vr = voltage_analog_in * (5.0 / 1024.0); /*Μετατρέπει το περιεχόμενο του pin A14 σε τάση και το καταχωρεί σε μία μεταβλητή.
Αυτή είναι η τάση που εφαρμόζεται στην αντίσταση αναφοράς άρα και η τάση που εφαρμόζεται
ανάμεσα στα δύο ηλεκτρόδια*/
//Εμφάνιση αγωγιμότητας νερού.
float Vin=5.000; //Τάση τροφοδοσίας.
float R=2200.000; //Τιμή αντίστασης αναφοράς.
float Vwater=(Vin-Vr); //Τάση που εφαρμόζεται ανάμεσα στα ηλεκτρόδια μέσα στο νερό.
float It=(Vr/R)*pow (10,6); //Ρεύμα που διαρέει την αντίσταση αναφοράς.
float Swater=It/Vwater; //Ειδική αγωγιμότητα νερού (χωρίς εξάρτηση θερμοκρασίας).
float Tcal=25; //Χρακτηριστική θερμοκρασία 25 C, για μέτρηση της αγωγιμότητας.
float Tdif=Tcal-w_temp_analog_in_to_temp; //Διαφορά ανάμεσα στην χαρακτηριστική θερμοκρασία των 25 C και στην θερμοκρασία του νερού.
float Swater_temp=Swater*pow(1.02,Tdif); //Ειδική αγωγιμότητα νερού (με εξάρτηση θερμοκρασίας).
lcd.print(Swater_temp,2); //Τυπώνει στην οθόνη την αγωγιμότητα του νερού με 2 δεκαδικά ψηφία.
lcd.print (" uS/cm"); //Τυπώνει στην οθόνη το κείμενο uS/cm.
//Εμφάνιση μηνύματος για πόσιμο ή όχι νερό.
if (Swater_temp>=150 && Swater_temp<=1100) //Αν η αγωγιμότητα έχει τιμή από 150 έως 1100.
{
lcd.setCursor(7,1); //Τοποθέτηση του κέρσορα στην στήλη 7 και στην γραμμή 1.
lcd.print("Drink it!"); //Τυπώνει στην οθόνη το μήνυμα Drink it!.
}
else if ((Swater_temp>=0 && Swater_temp<=130) || (Swater_temp>=1200 && Swater_temp<=70000)) //Αλλιώς αν η αγωγιμότητα έχει τιμή από 0 έως 130 ή από 1200 έως 70000.
{
lcd.setCursor(7,1); //Τοποθέτηση του κέρσορα στην στήλη 7 και στην γραμμή 1.
lcd.print("Not drink!"); //Τυπώνει στην οθόνη το μήνυμα Not drink it!.
}
delay(5000); //Το πρόγραμμα εκτελείται ανα 5 sec.
}