Termometru simplu cu DS18B20 si afisare pe LCD 16x2 V-1




   Termometru simplu cu DS18B20 si afisare pe LCD 16x2  V-1


   Pentru cei ce doresc sa inceapa sa studieze Arduino, m-am decis ca sa vin in ajutorul lor cu un mic proiect de termometru care citeste temperatura de la un senzor digital Dallas tip DS18B20 si afiseaza temperatura citita pe un LCD alfanumeric de 16x2 caractere.

    Pentru acest mic proiect avem nevoie de un modul Arduino (UNO, NANO, Etc), un afisaj alfanumeric de 16x2 caractere, un senzor digital de tip DS18B20 si codul postat putin mai jos.

    Codul este foarte simplu, pentru inceput trebuiesc instalate in Arduino  librariile necesare pentru functionarea codului scris:
  • <OneWire.h>, 
  • <DallasTemperature.h>, 
  • <LiquidCrystal.h>


    Libraria: <OneWire.h>    se ocupa de comunicatia pe un singur fir.
    Libraria: <DallasTemperature.h>    se ocupa de apelarea/setarea/citirea senzorului digital DS18B20
    Libraria: <LiquidCrystal.h>  se ocupa de setarea/afisarea informatiilor pe afisajul alfanumeric 16X2




    Asa cum se vede in poza atasata mai sus, sunt incluse in cod librariile necesare bunei functionari a termometrului



   Urmatoarele linii din cod se ocupa cu asignarea pinilor de la LCD la pinii digitali Arduino la care este conectat LCD-ul 16x2.



    Urmeaza apoi in urmatoarele linii, setarile necesare pentru senzorul digital DS18B20, asignarea pinului digital Arduino la care este conectat senzorul (pin 2 in cazul nostru) si apoi declararea unei variabile tip float, intitulata "float tempC = 0" careia ii atribuim valoarea zero pentru inceput.
    In aceasta variabila v-a fi stocata ulterior temperatura citita de la senzorul digital DS18B20 pentru a putea fi afisata pe LCD-ul 16x2.

.


    In sectiunea Setup a codului Arduino, initializam senzorul digital si LCD-ul 16x2, a se vedea liniile necesare in poza atasata mai sus.




    Tot in sectiunea Setup, putem pune un mesaj personalizat ce v-a apare pe LCD la pornire.  Acest mesaj NU este necesar bunei functionarii a codului, este un mesaj informativ in care putem sa afisam ce cod rulam, ex "Termometru" si eventual daca codul este imbunatatit pe parcurs, putem afisa ce varianta folosim, ex " V-2b".

    In acest mesaj fiecare isi poate scrie ce informatie doreste sa fie afisata pe LCD,  intre ghilimele DAR sa nu depaseasca 16 caractere pe un rand.
    Daca nu se doreste afisarea mesajului, se pot sterge liniile din poza atasata mai sus, sau se pot "comenta", adica in fata fiecarei linii se pun cate doua slashuri: //

    tot la acest mesaj mai avem linia : Delay (2000);  aceasta linie adauga o intarziere de 2 secunde, timp in care este afisat mesajul personalizat.

    De retinut, functia: void setup ();  ruleaza O SINGURA DATA la alimentare si pornire modul Arduino cu tensiune,  SAU  dupa ce apasam butonul reset al placii Arduino.




    Acum in cod urmeaza functia :  void loop();   functie ce ruleaza continuu atat timp cat este alimentat Arduino, sau dupa un reset al modului.

  Aici este scris codul care trebuie executat de Arduino conform dorintelor noastre.  In cazul nostru,  primele doua linii se ocupa ce citirea senzorului digital DS18B20 si memorarea temperaturii citite de la senzor in variabila tip float tempC, variabila care memoreaza temperatura citita de la senzor pentru a putea fi afisata pe LCD-ul 16x2.


    Urmatoarele patru linii se ocupa cu afisarea temperaturii pe LCD-ul 16x2.

    Urmeaza apoi o linie de intarziere intre citirile senzorului de temperatura, un interval de o secunda cred ca este ok, asa temperatura afisata v-a fi mai "stabila", nu v-a fluctua zecimalele foarte repede, doar la 1 secunda.


    CODUL ARDUINO PENTRU TERMOMETRU


  //=========================================================//
  //=                   Codul  Arduino                                                                      =//
  //=                       pentru                                                                                =//
  //=              Termometru simplu cu DS18B20                                             =//
  //=                 si afisare pe LCD 16x2                                                           =//
  //=                           V-1                                                                                 =//
  //=          https://hobby-geomar.blogspot.com/                                          =//
  //=======================================================//
  
//--- Biblioteci necesare -------
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>


// inițializează biblioteca prin asocierea pinilor de la LCD 
// cu pinii Arduino la care sunt conectati
LiquidCrystal lcd (8,  // pin RS LCD -> digital 8 Arduino
                   7,  // pin EN LCD -> digital 7 Arduino
                   6,  // pin D4 LCD -> digital 6 Arduino
                   5,  // pin D5 LCD -> digital 5 Arduino
                   4,  // pin D6 LCD -> digital 4 Arduino
                   3); // pin D7 LCD -> digital 3 Arduino
                   

#define ONE_WIRE_BUS 2              //----- Senzorul DS 18B20 este conectat pe pin D2 Arduino
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float tempC = 0;                    //---- Variabilă care memoreaza temperatura


void setup() {

  sensors.begin();                 // --- Initializare LCD 
  lcd.begin(16, 2);                // --- Tip LCD, 16x2

// -----------------------------------------------------------------
// Cod opțional pentru mesajul introductiv
// Puneți-vă propriul mesaj între ghilimele, ex: "* Hobby-GeoMar *"
// intre ghilimele maxim 16 caractere cat are linia de la LCD 
// -----------------------------------------------------------------

  lcd.setCursor(0,0);            //---- Setare afisare mesaj 1, prima linie, pozitia 0
  lcd.print("* Hobby-GeoMar *"); //---- Mesaj 1 pentru afisare pe LCD 
  lcd.setCursor(0,1);            //---- Setare afisare mesaj 2, a doua linie, pozitia 0
  lcd.print("  blogspot.com  "); //---- Mesaj 2 pentru afisare pe LCD 
  delay(2000);                   //---- intarziere 2 secunde, timp cat este afisat mesajul
  lcd.clear();                   //---- Stergere LCD
//---------------------------------------
}

void loop() {

  sensors.requestTemperatures();      //------------------------------------------
  tempC = sensors.getTempCByIndex(0); //-- citire temperatura si memorare in tempC

  lcd.setCursor(0,0);                 //---- Setare afisare temperatura pe prima linie a LCD-ului de la pozitia 0
  lcd.print("TEMP: ");                //---- Afisare text "TEMP:" pe LCD
  lcd.print(tempC);                   //---- Afisare temperatura senzor pe LCD
  lcd.print("\337C");                 //---- Afisare simbol grad Celsius pe LCD

  delay(1000);                        //---- intarziere de 1 sec intre citire temperatura

}
//============== Terminare program ============================


   Am sa revin cat de curand si cu o schema pentru o intelegere mai usoara a codului.

   *****    Va doresc succes in invatare Arduino.    *****

Niciun comentariu:

Trimiteți un comentariu