Sensor de Temperatura Arduino DS18B20 – Comunicação OneWire

O Sensor de Temperatura Arduino DS18B20 é uma um modelo que se destaca pela sua facilidade de conexão e utilização uma vez que possuem uma precisão bastante acentuada e...

O Sensor de Temperatura Arduino DS18B20 é uma um modelo que se destaca pela sua facilidade de conexão e utilização uma vez que possuem uma precisão bastante acentuada e possibilitam a conexão de mais de um sensor de mesmo modelo em um mesmo barramento 1-Wire, ou seja, vários Sensores DS18B20 podem coexistir e funcionar simultaneamente através de um único pino Arduino.

DS18B20 Sensor de Temperatura Arduino

DS18B20 Sensor de Temperatura Arduino

Este sistema de comunicação mencionado acima pode ser utilizado apenas com este modelo de Sensor de Temperatura, uma vez que cada DS18B20 possui um código serial exclusivo de 64 bits que é configurado de fábrica e possibilita que o Arduino diferencie um sensor do outro de maneira individual, o que eleva consideravelmente as possibilidades de utilização e desenvolvimento de projetos.

Através deste artigo vamos estudar um pouco mais sobre este exclusivo sensor e suas funcionalidades, as possibilidades de utilização e o quão grande são as vantagens de utilizar o DS18B20 em projetos que a quantia de pinos do Arduino são limitados e diversos sensores devem ser distribuídos em uma grande área, por exemplo, tudo isto através de apenas um Arduino e apenas três de seus pinos.

 

DS18B20 Sensor de Temperatura Arduino

O sensor de temperatura DS18B20 é um equipamento de interface 1-Wire fabricado inicialmente pela empresa Dallas e através da sua interface, trabalha com apenas um pino digital de comunicação bidirecional que pode ser utilizado por mais de um sensor DS18B20 simultaneamente e dois pinos de alimentação (VCC e GND), sua pinagem pode ser observada na imagem abaixo:

Pinagem do DS18B20 Sensor de Temperatura Arduino

Pinagem do DS18B20 Sensor de Temperatura Arduino

Desenvolvido de forma simplificada e completa, o Sensor de Temperatura Arduino em questão não necessita de componentes externos para funcionar, apenas é recomendado um resistor para controle da alimentação que é utilizada pelos DC18B20.

Possibilitando tanto a verificação de temperaturas negativas quanto de temperaturas positivas, o Sensor DS18B20 possui a capacidade de medir valores entre -55ºC e +125ºC, tudo isto com uma precisão de +/- 0,5ºC.

A alimentação do sensor através dos pinos VCC e GND pode ser fornecida por fontes de alimentação de 3 a 5,5V e possui um consumo de apenas 1mA, ou seja, diversos equipamentos podem sim ser instados sem problema de excesso de corrente.

 A resolução do Sensor de Temperatura DC18B20 possui um ajuste de configuração para assumir valores de 9, 10, 11 ou 12 bits, porém possui uma resolução padrão de inicialização de 12 bits.

Tabela de Dados do DS18B20

Tabela de Dados do DS18B20

A conexão para utilização deste sensor é bastante simples, comece conectando o VCC do Sensor de Temperatura Arduino ao pino de saída 5V do Arduino e o GND ao GND do mesmo.

Em seguida, conecte o Sinal do Sensor ao pino digital 2 do Arduino, por exemplo, também será necessário incluir um resistor de 4,7K entre o sinal e o pino de energia do Arduino para manter a transferência de dados estável, veja o esquema completo para ligação de um Sensor de Temperatura no Arduino:

Esquema de ligação de um Sensor de Temperatura DS18B20 Arduino

Esquema de ligação de um Sensor de Temperatura DS18B20 Arduino

A principal característica do Sensor de Temperatura Arduino DS18B20 por sua vez, é a capacidade de coexistir com amis sensores através de um único fio de comunicação. Cada sensor possui um endereço exclusivo de 64 bits que pode ser acessado via código e configurado para leituras individuais sem problema.

 

Produtos Utilizados no Teste

– 1 Arduino Uno SMD + Cabo USB;

– 3 DS18B20 Sensor de Temperatura Digital;

– 1 Resistor 10K 1/4W – Kit com 10 unidades;

Jumper Premium para Protoboard Macho-Macho 20 cm.

 

Esquema de Ligação Sensores de Temperatura DS18B20

O Esquema de ligação do Sensor de Temperatura DS18B20 é extremamente simples como vimos anteriormente e a sua utilização em projetos com mais unidades de mesmo modelo mostra-se ainda mais simples, veja através do esquema de ligação abaixo:

Esquema de ligação para 3 Sensores DS18B20

Esquema de ligação para 3 Sensores DS18B20

Inicialmente conectamos todos os pinos de alimentação (VCC e GND) do Sensor de Temperatura em paralelo e após, fizemos o mesmo procedimento para os pinos de Sinal. Após realização a ligação em paralelo destes, conectamos os pinos VCC no pino 5V do Arduino, o pino GND no GND e os pinos de sinal no pino Digital 2 do Arduino.

