Sensor de temperatura DS18B20 - Continuação
Autor: Jefferson Gomes | Publicado: 2015-09-19T13:17:00-03:00


Continuando o assunto do&nbsp;sensor de temperatura DS18B20, hoje vou abordar a identificação e utilização 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 vários deles usando uma única porta do Arduino.



Partindo desse principio, vou apresentar um circuito com 2 sensores, e vamos utilizar 2 programas para :



1&nbsp;- Identificar o endereço físico de cada sensor

2&nbsp;- Utilizar esse endereço físico para obter a temperatura do sensor desejado



Os exemplos, com as alterações de praxe (traduções/comentários), foram retiradas do site&nbsp;Hacktronics&nbsp;:
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&nbsp;LIBRARIES&nbsp;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 endereços físicos dos sensores:


 1
 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
54
55
56
57
58
59
60


// Programa : Scan DS18B20
// Alterações : Arduino e Cia
// Este programa procura pelos sensores no circuito e mostra o valor 
// do endereço físico de cada sensor no Serial Monitor

#include 

// 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 &lt; 8; i++) 
    {
      Serial.print("0x");
       if (addr[i] &lt; 16) 
       {
        Serial.print('0');

       }
      Serial.print(addr[i], HEX);

       if (i &lt; 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();
  return;
}

void loop(void) 
{
  // Loop Vazio
} 





Após transferir o programa para o Arduino, abra o Serial monitor, e você verá uma tela como essa, mostrando o endereço de cda DS18B20 :





Agora que você já tem o endereço de cada sensor, vamos utilizar um outro programa que vai usar os endereços obtidos acima, relacionar cada um com uma variável, e mostrar as temperaturas na tela :


 1
 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
54
55
56
57
58
59
60
61
62
63
64


// Programa : Leitor temperatura sensores DS18B20
// Alterações : Arduino e Cia
// Este programa usa o endereço físico de cada sensor para mostrar as 
// informações de temperatura no Serial Monitor

#include 

#include 

// 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(&amp;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");
}





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











Por enquanto é só. Mais informações sobre o sensor e como obter o datasheet você pode encontrar no meu artigo anterior sobre o DS18B20, clicando&nbsp;aqui.





Fonte:&nbsp;http://www.arduinoecia.com.br/2013/04/sensor-de-temperatura-ds18b20_11.html