Medindo temperatura debaixo d’água com DS18B20 232

Realize medições de temperatura com precisão não só em ambiente seco como também em ambientes úmidos e molhados com o sensor de temperatura à prova d´água DS18B20.

Sensor de temperatura DS18B20

O sensor de temperatura DS18B20 pode efetuar leituras com precisão de até ±0,5 ºC, e enviar as informações para o microcontrolador utilizando apenas 1 fio. Outras características do DS18B20:

  • CI : DS18B20 (Datasheet)
  • Tensão de operação: 3 a 5,5V
  • Faixa de medição de temperatura: -55 ºC a +125 ºC
  • Precisão: +/- 0,5 ºC entre -10 ºC e +85 ºC
  • Ponta de aço inoxidável (6 x 50mm), com cabo de 108 cm de comprimento

Cada sensor possui um endereço físico, assim você pode colocar vários sensores como esse em um mesmo barramento, utilizando uma única porta do microcontrolador, e efetuar a leitura individualmente.

Ligação do sensor de temperatura DS18B20 ao Arduino

O sensor possui 3 fios para ligação ao Arduino: vermelho (Vcc), preto (GND) e amarelo (dados).  Vamos alimentar o sensor com 5V, e utilizar a porta 3 do Arduino como entrada de dados.

Obs: Em alguns casos, esse sensor pode ser fornecido com fios nas cores: vermelho (Vcc), amarelo (GND) e verde (dados).

Para melhor visualização dos dados, utilizamos um display 16×2, com um potenciômetro de 10K para ajuste do contraste. Um detalhe importante é o resistor pull-up de 4,7K. Sem ele, o sensor não será detectado pelo programa.

Circuito Arduino DS18B20

Programa DS18B20 e display LCD 16×2

Para o programa precisamos de duas bibliotecas, a Dallas Temperature (download) e também a OneWire (download). Essas duas bibliotecas trabalham em conjunto para extrair os dados do sensor. Descompacte as bibliotecas e copie as pastas DallasTemperature e OneWire para dentro da pasta LIBRARIES da IDE do Arduino.

O programa mostra no display 16×2 as informações da temperatura atual e também a temperatura mínima (L/Low) e máxima (H/High). A atualização é feita a cada 3 segundos.

// Programa : Sensor de temperatura DS18B20
// Autor : MakerHero

#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

// Porta do pino de sinal do DS18B20
#define ONE_WIRE_BUS 3

// Define uma instancia do oneWire para comunicacao com o sensor
OneWire oneWire(ONE_WIRE_BUS);

// Armazena temperaturas minima e maxima
float tempMin = 999;
float tempMax = 0;

DallasTemperature sensors(&oneWire);
DeviceAddress sensor1;

// Inicializa o LCD
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);

