201304sensor de Temperatura Ds18b20 11.HTML

Você também pode gostar

Você está na página 1de 5

Sensor de temperatura DS18B20 - Continuao

Continuando o assunto do sensor de temperatura DS18B20, hoje vou abordar a identificao e


utilizao desses sensores.
Encontrei muitos artigos na internet falando sobre esse sensor, mas poucos explicando como utiliz-los
em quantidade, afinal, uma das grandes vantagens desse sensor que voc pode utilizar vrios deles
usando uma nica porta do Arduino.
Partindo desse principio, vou apresentar um circuito com 2 sensores, e vamos utilizar 2 programas para :
1 - Identificar o endereo fsico de cada sensor
2 - Utilizar esse endereo fsico para obter a temperatura do sensor desejado
Os exemplos, com as alteraes de praxe (tradues/comentrios), foram retiradas do site Hacktronics :
Monte o circuito abaixo, tomando cuidado com a pinagem do sensor :

Obs : Utilizei resistores de 4K7


Baixe as bibliotecas abaixo, e copie para a pasta LIBRARIES da IDE do seu Arduino :
Biblioteca OneWire :
http://www.hacktronics.com/code/OneWire.zip
Biblioteca Dallas :
http://www.hacktronics.com/code/DallasTemperature.zip
Agora carregue o programa abaixo, que vai identificar os endereos fsicos dos sensores:
1

// Programa : Scan DS18B20

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

// Alteraes : Arduino e Cia


// Este programa procura pelos sensores no circuito e mostra o valor
// do endereo fsico de cada sensor no Serial Monitor
#include <OneWire.h>
// Conecte o pino central dos sensores ao pino 10 do Arduino
OneWire ds(10);
void setup(void)
{
Serial.begin(9600);
discoverOneWireDevices();
}
void discoverOneWireDevices(void)
{
byte i;
byte present = 0;
byte data[12];
byte addr[8];
Serial.print("Procurando dispositivos DS18B20...\n\r");
while(ds.search(addr))
{
Serial.print("\n\rEncontrado sensor \'DS18B20\' com endereco:\n\r");
for( i = 0; i < 8; i++)
{
Serial.print("0x");
if (addr[i] < 16)
{
Serial.print('0');
}
Serial.print(addr[i], HEX);
if (i < 7)
{
Serial.print(", ");
}
}
if ( OneWire::crc8( addr, 7) != addr[7])
{
Serial.print("CRC nao e valido!\n");
return;
}
}
Serial.print("\n\r\n\rFinal da verificacao.\r\n");
ds.reset_search();

54
55
56
57
58
59
60

return;
}
void loop(void)
{
// Loop Vazio
}

Aps transferir o programa para o Arduino, abra o Serial monitor, e voc ver uma tela como essa,
mostrando o endereo de cda DS18B20 :

Agora que voc j tem o endereo de cada sensor, vamos utilizar um outro programa que vai usar os
endereos obtidos acima, relacionar cada um com uma varivel, e mostrar as temperaturas na tela :
1
2
3
4
5
6
7

//
//
//
//

Programa : Leitor temperatura sensores DS18B20


Alteraes : Arduino e Cia
Este programa usa o endereo fsico de cada sensor para mostrar as
informaes de temperatura no Serial Monitor

#include <OneWire.h>

8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

#include <DallasTemperature.h>
// Conectar o pino central dos sensores ao pino 10 do Arduino
#define ONE_WIRE_BUS 10
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer = { 0x28, 0xE1, 0x20, 0x9D, 0x04, 0x00,
0x00, 0x1A };
DeviceAddress outsideThermometer = { 0x28, 0xE5, 0x82, 0x9D, 0x04, 0x00,
0x00, 0x76 };
DeviceAddress dogHouseThermometer = { 0x28, 0x59, 0xBE, 0xDF, 0x02, 0x00,
0x00, 0x9F };
void setup(void)
{
// start serial port
Serial.begin(9600);
// Start up the library
sensors.begin();
// set the resolution to 10 bit (good enough?)
sensors.setResolution(insideThermometer, 10);
sensors.setResolution(outsideThermometer, 10);
sensors.setResolution(dogHouseThermometer, 10);
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00)
{
Serial.print("Erro ao ler temperatura !");
}
else
{
Serial.print("C: ");
Serial.print(tempC);
Serial.print(" F: ");
Serial.print(DallasTemperature::toFahrenheit(tempC));
}
}
void loop(void)
{
delay(10000);
Serial.print("Lendo temperaturas...\n\r");
sensors.requestTemperatures();
Serial.print("Temperatura Sensor 1: ");
printTemperature(insideThermometer);

Serial.print("\n\r");
Serial.print("Temperatura Sensor 2: ");
printTemperature(outsideThermometer);
Serial.print("\n\r");
Serial.print("Temperatura Sensor 3: ");
printTemperature(dogHouseThermometer);
Serial.print("\n\r\n\r");

60
61
62
63
64
}

Abra o serial monitor , para obter a temperatura dos sensores, em Celsius e Fahrenheit :

Por enquanto s. Mais informaes sobre o sensor e como obter o datasheet voc pode encontrar no
meu artigo anterior sobre o DS18B20, clicando aqui.

Você também pode gostar