Arduino Regulátor solárního ohřevu v. 1.0

Pokud si člověk pořídí bazén, určitě po nějaké době začne pokukovat po solárním ohřevu. A když už má i solární ohřev, začne uvažovat jak nejefektivněji řídit čerpadlo pro co nejlepší vytápění.

Pro tento účel jsem vyrobil tento regulátor.

Regulátor funguje velice jednoduše:

  1. čte teploty z čidel umístěných v bazénu a v solárním panelu

  2. zobrazuje aktuální teplotu na LCD displeji

  3. spíná čerpadlo pokud je teplota v panelu vyšší než teplota v bazénu, o nastavený rozdíl nebo více

  4. vypíná čerpadlo pokud je teplota panelu stejná nebo nižší než teplota bazénu

Schéma:

Jak je vidět zapojení je velmi jednoduché. Popis pinů u MCU je proveden dvakrát s tím že, popisky uvnitř platí přímo pro MCU a popisky vně patří pro piny Arduino UNO. LCD displej jsem použil 2x16 znaků ale je možné použít jakýkoliv se standardním řadičem HD44780, jen se musí provést úprava programu. Pokud má displej podsvícení, lze ho zapojit také (ve schématu není zakresleno). LED dioda signalizuje spuštění čerpadla programem. Pokud je potřeba spustit čerpadlo manuálně, stačí přepnout přepínač AUT/MAN do polohy MANuál a následně spouštět čerpadlo vypínačem MAN. Napájecí zdroj je použitý hotový z USB nabíječky. Teplotní čidla DS18B20 jsou použitá ve vodotěsném provedení, kabel nastavený dle potřeby a opatřena konektorem JACK pro připojení.

Celkové napájení regulátoru a tím i čerpadla je vhodné provést přes proudový chránič.

Program je ke stažení ZDE, nebo z výpisu dole. Snažil jsem se o řádné okomentování takže by neměl být problém s přehledností. Nastavení rozdílové teploty (int rozdil = xx) bude nejspíš třeba upravit dle konkrétní funkčnosti. Adresy čidel musíte změnit podle vlastních čidel.

#include <DallasTemperature.h>
#include <OneWire.h>
#include <LiquidCrystal.h>

// Datová linka na pin 8
OneWire oneWire(8);

//LED dioda na pin 13
int led = 13;

//relé na pin 12
int rele = 12;

//rozdíl teplot při kterém sepne relé
int rozdil = 20;

// Promĕnné teplot
float Tbazen;
float Tpanel;

// Nastavení 1-wire
DallasTemperature sensors(&oneWire);

//Adresy čidel
DeviceAddress BAZEN = { 0x28, 0x1F, 0xBD, 0xCB, 0x04, 0x00, 0x00, 0xF1 };
DeviceAddress PANEL = { 0x28, 0x60, 0x67, 0xCE, 0x04, 0x00, 0x00, 0x2F };

//zapojení LCD - 7=RS; 6=Enable; 5=D4; 4=D5; 3=D6; 2=D7
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

//vytvoření znaku pro stupeň
byte degree[8] = {
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
B00000
};

void setup(){

//vypni čerpadlo
digitalWrite(rele,HIGH);

//nastavení typu LCD - 16 znaků, 2 řádky
lcd.begin(16, 2);

//vytvoření znaku pro stupeň
lcd.createChar(0, degree);

sensors.begin();
//nastavení rozlišení
sensors.setResolution(BAZEN, 10);
sensors.setResolution(PANEL, 10);


pinMode(led, OUTPUT);
pinMode(rele, OUTPUT);
//demo
lcd.setCursor(0, 0);
lcd.print("Regulator bazenu");
lcd.setCursor(0, 1);
lcd.print(" v. 1.0 ");

delay(3000);

lcd.setCursor(0, 0);
lcd.print(" autor: ");
lcd.setCursor(0, 1);
lcd.print(" Michal Dlabka ");

delay(3000);

lcd.setCursor(0, 0);
lcd.print("elektronika2011 ");
lcd.setCursor(0, 1);
lcd.print(" .ic.cz ");

delay(3000);
}

void loop(){

sensors.requestTemperatures();

//načtení teplot z čidel
Tbazen = sensors.getTempC(BAZEN); //teplota bazenu
Tpanel = sensors.getTempC(PANEL); //teplota panelu

//smaž LCD
lcd.clear();

lcd.setCursor(0, 0); //nastav první řádek
lcd.print("Bazen:");
lcd.print(Tbazen); //teplota bazenu
lcd.write((byte)0);
lcd.print("C");


lcd.setCursor(0, 1); //nastav druhý řádek
lcd.print("Panel:");
lcd.print(Tpanel); //teplota panelu
lcd.write((byte)0);
lcd.print("C");

if (Tbazen >= Tpanel) //pokud je teplota bazénu stejná nebo vĕtší než teplota panelu, pak
{
digitalWrite(rele, HIGH); //vypni čerpadlo
digitalWrite(led, LOW); //zhasni diodu
}

Tbazen = Tbazen + rozdil; //k teplotĕ bazénu přičti požadovaný rozdíl

if (Tpanel >= Tbazen) //pokud je teplota panelu vĕtší než teplota bazénu + rozdíl, pak
{
digitalWrite(rele, LOW); //zapni čerpadlo
digitalWrite(led, HIGH); //roži diodu
}


delay(1000); //čekej 1s


}

Vnitřní pohled. Jak je vidět pájení jsem uskutečnil na kousku univerzální DPS. Malá destička je napájecí zdroj.

 

Pohled zepředu

 

Pohled zezadu