void setup(void)
{
  Serial.begin(9600);
  sensors.begin();
  // Localiza e mostra enderecos dos sensores
  Serial.println("Localizando sensores DS18B20...");
  Serial.print("Foram encontrados ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" sensores.");
  if (!sensors.getAddress(sensor1, 0)) 
     Serial.println("Sensores nao encontrados !"); 
  // Mostra o endereco do sensor encontrado no barramento
  Serial.print("Endereco sensor: ");
  mostra_endereco_sensor(sensor1);
  Serial.println();
  Serial.println();
  lcd.begin(16, 2);
  
}

void mostra_endereco_sensor(DeviceAddress deviceAddress)
{
  for (uint8_t i = 0; i < 8; i++)
  {
    // Adiciona zeros se necessário
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}

void loop()
{
  // Le a informacao do sensor
  sensors.requestTemperatures();
  float tempC = sensors.getTempC(sensor1);
  // Atualiza temperaturas minima e maxima
  if (tempC < tempMin)
  {
    tempMin = tempC;
  }
  if (tempC > tempMax)
  {
    tempMax = tempC;
  }
  // Mostra dados no serial monitor
  Serial.print("Temp C: ");
  Serial.print(tempC);
  Serial.print(" Min : ");
  Serial.print(tempMin);
  Serial.print(" Max : ");
  Serial.println(tempMax);
  
  // Mostra dados no LCD  
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Temp.:       ");
  //Simbolo grau
  lcd.write(223);
  lcd.print("C");
  lcd.setCursor(7,0);
  lcd.print(tempC);
  lcd.setCursor(0,1);
  lcd.print("L: ");
  lcd.setCursor(3,1);
  lcd.print(tempMin,1);
  lcd.setCursor(8,1);
  lcd.print("H: ");
  lcd.setCursor(11,1);
  lcd.print(tempMax,1);
  delay(3000);
}

DS18B20 Arduino

Se você quiser, pode usar este circuito sem o display, já que as informações também são enviadas para o serial monitor. Neste caso, além das informações de temperatura atual, mínima e máxima, temos também a informação de quantos sensores foram encontrados no barramento e qual o endereço do sensor:

Serial Monitor DS18B20

 Gostou? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

232 Comentários

  1. Olá professor,

    Entendi que o símbolo grau o senhor precisou digitar na função o número 223. Gostaria de saber porque é esse número e se existe uma tabela contendo os demais.

    Desde já muito obrigado e parabéns pelo projeto.

    1. Olá Victor,

      É tabelado no controlador do display, que em geral é o HD44780.

      Você consegue conferir a tabela no datasheet do componente: https://www.crystalfontz.com/controllers/Hitachi/HD44780/97/
      223 é a forma decimal do código binário, que no caso do símbolo de graus é 11011111.

      Abraços!
      Vinícius – Equipe MakerHero

  2. Esse sensor tem a mesma escala linear que o LM35, de 10mV/°C?

    1. Olá,

      Não, esse sensor tem saída digital pelo protocolo OneWire, ele não é saída linear analógica como o LM35

      Abraços!
      Vinícius – Equipe MakerHero

  3. OLA
    O 18B20 NÃO ESTA FUNCIONANDO NO ARDUINO UNO.
    ESTA MEDINDO SEMPRE 85.00 GRAUS, SE RETIRAR O PINO, MEDE -127.00.
    JA TENTEI TROCAR OUTRAS PORTAS: 2, 3, 9…, NADA!
    COMPREI OUTRO SENSOR NOVO… A MESMA COISA.
    DETALHE, O 18B20 ANTIGO ESTAVA RODANDO PERFEITAMENTE NUM MC PIC 18F4520.

    1. Olá,

      Você colocou o resistor de pull-up conforme o esquemático?

      Chegou a testar o antigo com o Arduino Uno e o novo com o PIC?

      Abraços!
      Vinícius – Equipe MakerHero

      1. Obrigado por responder
        Esta funcionando agora. Na verdade o problema estava nas bibliotecas!
        Eu as deletei, e reinstalei, agora esta tudo, ok.
        Obrigado pessoal.

        1. De nada, que bom que deu certo!

          Abraços,
          Vinícius – Equipe MakerHero

  4. Boa tarde !
    comprei estes componentes ai com vcs, montei funcionou direitinho…

    mas acrescentei uma placa shield e estou fazendo um projetinho para salvar em banco de dados mysql.

    ele salva as informações no banco de dados, mostra da tela do serial, mas no display ele não mostra nada….
    pode haver alguma incompatibilidade ou é alguma caca na programação, rsrsrs

    obrigado
    Vagner

    1. Ja achei o problema…
      A Shield utiliza as entradas 10, 11, 12, 13.

      Nas quais pelo projeto desta esta utilizando para o display….

      Preciso de apenas mais uma ajuda, rsrsrs
      como faço para este projeto acessar uma URL em um servidor web interno..
      onde fiz um script para enviar uma mensagem no telegram…

      Abraço e obrigado

    2. Olá Vagner!

      Tente utilizar um código conhecido que comande apenas o display com a tua montagem, assim dá pra isolar se é programação ou alguma incompatibilidade.

      Acredito ser mais provável que seja algo na programação, mas não descartaria uma incompatibilidade.

      Abraços!
      Vinícius – Equipe MakerHero

      1. Ja achei o problema…
        A Shield utiliza as entradas 10, 11, 12, 13.
        troquei as entradas para a 8 e 9 e esta funcionando…
        preciso de uma ajuda apenas para acessar uma URL, em um servidor www, interno onde irá disparar um script, mas não sei como faze-lo, podem dar uma dica ?

        abraço

        1. Olá Vagner!

          No caso seria o Arduino acessando a URL para disparar um script dentro do servidor, é isso?

          Encontrei estes tutoriais aqui que talvez te ajudem: https://arduinogetstarted.com/tutorials/arduino-http-request

          Abraços!
          Vinícius – Equipe MakerHero

  5. Bom dia !

    não estou conseguindo ver as imagens nesta pagina..
    poderiam acertar isso..

    estou comprando as peças para testar este circuito..

    obrigado

    1. Olá Vagner!

      Imagens corrigidas, pedimos desculpas pelo transtorno.

      Abraços!
      Vinícius – Equipe MakerHero

  6. O estranho é que meu projeto com estes sensores (usando 2 ligados ao mesmo fio) as vezes marca -127, as vezes marca uma valor diferente a baixo do esperado. Mesmo assim ele sempre retorna com a casa decimal entre 0 e 5 tipo 20.5 ou 20.0, nunca quebrado.

    Se alguém souber como resolver, agradeço a ajuda.

    1. Olá Abioluz!

      Tente com um conectado de cada vez e verifique os endereços deles.
      Apesar de baixa, existe a possibilidade de ambos terem os mesmo endereço e estarem interferindo entre si.

      Quanto ao retorno, você está realizando a leitura e escrita como no post?

      Abraços!
      Vinícius – Equipe MakerHero

  7. Bom dia, tem algum modelo semelhante que consigo uma temperatura maior até uns 150 ou 200 graus

    1. Olá Aphio,

      Há este sensor aqui, que suporta até 450 °C
      https://www.makerhero.com/produto/sensor-de-temperatura-pt100-a-prova-dagua/

      Abraços!
      Vinícius – Equipe MakerHero

  8. Oi Adilson
    Preciso fazer algo para ler 4 unidades dessas ao mesmo tempo. Voce pode me ajudar? Sou amador mesmo.
    Grato

  9. Consido utilizar 4 sensores desse ao mesmo tempo, para medir a variação de temperatura em um mesmo ambiente?? A idéia é criar um data logger dessas informações durante um determinado tempo.

    1. Guilherme,

      Em tese seria possível sim, tendo em vista que os dados são extraídos dos pinos digitais.

      Abraços!
      Diogo – Equipe MakerHero

  10. Gostei do prog exemplo, pois dar a dica de alguns processos da biblioteca. Favor informar onde consigo todos os orocessos existentes na lib OneWire e na lib DallasTemperature.

    1. Otacílio,

      Basta verificar o repositório desses bibliotecas para analisar o código e estrutura delas 🙂

      Abraços!
      Diogo – Equipe MakerHero

  11. Boa noite , obrigado pelas Aulas de programação e projetos.

  12. Olá, projeto top, me diga como colocar mais dois sensores no mesmo projeto.

    1. Fernando,

      Só precisa duplicar as linhas em que você lê o sinal do sensor, e colocar o fio de sinal em ua outra portal digital da placa!

      Abraços!
      Diogo – Equipe MakerHero

  13. Oi, boa tarde!

    Estou criando um projeto para alarme via SMS de acordo com a temperatura.

    Exemplo: caso a temperatura fique acima de X°C um sms é enviado para o telefone xxxxxxx.

    Tenho os seguintes componentes:

    Arduino nano v3.0 atmega328p
    Sim800l GPRS GSM
    DS18b20 sensor de temperatura com terminal adaptador para arduino

    Estou com dificuldades para criar o código que deve ser usado…

    Pode me ajudar? Já pesquisei em várias páginas e o que mais se aproxima é o seu projeto 11… mas como eu faço para incluir o Sim800l para que me envio um sms a cada 10 minutos se a temperatura ficar acima do que deveria?

    Espero que possa me ajudar…
    Obrigado,
    Pitchon Borges

    1. Pitchon,

      Dê uma conferida nesse link: https://www.arduinoecia.com.br/controle-arduino-sms-modulo-gsm-sim800l/
      Aí tem o código de como conectar, então é só dar uma adaptada pras suas necessidades 😉

      Abraços!
      Diogo – Equipe MakerHero

      1. Gostaria de colocar uma raspberry em paralelo para mostrar atemperatura além do LCD pelo arduino também no dashboard, como poderia pegar o sinal no arduino?

  14. Pessoal, experimentei colocar dois sensores DS18B20 iguais utilizando o mesmo pino, pois a biblioteca OneWire permite fazer o endereçamento distinto entre sensores. No setup consigo detectar ambos sem problemas:

    if (!sensors.getAddress(sensor1, 0))
    Serial.println(“Sensor 01 nao encontrado!”);
    else { // Mostra o endereco do sensor encontrado no barramento
    Serial.print(“Endereco sensor 01: “);
    mostra_endereco_sensor(sensor1);
    Serial.println();
    }
    if (!sensors.getAddress(sensor2, 1))
    Serial.println(“Sensor 02 nao encontrados!”);
    else { // Mostra o endereco do sensor encontrado no barramento
    Serial.print(“Endereco sensor 02: “);
    mostra_endereco_sensor(sensor2);
    Serial.println();
    }

    E no loop faço a leitura separada dos dois sensores:
    // Le a informacao do sensor
    sensors.requestTemperatures();
    float tempC1 = sensors.getTempC(sensor1);
    float tempC2 = sensors.getTempC(sensor2);

    Ambos detectam se a temperatura aumenta ou diminui, mas de forma lenta… Um termistor detecta bem mais rápido!

    O problema é: mesmo eles estando lado a lado, a leitura de sensor1 é quase 3 graus maior do que de sensor2. Uma diferença um tanto grande considerando o mesmo ambiente.

    É melhor colocar em pinos separados? Mudar o resistor pull-up? Pode ser defeito em um dos sensores?

    1. Cezar

      Faça o teste em pinos separados para verificar se essa diferença é devido a algum conflito interno ou configuração do sensor. Às vezes é necessário fazer uma calibração no sensor 😉 https://www.instructables.com/id/Calibration-of-DS18B20-Sensor-With-Arduino-UNO/

      Abraços!
      Diogo – Equipe MakerHero

  15. Olá

    Meu projeto trabalha com a leitura de temperatura utilizando o Max6675 para acionar um triac BTA 16 via detecção de passagem por zero utilizando interrupção do arduino para ligar uma resistência que aquece água. O problema é que a leitura do Max6675 é muito lenta afeta o funcionamento da interrupção gerando pequeno tempo de queda de potência a cada leitura da temperatura.
    Com o DS18B20 está leitura seria mais rápida?

    1. Vitor,

      Seria interessante você comparar os datasheets de ambos os componentes para decidir o que desejas. Após uma olhada relativamente rápida, o MAX675 é mais rápido que o DS18B20 para conversão da temperatura.

      Abraços!
      Diogo – Equipe MakerHero

  16. Estou com dificuldade rodei este programa funcionou certo leitura perfeita, mas após ligar o outro sensor no mesmo endereço estou usando porta 2 arduino mega, rodou o programa sem problemas mostra que encontrou 2 sensores me passa o numero de apenas um e como vou conseguir ler o endereço do segundo e como ler o valor de temperatura dele, como ficaria a linha de programa tentei mas não consegui pode me ajudar. Obrigado pela atenção.

    1. Wagner,

      Basta você replicar algumas partes do código. Como a especificação dos pinos, e então a leitura da temperatura. Na parte da leitura, você deve colocar o pino em que está o novo sensor!

      Abraços!
      Diogo – Equipe MakerHero

  17. Como ficaria o código, caso eu colocasse um led para acender quando atingisse a temperatura miníma e outro led para acender quando atingisse a temperatura máxima?

    1. Gean,

      Antes da linha Mostrar dados no LCD, você pode fazer o seguinte:

      if (tempC == tempMin)
      digitalWrite(pino_LED) // Esse pino_LED é uma variável que você adiciona no setup()!!

      if (tempC == tempMax)
      digitalWrite(pino_LED)

      Abraços!
      Diogo – Equipe MakerHero

  18. boa tarde parabéns teria como colocar isto para enviar para um celular as informações da temperatura em tempo real via wi-fi ou via chip do celular com um programa criado para androide, obrigado

    1. Valter,

      Você teria que usar um módulo WiFi como o ESP8266 para mandar para a internet, além de claro, criar o app para receber essas informações.

      Abraços!
      Diogo – Equipe MakerHero

  19. Estou tendo este problema ao tentar replicar a solução.

    C:\Program Files\Arduino\libraries\OneWire/OneWire.h:108:2: error: #error “Please define I/O register types here”

    1. Hudson,

      Tente atualizar a sua biblioteca OneWire. Para isso, vá em:
      Sketch > Incluir biblioteca > Gerenciar Bibliotecas;
      Na barra de pesquisa, procure por OneWire;
      Aperte na biblioteca em questão > Clique em Update;

      Veja se deu certo e manda o resultado pra gente 🙂

      Abraços!
      Diogo – Equipe MakerHero

  20. Olá, boa noite.
    Eu estava utilizando o DS18B20 à prova d’água com cabo e estava funcionando perfeitamente no meu circuito. Comprei o sensor, sem o cabo e sem a proteção, e ao colocar no mesmo circuito, o circuito passou a apresentar um comportamento estranho, não detectando corretamente quando um botão é pressionado. Vocês sabem o que poderia ter de diferente entre os dois sensores? Estou usando o resistor de 4k7 entre o pino de dados e a alimentação. E estou utilizando o NodeMCU.
    Obrigada

    1. Amanda,

      O que acontece quando aperta o botão? Pode detalhar seu circuito?

      Abraços!
      Diogo – Equipe MakerHero

      1. Olá Diogo,

        Quando aperto o botão, as vezes detecta que o botão foi apertado e as vezes não. No circuito tenho 3 push button que verifico de tempos em tempos se foram pressionados e também verifico por quanto tempo foram pressionados e tenho também o sensor de temperatura e um display oled com comunicação i2c.

        1. Amanda,

          Dependendo de como você está fazendo essa verificação, o que pode estar acontecendo é que, ao apertar o botão, o programa pode não “estar” na parte em que ele verifica se está pressionado, então parece que não ocorreu nada.

          Você pode enviar seu código para dar uma olhada? Mande lá no nosso fórum para facilitar 🙂

          Abraços!
          Diogo – Equipe MakerHero

          1. Diogo, descobri o problema.
            Era a resolução dos sensores que estava diferente, e como a função fica aguardando a conversão, demorava mais tempo para converter e o código ficava travado.
            Vou alterar para não ficar aguardando a conversão.
            Obrigada!

          2. Ahá! Foi quase o que eu falei, ein?! Haha!
            Que bom que resolveu!

            Abraços!
            Diogo – Equipe MakerHero

            Diogo Zimmermann
  21. Eu consigo adicionar um led pra temperatura máxima e outro pra mínima?

    1. Gean,

      Sim, é possível. Basta modificar o código colocando essas condições 🙂

      Abraços!
      Diogo – Equipe MakerHero

  22. Boa noite, gostaria de saber se o sensor DS18B20 (REF: 9SS09) pode ficar em contato com água para beber por exemplo, ou é necessário usar um poço térmico? Obrigado.

    1. Catiuço

      Acredito que por questões de higiene, é mais interessante usar um poço térmico.

      Abraços!
      Diogo – Equipe MakerHero

  23. Boa tarde eu gostaria de usar 6 sensores em locais diferentes , tem como mostrar a leitura dos 6 no display

    1. Olá, Marcelo,

      Todos de uma vez não teria espaço no display, mas se for alternando os valores, é possível sim.

      Abraços!
      Diogo – Equipe MakerHero

  24. Olá, boa tarde. Tudo bem?

    Saberia me informar qual o máximo de sensores (DS18B20) que consigo “colocar” na mesma porta de um arduino nano?

    Grato pela atenção

    1. Matheus,

      Para poder receber as medidas distintas, deve ser um por pino.

      Abraços!
      Diogo – Equipe MakerHero

  25. Existe algum sensor de temperatura semelhante, a prova dagua, que a saída seja analogica?

    1. Isabelli,

      Não possuímos.

      Abraços!
      Diogo – Equipe MakerHero

  26. boa tarde eu consigo fazer tudo mas não passa po lcd e um arduino mega e no pc recebos os valores da sonda

    1. Olá, Bruno,

      Poderia detalhar melhor seu problema?

      Abraços!
      Diogo – Equipe MakerHero

  27. Eu consigo fazer isso no simulador tinkcard ?

    1. Olá, Wallace!

      É possível sim, porém com um outro medidor de temperatura!

      Abraços;
      Diogo – Equipe MakerHero

  28. ola, eu utilizei meu sensor em um projeto de termostato ate chegar em 84 a 85 graus,tem algum problema levar o sensor a receber essa temperatura ?

    Anthony Gabriel Leite de Lima
    1. Olá Anthony,

      Não tem problema, a faixa de medição desse é -55°C a +125°C.

      Abraço!
      Rosana – Equipe MakerHero

  29. Olá, obrigado pelas dicas e programa. Trabalho com dois DS18B20 no mesmo barramento, tem alguma dica para eu fazer a leitura de embos os sensores? Seria para a construção de um psicrômetro, onde eu aferiria a umidade relativa pela diferença das temperaturas entre os dois. Obrigado

    RODRIGO CESAR LOPES DE OLIVEIRA
    1. Olá Rodrigo,

      Primeiro você precisa encontrar o endereço de cada um dos sensores que vai utilizar.
      Depois precisa fazer a leitura de cada um deles.

      Abraço!
      Rosana – Equipe MakerHero

  30. Olá Boa Tarde. Eu gostaria de saber se eu posso usar esse seu esquema no Fritzing?

    1. Olá Luciano!

      Não temos mais esse arquivo, mas você pode usar sim, sem problemas!

      Abraços!

      André – Equipe MakerHero

  31. Olá André. Eu precisaria ligar mais de um sensor, mais especificamente 4, mas no código postado aqui nesta página acima, eu não sei como fazer isso. Quando perguntam sobre dois sensores, enviam um link para dois sensores com um código totalmente diferente. Eu liguei os sensores conforme na Matéria desta página, ele diz que tem dois sensores ligados, mas um ele mede, o outro não sei como acessar . Você poderia me ajudar baseado no código postado aqui nesta página? Obrigado.

    1. Olá Rafael!

      Para ligar mais sensores o processo é um pouco diferente mesmo, o outro link é a forma mais simples de adicionar mais de um sensor. Sugiro dar uma olhada ali como é feito para identificar os endereços e apontar pro programa onde está cada sensor.

      Abraços!

      André – Equipe MakerHero

  32. Gente, meu lcd fica ligado mas n aparece nada!!! Me ajudem, por favor!!!

    1. Olá Marcos!

      No circuito você tentou ajustar o potenciômetro de contraste ?

      Abraços!

      André – Equipe MakerHero

  33. Adilson, gostaria de saber como programar uma pinagem no Arduíno para acrescentar uma função adicional (Acionar relê) para adicionar dispositivo para aquecimento da água e usar o Arduíno para manter a temperatura escolhida (Ligando e desligando o relê/dispositivo aquecedor)

    1. Olá Rogério!

      Você precisa definir um pino como saída e ligá-lo de acordo com a condição de temperatura. Esse post pode te ajudar:

      https://www.makerhero.com/blog/sensor-de-luz-ldr-com-rele/

      Abraços!

      André – Equipe MakerHero

    2. Olá Rogério!

      Você precisa definir um pino como saída e ligá-lo de acordo com a condição de temperatura. Esse post pode te ajudar:

      https://www.makerhero.com/blog/sensor-de-luz-ldr-com-rele/

      Sugiro você fazer um projeto apenas acionar o relé separadamente, antes de misturar os dois projetos.

      Abraços!

      André – Equipe MakerHero

  34. boa tarde neste sketch que vc encrementou colocando para acionar rele o meu esta dando este erro (stray ‘\342’ in program) na linha
    lcd.print(“H: “);

    1. Olá Marcelo!

      Você conseguiu fazer os dois funcionarem separadamente?

      Abraços!

      André – Equipe MakerHero

  35. Posso utilizar um resistor de 10k? Se eu utilizar um resistor com capacidade a mais, quais as consequencias? Como faço para saber em qual equipamento e qual resistor utilizar nos projetos com Arduino?

    1. Olá Urquiza!

      Pode usar um de 10 k sem problemas. Para resistores de pull-up no arduino normalmente se usa resistores de 3 k a 20 k.

      Para saber qual componente você vai usar no seu projeto é uma questão de procurar novos projetos, com o tempo você já vai se acostumando com o que é possível fazer com cada componente.
      Entender qual valor do resistor é uma questão de estudar circuitos elétricos mesmo.

      Abraços!

      André – Equipe MakerHero

  36. Jovem, eu consigo fazer essa montagem, usando um display com modulo i2C soldado???
    Teria como me ajudar nisso?

    1. Olá Guilherme!

      Consegue fazer sim. Basta mostrar no display i2C como é feito nesse post:
      https://www.makerhero.com/blog/medindo-corrente-e-tensao-modulo-ina219/

      Abraços!

      André – Equipe MakerHero

  37. Olá, me agradou bastante o conteúdo ministrado por vocês. Estou utilizando alguns de seus artigos como embasamento no meu projeto científico. Gostaria de saber se é possível me passarem as referências deste trabalho para eu fazer a citação e creditá-lo devidamente. Parabéns pelo trabalho.

    Desde já, grato.

    1. Olá Lucas!

      As referências são o nosso conhecimento técnico. Quando pegamos o código de outro lugar, sempre damos crédito.

      Abraços!

      André – Equipe MakerHero

  38. Dell seria o metro processo para raspberry pi

  39. Boa noite .
    Estou utilizando essa programaçao no meu boiller e ficou ótimo. Agora precisava fazer o recirculo de água nas tubulações mais nao sei nem por onde começar .queria acionar um relè sempre que a temperatura baixar de 37 graus e desligar em 45 .alguem pode me ajudar?

  40. Olá, qual a breadboard utilizada neste projeto? Não está na lista de materiais.
    Obrigado.

    1. Olá Leonardo!

      Provavelmente esta:

      https://www.makerhero.com/produto/protoboard-830-pontos/

      Abraços!

      André – Equipe MakerHero

  41. Muito bom o trabalho, pois tenho uma dúvida. Em vez de usar este sensor de temperatura posso utilizar o PT100? Preciso alterar o código do programa?

    1. Olá Matheus!

      Precisa alterar na parte em que ele adquire os valores de temperatura. Tirando isso, dá pra usar sim!

      Abraços!

      André – Equipe MakerHero

  42. Olá, observei que no anúncio do “Sensor de Temperatura DS18B20 Grove Prova D’água” (REF: 9SS83) é aconselhado evitar manter o sensor em temperaturas acima de 70 graus. Já o anúncio do “Sensor de Temperatura DS18B20 a Prova D’água” (REF: 9SS09) menciona apenas a faixa de medição de -55 a +125 graus. No caso desse segundo sensor, é seguro manter por horas na faixa dos 100 graus? Obrigado.

    1. Olá Valter!

      O problema, nesse caso, é o encapsulamento do sensor. É seguro manter o 9SS09 na faixa dos 100 graus. Só não recomendo utilizá-lo para alimentos.

      Abraços!

      André – Equipe MakerHero

  43. Estou usando um Mega e um display 20×4 e o sensor DS18B20 , fiz a ligação do esquema indicado ,porem no mega , so consigo visualizar no monitor serial .
    o que devo fazer , para a mensagem também aparecer no display
    grato

    1. Olá Sanchez!

      Você consegue fazer o display mostrar outras coisas?

      É um display que nem o do exemplo ou é um I2C?

      Abraços!

      André – Equipe MakerHero

  44. so consigo visualizar a temperatura no monitor serial , Estou usando um display 2004a lcd 20×4 o que devo fazer
    grato

  45. Boa noite,

    Como posso colocar 3 sensores em vez de apenas 1?

    1. Olá Douglas!

      É possível sim.

      Abraços!

      André – Equipe MakerHero

  46. Filipe,

    Montei todo o circuito conforme apresentado na sua publicação, porém, ao inserir o jumper no pino GND do Arduino, o mesmo desliga por completo (as luzes da placa do Arduino apagam). Além disso, ao abrir o ” Monitor Serial” da IDE do Arduino, o mesmo acusa que não foi detectado nenhum sensor.

    Alguma dica para que eu possa solucionar esse problema?

    Atenciosamente, Lucas.

    1. Olá Lucas!

      Parece que está ocorrendo algum curto na sua montagem.

      Sugiro:
      1) rever todas as conexões
      2) começar conectando tudo aos poucos até encontrar onde está o real problema

      Abraços!

      André – Equipe MakerHero

    2. Olá Lucas!

      Parece que está ocorrendo algum curto na sua montagem.

      Sugiro:
      1) rever todas as conexões
      2) começar conectando tudo aos poucos até encontrar onde está o real problema

      Abraços!

      André – Equipe MakerHero

  47. gostaria de medir a temperatura de uma panela cheia de óleo, vc acha que este sensor seria adequado???

    1. Olá Mateus!

      Se você vai esquentar o óleo, não acho que seja recomendado. Óleo quente passa facilmente de 100 ºC e o sensor mede até 125 ºC somente.

      Abraços!

      André – Equipe MakerHero

  48. Olá, boa noite. Como devo escrever o código para a utilização de dois ou mais sensores?

    1. Olá Luis!

      Você deve declarar os dois sensores separadamente. Em pinos diferentes também.

      Abraços!

      André – Equipe MakerHero

  49. Prezado Sr.

    Tenho placas de Beaglebone Black (BBB) que adquiri de vcs, gostaria de usar esse sensor neste computador.
    Vc teria outro programa que possibilite usar este sensor com a BBB?
    Já me falaram que esse sensor não funciona bem na BBB, Isto é verdade?

    Aguardo resposta.

    Muito grato

    Washington

    1. Olá Washington!

      O sensor usa a comunicação 1-wire, que a placa beaglebone suporta.

      Nunca vi em nenhum lugar falando que o sensor não funciona bem com a beaglebone.

      Abraços!

      1. Alo Andre Rocha

        O procedimento para funcionar o sensor e a BBB é o mesmo que foi apresentado neste blog para arduino?

        1. Washington

          A questão dos pinos é parecida (precisa por o resistor de pull-up).

          A programação é diferente.

          Eu achei esse programa na internet, não testei ele:

          Copyright (C) 2012 Texas Instruments Incorporated – http://www.ti.com/
          *
          * This program is free software; you can redistribute it and/or modify
          * it under the terms of the GNU General Public License version 2 as
          * published by the Free Software Foundation.
          *
          * Modified by Russell Senior from the weather cape’s DTS file.
          * Minor formatting by C W Rose.
          */
          /dts-v1/;
          /plugin/;

          / {
          compatible = “ti,beaglebone”, “ti,beaglebone-black”;
          part-number = “BB-W1”;
          version = “00A0”;

          exclusive-use = “P8.11”;

          fragment@0 {
          target = ;
          __overlay__ {
          bb_w1_pins: pinmux_bb_w1_pins {
          pinctrl-single,pins = ;
          };
          };
          };

          fragment@1 {
          target = ;
          __overlay__ {
          onewire@0 {
          status = “okay”;
          compatible = “w1-gpio”;
          pinctrl-names = “default”;
          pinctrl-0 =

          gpios = ;
          };
          };
          };
          };

          1. Muito grato, Andre

            Washington Melo
  50. Olá, meu programa está dando o seguinte erro:

    Arduino: 1.6.12 (Windows 10), Placa:”Arduino/Genuino Uno”

    C:\Users\Usuário\Desktop\metro\metro.ino: In function ‘void setup()’:

    metro:40: error: ‘mostra_endereco_sensor’ was not declared in this scope

    exit status 1
    ‘mostra_endereco_sensor’ was not declared in this scope

    Como posso corrigir isso?

  51. Aqui não encontra o sinal, conectei normal porém não reconhece. Será que o sensor está ruim?

    1. estou tendo o mesmo problema, conseguiu resolver?

  52. Olá, teria onde encontrar esse projeto no fritzing?

  53. Esse sensor é livre de BPAs e outras substâncias cancerígenas? Estou pensando em usar em uma chaleira, mas estou com receio de que ele batize meu chá com esse revestimento de borracha.

  54. Caro Adilson, boa noite.

    Recentemente adquiri por intermédio da MakerHero o sensor DS18B20 e minha pergunta é a seguinte:

    Até quantos metros de cabo posso usar no referido sensor ?

    Um abraço.

  55. Alguém pode me ajudar, o programa não localiza o sensor

    1. Caro Abner, boa tarde.

      Deu certo a dica que lhe passei ?

  56. Alguém poderia me ajudar é que fiz todo esse processo, mais não tenho o led então coloquei apenas para mortrar no monitor mas o programa diz que não encontra nenhum sensor 🙁

  57. Boa tarde.
    Gostaria de saber se esse sensor pode ficar submerso?E até que profundidade?

  58. Bom dia. Quando compilei esse código para a placa do Arduino, a temperatura só para assim:

    25.00°C
    25.50°C
    26.00°C

    As temperaturas só aparecem com os valores arredondados.

  59. Ótimo post, mas tenho uma dúvida, como seria o programa utilizando dois sensores?

  60. O que eu comprei veio com as cores de alimentação invertidas. O vermelho para negativo e preto para positivo, mas depois de inverte-las tudo funcionou perfeitamente.

  61. Boa noite, comprei a alguns dias, o sensor DS18B20, portanto as cores não batem com o proposto acima… As cores vieram: vermelho, marrom e laranja… Poderia me informar sobre?

  62. Olá, veja por favor se pode me ajudar:
    Eu estou conseguindo obter as temperaturas do termômetro para imprimir na serial. Mas se tento fazer qualquer conta com tempC:

    se faço
    float dif = tempC – 20;

    recebo:
    exit status 1
    invalid operands of types ‘float [3]’ and ‘float’ to binary ‘operator-‘

  63. Sensor ds18b20 + shield + html
    Não estou conseguindo utilizar esse sensor para imprimir uma pagina html
    alguém poderia me dar uma força, segue abaixo o codigo:

    #include
    #include
    #include
    #include
    #include
    #include //biblioteca para o shield Ethernet
    String readString;
    // Fio de dados é plugado ao pino 3 do Arduino
    #define ONE_WIRE_BUS 10
    #define TEMPERATURE_PRECISION 12
    float tempC, tempF;
    // Prepara uma instância de OneWire para se comunicar com qualquer dispositivo 1-Wire (não
    // apenas com CIs de temperatura Maxim/Dallas)
    OneWire oneWire(ONE_WIRE_BUS);
    // Passa o endereço da instância oneWire ao Dallas Temperature.
    DallasTemperature sensors(&oneWire);
    // arrays para armazenar os endereços dos dispositivos

    DeviceAddress botsensor = { 0x28, 0xFF, 0x43, 0x63, 0x82, 0x16, 0x04, 0xFD };// endereçamento do sensor 1
    DeviceAddress topsensor = { 0x28, 0x44, 0x80, 0x03, 0x00, 0x00, 0x80, 0x78 };// endereçamento do sensor 2
    //DeviceAddress midsensor = { 0x28, 0x59, 0xBE, 0xDF, 0x02, 0x00, 0x00, 0x9F };// endereçamento do sensor 3
    byte mac[] = { 0x00, 0x1F, 0x3C, 0xA3, 0xED, 0x7C };
    byte ip[] = { 192, 168 ,0, 177 };
    // Inicia o servidor na porta 80
    EthernetServer server(80);
    void setup() {
    // Inicia a ethernet e o servidor
    Ethernet.begin(mac, ip);
    server.begin();
    // Inicaliza a biblioteca sensors
    sensors.begin();
    // define a resolução
    sensors.setResolution(botsensor, TEMPERATURE_PRECISION);
    sensors.setResolution(topsensor, TEMPERATURE_PRECISION);
    }
    // função para obter a temperatura de um dispositivo
    void getTemperature(DeviceAddress deviceAddress) {
    tempC = sensors.getTempC(deviceAddress);
    tempF = DallasTemperature::toFahrenheit(tempC);
    }
    void loop() {
    sensors.requestTemperatures();
    // escuta a entrada de clientes
    EthernetClient client = server.available();
    if (client) {

    boolean BlankLine = true;
    while (client.connected()) {
    if (client.available()) {
    char c = client.read();
    // Se a linha estiver em branco e o fim da linha for um caractere newline ‘\n’ = fim da
    // solicitação HTTP
    if (c == ‘\n’ && BlankLine) {
    getTemperature(botsensor);
    client.println(“HTTP/1.1 200 OK”); // Resposta HTTP padrão
    client.println(“Content-Type: text/html\n”);
    client.println(“\n”);
    client.println(“Arduino Web Server”);
    client.println(“\n”);
    client.println(“Arduino Web Server”);
    client.println(“Internal Temperature”);
    client.println(“Temp C:”);
    client.println(tempC);
    client.println(“”);
    client.println(“Temp F:”);
    client.println(tempF);
    client.println(“”);
    getTemperature(topsensor);
    client.println(“External Temperature”);
    client.println(“Temp C:”);
    client.println(tempC);
    client.println(“”);
    client.println(“Temp F:”);
    client.println(tempF);
    client.println(“”);
    break;
    }
    if (c == ‘\n’) {
    // Iniciando uma nova linha
    BlankLine = true;
    }
    else if (c != ‘\r’) {
    // A linha atual tem um caractere nela
    BlankLine = false;
    }
    }
    }

    delay(10);
    // Fecha a conexão
    client.stop();
    }
    }

  64. É possível ligar simultaneamente 4 sensores com este mesmo código?

    1. sim cara , normal , eles podem ser ligados na mesma porta

  65. Como ligar mais de um sensor do mesmo modelo, é só alimentar da mesma forma e linha o fio de dados junto ao de dados do primeiro sensor???

    1. sim cara , é so ligar na mesma porta

  66. Parabéns pelo post…

  67. Olá, por que precisa ser um sensor de 4,7K? Não posso usar de 1K ou de 10K? Usei de ambos e aparentemente dá a leitura! Muito obrigado!

  68. O meu só esta funcionando pelo USB

  69. amigos, podem me informar até que tamanho de cabo vcs conseguiram bons resultados, sem uso de nenhum sistema ou circuito adicional de amplificação?

    1. Tentei com um cabo blindado de 2 metros metros e não funcionou, não tentei 1 metro porque não me adiantaria.

  70. Ola. consigo ter temperaturas negativa?

  71. programação é somente copiar e colar que funcionará, ou tem outro processo ?

    1. imbecil, tem que compilar.

    2. Drizzin, eu entendi o que você quis perguntar, deixa esse débil mental com a ignorância dele que não soube interpretar uma pergunta. Provavelmente você já viu que não é só copiar e colar, você precisa também baixar as bibliotecas e colocar elas na pasta libraries do arduino, depois disso, basta compilar e fazer upload pro arduino.
      Diego otário!!

  72. Pessoal, fica como aviso, por alguma razão estranha o OneWire não funciona no pino 2 do Arduino UNO, se alguém souber a razão favor informar. Testei nos pinos 3, 11, 12 e 13 e funciona ok.
    Meu setup foi um Arduino UNO ligado num LCD Keypad shield.

    1. No meu caso também não funcionou nos pinos 2 e 3. Funcionou no pino 11. Estou usando arduino Leonardo.

      1. Posteriormente se mostrou algum mau contato, pois passou a funcionar no pino 2. Como tenho o Arduino Uno original em DIP com soquete, imagino que tinha tido um mau contato no soquete, pois o fio estava soldado e nem mexi nele.

  73. Oi Adilson, gostaria de usar esse mesmo skt para o seguinte: há uma mangueira PEX sob o piso de um cômodo da casa (piso radiante) e, através dela, deve circular água quente, que vem diretamente do boiler. Para tal, será utilizada uma bomba de circulação, dessas pequenas. A recomendação das empresas é que a água entre no piso numa temperatura entre 50 e 60 graus, para pisos cerâmicos. Assim, seria relativamente fácil ativar a bomba. No entanto, quero impor duas condições para ativar a bomba. Utilizando dois sensores (um submerso na água do boiler, e outro medindo a temperatura ambiente), a bomba só ligaria se o sensor da água registrasse que a temperatura dela é igual ou maior que 50 graus AND (&&) o sensor de temperatura ambiente registrasse temperatura igual ou menor que 17 graus. Isso é possível? Pensei que os sensores seriam o DS18B20 e o DHT22. Li sobre o uso de histerese para que não ocorram situações de instabilidade de leitura que provoquem um constante liga e desliga do circuito, mas não sei como juntar tudo em um código consistente. Poderia me dar um help? Os posts aqui do blog me ajudam muito!!

    1. Cezar,

      Ceratamente é possível, até mesmo utilizando dois DS18B20. Você ja tem o circuito montado? Escreveu algum código?

      Sds,
      Jean Garcia.

    2. Boa tarde Cézar,

      É possível sim, e creio que nesse caso o DS18B20 e o DHT22 dariam conta do recado, dependendo da precisão que vc necessita. Tente juntar o que você precisa em um código e podemos ajudar caso apareça alguma dúvida.

      Abraço!

      Adilson – Equipe MakerHero

  74. Bom dia,
    Como faço para acrescentar outro sensor igual na mesma porta do arduino?
    Como vou fazer a leitura de cada sensor individualmente?

    Obrigado.

  75. Eu preciso controlar a temperatura da geladeira na qual desligue ao atingir certa temperatura e ligue novamente se a temperatura ficar baixa. É o mesmo que o TIC-17 faz para controlar temperatura.

  76. Eu comprei esse sensor e liguei ele da maneira que está descrita… no entanto, quando eu coloco na porta A3 ele diz que não foram encontrados sensores e a leitura dá 0. Na porta A0, alterando o código, também não são encontrados sensores e a leitura dá -127.

    Algo que eu possa ter feito de errado?

    1. Boa noite amigo, voce ligou o resistor de pull up de alguma forma indevida. Garanta que um de seus terminais estaja na alimentação e o outro esteja na entrada do arduino e no fio amarelo do sensor.
      Espero ter ajudado!!!

      RAFAEL HENRIQUE DE SOUZA VIEIRA
  77. Olá. Em qual o tempo de resposta entre a temperatura mínima e máxima do ds18b20?

  78. Amigo,

    Posso ligar o senssor de temperatura DS18B20 no W1209?

  79. Como faço para mudar a resolução de leitura do sensor , sei que ele le de 8 a 12 bits , como faço para mudar?

  80. Olá, parabéns pelo projeto, muito útil. Estou apanhando para salvar as informações do sensor de temperatura no computador, seja em csv ou diretamente no excel. Estou entando aprender a usar o PLX-DAQ, mas sem muito sucesso.

    Alguma sugestão?

  81. Como ficaria a programaçao para os dados aparecer no computador, na tela do software da arduino?

  82. Como usar esse sensor sem bibioteca?

  83. Olá, agradeço por este post, pois ele ira me ajudar em alguns projetos na minha faculdade, mas tenho algumas duvidas, poderiam me informar onde posso achar para comprar esse resistor pull-up de 4,7K estou com dificuldades nesta parte onde devo comprar ele se vocês poderem me informar eu ficaria agradecido e aguardo a resposta de vocês e continuem com esta postagens que nos ajuda muito.
    Obrigado.

    João Victor Firmino Garcia
    1. Boa tarde João,

      Você encontra esses resistore aqui mesmo na loja MakerHero: https://www.makerhero.com/pd-282c1d-resistor-4-7k-1-4w-x20-unidades.html

      Abraço!

      Adilson – Equipe MakerHero

  84. Bom dia,

    Como posso colocar leds para sinalizar a temperatura ideal da água?

    1. Olá.
      Primeiramente tente criar um projeto de acender e apagar leds, como esse:
      http://labdegaragem.com/profiles/blogs/tutorial-como-acender-leds-pelo-serial-monitor-com-arduino.

      Após isso, tente criar um projeto que leia as informações passadas pelo sensor de temperatura.

      Quando entender como acionar um led e ler as informações desse sensor, basta adicionar um if no código do sensor e colocar o comando que você deseja.

      Por exemplo:

      Digamos que a temperatura boa é abaixo de 25 graus, acima disso ruim.
      O led verde significa bom, e o vermelho uma temperatura ruim.

      if (temperatura =25) { // se a temperatura for maior ou igual a 25, ele faz o seguinte:
      digitalWrite(ledverde,LOW) // acendemos o vermelho e apagamos o verde
      digitalWrite(ledvermelho,HIGH)
      }

      // FIM

      Vale lembrar que o programa apresentado acima com a tela de lcd é um pouco complexo para quem está começando agora.
      Tente criar um que acende o led, e outro que receba a temperatura do sensor.
      Quando conseguir fazer os dois, fica simples junta-los.

      Posso fazer pra você sem problema algum, mas seria interessante que você tentasse com as dicas que dei. Só mexendo que se aprende a programar =)

      1. Errata: o primeiro if onde está if (temperatura =25) deve se colocar if (temperatura ==25)

  85. saludos , disculpa tengo el arduino 1.6.5 y el sensor ds18b20 , el problema es que no toma la lectura del sensor .
    compila bien y se carga bien el problema es que no muestra la lectura del sensor

  86. Olá, como faço pra medir temperatura negativa com esse sensor?

  87. Meu Display liga. Fica azul. Mas nao mostra nada.
    Onde seria o erro?

    1. Boa tarde Enan,

      No circuito você tentou ajustar o potenciômetro de contraste ?

      Abraço.

      Adilson – Equipe MakerHero

      1. Oi Adilson! Não sei como fazer isso. Se possivel. me explica? Obrigado!!! Enan COrreia

        1. Bom dia Enan,

          Utilize o potenciômetro para ajuste do contraste, conforme consta no circuito deste post. Girando o potenciômetro, você aumenta ou diminui o contraste e poderá ver os caracteres no display.

          Abraço!

          Adilson – Equipe MakerHero

          1. Provavelmente meu potenciômetro esta com probelma.
            Muito obrigado pela atenção!!!

  88. Olá. Gostaria de saber se posso aumentar o tamanho do cabo do sensor e se terei que compensar de alguma forma o aumento da resistência.

    Obrigado.

    1. Boa tarde William,

      Não temos informações precisas sobre isso, pois vai depender muito do tipo de cabo, mas neste link você encontra uma discussão sobre o assunto com algumas sugestões.

      Abraço!

      Adilson – Equipe MakerHero

      1. “Os condutores telefônicos apresentaram os melhores desempenhos devido às suas características elétricas, principalmente a capacitância, serem mais favoráveis à transmissão de dados de temperatura por meio do sistema 1-wireTM.”
        (ARTIGO CIENTÍFICO de Doutorando em Engenharia Agrícola)

        Fonte: http://www.scielo.br/scielo.php?script=sci_arttext&pid=S0100-69162005000100004

  89. Por que existe essa temperatura máxima e mínima? E por que elas se divergem tanto em alguns casos?

    Agradeço desde já !

    1. Bom dia Mateus,

      O display mostra a temperatura máxima que o sensor mediu, e também a temperatura mínima. Colocamos isso apenas como sugestão de código.

      Abraço!

      Adilson – Equipe MakerHero

  90. Bom dia!

    Poderiam me tirar um dúvida por favor?
    Por acidente liguei invertido o sensor ds18b20 (liguei o positivo no negativo, e vice-versa). Agora meu sensor apenas registra a temperatura como O °C..
    Independente se a água estiver bem quente.
    Será que posso ter queimado meu sensor ?
    Obrigado

    1. Bom dia Thadeu,

      Provavelmente sim. :/

      Abraço!

      Adilson – Equipe MakerHero

  91. Que modificações tenho que fazer para alterar o display normal para um com módulo I2c?

    1. Bom dia Renan,

      Você pode utilizar as informações do link abaixo e adicionar o DS18B20 posteriormente:

      http://www.arduinoecia.com.br/2014/12/modulo-i2c-display-16×2-arduino.html

      Abraço!

      Adilson – Equipe MakerHero

  92. Boa noite!

    Gostaria de saber, se é possível utilizar este sensor como Phmetro.

    Muito obrigado!!

    1. Bom dia Thadeu,

      Não, este sensor mede apenas a temperatura.

      Abraço!

      Adilson – Equipe MakerHero

  93. Olá!
    Gostaria de saber se esse sensor pode ser usado mergulhado na água, no caso para medir a temperatura da água?
    Obrigada.

  94. Boa noite,

    Excelente o code funcionou perfeitamente, parabéns!!!

    como ƒaço para utilizar 2 sensores e qual seria o code para utilizar 2 sensores? e como faço para isolar apenas o Valor da temperatura em tempo real, sem a máxima e mínima para utilizar em uma automação de uma bomba de circulação? Exemplo, se a temperatura do sensor 1 for maior que a do sensor 2 liga o rele…

    chequei o tutorial que voce indicou acima “Neste link você tem um exemplo para ligação de 2 sensores DS18B20: http://www.arduinoecia.com.br/2013/04/sensor-de-temperatura-ds18b20-arduino.html

    agora preciso isolar para trabalhar apenas com o valor da temp….

    obrigado.

  95. Boa tarde.

    Existe algun tutorial para utilizar este sensor com o PIC16F877?

    Obrigado.

    1. Boa tarde Vandré,

      Neste link tem o que você precisa: http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/pic/help/onewire_library.htm

      Abraço!

      Adilson – Equipe MakerHero

  96. Queria saber como ficaria o código com dois sensores, e como eles ficariam logados no arduino preciso fazer o controle de equipamentos de desidratação de frutas.

    1. Boa tarde Gustavo,

      Neste link você tem um exemplo para ligação de 2 sensores DS18B20: http://www.arduinoecia.com.br/2013/04/sensor-de-temperatura-ds18b20-arduino.html

      Abraço.

      Adilson – Equipe MakerHero

  97. como posso fazer para utilizar e sensores (interior/exterior )?
    code:

  98. Eu queria saber se e possível mudar a escala “Celsius” para uma escala pessoal, usando meus valores de medição que vai de 40 a 80. ?

    1. Para esse tipo de caso, vc pode fazer o seguinte: se a temperatura máx que quero em C é X e ela equivale a 40 (diferença entre seu máx e seu min) na minha escala, então 10°C será um valor e a esse valor encontrado vc soma quarenta: 0°C seria 0 (da regra de 3) + 40 = 40 (seu mínimo). Espero ter ajudado.

  99. Boa noite colegas! estou usando a IDE 1.6.6 e ao compilar está dando o seguinte erro:
    C:UsersfagnerDocumentsArduinolibrariesdallastempDallasTemperature.cpp:9:26: fatal error: WConstants.h: No such file or directory

    #include “WConstants.h”

    ^

    compilation terminated.

    exit status 1
    Erro compilando.

  100. ligando no arduino due, que tem entradas/saidas em 3,3v preciso alterar algo

    1. Boa tarde Douglas,

      O sensor funciona com tensões entre 3 e 5,5V, pode ligar no Due sem problemas, mas faça a alimentação com 3.3V.

      Abraço.

      Adilson – Equipe FILIEFLOP

  101. Boa tarde. Gostaria de saber se posso aumentar o tamanho do cabo do sensor. E até quantos mts posso fazer isso, sem alterar o modo de funcionamento.

    Tenho o seguinte projeto em mente. Montar um sistema de monitoramento de cameras frias.
    Tenho 3 no total.. mas não são muito perto uma da outra.

    Conseguiria usar 3 sensores desse, para controlar e usar somente um arduino com display?

    Obrigado pela atenção

    1. Bom dia Duann,

      Não temos essa informação sobre o tamanho do cabo. Teria que ser analisado de acordo com o projeto, pois a transmissão de dados pode sofrer interferências externas (motores, elétrica, etc), que podem influir na qualidade do sinal.

      Quanto ao uso de 3 sensores com um mesmo Arduino, é possível sim, pois todos podem utilizar o mesmo pino de dados.

      Abraço!

      Adilson – Equipe MakerHero

  102. Boa tarde e parabéns pelo post!

    Gostaria de saber onde encontro o sensor DS18B20 no Fritzing? Gostaria de fazer um projeto semelhante utilizando o Fritzing e a representação do sensor como na imagem acima.

    Desde já agradeço!

    1. Boa tarde Guilherme,

      O sensor DS18B20 você encontra na biblioteca da Adafruit: https://github.com/adafruit/Fritzing-Library

      Abraço!

      Adilson – Equipe MakerHero

  103. Esse sensor pode ficar em um poço térmico para realizar o monitoramento da temperatura?

  104. Hello!
    I´m working in a projet for measure the temperature of 6 sensors, the 6 conets in a network.
    i want to show the values of each one.
    can you help me?

    the code:

    #include
    #include
    #include

    // IP Fixo:
    IPAddress ip(192, 168, 1, 50);

    char ssid[] = “ZON-6A20”; // Nome rede
    char pass[] = “b683a87bade5”; // password
    int keyIndex = 0; // Numero rede WEP

    int status = WL_IDLE_STATUS;

    WiFiServer server(80);

    OneWire ds(2); // pino 2

    void setup() {
    //Initialize serial and wait for port to open:
    Serial.begin(9600);
    while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
    }

    // check for the presence of the shield:
    if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println(“WiFi shield not present”);
    // don’t continue:
    while (true);
    }
    WiFi.config(ip);

    String fv = WiFi.firmwareVersion();
    if ( fv != “1.1.0” )
    Serial.println(“Please upgrade the firmware”);

    // attempt to connect to Wifi network:
    while ( status != WL_CONNECTED) {
    Serial.print(“Attempting to connect to SSID: “);
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);

    // wait 10 seconds for connection:
    delay(100);
    }
    server.begin();
    // you’re connected now, so print out the status:
    printWifiStatus();
    }

    void loop() {
    byte i;
    byte present = 0;
    byte type_s;
    byte data[12];
    byte addr[8];
    float celsius;

    if ( !ds.search(addr)) {
    Serial.println(“No more addresses.”);
    Serial.println();
    ds.reset_search();
    delay(250);
    return;
    }

    Serial.print(“ROM =”);
    for( i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
    }

    if (OneWire::crc8(addr, 7) != addr[7]) {
    Serial.println("CRC is not valid!");
    return;
    }
    Serial.println();

    // the first ROM byte indicates which chip
    switch (addr[0]) {
    case 0x10:
    Serial.println(" Chip = DS18S20"); // or old DS1820
    type_s = 1;
    break;
    case 0x28:
    Serial.println(" Chip = DS18B20");
    type_s = 0;
    break;
    case 0x22:
    Serial.println(" Chip = DS1822");
    type_s = 0;
    break;
    default:
    Serial.println("Device is not a DS18x20 family device.");
    return;
    }

    ds.reset();
    ds.select(addr);
    ds.write(0x44); // start conversion, use ds.write(0x44,1) with parasite power on at the end

    delay(1000); // maybe 750ms is enough, maybe not
    // we might do a ds.depower() here, but the reset will take care of it.

    present = ds.reset();
    ds.select(addr);
    ds.write(0xBE); // Read Scratchpad

    Serial.print(" Data = ");
    Serial.print(present, HEX);
    Serial.print(" ");
    for ( i = 0; i < 9; i++) { // we need 9 bytes
    data[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print(" ");
    }
    Serial.print(" CRC=");
    Serial.print(OneWire::crc8(data, 8), HEX);
    Serial.println();

    // Convert the data to actual temperature
    // because the result is a 16 bit signed integer, it should
    // be stored to an "int16_t" type, which is always 16 bits
    // even when compiled on a 32 bit processor.
    int16_t raw = (data[1] << 8) | data[0];
    if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
    // "count remain" gives full 12 bit resolution
    raw = (raw & 0xFFF0) + 12 – data[6];
    }
    } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
    }
    celsius = (float)raw / 16.0;

    Serial.print(" Temperature = ");
    Serial.print(celsius);
    Serial.print(" Celsius, ");

    // listen for incoming clients
    WiFiClient client = server.available();
    if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
    if (client.available()) {
    char c = client.read();
    Serial.write(c);
    // if you've gotten to the end of the line (received a newline
    // character) and the line is blank, the http request has ended,
    // so you can send a reply
    if (c == 'n' && currentLineIsBlank) {
    // send a standard http response header
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");

    client.println("Refresh: 5"); // refresh the page automatically every 5 sec
    client.println();
    client.println("”);
    client.println(“”);

    client.print(“”);

    client.print(“”);

    client.print(“Monitorizacao temperatura”);
    client.print(“”);
    client.print(“”);

    client.print(“MONITORIZACAO TEMPERATURA”);

    client.print(“”);
    client.print(“”);

    client.print(“”);

    client.print(“”);

    client.print(“”);

    client.print(“”);

    client.print(“Temperatura cilindro 1”);

    client.println(“”);
    client.println(celsius);
    client.println(“C”);
    client.println(“”);

    client.print(“”);

    client.print(“”);

    client.print(“Temperatura cilindro 2”);
    client.println(“”);
    client.println(celsius);
    client.println(“C”);
    client.println(“”);

    client.print(“”);

    client.print(“”);

    client.print(“Temperatura cilindro 3”);

    client.println(“”);
    client.println(celsius);
    client.println(“C”);
    client.println(“”);

    client.print(“”);

    client.print(“”);

    client.print(“Temperatura cilindro 4”);
    client.println(“”);
    client.println(celsius);
    client.println(“C”);
    client.println(“”);

    client.print(“”);

    client.print(“”);

    client.print(“Temperatura cilindro 5”);

    client.println(“”);
    client.println(celsius);
    client.println(“C”);
    client.println(“”);

    client.print(“”);

    client.print(“”);

    client.print(“Temperatura cilindro 6”);
    client.println(“”);
    client.println(celsius);
    client.println(“C”);
    client.println(“”);

    client.print(“”);

    client.print(“Pressao cilindros”);
    client.println(“”);
    client.println(celsius);
    client.println(“C”);
    client.println(“”);

    client.print(“”);

    client.print(“”);
    client.print(“”);
    client.print(“”);
    client.print(“”);

    client.print(“Gestamp Cerveira”);

    client.print(“”);
    client.print(“Francisco Silva 2015”);

    client.print(“”);

    client.println(“”);

    client.println(“”);
    break;
    }
    if (c == ‘n’) {
    // you’re starting a new line
    currentLineIsBlank = true;
    }
    else if (c != ‘r’) {
    // you’ve gotten a character on the current line
    currentLineIsBlank = false;
    }
    }
    }
    // give the web browser time to receive the data
    delay(1);

    // close the connection:
    client.stop();
    Serial.println(“client disonnected”);
    }
    }

    void printWifiStatus() {
    // print the SSID of the network you’re attached to:
    Serial.print(“SSID: “);
    Serial.println(WiFi.SSID());

    // print your WiFi shield’s IP address:
    IPAddress ip = WiFi.localIP();
    Serial.print(“IP Address: “);
    Serial.println(ip);

    // print the received signal strength:
    long rssi = WiFi.RSSI();
    Serial.print(“signal strength (RSSI):”);
    Serial.print(rssi);
    Serial.println(” dBm”);
    }

  105. Tava tendo problema ao rodar o codigo com o seguinte erro

    exit status 1
    stray ‘223’ in program

    descobri que ao copiar e colar o mesmo ele não reconheceu as aspas ”
    ai refis as mesmas e resolvi o problema

  106. Gostaria de saber se existe algum tutorial sobre este sensor para raspberry. Obrigado e parabéns pelo tutorial.

    1. Bom dia Candido,

      Ainda não temos tutorial desse sensor para Raspberry, mas vamos anotar como sugestão para um futuro post. obrigado! 🙂

      Abraço

      Adilson – Equipe MakerHero

      1. Tambem estou interessado, comprei um raspberry para fazer automação na produção de cerveja artesanal.
        já revirei o site to e li quase todos posts.
        partabens.

  107. e para 2 sensores como faco para usar esse codigo

  108. Pessoal,

    Adquiri o LCD e o sensor com vocês, montei o protótipo e código conforme o sugerido aqui e ok, está funcionando….

    Entretanto ocorre uma situação que não estou conseguindo mudar. Toda vez que o loop passa pela função para ler a temperatua e imprimir no lcd, ele apaga o lcd e imprime novamente. Isso cria um efeito indesejado, os caracteres ficam piscando.

    Alguem teve esse problema, sabe como resolver?

    1. Jean, você pode minimizar bem esse efeito, mandando “printar ” um espaço correspondente aos valores numéricos – (” “) – ao invés de limpar a memória do visor (processo que demanda o tempo indesejado que faz piscar o visor)

      1. Bom dia,

        Eu geralmente uso esse método, é mais prático. 🙂

        Abraço!

        Adilson – Equipe MakerHero

  109. Como eu posso fazer para o meu sensor ds18b20 verificar se em 1 minuto ele teve uma alteração de mais 6 graus para ai eu dar o comando? alguem pode me ajudar?

    Tipo se eu 1 minuto a temperatura aumentar 6 graus faca tal comando ( eu vou colocar o comando ) caso contrario fica verificando a cada minuto se ouve essa diferenca para mais de 6 graus.

  110. Boa noite,
    Coloquei o programa para funcionar e rodou blz, agora gostaria de saber como faço para estabelecer um set point ou seja, ao chegar em uma determinada temperatura escolhida o Arduíno setar uma saída, estou querendo fazer um controle de nível e temperatura de um tanque com água.

  111. Fiz e refiz os passos várias vezes, mas a saída sempre me informa que “Foram encontrados 0 sensores.”

    Uma pena..

    Existe um fórum/e-mail que eu possa encaminhar mais informações e conseguir ajuda?

    Obrigado!

    1. Bom dia Jésus,

      Por favor tente também as informações desse post: http://www.arduinoecia.com.br/2013/04/sensor-de-temperatura-ds18b20_11.html

      Se você constatar que o seu sensor está com problema, entre em contato pelo email [email protected] para obter instruções sobre a troca do componente.

      Abraço!

      Adilson – Equipe MakerHero

      1. Bom dia!

        Vou fazer o teste e envio o resultado.

        Obrigado!

  112. Caros, bom dia!

    Consigo comprar com vocês também o resitor pull-up de 4,7K?

    Obrigado e parabéns pelo trabalho!

    1. Bom dia Jésus,

      Começaremos a comercializar resistores em breve. Fique ligado! 🙂

      Abraço

      Adilson – Equipe MakerHero

  113. Boa noite, Gostaria de fazer uma pergunta qual programa que você usa para fazer os desenhos do esquematico do projeto. Desde já agradeço.

    1. Bom dia Fernando,

      O programa que utilizamos é o Fritzing: http://fritzing.org/download/

      Abraço!

      Adilson – Equipe MakerHero

  114. Buenas…. estou tendo problemas…. mando ser o sensor e ele sempre retorna 85C e 185F, o que pode ser???

    1. Bom dia Cristiano,

      Esse valor aparece no serial monitor ?

      Abraço

      Adilson – Equipe MakerHero

  115. tem um erro no sketch

    alterar
    if(tempC >= 21)

    para
    if(tempC <= 21)

  116. Segue abaixo o sketch alterado para controle de temperatura (resistencia, ventilador etc), lembrem-se que é necessario comandar atraves de reles, pois ligando diretamente ira queimar o aduino.
    Coloquei o pino 2 como saida para o rele e está com maxima de 23 e minima de 21 graus , voce pode alterar esses valores como quiser.

    // Programa : Sensor de temperatura DS18B20
    // Autor : MakerHero/JOSE ROCHA

    #include
    #include
    #include

    int porta_rele1 = 2;

    // Porta do pino de sinal do DS18B20
    #define ONE_WIRE_BUS 3

    // Define uma instancia do oneWire para comunicacao com o sensor
    OneWire oneWire(ONE_WIRE_BUS);

    // Armazena temperaturas minima e maxima
    float tempMin = 999;
    float tempMax = 0;

    DallasTemperature sensors(&oneWire);
    DeviceAddress sensor1;

    // Inicializa o LCD
    LiquidCrystal lcd(12, 11, 7, 6, 5, 4);

    void setup(void)
    {
    pinMode(porta_rele1, OUTPUT);
    Serial.begin(9600);
    sensors.begin();
    // Localiza e mostra enderecos dos sensores
    Serial.println(“Localizando sensores DS18B20…”);
    Serial.print(“Foram encontrados “);
    Serial.print(sensors.getDeviceCount(), DEC);
    Serial.println(” sensores.”);
    if (!sensors.getAddress(sensor1, 0))
    Serial.println(“Sensores nao encontrados !”);
    // Mostra o endereco do sensor encontrado no barramento
    Serial.print(“Endereco sensor: “);
    mostra_endereco_sensor(sensor1);
    Serial.println();
    Serial.println();
    lcd.begin(16, 2);

    }

    void mostra_endereco_sensor(DeviceAddress deviceAddress)
    {
    for (uint8_t i = 0; i < 8; i++)
    {
    // Adiciona zeros se necessário
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
    }
    }

    void loop()
    {
    // Le a informacao do sensor
    sensors.requestTemperatures();
    float tempC = sensors.getTempC(sensor1);
    // Atualiza temperaturas minima e maxima
    if (tempC tempMax)
    {
    tempMax = tempC;
    }

    if(tempC >= 21)
    {
    digitalWrite(porta_rele1, LOW);

    }

    if(tempC >= 23)
    {
    digitalWrite(porta_rele1, HIGH);

    }

    // Mostra dados no serial monitor
    Serial.print(“Temp C: “);
    Serial.print(tempC);
    Serial.print(” Min : “);
    Serial.print(tempMin);
    Serial.print(” Max : “);
    Serial.println(tempMax);

    // Mostra dados no LCD
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(“Temp.: “);
    //Simbolo grau
    lcd.write(223);
    lcd.print(“C”);
    lcd.setCursor(7,0);
    lcd.print(tempC);
    lcd.setCursor(0,1);
    lcd.print(“L: “);
    lcd.setCursor(3,1);
    lcd.print(tempMin,1);
    lcd.setCursor(8,1);
    lcd.print(“H: “);
    lcd.setCursor(11,1);
    lcd.print(tempMax,1);
    delay(3000);
    }

    1. amigo ta dando um erro pode me ajudar?
      void loop()
      {
      // Le a informacao do sensor
      sensors.requestTemperatures();
      float tempC = sensors.getTempC(sensor1);
      // Atualiza temperaturas minima e maxima
      if (tempC tempMax) <————————————– aqui fica o erro —–<<<<
      {
      tempMax = tempC;
      }

      if(tempC = 23)
      {
      digitalWrite(porta_rele1, HIGH);

      }

  117. muito obrigado. sou seu cliente e quero fazer um pedido ,entro em contato .

  118. Posso dizer que tempC >= 25 aciona uma buzina … Mas como fazer essa linha…

    1. Seria assim:

      if ( tempC >=25 )
      {
      digitalWrite(3, HIGH); //liga buzina
      }
      else
      {
      digitalWrite(3, LOW); //desliga buzina
      }

  119. Gostaria de saber onde acrescentar posso acresetar uma buzzer … Quando a temperatura chegar a X …. Em qual saída

  120. ola baixei o programa quando vou fazer upload aparece a seguinte mensagem variable or field ´ mostra_endereço_sensor´ declared void o que devo fazer

    1. Boa tarde Marcelo,

      Aqui compilou normalmente. Que versão de IDE você está utilizando ?

      Abraço.

      Adilson – Equipe MakerHero

      1. Olá, tive o mesmo erro. Estou usando a IDE 1.6.9 e minha placa é Mega2560

        1. Resolvi o problema. Era só a configuração de avisos de erro. Estava “Padrão”, mudei para “Nenhum” e funcionou perfeitamente

  121. Boa noite tem como acrecentar , ( quando a agua nao atingir uma
    temperatura pre programada a sensor acionar uma porta digital ) tipo ao nao atingir a temperatura o sensor ligara um rele que ligara um aquecedir eletrico , desde ja agradeco pela sua atencao

    1. Oi Marcelo,

      Sim, você pode testar a variável tempC e, enquanto ela não atingir o valor que você deseja, a saída continua ligada (e consequentemente o aquecedor).

      Abraço

      Adilson – Equipe MakerHero

      1. Olá, tive o mesmo erro. Estou usando a IDE 1.6.9

  122. O sensor pode ficar indefinidamente embaixo da água ?
    Ou seja, posso deixá-lo na água por tempo indeterminado para obter monitoramento contínuo de temperatura ?

    1. Bom dia Mauro,

      Sim, esse sensor é lacrado.

      Abraço.

      Adilson – Equipe MakerHero

  123. simple design of great creativity, useful for work .very good,

    1. Thank you Wilson !

      Regards

      Adilson – Equipe MakerHero