Para finalizar o esquema de ligação, incluímos um resistor de 4,7k Ohms interligando os pinos de comunicação com o pino de alimentação 5V, este terá a função de manter a transferência de dados estável durante todo o procedimento.

 

 Código de Funcionamento Sensor de Temperatura Arduino

O código de funcionamento deste projeto possui mais de uma possibilidade de desenvolvimento, dentre elas podemos destacar a leitura em cascata, o qual irá realizar a verificação de temperatura de forma aleatória, mesmo que contínua e a leitura via endereço individual.

O método de verificação em cascata possibilita a leitura de temperatura de forma aleatória, mas ordenada enquanto que a verificação via endereço possibilita determinar exatamente a ordem de exibição à qual os sensores irão apresentar.

Neste artigo, vamos trabalhar com ambas as possibilidades, porém antes é necessário incluirmos as bibliotecas exatas para o funcionamento de cada uma das funções do código.

 

Bibliotecas do Sensor de Temperatura DS18B20 OnWire (1-Wire)

O protocolo de comunicação 1-Wire utilizado pela empresa Dallas, para produzir os primeiros modelos do Sensor DS18B20 é bastante complexo e requer uma quantia de variáveis bastante expressiva para a análise de comunicação. Para auxiliar no desenvolvimento do projeto e diminuir a complexidade deste, utilizamos a biblioteca DallasTemperature.h para verificação de endereço e interpretação de dados.

Biblioteca DallasTemperature.h: DOWNLOAD AQUI.

Para auxiliar a biblioteca Dallas, incluímos também no projeto a biblioteca OneWire.h, responsável por assegurar o sistema de comunicação de um fio e consequentemente a interpretação dos dados gerados pelos sensores DS18B20 através de um único pino do Arduino.

Biblioteca OneWire.h: DOWNLOAD AQUI.

Após termos realizado o download destas bibliotecas e as adicionarmos na pasta libraries do Arduino, temos tudo pronto para darmos continuidade com o desenvolvimento do nosso projeto.

 

Sensor de Temperatura DS18B20 – Leitura em Cascata

Assim como mencionado anteriormente, o código que segue utiliza o sistema de verificação em cascata para realizar a leitura, independentemente da ordem de conexão ou qualquer outro fator, realiza a verificação de forma aleatória, porém ordenada, mantendo sempre a mesma sequência.

Cada sensor ao inicializar é atribuído a um número natural (1, 2, 3 …) que irá depender da quantia de sensores incluídos no projeto. A diferenciação de um e do outro poderá ser feita apenas mediante teste de variação de temperatura, exemplo: para distinguir qual número é atribuído a um dado sensor basta com que de forma isolada a sua temperatura altera-se.

Segue abaixo, o código exemplo deste da leitura em cascata do Sensor DS18B20:

Após carregarmos o código no Arduino basta abrir o Monitor Serial no canto superior direito do Software e observarmos as informações obtidas, dentre elas podemos destacar a quantia de sensores conectados ao pino digital 2 em uso e as respectivas temperaturas de cada um dos sensores.

Verificação da Temperatura em Cascata de 3 Sensores DS18B20

Verificação da Temperatura em Cascata de 3 Sensores DS18B20

 No exemplo acima, vemos que mesmo instalados de maneira próxima, cada sensor apresenta um fator de calibração diferenciado, esta qualidade também pode ser utilizada para realizar a média entre estes e aumentar ainda mais a qualidade da verificação.

Após incluir as respectivas bibliotecas, declaramos o pino D2 como pino entrada de sinal e criamos os objetos respectivos às bibliotecas DallasTemperature e OneWire, necessários para a interpretação dos dados.

Ao iniciarmos a função setup, executada apenas uma vez quando iniciado o Arduino, chamamos primeiro a função begin() que inicializa o barramento de dados de todos os sensores DS18B20 conectados e atribui uma resolução automática de 12 bits à estes. Ainda nesta fase do programa executa-se a função getDeviceCount() a quantia de dispositivos localizados.

Já na função loop, realizamos a conversão dos dados para impressão em graus Celsius através da função requestTemperatures() e usamos um for(int i = 0; i < deviceCount; i++) em loop simples para percorrer a matriz de sensores e ler a temperatura de i (n sensores) chamados por getTempCByIndex(i).

 

Sensor de Temperatura DS18B20 – Leitura por Endereço

Como já mencionado, cada DS18B20 – Sensor de Temperatura Arduino possui um endereço de 64 bits único utilizado para diferenciar um modelo do outro. Para realizarmos a leitura através do endereço, precisamos em primeiro lugar descobrir este endereço de cada um dos dispositivos utilizados.

O código abaixo detecta todos os sensores DS18B20 presentes no barramento e imprime o endereço na comunicação OneWire através do monitor serial.

Obs.: Para quem preferir, é possível conectar cada um dos sensores de maneira individual para encontrar o seu endereço adicionando sucessivamente um novo sensor a cada leitura ou incluir todos e verificar na leitura em cascata qual a posição de cada um dos sensores.

