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