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...
Comentar
Faz um tutorial com termopar
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!!!
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??
Blz era por que pensei que eles eram mais resistentes a isso e que tinha alguma proteção como outros sensores...
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...
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?
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;
}
float TRead = ((MSB 8) | LSB);
temos o sinal entre MSB e 8 MSB 8 aqui está sendo suprimido
float TRead = ((MSB 8) | LSB);
Faltou no código o tratamento para leitura de temperaturas negativas.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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)