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);
  }

 

 

Autentificare