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
Usar a família do DS1820 tem alguns benefícios.
1. Você pode pendurar um grande número deles em apenas um pino do arduino
2. Já usei eles ligados ao arduino com um cabo de 20 metros, apenas tive que usar um resistor de 1k2R em vez do 4K7 que é o recomendado, com o LM35 acho que mais que um metro já dá problema...
3. No "parasite mode" (A alimentação vai pelo fio de dados) você precisa de apenas um par (dois fios)
4. Leitura de temperaturas negativas sem "gambiarra", para fazer o mesmo com o LM35 tem que usar duas portas analógicas.
Esqueceram de colocar um left shift no MSB! mas isso aconteceu, porque o código do LabDeGaragem BLOQUEIA o duplo caractere "<" (provavelmente para segurança)
Como não tenho como colocar eles literalmente, vou escrever MENOR MENOR no lugar onde deve ficar, rpresentando o duplo "<"
o certo é:
float TRead = ((MSB MENOR MENOR 8) | LSB);
vixi gente, alguem já encontrou a solução para esse erro, o meu acontece o mesmo. Grato..
Ola Diego, infelizmente o erro não é este, já estou a um tempinho aqui tentando encontrar este errinho (que acredito que sege minimo) mas não encontro.
Mas muito obrigado pela ajuda, se encontrar me conta :D.
Abras
Olá Rodrigo,
Creio que apenas está faltando um parênteses antes do ponto e virgula.
((MSB 8) | LSB));
Abraço
Fiquei curioso em saber qual a diferença deste sensor com o LM35, além do fato de um ser digital e o outro analógico. A medida é a mesma? eu poderia usar um LM35 encapsulado para fazer a medida na água?
Olá! Para quem quiser usar este sensor com o sensor de humidade HIH-4030, também vendido no LdG, pode usar o código abaixo:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1267245927
Só estou com um pequeno problema, quando a temperatura está entre 0 e -10 a saída está entre 0 a 10 positivos.
Até logo!
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)