/*
Projeto 57 - Vários sensores de temperatura (ligação de vários sensores DS18B20 à mesma porta)
PARTE 1
Identificação dos endereços de cada sensor.
Física na Lixa
https://fisicanalixa.blogspot.com/
https://sites.google.com/aelixa.pt/fisicaearduino
*/
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8 //Pino de dados dos sensores ligados ao pino 8 do arduino
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress termometroA, termometroB; //Matrizes para armazenar os endereços de cada sensor
void setup()
{
Serial.begin(9600);
sensors.begin();
Serial.print("Localizar dispositivos...");
Serial.print("Encontrados ");
Serial.print(sensors.getDeviceCount(), DEC);
Serial.println(" sensores.");
if (!sensors.getAddress(termometroA, 0))
{
Serial.println("Não foi possível encontrar o endereço do sensor 0");
}
if (!sensors.getAddress(termometroB, 1))
{
Serial.println("Não foi possível encontrar o endereço do sensor 1");
}
Serial.print("Endereço do sensor 0: ");
printAddress(termometroA);
Serial.println();
Serial.print("Endereço do sensor 1: ");
printAddress(termometroB);
Serial.println();
Serial.println();
}
void printAddress(DeviceAddress deviceAddress)
{
for (int i = 0; i < 8; i++)
{
if (deviceAddress[i] < 16) Serial.print("0");
Serial.print(deviceAddress[i], HEX);
}
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
Serial.print("Temp C: ");
Serial.print(tempC);
Serial.print(" Temp F: ");
Serial.print(DallasTemperature::toFahrenheit(tempC));
}
void printData(DeviceAddress deviceAddress)
{
Serial.print("Endereço do sensor: ");
printAddress(deviceAddress);
Serial.print(" ");
printTemperature(deviceAddress);
Serial.println();
}
void loop()
{
Serial.print("Solicitando temperaturas...");
sensors.requestTemperatures();
Serial.println(" CONCLUÍDO");
delay(750);
printData(termometroA);
printData(termometroB);
Serial.println();
delay(1000);
}
/*
Projeto 57 - Vários sensores de temperatura DS18B20
Física na Lixa
https://fisicanalixa.blogspot.com/
https://sites.google.com/aelixa.pt/fisicaearduino
NOTA: O endereço de cada sensor foi obtido com o sketch "projeto_57_endereco_de_cada_sensor_DS18B20"
*/
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8 //Pino de dados dos sensores ligados ao pino 8 do arduino
#define TEMPERATURE_PRECISION 12 //A precisão pode ser de 9, 10, 11 ou 12 bits.
OneWire oneWire(ONE_WIRE_BUS); //Quanto maior for a precisão, maior será o tempo necessário para que o sensor efectue a medição.
DallasTemperature meuSensor(&oneWire);
DeviceAddress termometroA = { 0x28, 0xFF, 0x9A, 0xE0, 0x64, 0x15, 0x02, 0x9F }; //28FF9AE06415029F
DeviceAddress termometroB = { 0x28, 0xFF, 0xD6, 0xD3, 0x64, 0x15, 0x02, 0x97 }; //28FFD6D364150297
float CelsiusA = 0;
float CelsiusB = 0;
void setup()
{
Serial.begin(9600);
meuSensor.begin();
meuSensor.setResolution(termometroA, TEMPERATURE_PRECISION);
meuSensor.setResolution(termometroB, TEMPERATURE_PRECISION);
delay(1000);
}
void loop()
{
meuSensor.requestTemperatures();
CelsiusA = meuSensor.getTempC(termometroA);
CelsiusB = meuSensor.getTempC(termometroB);
Serial.print("Termómetro A = ");
Serial.print(CelsiusA,1);
Serial.println(" ºC");
Serial.print("Termómetro B = ");
Serial.print(CelsiusB,1);
Serial.println("ºC");
Serial.println();
delay(2000);
}