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);
}
Lasa un comentariu