Tutorial: como utilizar o Sensor de temperatura DS18B20 (prova de água) com Arduino

Adquira estes componentes na Loja do Lab de Garagem

Neste tutorial vamos mostrar como utilizar o sensor de temperatura DS18B20 à prova de água com Arduino. Este sensor utiliza o protocolo digital de apenas um fio (One Wire), portanto apenas uma porta digital para comunicação.

Para fazer as ligações, o sensor contém três fios: um vermelho (VCC), um preto (GND) e um branco (Dados). Conecte o vermelho no 5V do Arduino e o preto no GND do Arduino. Conecte o fio branco no pino digital 10 e um resistor de 4k7 ohm entre o fio branco e o VCC (resistor de Pull-Up). Para maiores informações sobre o sensor utilizado, clique aqui!

Agora que feito as ligações, baixe a biblioteca necessária aqui para fazer a leitura do sensor. Extraia a biblioteca OneWire para dentro da pasta "libraries" localizada dentro da pasta do Arduino. Abra a IDE do Arduino e cole a programação abaixo:

#include <OneWire.h>

int SensorPin = 10; 


OneWire ds(SensorPin); 

void setup(void) {
Serial.begin(9600);
}

void loop(void) {
float temp = getTemp();
Serial.println(temp);

delay(100); 

}


float getTemp(){

byte data[12];
byte addr[8];

if ( !ds.search(addr)) {
//no more sensors on chain, reset search
ds.reset_search();
return -1000;
}

if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return -1000;
}

if ( addr[0] != 0x10 && addr[0] != 0x28) {
Serial.print("Device is not recognized");
return -1000;
}

ds.reset();
ds.select(addr);
ds.write(0x44,1); 

byte present = ds.reset();
ds.select(addr);
ds.write(0xBE); 


for (int i = 0; i < 9; i++) { 
data[i] = ds.read();
}

ds.reset_search();

byte MSB = data[1];
byte LSB = data[0];

float TRead = ((MSB 8) | LSB); 
float Temperature = TRead / 16;

return Temperature;

}

A programação acima adquire a temperatura em graus Celsius. O Arduino verifica se o sensor está conectado corretamente. Caso estiver, prossegue para a aquisição de dados. Para a aquisição de dados é necessário mandar um endereço para detectar o sensor, um endereço para a leitura dos dados do sensor. E depois o Arduino poder converter e mostrar a leitura exata no Serial Monitor.

Dentro da IDE do Arduino, selecione a versão da sua placa Arduino (UNO, Duemilanove, etc) e a porta (COMx, ttyUSBx, ttyACMx, etc) e depois clique em "UPLOAD". Ao terminar de fazer o "UPLOAD", abra a Serial Monitor e selecione "9600" de baud. Você verá o valor da temperatura adquirido pelo sensor em graus Celsius como mostra a figura abaixo:

E é isso! Esperamos que tenha gostado! Caso tenha dúvidas, poste aqui neste blog! Para sugestões de tutoriais, clique aqui! Para ver outros tutoriais e projetos desenvolvidos pela equipe LdG e por outros garagistas, clique aqui e aqui, respectivamente! Até a próxima!

Referências:

http://www.sparkfun.com/products/11050

http://bildr.org/2011/07/ds18b20-arduino/

http://www.arduino.cc/playground/Learning/OneWire

http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Temp/DS18B20...

Exibições: 56529

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Júlio Cesar Guedes Cordeiro em 19 março 2014 às 10:04

Faz um tutorial com termopar

Comentário de Majela em 2 março 2014 às 9:28

Ola, bom dia!

Meu código dah o seguinte erro na linha: float TRead = ((MSB 8) | LSB);

expected `)` before numeric constant

Jah coloquei o paretense antes do ; , mas continua com erro.

Alguem poderia ajudar, por favor?

Grato!!!

Comentário de Fabiano Coelho em 4 setembro 2013 às 1:15

Ola pessoal, estou com um probleminha na leitura do meu sensor, com as alterações sugeridas o programa acima está rodando, mas a leitura da temperatura não está boa, tem uma diferença de uns 15 graus a baixo do real, na ultima linha do programa" float Temperature = TRead / 16;" consigo deixar essa temperatura bem proxima do real, mas quando chego a uns 40 graus a leitura fica descontrolada..

Será que algem pode me ajudar??

 

Comentário de paoman em 6 abril 2013 às 13:26

Blz era por que pensei que eles eram mais resistentes a isso e que tinha alguma proteção como outros sensores...

Comentário de Wiechert em 6 abril 2013 às 13:09

paoman, lamento, mas com certeza ele queimou.

Diz a lenda que o que faz o componente funcionar é a fumaça que o fabricante coloca dentro do componente, daí quando a fumaça sai ele não funciona mais... 

Comentário de paoman em 6 abril 2013 às 12:49

Galera tenho este sensor só que invertir o gnd e 5v por falta de atenção daí saiu uma fumaça e esquentou muito e agora que coloquei certo não funciona só aparece -1000 nunca tinha usado ele será que queimou?

Comentário de Marcelo Mosczynski em 28 março 2013 às 12:06

Vc deve testar o bit 1 para verificar se está 0xFF

float TRead = ((MSB MENOR MENOR 8) | LSB); 
float Temperature = TRead / 16;

if (data[1] == 0xFF)
{
Temperature = Temperature * -1;
}

Comentário de Edson Guilherme em 27 março 2013 às 12:52

float TRead = ((MSB 8) | LSB);

temos o sinal entre MSB e 8      MSB   8     aqui está sendo suprimido

Comentário de Edson Guilherme em 27 março 2013 às 12:51

float TRead = ((MSB 8) | LSB);

Comentário de Marcelo Mosczynski em 17 janeiro 2013 às 18:56

Faltou no código o tratamento para leitura de temperaturas negativas.

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço