Recapitulando
Na aula passada vimos a utilização dos sensores analógicos da família DHT para leituras de temperatura e umidade do ar. Na ocasião dissemos que esses sensores eram boas opções para projetos que visam controlar condições ambientais.
No entanto, existem situações onde eu não vou precisar de um sensor de umidade, mas vou precisar medir a temperatura ambiente ou de uma superfície, seja ela sólida ou líquida. Às vezes vou precisar de várias medidas de temperatura em pontos diferentes. Para essas situações temos os sensores DS18B20.
Conhecendo o sensor
O DS18B20 é um sensor de temperatura digital encontrado em três formatos:
- Como sensor isolado no encapsulamento TO-92;
- Como sensor a prova d'água com uma proteção metálica;
- Como módulo em uma placa com sensor e componentes periféricos.
![]() |
As apresentações encontradas para o DS18B20 |
Em comum nessas situações temos a presença de três terminais: GND, OUT e VCC. Uma característica interessante é que ele utiliza o protocolo OneWire (1-Wire) criado pela empresa Dallas Semiconductor Corp que permite que vários conectores compartilhem o mesmo barramento, isto é, no mesmo pino do Arduino.
Isso é possível porque cada sensor utiliza um endereço de memória diferente. Por essa razão, uma das instruções que precisaremos passar no código deverá pegar esse endereço de memória para obter a leitura.
Sendo assim podemos ter uma montagem chamada de "modo normal", para um ou mais sensores e, em determinadas situações, podemos ter a chamada montagem em "modo parasita". No modo "normal" cada terminal do sensor conectará ao seu pino análogo no Arduino, isto é, GND com GND, VCC com VCC e o de dados com um pino digital da placa.
Também teremos a instalação de um resistor de 4,7 a 10 KΩ interligando o terminal de dados com a conexão do VCC, como um resistor pull up. Veremos isso na montagem.
Já no chamado modo parasita o próprio pino de dados da placa oferecerei energia para o sensor não sendo utilizado todos os terminais do mesmo, porém nas nossas pesquisas não encontramos um tutorial que deixasse claro o seu emprego, razão pela qual não abordaremos aqui.
Também segundo nossas pesquisas, o protocolo OneWire também permite trabalhar com o sensor a grandes distâncias do microcontrolador. Encontrei relatos que falavam em uma distância de 30 metros entre o sensor e a placa, com o uso de um resistor pull up de apenas 1 KΩ, no lugar dos recomendados tradicionalmente.
Também encontramos muitos artigos apenas comentando que o sensor também teria a possibilidade de uso de um alarme para temperaturas e configuração da resolução, porém todos apenas convidavam o leitor a pesquisar nos datasheets sem abordar com profundidade o assunto.
![]() |
Tabela de especificações de um sensor DS18B20 genérico |
Montagem
Para ganhar tempo deixamos uma montagem pronta já com três sensores em funcionamento compartilhando o mesmo barramento. Para testar o estudante deverá iniciar a simulação, clicar em um sensor e ajustar sua temperatura na barra deslizante para ver as alterações no monitor serial.
![]() |
Simulação para uso de três sensores de temperatura no Wokwi |
Link: https://wokwi.com/projects/413499637402243073
Caso queira fazer seu próprio projeto do zero, recomendo que o faça com apenas um sensor DS18B20. Não vou encorajar o aluno a criar sua própria montagem com vários sensores porque até a data desta postagem (02/11/2024) havia um bug no simulador Wokwi para esse sensor.
Se você reparar ele NÃO tem aquela "?" verde que outros sensores apresentam no Wokwi. Isso significa que não há uma referência oficial de ajuda para ele. Pode ser que em uma data futura isso não seja mais um problema.
Eu só consegui fazer um conjunto de sensores DS18B20 funcionarem porque copiei uma montagem de outra pessoa que alterou manualmente o arquivo JSON do projeto. Como base nisso, fiz uma cópia, modifiquei a montagem e elaborei outro código mais didático. Parece que o segredo está na especificação do "deviceID" do sensor (veja figura abaixo).
![]() |
Arquivo JSON criado por Tim Mathias que altera o comportamento do Wokwi |
Porém, não faz parte da proposta do nosso curso destrinchar esse arquivo JSON, já que ele é um arquivo de configuração do Wokwi e não do Framework Arduino. Fica apenas a dica.
O Sketch
Nas minhas pesquisas encontrei códigos que funcionavam apenas para um sensor e outros que funcionavam para vários sensores. Por isso optei por fazer uma montagem com três sensores para apresentar um código que funcionará independentemente do número de sensores do seu projeto.
- #include <OneWire.h>
- #include <DallasTemperature.h>
- int quantidade = 0;
- float temperatura;
- int pino=12;
- OneWire barramento(pino);
- DallasTemperature sensor(&barramento);
- void setup() {
- sensor.begin();
- Serial.begin(9600);
- quantidade = sensor.getDeviceCount();
- }
- void loop() {
- sensor.requestTemperatures();
- for (int i = 0; i < quantidade; i++) {
- Serial.print("temperatura em ºC do Sensor ");
- Serial.print(i+1);
- Serial.print(": ");
- temperatura = sensor.getTempCByIndex(i);
- Serial.println(temperatura,1);
- }
- delay(2000);
- }
Veja que na linha 1 e 2 temos a inclusão das duas bibliotecas necessárias para o projeto. Como já abordamos anteriormente, o Wokwi reclama quando você inclui bibliotecas, mas não fornece os arquivos, porém ele pode instalar a biblioteca para você na primeira execução.
Depois declaramos três variáveis: Uma para armazenar a quantidade de sensores no circuito, outra para armazenar em decimais a futura leitura de temperatura e finalmente uma para o pino da placa que será usada. Essa última também poderia ser uma constante, já que não será mais alterada.
Na linhas 8 e 9 temos as partes cruciais: o instanciamento de um objeto chamado barramento com base na classe OneWire fornecida pela biblioteca com a utilização do pino escolhido e o instanciamento do objeto sensor com base na classe DallasTemperature fornecida pela outra biblioteca com a utilização da referência do objeto barramento.
Já na função setup() temos as inicializações dos objetos sensor e do monitor serial, como também a atribuição da variável quantidade com o número de sensores encontrados pela varredura feita pelo método sensor.getDeviceCount().
Na função loop() pegamos as leituras de todas as temperaturas com o método sensor.requestTemperatures() e depois executamos um laço para repetir as instruções que mostram no monitor serial a temperatura em Celsius de cada sensor.
Repare que na linha 24 a variável quantidade vai receber a leitura obtida com o método sensor.getTempCByIndex() de cada sensor de acordo com o índice do contador "i", perdendo portanto o valor obtido na passagem anterior pelo laço.
Caso você necessário preservar essas leituras para um uso posterior, seria conveniente o uso de uma matriz ou uma struct, mas preferimos simplificar o código para focar no uso do sensor. O delay() final de dois segundos é apenas para facilitar a leitura dos dados no monitor.
Esclareço que esse não é o único algoritmo possível para essa situação. Existem outros disponibilizados no Wokwi, inclusive da própria Dallas Semiconductor, porém esse me pareceu o mais simples e didático para sua compreensão.
Referências:
CURTO CIRCUÍTO. Como utilizar o DS18B20. Disponível em <https://curtocircuito.com.br/blog/Categoria%20Arduino/como-utilizar-o-ds18b20> Acesso em 31 out 2024.
ONE WIRE. In: WIKIPÉDIA, a enciclopédia livre. Flórida: Wikimedia Foundation, 2023. Disponível em: <https://pt.wikipedia.org/w/index.php?title=One_wire&oldid=67190837>. Acesso em: 31 out. 2024.
ROBO CORE. Primeiros Passos com o DS18B20. Disponível em <https://www.robocore.net/tutoriais/primeiros-passos-ds18b20-arduino> Acesso em 31 out 2024.
SQUIDS. Projeto 83 - Termômetro digital com sensor DS18B20 e Arduino. Disponível em <https://www.squids.com.br/arduino/projetos-arduino/projetos-squids/basico/278-projeto-83-termometro-digital-com-sensor-ds18b20-e-arduino> Acesso em 31 out 2024.
SQUIDS. Projeto 85 - Como conectar vários sensores DS18B20 em uma única porta do Arduino. Disponível em <https://www.squids.com.br/arduino/projetos-arduino/projetos-squids/basico/282-projeto-84-sistema-de-conexao-de-sensores-ds18b20-em-uma-unica-portad-do-arduino> Acesso em 31 out 2024.
VIDA DE SILÍCIO. DS18B20 – Sensor de temperatura inteligente. Disponível em <https://portal.vidadesilicio.com.br/sensor-de-temperatura-ds18b20/> Acesso em 31 out 2024.