Uma das formas mais fáceis e baratas de adicionar sensor de temperatura no seu projecto Arduino é usar o Sensor de Temperatura de 1 Fio DS18B20. Estes sensores são bastante precisos e não necessitam de componentes externos para funcionar. Assim, com apenas algumas conexões e algum código Arduino, você estará detectando a temperatura em pouco tempo!
DS18B20 Sensor de Temperatura de 1 fio
DS18B20 é um sensor de temperatura de 1 fio fabricado pela Dallas Semiconductor Corp. A interface única de 1 fio® requer apenas um pino digital para comunicação bidirecional com um microcontrolador.
O sensor vem normalmente em dois fatores de forma. Um que vem na embalagem TO-92 parece exatamente como um transistor comum. Outro num estilo de sonda à prova de água que pode ser mais útil quando é necessário medir algo longe, debaixo de água ou debaixo do solo.
DS18B20 O sensor de temperatura é bastante preciso e não necessita de componentes externos para funcionar. Ele pode medir temperaturas de -55°C a +125°C com ±0,5°C Precisão.
A resolução do sensor de temperatura é configurável pelo usuário para 9, 10, 11, ou 12 bits. No entanto, a resolução padrão na energização é de 12 bits (ou seja, precisão de 0,0625°C).
O sensor pode ser alimentado com uma fonte de alimentação de 3V a 5,5V e consome apenas 1mA durante as conversões de temperatura ativa.
Aqui estão as especificações completas:
Fornecimento de energia | 3V a 5.5V |
Consumo corrente | 1mA |
Faixa de temperatura | -55 a 125°C |
Acuracidade | ±0.5°C |
Resolução | 9 a 12 bit (selecionável) |
Tempo de conversão | < 750ms |
Múltiplos DS18B20 Num único autocarro
Uma das maiores vantagens da DS18B20 é que múltiplos DS18B20s podem coexistir no mesmo 1-Autocarro de arame. Como cada DS18B20 tem um código de série único de 64 bits gravado na fábrica, é mais fácil diferenciá-los uns dos outros.
Esta funcionalidade pode ser uma enorme vantagem quando se pretende controlar muitas DS18B20s distribuídas por uma grande área.
Para saber como ler a temperatura de múltiplos sensores de temperatura DS18B20, consulte este tutorial.
DS18B20 Sensor Pinout
GND é um pino de terra.
DQ é um barramento de dados de 1 fio deve ser conectado a um pino digital no microcontrolador.
PinoVDD fornece energia para o sensor que pode estar entre 3,3 a 5V.
Fiação DS18B20 Sensor de Temperatura para Arduino
>
Suficiente da teoria, Vamos Praticar! Vamos ligar o DS18B20 ao Arduino.
As ligações são bastante simples. Comece conectando VDD ao pino de saída 5V no Arduino e GND à terra.
Próximo conecte o pino de sinal digital restante DQ ao pino digital 2 no Arduino. Você também precisará adicionar o resistor de pull-up 4.7k entre o sinal e o pino de energia para manter a transferência de dados estável. (os pull-ups internos no arduino não funcionam)
Tenha cuidado para obter o DS18B20 da maneira correta. Se o colocar de forma errada, ficará quente e depois quebrar-se-á.
Se estiver a usar a versão à prova de água do DS18B20, ligue a banda vermelha a 5V, a preta liga à terra e a banda amarela são dados que vão para o pino digital 2 no arduino. Você ainda precisa conectar um resistor pullup 4.7K dos dados a 5V.
Biblioteca de instalação para DS18B20
O protocolo Dallas 1-Wire é um pouco complexo, e requer um monte de código para analisar a comunicação. Para esconder esta complexidade desnecessária instalaremos a biblioteca DallasTemperature.h para que possamos emitir comandos simples para obter leituras de temperatura do sensor.
>
Para instalar a biblioteca navegue até ao Sketch >Inclua a biblioteca >Gerir bibliotecas…Aguarde que o Library Manager descarregue o índice das bibliotecas e actualize a lista de bibliotecas instaladas.
Filtre a sua pesquisa digitando ‘ds18b20’. Deve haver um par de entradas. Procure por DallasTemperature por Miles Burton. Clique nessa entrada, e então selecione Install.
Esta biblioteca de Temperatura Dallas é uma biblioteca específica de hardware que lida com funções de nível inferior. Ela precisa ser emparelhada com a One Wire Library para se comunicar com qualquer dispositivo de um fio e não apenas com o DS18B20. Instale também esta biblioteca.
Código Arduino
O seguinte esboço irá dar-lhe uma compreensão completa de como ler leituras de temperatura do Sensor de Temperatura DS18B20 e pode servir como base para experiências e projectos mais práticos.
#include <OneWire.h>#include <DallasTemperature.h>// Data wire is plugged into digital pin 2 on the Arduino#define ONE_WIRE_BUS 2// Setup a oneWire instance to communicate with any OneWire deviceOneWire oneWire(ONE_WIRE_BUS);// Pass oneWire reference to DallasTemperature libraryDallasTemperature sensors(&oneWire);void setup(void){ sensors.begin();// Start up the library Serial.begin(9600);}void loop(void){ // Send the command to get temperatures sensors.requestTemperatures(); //print the temperature in Celsius Serial.print("Temperature: "); Serial.print(sensors.getTempCByIndex(0)); Serial.print((char)176);//shows degrees character Serial.print("C | "); //print the temperature in Fahrenheit Serial.print((sensors.getTempCByIndex(0) * 9.0) / 5.0 + 32.0); Serial.print((char)176);//shows degrees character Serial.println("F"); delay(500);}
Aqui está como a saída se parece no monitor de série.
Explicação do código:
O esboço começa por incluir bibliotecas OneWire.h e DallasTemperature.h e declarar o pino Arduino ao qual o pino de sinal do sensor está conectado.
#include <OneWire.h>#include <DallasTemperature.h>#define ONE_WIRE_BUS 2
A seguir criamos um objeto de um fio passando o pino de sinal do sensor para o seu construtor. Este objeto de um fio nos permite comunicar com qualquer dispositivo de um fio, não apenas com o DS18B20. Para comunicar com o sensor DS18B20, precisamos criar um objeto da biblioteca DallasTemperature e passar referência do objeto de um fio como um parâmetro.
OneWire oneWire(ONE_WIRE_BUS);DallasTemperature sensors(&oneWire);
Após a criação de um objeto DallasTemperature, podemos emitir abaixo comandos simples para interagir com o sensor.
-
begin()
função procura sensores conectados no barramento e define a resolução do bit (12 bits) para cada um. -
requestTemperatures()
função envia comando para todos os sensores no barramento para realizar uma conversão de temperatura. -
getTempCByIndex(deviceIndex)
função lê e retorna a leitura da temperatura do sensor.deviceIndex
não é nada mais que a localização do sensor no barramento. Se você estiver usando apenas um DS18B20 no barramento, configure-o para 0.
Outras funções úteis na biblioteca DallasTemperature.h
Existem algumas funções úteis que você pode usar com o objeto DallasTemperature. Poucas delas estão listadas abaixo:
-
setResolution()
função define a resolução do conversor analógico-digital interno do DS18B20 para 9, 10, 11, ou 12-bits, correspondendo a incrementos de 0,5°C, 0,25°C, 0,125°C e 0,0625°C, respectivamente. -
bool getWaitForConversion()
função retorna o valor do flag de espera para conversão. Pode ser útil quando você quer verificar se uma conversão de temperatura está completa. -
setHighAlarmTemp()
&setLowAlarmTemp()
função define os alarmes internos de temperatura alta & alarmes de temperatura baixa para um dispositivo em graus Celsius. O intervalo válido é -55 a 125°C -
bool hasAlarm()
função retorna verdadeiro se o dispositivo tiver uma condição de alarme quando a temperatura excede a alta & ajuste de temperatura de alarme baixa.
função retorna verdadeiro se o dispositivo tiver uma condição de alarme quando a temperatura excede a alta