Ένα ιστολόγιο για όσους αγαπούν τις ηλεκτρονικές κατασκευές...

Πέμπτη 4 Οκτωβρίου 2018

Arduino Παίζοντας με θερμοκρασίες [2].


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



Αρχικά θα προσθέσουμε ένδειξη μέγιστης και ελάχιστης θερμοκρασίας. Χρειαζόμαστε μόνο 10 γραμμές κώδικα. Κάτω από την δήλωση της μεταβλητής θερμοκρασίας θα δηλώσουμε δύο ακόμη μεταβλητές για το ελάχιστο και το μέγιστο.
float tempCmin = 100;  //--------- δήλωση μεταβλητής για την ελάχιστη θερμοκρασία
float tempCmax = 0;     //--------- δήλωση μεταβλητής για την μέγιστη θερμοκρασία

Στην μεταβλητή tempCmin δίνουμε αρχική τιμή πολύ μεγάλη για να είναι σίγουρα μεγαλύτερη από την τρέχουσα ώστε μετά την πρώτη σύγκριση να πάρει την τρέχουσα τιμή θερμοκρασίας. Αντίστοιχα στην μεταβλητή μέγιστης θερμοκρασίας δίνουμε μικρή αρχική τιμή.

Στην setup() δεν αλλάζει τίποτε.

Στην loop() αφού πρώτα διαβάσουμε από το αισθητήριο την τρέχουσα θερμοκρασία προσθέτουμε από κάτω δύο συγκρίσεις.

  if(tempCmin >= tempC) {tempCmin = tempC; }    //----- Σύγκριση της ελάχιστης με την τρέχουσα
  if(tempCmax <= tempC) {tempCmax = tempC; }   //----- Σύγκριση της μέγιστης με την τρέχουσα

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

  lcd.setCursor(0,1);  
  lcd.print(tempCmin);
  lcd.print("\337 - ");
  lcd.print(tempCmax);
  lcd.print("\337");


Στη συνέχεια θα προσθέσουμε ένα button για να κάνουμε όποτε θέλουμε reset τις οριακές θερμοκρασίες για να μπορούμε να τις ελέγξουμε ξανά σε άλλη χρονική περίοδο.

Για το button θα ορίσουμε μέσα στην setup() μια είσοδο (D3).
pinMode(3, INPUT);
Μέσα στην loop() θα βάλουμε μια συνθήκη και όποτε διαβάζει πάτημα του πλήκτρου θα εξισώνει τις τιμές των ορίων με την τρέχουσα τιμή θερμοκρασίας.
Στην είσοδο 3 θα δώσουμε σταθερά HIGH μέσω μιας αντίστασης 10Κ και όποτε πατηθεί το πλήκτρο θα δίνει στάθμη LOW


  if(digitalRead(3) == 0) {  //----εδώ διαβάζουμε την είσοδο 3 και βλέπουμε αν είναι LOW
     tempCmin = tempC;
     tempCmax = tempC;
  }

===========================================
παρακάνω είναι ολόκληρος ο κώδικας ενημερωμένος.
===========================================
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,16,2);

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float tempC = 0;
float tempCmin = 100;
float tempCmax = 0;   

void setup() {
  pinMode(3, INPUT);
  sensors.begin();
  lcd.init();
  lcd.home();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("DIY electronics");
  lcd.setCursor(0,1);
  lcd.print("   blogspot.com");
  delay(2000);
  lcd.clear();
}

void loop() {
  sensors.requestTemperatures();
  tempC = sensors.getTempCByIndex(0);

  if(tempCmin >= tempC) {tempCmin = tempC; } 
  if(tempCmax <= tempC) {tempCmax = tempC; }

  if(digitalRead(3) == 0) {
     tempCmin = tempC;
     tempCmax = tempC;
  }

  lcd.setCursor(0,0);
  lcd.print("TEMP: ");
  lcd.print(tempC);
  lcd.print("\337C");
  lcd.setCursor(0,1);
  lcd.print(tempCmin);
  lcd.print("\337");
  lcd.print(" - ");
  lcd.print(tempCmax);
  lcd.print("\337");

delay(1000);
}

//========= ΤΕΛΟΣ ===========

Θα μπορούσαμε να προσθέσουμε ένα RTC clock ώστε να κρατάμε την ώρα που συνέβησαν τα μέγιστα και ελάχιστα όρια της θερμοκρασίας. Επίσης μπορούμε να προσθέσουμε μια SD card και να καταγράφουμε την θερμοκρασία σε διαστήματα που μας ενδιαφέρει ώστε μετατρέψουμε το θερμόμετρο σε καταγραφικό θερμοκρασίας.
Μπορούμε να προσθέσουμε περισσότερους αισθητήρες θερμοκρασίας και να ελέγχουμε π.χ. εσωτερική εξωτερική θερμοκρασία.


Σε επόμενο άρθρο  θα προσθέσουμε ένα μικρό module με ένα relay και θα μετατρέψουμε το θερμόμετρο μας σε θερμοστάτη.


Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

Count down timer - χρονικό αντίστροφης μέτρησης

Μια απλή κατασκευή χρονομέτρου με αντίστροφη μέτρηση. Μπορεί να μετρήσει μέχρι 100 λεπτά με βήμα του ενός δευτερολέπτου. Είναι ιδανικό για ...