Com o código carregado basta abrir o monitor serial e este irá exibir o endereço de cada um dos Sensores de Temperatura, lembre de copiar estes código para um arquivo de texto antes de dar continuidade ao projeto, logo utilizaremos ele no próximo código.

Endereços obtidos através do Código de leitura

Endereços obtidos através do Código de leitura

Com os endereços em mão, podemos desenvolver o código para leitura individual de sensores, vale ressaltar que não basta copiar o código que segue abaixo e carregar no Arduino, é necessário alterar os endereços do código para exibir os respectivos valores.

Desta maneira, o Arduino encontra-se pronto para realizar a verificação individual de cada um dos endereços citados, basta abrir o monitor serial e ter acesso à estes dados, veja abaixo:

Valores obtidos na leitura de sensores através do seu endereço

Valores obtidos na leitura de sensores através do seu endereço

Neste código, um dos maiores diferenciais é o endereço individualizado de cada um dos sensores, o qual é alterado na parte do código elencada abaixo, a única parte a qual deve ser obrigatoriamente alterada para o bom funcionamento do projeto.

A função void valortemperatura(DeviceAddress deviceAddress) por sua vez, é responsável por fazer a impressão das temperaturas capturadas de acordo com o endereço de cada um dos sensores, apresentando a temperatura em Celsius através da função getTempC(deviceAddress) da biblioteca DallasTemperature.h.

 

Conclusão

O Sensor de Temperatura Arduino é um projeto que utiliza como base o DS18B20, um componente de características únicas que proporciona a verificação de temperatura de diversos sensores com apenas um fio de comunicação, o famosos sistema de comunicação OneWire (1-Wire).

O desenvolvimento do projeto é extremamente simples, tanto seu esquema de conexão quanto o código são facilmente interpretados e não necessitam de maiores conhecimentos em programação para sua execução.

Este é um projeto que possibilita diversas melhorias, podemos incluir displays e consequentemente um sistema de verificação de temperatura em tempo real, sistemas de comunicação sem fio para armazenagem de dados em nuvem, elementos de notificação para temperaturas máximas e mínimas, ideias é o que não falta.

Caso tenha gostado do projeto e vá realizar este em sua bancada, não esqueça de compartilhar as suas experiências, dificuldades e melhorias para que todos possamos aprender juntos. Deixe seu comentário abaixo, contribua com este artigo e deixe suas sugestões e opiniões.

Categorias
Arduino

Mecânico de Manutenção com Experiência em Sistemas Embarcados, Automação e Desenvolvimento de Projetos; Graduado nos Cursos de Matemática - URI e Física - UFFS.
4 Número de Comentários
  • Larissa de Paula Freitas
    15 março 2021 at 20:17
    Deixe seu Comentário

    Olá tenho uma dúvida, eu estou fazendo um projeto onde utilizo 3 sensores para medir a temperatura, mas ao aquecer o objeto que os sensores estão fixados , quando atinge uma temperatura de aproximadamente 70°C os sensores param de funcionar, como poderia resolver esse problema?

    • Matheus Gebert Straub
      24 março 2021 at 11:13
      Deixe seu Comentário

      Olá Larissa! Verificou a faixa de funcionamento dos sensores? Talvez os sensores que está utilizando suportem só até esta temperatura, daí será necessário procurar outro sensor com faixa maior de verificação.

  • Rael Rezende Borges
    26 julho 2021 at 18:02
    Deixe seu Comentário

    Olá! Tenho uma rede com 16 sensores, coletei os endereços físicos deles usando o codigo exemplificado neste tutorial. Com essa ordenação fornecida, ai então, inicia a coleta de temperatura, com a ideia de respeitar a ordenação dos sessores fornecidos pelo codigo.
    Até ai tudo bem, o sistema funciona perfeito, o problema é a posição fisica de cada sensor, não bate com a sequencia fornecida pelo sistema.
    Reparei isso ao aquecer um sensor na posição física 1 mas no sistema os dados de temperatura foram apresentados em um outra posição.
    Seria fácil identificar onde eles estão se eu pudesse aquecer um a um e testar, mas o problema é que eles estão em um local de difícil acesso, e gostaria de saber se teria uma forma de localizar eles via software.

    • Matheus Gebert Straub
      28 julho 2021 at 09:48
      Deixe seu Comentário

      Olá Rael! Existem métodos de fazer a leitura do código serial de cada sensor para poder diferenciá-los, cada dispositivo possui um código único e que não pode ser alterado, porém este procedimento normalmente é feito antes da instalação, momento em que podemos diferenciar um sensor do outro.

    Deixe seu Comentário

    *

    *

    Sobre nós

    Hoje a Usinainfo é um dos maiores ecommerces de Ferramentas, Peças para Eletrônica, Componentes Eletrônicos, Sensores e Arduino do Brasil, contando com uma grande diversidade de produtos na linha de eletrônica.

    Sugestões

    Artigos Relacionados