Como projetar um monitor de temperatura da água baseado em Arduino usando o sensor de temperatura DS18B20 de 1 fio

Sensores ambientais são de grande importância em aplicações embarcadas. Muitos sensores de temperatura medem a temperatura ambiente ou a temperatura de uma superfície. Para medir a temperatura da água e outros fluidos, são necessários sensores de temperatura à prova d'água. Um desses sensores de temperatura é o DS18B20. Este sensor pode medir a temperatura do ar, de líquidos como a água e do solo. O sensor vem em dois formatos, um dos quais é um módulo à prova d'água. Ele pode ser usado para detectar a temperatura em aplicações como fogões elétricos a vapor, chaleiras elétricas e armazenamento de água com temperatura controlada.

Neste projeto, demonstramos o funcionamento do DS18B20 fazendo interface com o Arduino. O sensor não requer nenhum componente externo para interagir com um controlador/computador. Ele usa uma interface de fio único para comunicação de dados bidirecional com um controlador que torna sua interface descomplicada. O sensor vem em um pacote TO-92. Ele está disponível em dois formatos – em um, vem em um pacote simples semelhante a um transistor e, no outro, é encerrado em uma sonda à prova d'água.

DS18B20termômetro digital de 1 fio

Exemplos de termômetro digital de 1 fio DS18B20

Para uma demonstração em uma placa de ensaio, estamos usando o fator de forma semelhante ao transistor neste projeto. As leituras de temperatura do sensor são lidas pelo Arduino, que são exibidas no display OLED SSD1306.

Componentes necessários

  1. Arduino UNO x1
  2. Sensor de temperatura de 1 fio DS18B20 x1
  3. Tela OLED SSD1306 x1
  4. Resistor 4,7K x1
  5. Tábua de ensaio
  6. Conectando fios/fios de jumper

Sensor de temperatura DS18B20 de 1 fio
DS18B20 é um termômetro digital de 1 fio da Dallas Semiconductor Corp. Ele é baseado em uma interface de 1 fio que requer apenas um pino para conexões de circuito. O sensor possui um código serial exclusivo de 64 bits para endereçar uma interface de 1 fio. Possui capacidade multidrop, permitindo a interface de muitos sensores DS18B20 em uma única linha de dados como uma rede distribuída. É ainda possível alimentar o sensor a partir da própria linha de dados.

O sensor produz uma medição de temperatura com escalas de resolução de 9 a 12 bits. A faixa de temperatura operacional do DS18B20 é de -55˚C a 125˚C com uma precisão de +/-0,5˚C. A resolução padrão do sensor é de 12 bits, o que permite medir a temperatura com uma precisão de 0,0625˚C. Este sensor de temperatura leva menos de 750 ms para converter uma leitura. Portanto, é facilmente possível buscar medições de temperatura em intervalos de 1 segundo na rede de sensores.

A tensão operacional do DS18B20 é de 3,3 ~ 5V e o consumo de corrente é de cerca de 1mA. Portanto, ele pode ser facilmente conectado a qualquer microcontrolador ou microcomputador, desde que uma biblioteca de software para interface de 1 fio esteja disponível para essa plataforma. Com um consumo mínimo de corrente e uma interface simples de 1 fio, é até possível fazer a interface do DS18B20 com microcomputadores de baixo consumo de energia, como o Raspberry Pi.

DS18B20 possui o seguinte diagrama de pinos:

Diagrama de pinos do sensor de temperatura de 1 fio DS18B20

Diagrama de pinos do sensor de temperatura de 1 fio DS18B20

Na versão à prova d'água do sensor, os pinos são identificados por código de cores. As linhas GND, Dados e VDD são identificadas pelos fios preto, amarelo e vermelho. Deve-se notar que também existem alguns modelos chineses do sensor disponíveis. Nestes modelos a configuração dos pinos é invertida, ou seja, na vista frontal o pino esquerdo é VDD, depois Data e o pino mais à direita é GND.

