Temperature compare between DS18b20



  • Hi people

    i need a help with this project, have water solar heat for my floor and want to automate the pump, so i had a arduino skecht that can do with 1ºc difference and goes well but i want go further, want to see the 2 temp and the status of relay that act the pump.

    my working controler are domoticz.

    the sketch:

    /* Este sketch lê 2 DS18B20 "1-Wire" digital
    com LCD e botao 
    */ 
    #include <SoftwareSerial.h>
    #include <Wire.h>
    #include <OneWire.h>
    #include <DallasTemperature.h>
    #include <LiquidCrystal_I2C.h>
    
    // -----------Configurações personalizadas-------------------------
    #define ONE_WIRE_BUS 3         // DS18B20 Ligado ao pin X no arduino
    #define rele  13             // Relé ligado ao pin X no arduino
    #define Tempo_lcd_ligado 2000 // define o tempo do lcd ligado após ligar botão (milisegundos)
    #define Diferenca 1.0          // Define a diferença entre sensores para ativar relé
    #define botao_lcd A3          // Escolher pin de entrada para botão
    #define botao_verao A0         // escolher Modo verao/inverno
    //------------------------------------------------------------------
    
    // configura onewire para comunicar com qq dispositivo OW
    OneWire oneWire(ONE_WIRE_BUS);
    
    // Envia a referençia oneWire para Dallas Temperature. 
    DallasTemperature sensors(&oneWire);
    
    // configura o endereço LCD I2C, descobrir endereço ver outro skecht
    LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  
    
    //definir estado inicial do relé
    int state1 = 0;
    int state2 = digitalRead(botao_verao);
    // defiinir estado inicial do botão
    int buttonState = 0;
    
    // definir endereço dos sensores de temp 1-Wire, descobrir ver outro sketch .
    DeviceAddress solpainel = { 0x28, 0xFF, 0xEC, 0xDA, 0xA4, 0x15, 0x01, 0x8C };
    DeviceAddress bomba = { 0x28, 0xFF, 0x2D, 0x17, 0x00, 0x16, 0x03, 0x46 };
    
    // numero de dispositivos 1wire encontrados
    int numberOfDevices;
    
    //Variaveis para controlo logico
    
    float   Temp1, Temp2;   //  grava para comparação
    
    float differential1 = 0.0 ;
    float differential2 = 0.0 ;
    int invalidCount = 0;
    
    //codigo corre sempre que se inicia.
    
    void setup(void)
    
    {
      // iniciar serial port
      Serial.begin(9600);
      // Start up the library
      Serial.println ("ligando sensores one wire");
      sensors.begin();
      
      // loocaliza os sensore one wire bus
      Serial.println("");
      Serial.print("encontrando dispositivos 1-wire...");
      Serial.println ("");
      Serial.print("encontrado ");
      Serial.print(sensors.getDeviceCount(), DEC);
      Serial.println(" dispositivos.");
      lcd.begin(16,2);
      Serial.print("Ligando LCD");
      Serial.print("\n\r");
    // ------- Pisca 3 vezes  -------------
      for(int i = 0; i< 3; i++)
      {
        lcd.backlight();
        delay(250);
        lcd.noBacklight();
        delay(250);
      }
      lcd.backlight(); // desligando a luz do lcd 
    //-------- Escreve carateres no LCD ------------------
      lcd.setCursor(0,0);
      lcd.print("Comparador do");
      delay(1000);
      lcd.setCursor(0,1);
      lcd.print("Aquecimento");
      delay(2000);
      lcd.clear();
     // set the resolution to 10 bit 
      sensors.setResolution(solpainel, 10);
      sensors.setResolution(bomba, 10);
      //delay (1500);
      lcd.noBacklight();
     //definir pin output
       { 
      pinMode(rele, OUTPUT);
      pinMode(botao_lcd, INPUT);
      pinMode(botao_verao, INPUT); 
       }
      delay (1000);
    }
    
    void printTemperature(DeviceAddress deviceAddress)
    {
      float tempC = sensors.getTempC(deviceAddress);
      if (tempC == -127.00) {
        Serial.print("Erro a obter temperatura");
      } else {
        Serial.print("C: ");
        Serial.print(tempC);
        }
    }
    void loop(void)
    {
       Serial.print("A atualizar temperaturas...\n\r");
      sensors.requestTemperatures();
      
      Serial.print("Temp do painel: ");
      printTemperature(solpainel);
      Serial.print("\n\r");
      Serial.print("Temp da bomba: ");
      printTemperature(bomba);
      Serial.print("\n\r");
      Serial.println(""); 
      Serial.println("");
      Serial.print ("estado do rele: ");
      Serial.println(state1);
      Serial.println("");
      
      buttonState = digitalRead(botao_lcd);
     
        if (buttonState == HIGH){
          // Botao pressionado.
          Serial.println("Botao pressionado - HIGH");
          lcd.on();
          lcd.setCursor(0,0);
          buttonState = digitalRead(botao_verao);
           if (buttonState == HIGH) {
            lcd.print("Modo: Verao");}
           else {
            lcd.print("Modo: Inverno");
           }
          delay (1000);
          lcd.setCursor(0,0);
          lcd.print("T.Entrada:");
          lcd.print(sensors.getTempC(bomba));
          lcd.setCursor(15,0);
          lcd.print("C");
         lcd.backlight();
          lcd.setCursor(0,1);
          lcd.print("T.Painel :");
          lcd.print(sensors.getTempC(solpainel));
          lcd.setCursor(15,1);
          lcd.print("C");
          delay (Tempo_lcd_ligado);
          lcd.clear();
          lcd.off();
          
        }
        else{
          // botao nao pressionado.
          Serial.println("Botao nao pressionado - LOW");
        
        }
    //Sensors for logic
    Temp1 = sensors.getTempC(bomba);
    Temp2 = sensors.getTempC(solpainel);
    
         
         //diferença entre Solpainel e bomba
          differential1 = Temp2-Temp1;
          differential2 = Temp1-Temp2;
          Serial.print("Diferenca para inverno e:");
          Serial.println(differential1);
          Serial.println("");
          Serial.print("Diferenca para Verao e:");
          Serial.println(differential2);
          Serial.println("");
          
          //logic1
         {
          buttonState = digitalRead(botao_verao);
         if (buttonState == HIGH){
           
           if (differential2 >= (Diferenca)) { // comparara temps,
            (state2 = 1);     
            digitalWrite(rele, LOW);    
            Serial.print("bomba verao ligada");
            Serial.print("\n\r");}
           else {
            (state2 = 0);
            digitalWrite(rele, HIGH);
            Serial.print("bomba verao desligada");
            Serial.println("");
            Serial.print("\n\r");}}
         else {        
           if (differential1 >= (Diferenca)) { // compara temps,
            (state1 = 1);     
            digitalWrite(rele, LOW);    
            Serial.print("bomba inverno ligada");
            Serial.print("\n\r");}
           else {
            (state1 = 0);
            digitalWrite(rele, HIGH);
            Serial.print("bomba inverno Desligada");
            Serial.println("");
            Serial.print("\n\r");}
              }
         } 
         
    delay (1000);
    }
    

    Is it possible?

    Thanks for help


Log in to reply
 

501
Online

6.9k
Users

7.8k
Topics

82.7k
Posts

Looks like your connection to MySensors Forum was lost, please wait while we try to reconnect.