Termostat

ds18b20

W akwarystyce bardzo ważne jest utrzymanie właściwiej temperatury. Wiele ryb oraz roślin (morskie, dyskowce itp) jest wrażliwych zarówno na zbyt zimną jak i zbyt ciepłą wodę. Skutecznym i tanim rozwiązaniem jest termostat na bazie arduino.

Można oczywiście stosować grzałkę która ma wbudowany termostat – to sprawdzone od lat rozwiązanie sprawdza się idealnie w momencie kiedy w pomieszczeniu jest przez cały rok chłodno. Problemy pojawiają się gdy w lecie w pomieszczeniu temperatura osiąga nieakceptowalne temperatury. Pojawiają się wtedy na portalach i forach pytania o to w jaki sposób schłodzić akwarium. Z doświadczenia i opowieści innych ludzi wiem iż stosuje się naprawdę rozmaite rozwiązania.

Oto kilka przykładów w jaki sposób chłodzone są akwaria:

  • otwarcie obudowy – chyba najbardziej popularne – większe parowanie – mniejsza temperatura w akwarium,
  • wentylatory skierowane na wodę – szybsze parowanie,
  • obieg wody w kierunku chłodnego pomieszczenia (piwnica garaż itp) – sam mam wypuszczony wąż akwarium na parapet ze względu na wysoką temperaturę nawet w zimie,
  • lód lub wkłady chłodzące wrzucane do akwarium,
  • chłodziarki (używane zwłaszcza przy akwarystyce morskiej)
  • ogniwa Peltiera – ciekawe rozwiązanie – wkrótce zobaczycie taki projekt na kanale Arcusbit

Do wykonania tego urządzenia będą potrzebne następujące rzeczy:

  • arduino (najlepsze rozwiązanie to arduino nano 168)
  • 2x przekaźnik 1-kanałowy zasilany napięciem 5V
  • termometr DS18b20 – został opisany tutaj
  • 1 rezystor 4,7kOhm
  • trochę kabli do połączeń
  • zasilenie arduino może odbywać się zarówno z kabla USB (wystarczy ładowarka z telefonu) lub też przy użyciu zasilacz 12V (wtedy należy podpiąć zasilanie do pinów Vin (+12V) i GND

Schemat przedstawiający dokładne połączenie kabli zgodne ze stretchem.

Termostat

Zasada działania skryptu:

Ustawiając temperaturę (np 20 stopni) oraz histerezę 1 stopień otrzymujemy 3 wartości w programie:

  • temperaturę dolną (ustawioną w programie) – w poniższym przykładzie to 20 stopni
  • temperaturę środkową (temperatura + histereza) – w poniższym przykładzie to 21 stopni
  • temperatura górna (temperatura + 2x histereza – w poniższym przykładzie to 22 stopnie

W momencie spadku temperatury poniżej dolnej granicy uruchamia się grzałka która działa do momentu osiągnięcia temperatury środkowej.

Po przekroczeniu dwukrotnym histerezy czyli osiągnięciu temperatury górnej (w tym przypadku 22 stopnie) uruchamia się chłodzenie które działa do momentu osiągnięcia temperatury środkowej  (zakładam że jeśli temperatura przekracza maksymalną dopuszczalną schłodzenie zbiornika do dolnej wartości jest niemożliwe).

Rysunek przedstawiający poszczególne etapy działania skryptu:

termostat

Kiedy wszystkie połączenia zostały już wykonane nadszedł czas na wgranie skryptu. Jak to zrobić można zobaczyć tutaj.

Poniższy skrypt jest w pełni działający. Informacje wyświetlają się na serial monitorze. Temperaturę oraz histerezę należy ustawić przed wgraniem skryptu do arduino.

#include <Wire.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int SG = 2;
int SW = 3;
int T = 4; 
int licznikG;
int licznikW;
int Histereza = 1; 
int Temperatura = 20;

void setup() 
  {
    pinMode(T, INPUT);
    pinMode(SG, OUTPUT); 
    pinMode(SW, OUTPUT); 
    Wire.begin();
    Serial.begin(9600);
    sensors.requestTemperatures(); 
  }

void loop() 
  {
    sensors.requestTemperatures();
    float tempC = (sensors.getTempCByIndex(1));
    Serial.print(tempC); 
    Serial.print("C ");

/*Sterowanie grzałką*/
     if(tempC<=(Temperatura-Histereza))
       {
         licznikG =1;
       }
     else if((Temperatura+Histereza)<=tempC)
       {
         licznikG =0;
       }
     else
       {
       }

     if(licznikG>0)
       { 
         digitalWrite(SG,HIGH);
         Serial.print(" SG ON "); 
       }
     else
       { 
         digitalWrite(SG,LOW);
         Serial.print(" SG OFF "); 
       }

 /*Sterowanie wentylatorem*/
     if((Temperatura+Histereza)<=tempC)
       {
         licznikW =0;
       }
     else if(tempC<=(Temperatura+Histereza+Histereza))
       {
         licznikW =1;
       }
     else
       {
       }
     if(licznikW>0)
       { 
         digitalWrite(SW,HIGH);
         Serial.print(" SW ON "); 
       }
     else
       { 
         digitalWrite(SW,LOW);
         Serial.print(" SW OFF "); 
       }

    Serial.print(" licznikG:"); 
    Serial.print(licznikG); 
    Serial.print(" licznikW:"); 
    Serial.print(licznikW); 
    Serial.println(""); 
    delay(500);
    //site mn-tech.pl
    //youtube https://www.youtube.com/user/mntechpl
    //facebook https://www.facebook.com/mntechpl
  }

Przygotowanie takiego układu powinno zając nie więcej niż 30 minut (z podłączeniem wszystkich obwodów oraz wgraniem programu do arduino).

Skrypt ten po połączeniu ze skryptem o automatycznej dolewce wody dostępnym tutaj może być początkiem budowy sterownika akwariowego.

A tak termostat działa w praktyce: