DS18B20 - partea a 2-a

Daca in articolul anterior am folosit un singur senzor DS18B20 in acest articol vom folosi 3 senzori pentru a monitoriza temperaturile existente in 3 zone diferite.

Pentru a realiza acest lucru nu trebuie decat sa legam urmatorii 2 senzori (sau mai multi, numarul maxim fiind de 127) in paralel cu cel existent. atentie, nu este nevoie sa adaugam alte rezistoare pullup deorece cel existent este suficient.

Pentru a verifica cei trei senzori vom folosi urmatorul sketch in care datele obtinute vor fi redate in terminalul serial:

 

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 22  //pinul digital unde conectam senzorul/senzorii
#define TEMPERATURE_PRECISION 12
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress senzor1, senzor2, senzor3; 

void setup(void)
{
  Serial.begin(9600);
  Serial.println("Testare 3 senzori DS18B20 impreuna cu Arduino");
  sensors.begin();
}

void loop(void)
{ 
  Serial.print("Citire temperatura...");
  sensors.requestTemperatures(); 
  Serial.println("OK");
   if (!sensors.getAddress(senzor1, 0)) {
    Serial.println("Eroare citire senzor 1");   
   }  else {
    float tempC1 = sensors.getTempC(senzor1);
    Serial.print("Senzor 1 | ");
    Serial.print("Temp: ");
    Serial.print(tempC1);
    Serial.print(" ºC");
    Serial.print(" Temp: ");
    Serial.print(DallasTemperature::toFahrenheit(tempC1));
    Serial.println(" ºF"); 
   }
   if (!sensors.getAddress(senzor2, 1)) {
    Serial.println("Eroare citire senzor 2");   
   }  else {
    float tempC2 = sensors.getTempC(senzor2);
    Serial.print("Senzor 2 | ");
    Serial.print("Temp: ");
    Serial.print(tempC2);
    Serial.print(" ºC");
    Serial.print(" Temp: ");
    Serial.print(DallasTemperature::toFahrenheit(tempC2));
    Serial.println(" ºF"); 
   }
   if (!sensors.getAddress(senzor3, 2)) {
    Serial.println("Eroare citire senzor 3");   
   }  else {
    float tempC3 = sensors.getTempC(senzor3);
    Serial.print("Senzor 3 | ");
    Serial.print("Temp: ");
    Serial.print(tempC3);
    Serial.print(" ºC");
    Serial.print(" Temp: ");
    Serial.print(DallasTemperature::toFahrenheit(tempC3));
    Serial.println(" ºF"); 
   }
  delay(1000);
}

Pentru o afisare mai facila a valorilor vom folosi un display LCD. Acesta este conectat ca si in acest articol. Sketchul folosit in cest caz este urmatorul:

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 22  //pinul digital unde conectam senzorul
#define TEMPERATURE_PRECISION 9
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress senzor1, senzor2, senzor3; 
byte celsius[] = {
  B00110,
  B01001,
  B01001,
  B00110,
  B00000,
  B00000,
  B00000,
  B00000
};

void setup()
{
  sensors.begin();
  lcd.begin(16,4); 
  lcd.setCursor ( 0, 0 ); 
  lcd.print (" www.");  
  lcd.setCursor (0, 1 ); 
  lcd.print ("electronicstore");
  lcd.setCursor (0, 2 );
  lcd.print ("            .ro");
  lcd.setCursor (0, 3 );
  lcd.print ("****************");
  delay (1000); 
  lcd.clear(); 
  lcd.setCursor ( 0, 0 ); 
  lcd.print ("Testarea a 3");  
  lcd.setCursor (0, 1 ); 
  lcd.print ("senzori DS18B20 ");
  lcd.setCursor (0, 2 );
  lcd.print ("in paralel");
  lcd.setCursor (0, 3 );
  lcd.print ("****************");
  delay (1000);
  lcd.clear();
  lcd.createChar(0, celsius); 
}
void loop() {
  sensors.requestTemperatures(); 
    
    sensors.getAddress(senzor1, 0);
    float tempC1 = sensors.getTempC(senzor1);
    lcd.setCursor (0, 0 );
    lcd.print ("Temp 1. ");
    lcd.print(tempC1);
    lcd.print(" ");
    lcd.write(byte(0));
    lcd.print("C");
    
    sensors.getAddress(senzor2, 1); 
    float tempC2 = sensors.getTempC(senzor2); 
    lcd.setCursor (0, 1 );
    lcd.print ("Temp 2. ");
    lcd.print(tempC2);
    lcd.print(" ");
    lcd.write(byte(0));
    lcd.print("C");
 
    sensors.getAddress(senzor3, 2); 
    float tempC3 = sensors.getTempC(senzor3);
    lcd.setCursor (0, 2 );
    lcd.print ("Temp 3. ");
    lcd.print(tempC3);
    lcd.print(" ");
    lcd.write(byte(0));
    lcd.print("C");
  
  delay (100);
  }

 

 

Nu sunt comentarii in “DS18B20 - partea a 2-a”

Lasa un comentariu

Raspuns lui Some User

ESP32

ESP32 impreuna cu un senzor de lumina

    Pentru a detecta prezenta sau absenta luminii de catre ESP32 vom folosi un fotorezistor. Iar in acest articol vom folosi un modul detector de lumin cu fotorezistor.     Acest modul se poate alime...

ESP32 si un led

    Pentru a semnaliza o anumita stare dintr-un program executat de catre ESP32 puem folosi ca martor indicator un led. In acest exemplu vom folosi un led conectat cu anodul la pinul GPIO_25 al ESP32,...

ESP32 si comunicarea seriala

    Daca dorim sa vedem diferite date returnate de catre ESP32 putem folosi terminalul serial pentru a realiza acest lucru. Folosirea acestuia este destul de simpla, de fapt fiind acelasi cod sursa fo...

More Articles

Mai multe de la: ESP32

Autentificare