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
 

Suggested Topics

  • 8
  • 2
  • 2
  • 2
  • 1
  • 3

0
Online

11.2k
Users

11.1k
Topics

112.5k
Posts