Termostat różnicowy, sterownik solarny

iborkim
Posty: 46
Rejestracja: sob cze 11, 2016 10:59 am

Sterownik pompy kolektora słonecznego oparty na wemos + przekażnik + 2x ds18b20.

-czujniki ds18b20 na osobnych gpio (nie trzeba odczytywać adresów)
-załączenie przy różnicy temperatury 6 i więcej
-wyłączenie przy różnicy temperatury 3 i mniej
-załączenie pompy poniżej -25 °C oraz przy uszkodzeniu czujnika temperatury

kod Arduino IDE ( zlepek z róznych przykładów)
biblioteka SuplaDevice z managera bibliotek w Arduino wersja 2.4.2

Działa od 24h bezawaryjnie :)

Kod: Zaznacz cały

/*
Copyright (C) AC SOFTWARE SP. Z O.O.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/

#include <SuplaDevice.h>

/*
 * This example requires Dallas Temperature Control library installed. 
 * https://github.com/milesburton/Arduino-Temperature-Control-Library
 */
// Add include to DS sensor
#include <supla/sensor/DS18B20.h>

#include <supla/control/relay.h>

//histereza
int roznica = 6; //roznica załączenia 
int roznica2 = 3; //roznica wyłączenia 

float T1;
float T2;
int licz;  

unsigned long aktualnyCzas = 0;
unsigned long zapamietanyCzas = 0;
unsigned long roznicaCzasu = 0;

//channel 0
 auto r1 = new Supla::Control::Relay(5); // przekaźnik gpio 5 sterowany stanem wysokim




// Choose proper network interface for your card:
#ifdef ARDUINO_ARCH_AVR
  // Arduino Mega with EthernetShield W5100:
  #include <supla/network/ethernet_shield.h>
  // Ethernet MAC address
  uint8_t mac[6] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};
  Supla::EthernetShield ethernet(mac);

  // Arduino Mega with ENC28J60:
  // #include <supla/network/ENC28J60.h>
  // Supla::ENC28J60 ethernet(mac);
#elif defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32)
  // ESP8266 and ESP32 based board:
  #include <supla/network/esp_wifi.h>
  Supla::ESPWifi wifi("wifi", "pass");
#endif

void setup() {

  Serial.begin(115200);

  // Replace the falowing GUID with value that you can retrieve from https://www.supla.org/arduino/get-guid
  char GUID[SUPLA_GUID_SIZE] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

  // Replace the following AUTHKEY with value that you can retrieve from: https://www.supla.org/arduino/get-authkey
  char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

  /*
   * Having your device already registered at cloud.supla.org,
   * you want to change CHANNEL sequence or remove any of them,
   * then you must also remove the device itself from cloud.supla.org.
   * Otherwise you will get "Channel conflict!" error.
   */

  // CHANNEL 1-2 - Thermometer DS18B20
 
  new Supla::Sensor::DS18B20(12); //channel 1 czujnik kolektora gpio 12
  new Supla::Sensor::DS18B20(4);  //channel 2 czujnik CWU gpio 4
 
 

  /*
   * SuplaDevice Initialization.
   * Server address, LocationID and LocationPassword are available at https://cloud.supla.org 
   * If you do not have an account, you can create it at https://cloud.supla.org/account/create
   * SUPLA and SUPLA CLOUD are free of charge
   * 
   */

  SuplaDevice.begin(GUID,              // Global Unique Identifier 
                    "svr1.supla.org",  // SUPLA server address
                    "email@email.pl",   // Email address used to login to Supla Cloud
                    AUTHKEY);          // Authorization key
    
}

void loop() {
  SuplaDevice.iterate();

  
//czas
    
  aktualnyCzas = millis(); //Pobierz liczbe milisekund od startu
  roznicaCzasu = aktualnyCzas - zapamietanyCzas;
  
//Jeśli różnica wynosi ponad 5 sekund 
  if (roznicaCzasu >= 5000UL) {
    //Zapamietaj aktualny czas
    zapamietanyCzas = aktualnyCzas;

  //odzcyt temp

   for (auto element = Supla::Element::begin(); element != nullptr; element = element->next()) { // iterujemy po wszystkich elementach dodanych do programu
    if (element->getChannel()) { // sprawdzamy, czy do elementu jest przypisany kanał. Niektóre elementy (np. button) nie posiadają kanału.
      auto channel = element->getChannel();
      if (channel->getChannelNumber() == 1) {
        double lastTemperature = channel->getValueDouble();
       T1 = lastTemperature;
        // do something with lastTemperature
   }
        if (channel->getChannelNumber() == 2) {
        double lastTemperature = channel->getValueDouble();
       T2 = lastTemperature;
      }
  }
  
 }
  //Wyslij do PC
 Serial.println(aktualnyCzas);
  Serial.print(T1) ;
  Serial.println("C T1");
   Serial.print(T2) ;
   Serial.println("C T2");
   
  //termostat

if((roznica)<=T1-T2)
{
licz =0;
}
else if(T1-T2<=(roznica2))
{
licz =1;
}
 //temperatura ponizej -25 oraz uszkodzenie czujnika kolektora załącza pompę
if( T1<-25)
{
licz =0;
}

 //sterowanie pompą
if(licz>0)
{
r1->turnOff();
Serial.println(" pompa OFF ");
}
else
{
r1->turnOn(); // włącza przekaźnik.
Serial.println(" pompa ON ");
}
  
  }
  /////////////////////////////////////////////////////////////////////////////////////////////////////
}
Załączniki
SUPLA2.jpg
SUPLA2.jpg (23.33 KiB) Przejrzano 391 razy
tom_car@vp.pl
Posty: 1
Rejestracja: ndz sie 14, 2022 5:35 am

witam mozesz mi sprzedac takie urzadzenie
rozumiem ze sa2 czujniki temperatury i moga one sterowac przekaznikiem w celu wlaczania na nastawiona temperature
np ustalam 22 stopnie i przekaznik jak sie zalaczy jesli bedzie czujnik pokaze mniej ?
jest mozliwosc tak ustawic zeby moglo dzialac na odwrot do chlodzenia ?
ustawiam 22 stopnie i przekaznik wlaczy sie dopiero kiedy bedzie wyzsza temp ?
iborkim
Posty: 46
Rejestracja: sob cze 11, 2016 10:59 am

Sterownik działa na zasadzie różnicy temperatur na czujnikach .
Jeden czujnik idzie do urządzenia które chcesz schłodzić ( u mnie kolektor słoneczny), drugi do urządzenia które chcesz grzać ( u mnie zasobnik CWU).
Różnicę temperatur określana jest w kodzie i tylko tam można ją zmienić.
ODPOWIEDZ

Wróć do „Projekty użytkowników”