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
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login