Conexões de circuito
Neste projeto, conectamos um OLED DS18B20 e SSD1306 com Arduino UNO. Para fazer a interface do DS18B20, conecte os pinos GND e VDD do sensor ao aterramento e aos pinos de saída de 5V do Arduino, respectivamente. O pino de dados do sensor pode ser conectado a qualquer GPIO. Neste projeto, o pino de dados está conectado ao D2 do Arduino. Para estabilizar a linha de dados, recomenda-se um resistor pull-up de 4,7K para comunicação entre o pino de dados e o pino de alimentação. Os resistores pull-up integrados do Arduino são insuficientes para implementar um protocolo de 1 fio. Se um resistor externo não estiver conectado durante a interface com o Arduino, a placa poderá não ler corretamente o sensor. Também é importante garantir as conexões corretas para alimentação de tensão. Uma tensão reversa aplicada ao sensor pode facilmente aquecê-lo até a ruptura permanente.

O display OLED está conectado para mostrar leituras de temperatura. O SSD1306 faz interface com o Arduino usando a porta SPI física do Arduino. Para fazer a interface do SSD1306 OLED via porta SPI física, conecte os pinos D0/SCK e D1/MOSI do SSD1306 OLED aos pinos D13 e D11 do Arduino, respectivamente. Conecte os pinos DC, RESET e CS do SSD1306 aos pinos D9, D10 e D8 do Arduino, respectivamente.

Diagrama de circuito do monitor de temperatura da água DS18B20 baseado em Arduino

Diagrama de circuito do monitor de temperatura da água DS18B20 baseado em Arduino

Bibliotecas Arduino para DS18B20

Em primeiro lugar, para trabalhar com DS18B20, é necessária uma biblioteca de fios. Ele pode ser encontrado no gerenciador de biblioteca do Arduino IDE. Também pode ser baixado manualmente como ZIP neste link. A biblioteca one-wire serve para gerenciar a comunicação de dados em uma interface de 1 fio. A outra biblioteca necessária para DS18B20 é uma biblioteca específica de hardware para implementar o protocolo Dallas 1-wire. Ele pode ser encontrado no gerenciador de bibliotecas como DallasTemperature ou baixado como um arquivo ZIP neste link.

Esboço do Arduino

Como funciona
O sensor possui seu protocolo de 1 fio específico de hardware, implementado pela biblioteca Dallas Temperature. O Arduino se comunica com o DS18B20 através do protocolo de 1 fio. O protocolo pode ser implementado em qualquer GPIO. O Arduino lê a temperatura do sensor detectando os sinais específicos do protocolo em seu pino de dados e armazenando o valor em uma variável. A medição de temperatura lida é então exibida no SSD1306 OLED.

Guia de programação
O esboço começa importando as bibliotecas OneWire e DallasTemperature para trabalhar com o sensor de temperatura DS18B20. Em seguida, as bibliotecas SPI, Wire, Adafruit_GFX e Adafruit_SSD1306 são importadas para trabalhar com display OLED. Uma constante é definida para indicar a linha de dados do sensor de temperatura. Um objeto da classe OneWire é instanciado e o mesmo objeto é usado para instanciar um objeto da classe DallasTemperature. As constantes para resolução da tela e conexões de pinos do display OLED são definidas. Um objeto da classe Adafruit_SSD1306 é instanciado com SPI especificado explicitamente como protocolo de interface. Uma variável global 'temp' é declarada para armazenar valores de temperatura. Um bitmap é armazenado no PROGMEM para o log do site e um array é definido para o mesmo.

Na função setup , o DS18B20 é inicializado chamando o método sensors.begin . A taxa de transmissão para comunicação de dados é de 9600 bps chamando o método Serial.begin . O display OLED é inicializado chamando o método display.begin , e o logotipo do site é exibido na tela OLED chamando o método display.drawBitmap .

Na função loop , a leitura da temperatura do DS18B20 é feita chamando o método Sensors.requestTemperatures e o valor buscado é acessado em uma variável através do método Sensors.getTempCByIndex(0). A medição de temperatura lida é transferida para a porta serial e exibida no display OLED.

Resultado

Circuito do monitor de temperatura da água DS18B20 baseado em Arduino

Circuito do monitor de temperatura da água DS18B20 baseado em Arduino.

Vídeo de demonstração

Related Content

Back to blog

Leave a comment

Please note, comments need to be approved before they are published.