Medindo temperatura debaixo d’água com DS18B20 103

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 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 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.

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

Conte para nós nos comentários o que achou deste projeto. Gostou? Compartilhe este conteúdo e visite nossa loja FILIPEFLOP!

Posts Relacionados

Deixe uma resposta para Guilherme Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

103 Comentários

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

    1. Thank you Wilson !

      Regards

      Adilson – Equipe FILIPEFLOP

  2. 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 FILIPEFLOP

  3. 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 FILIPEFLOP

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

  4. 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 FILIPEFLOP

      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

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

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

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

  8. 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 : FILIPEFLOP/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);
    }

  9. tem um erro no sketch

    alterar
    if(tempC >= 21)

    para
    if(tempC <= 21)

  10. 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 FILIPEFLOP

  11. 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 FILIPEFLOP

      1. vlw obrigado!!!

  12. 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 FILIPEFLOP

  13. 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 FILIPEFLOP

      1. Bom dia!

        Vou fazer o teste e envio o resultado.

        Obrigado!

  14. 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.

  15. 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.

  16. 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 FILIPEFLOP

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

  18. 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 FILIPEFLOP

      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.

  19. 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

  20. 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”);
    }

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

  22. 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 FILIPEFLOP

  23. 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 FILIPEFLOP

  24. 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

  25. 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.

  26. 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.

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

  28. 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.

    Gustavo Jean Menegazzo
    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 FILIPEFLOP

  29. 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 FILIPEFLOP

  30. 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.

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

  32. Boa noite!

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

    Muito obrigado!!

    Thadeu Munhóz Cesário
    1. Bom dia Thadeu,

      Não, este sensor mede apenas a temperatura.

      Abraço!

      Adilson – Equipe FILIPEFLOP

  33. 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 FILIPEFLOP

  34. 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 FILIPEFLOP

  35. 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 FILIPEFLOP

  36. 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: http://forum.arduino.cc/index.php?topic=21762.0

      Abraço!

      Adilson – Equipe FILIPEFLOP

      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

  37. 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 FILIPEFLOP

      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 FILIPEFLOP

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

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

  39. 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

  40. Bom dia,

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

    Douglas Bones Ciechovicz
    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)

  41. 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 FILIPEFLOP: https://www.filipeflop.com/pd-282c1d-resistor-4-7k-1-4w-x20-unidades.html

      Abraço!

      Adilson – Equipe FILIPEFLOP

  42. Como usar esse sensor sem bibioteca?

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

  44. 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?

  45. 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?

  46. Amigo,

    Posso ligar o senssor de temperatura DS18B20 no W1209?

  47. Olá. Em qual o tempo de resposta entre a temperatura mínima e máxima do ds18b20?

  48. 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
  49. 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.

    Andre da Silva Vanzolin
  50. 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.

  51. 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 FILIPEFLOP

  52. 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.

  53. 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!!

  54. Ola. consigo ter temperaturas negativa?

  55. 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.

  56. O meu só esta funcionando pelo USB

  57. 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!

  58. Parabéns pelo post…

  59. 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???