Skocz do zawartości

Sterownik do kontrolowania pieca olejowego, kominka z plaszczem wodnym, kolektora slonecznego POMOCY


eukaliptuss

Pomocna odpowiedź

witam

jest to moj pierwszy kontakt z arduino (jak i z elektronika) wiec prosze o wyrozumialosc.

forum to skierowane sa do osob ktore tworza projekty oraz szukajacych pomocy. to ja z naciskiem na to drugie 🙂.

chce zrobic sterownik do kontrolowania ogrzewania olejowego, kominka z plaszczem wodnym, kolektora slonecznego oraz ogrzewania podlogowego i grzejnikow sciennych. dodatkowo chcialbym kontrolowac to poprzez telefon (jakas aplikacja na androida) podlaczony bluetooth aby na bierzaco mozna bylo wlaczyc ogrzewanie strefowe np. tylko ciepla woda bez podlogowki czy tez grzejnikow sciennych. w przyszlosci (dalszej) chcialbym dodac modul gsm do wl/wyl pieca (np. poprzez sms). chcialbym posiadac tez wglad w statystyki dotyczace czasu pracy pomp, nagrzania wody w zbiorniku itp.

zacznijmy od ogolnego schematu ogrzewania.

https://www.forbot.pl/forum/upload_img/obrazki/IMG_5b1af7054f75c7417.png

prosilbym o skupienie sie na czesci elektronicznej a nie hydraulicznej.

program powinien obejmowac:

jesli T5 >T2 pompa P2 pracuje

jesli T3>55st.C to P3 pracuje ale O1 jest wylaczone (automatycznie P1 i M1 wylaczone, poniewarz bedzie podlaczone bezsporednio do zasilania O1)

mozliwosc wl/wyl O1 poprzez klikniecie na telefonie (lub poprzez modul GSM w przyszlosci np. sim800L)

dodatkowo punkty 2 i 3 uzaleznione sa dodatkowa opcja co bedzie grzane (5 stref), : a)tylko ciepla woda M3 open, b)tylko podlogowka M2 open, c)tylko grzejniki M4 open, d) tylko ogrzewanie M2 i M3 open, e) wszystko M2 M3 M4 open. wiec wlaczajac O1 lub rozpalajac w kominku T3 musi byc wstepnie ustalony ktorys z w/w parametrow (gdzie to cieplo ma plynac).

dodatkowo opcja jesli T1 >60st.C (a O1 i P3 sa wylaczone) to P4 wlaczona (opcja podgrzania podlogi nadmiarem wody z paneli).

tylko tyle albo az tyle.

calosc (jak wspomnialem wczesniej) musialoby byc obslugiwane poprzez prosty interfejs na telefonie (np. ikonka pieca i przycisk ON/OFF, ikonka grzejnika ON/OFF, ikonka boliera ON/OFF, ustawienia czasowego wlaczenia pieca-timera itd). ewentualna opcja zmiany temperatury startu kominka poprzez klikniecie i przyciski + i _,podwyzszenie temp. wody w bolierze, dostep do przycisku 'statystyki'. itp

na razie aplikacja mnie nie martwi ale pisze o tym majac na wzgledzie caloksztalt.

elementy ktore posiadam to :

- arduino nano

-logging data module

-relay 8 ports

-bluetooth modul At-09, ble-4.0

-extension board nano v3.0

-czujniki temp. DS18B20 (3 kable) oraz podobny czujnik ale na 2 kable (nie wiedzialem ktore beda lepsze i kupilem oba typy aby sprobowac)

https://www.forbot.pl/forum/upload_img/obrazki/IMG_5b1af7bb729d75461.jpg

wstepnie podlaczylem, korzystajac z informacji jakie znalazlem w necie. probowalem przeprowadzic symulacje w THINKERCADzie ale w programie tym nie ma wielu komponentow ktore ja uzylem wiec bez sukcesu. dalsze eksperymenty wstrzymalem, obawiajac sie ze cos 'spale'.

jesli chodzi o podobne projekty i programowanie to znalazlem w necie cos takiego:

http://www.reuk.co.uk/wordpress/arduino-solar-water-heating-pump-controller-design-and-code/

https://thesolaruniverse.wordpress.com/2016/11/21/monitoring-temperatures-in-floor-heating-loops-with-an-arduino-with-data-display-on-a-3-5-tft-screen/

http://house4u.com.ua/articles/solar-controller/en/part11.php

http://www.instructables.com/id/2nd-Gen-Arduino-Hot-Water-Solar-Collector-Controll/

https://forum.arduino.cc/index.php?topic=70048.0

oraz odnosnie bluetooth

https://arduino.stackexchange.com/questions/19517/hc-05-bluetooth-module-inq-command-doesnt-work

wklejam te linki aby pokazac ze wiem co to google, tylko nie chce czegos skopiowac i uzyc a potem miec problem (po prostu jeszcze sie ucze).

pierwsze dwa sa chyba najlepsze.

skladajac to wszystko napisalem wstepnie cos takiego:

const int TANKSENSORT1 = A0;
const int TANKSENSORT2 = A1;
const int PANELSENSORT5 = A2;
const int STOVESENSORT3 = A3;
const int FLOORSENSORT4 = A4;

const int RELAYO1 = 3;
const int RELAYM2 = 4;
const int RELAYM3 = 5;
const int RELAYM4 = 6;
const int POMP2 = 7;
const int POMP3 = 8;
const int POMP4 = 9;

const int diffON = 6;
const int diffOFF = 3;

void setup(){
Serial.begin(9600);

pinMode(PANELSENSORT5, INPUT);
pinMode(TANKSENSORT1, INPUT);
pinMode(TANKSENSORT2, INPUT);
pinMode(STOVESENSORT3, INPUT);
pinMode(FLOORSENSORT4, INPUT);

pinMode(RELAYO1, OUTPUT);
digitalWrite(RELAYO1, LOW);
pinMode(RELAYM2, OUTPUT);
digitalWrite(RELAYM2, LOW);
pinMode(RELAYM3, OUTPUT);
digitalWrite(RELAYM3, LOW);
pinMode(RELAYM4, OUTPUT);
digitalWrite(RELAYM4, LOW);
pinMode(POMP2, OUTPUT);
digitalWrite(POMP2, LOW);
pinMode(POMP3, OUTPUT);
digitalWrite(POMP3, LOW);
pinMode(POMP4, OUTPUT);
digitalWrite(POMP4, LOW);


}

void loop(){
float solarPanelTemperature = ((analogRead(PANELSENSORT5) / 1024.0) * 5000)/10;
float hotWaterTankTemperature = ((analogRead(TANKSENSORT2) / 1024.0) * 5000)/10;
if(solarPanelTemperature > (hotWaterTankTemperature + diffON)){
digitalWrite(POMP2, HIGH);
do{
delay(250);
solarPanelTemperature = ((analogRead(PANELSENSORT5) / 1024.0) * 5000)/10;
hotWaterTankTemperature = ((analogRead(TANKSENSORT2) / 1024.0) * 5000)/10;
}while(solarPanelTemperature > (hotWaterTankTemperature + diffOFF));
digitalWrite(POMP2, LOW);

float stoveTemperature = ((analogRead(STOVESENSORT3) / 1024.0) * 5000)/10;
if(stoveTemperature > 55){ digitalWrite(POMP3, HIGH);
do{
delay(250);
stoveTemperature = ((analogRead(STOVESENSORT3) / 1024.0) * 5000)/10;
}while(stoveTemperature < (55));
digitalWrite(POMP3, LOW);
// musi byc dodane autoamtyczne wylaczenie pieca O1 jesli T3>55, a jesli T3<55 piec moze byc wlaczony

float hotwaterTemperature = ((analogRead(TANKSENSORT1) / 1024.0) * 5000)/10;
if(hotwaterTemperature > (60)){ digitalWrite(POMP4, HIGH);
do{
delay(250);
hotwaterTemperature = ((analogRead(TANKSENSORT1) / 1024.0) * 5000)/10;
}while(hotwaterTemperature < (60));
digitalWrite(POMP4, LOW);
// musi byc dodane autmatyczne sprawdzenie czy piec O1 lub kominek P3 nie pracuja.
// jesli ktores znich jest wlaczone (O1 lub P3) w/w funkcja nie moze byc wlaczona

// obsluga modulu bluetooth
// obsluga modulu logging data
// obsluga aplikacji a co za tym idzie wl/wyl pieca olejowego O1 (dodatkowa funkcja ustawienia zegara np. wlacz o 7 rano)
// przed wlaczeniem pieca lub kominka musi byc okreslony status co bedzie grzane (ciepla woda, grzejniki, podlogowka)
// mozliwosc przelaczenia na bierzaco (podczas pracy) pomiedzy M2, M3, M4(ciepla woda, grzejniki, podlogowka)
}
delay(250);
}

no i tu utknalem.

program po wprowadzieniu do THINKERCAD-a nie ruszyl (pod wlaczniki relay podstawilem diody aby pokazywaly mi ewentualne zmiany).

prosilbym o sugestie co do schematu podlaczenia jak i do kodu. (najlepiej z przykladem bo nadmiar informacji w necie prowadzi do chaosu)

wierze ze jest wielu poczatkujacych jak ja, ktorym ta wiedza tez sie moze przydac.

pozdrawiam

Link do komentarza
Share on other sites

Cóż, poległeś, ale przynajmniej próbowałeś. Chwała.

Moim zdaniem nie otrzymasz żadnej wartościowej pomocy oprócz jednej: marsz do szkoły. Wyglądasz jak dziecko które próbuje zmajstrować na podwórku samochód. Widzi ich pełno na mieście więc mając blaszany pojemnik, kilka kartonów po sokach, skrzynkę na pomidory i 4 stare zimowe opony zabiera się do roboty. Na początku szło nieźle, udało się zbudować nawet jakąś bryłę nadwozia ale gdy przyszło do silnika (albo kół albo choćby próby wejścia do środka) - utknęło. Takich rzeczy nie robi się w ten sposób. Duży i wielofunkcyjny program, to nie jest proste połączenie kilku małych, przykro mi. Nie masz nawet aparatu pojęciowego by zrozumieć jak tego typu oprogramowanie się projektuje i uruchamia. Napisałeś trzy blokujące się pętelki wypełnione delay'ami a chcesz by urządzenie jednocześnie obsługiwało Twoje komendy, połączenie radiowe i bieżące procesy przebiegające w układach sterowanych? To już jest źle i nie da się tego popychać przez dopisywanie kolejnych trywialnych pomysłów. Jeśli nie znajdziesz gotowca (a chyba nie chcesz tego zrobić w ten sposób), który nota bene byłby tak skomplikowany, że obecnie nie miałbyś szans go zrozumieć, to przed Tobą wiele miesięcy nauki. Zacznij od prostych kursów żeby zrozumieć jak działają algorytmy regulacji i najważniejsze: jak spowodować by Twoje Arduino robiło wiele rzeczy na raz. Dałeś się nabrać na proste projekciki, choćby te które wskazałeś, gdzie jedna prosta pętelka załatwia całość: pomiary, decyzje i ew. wyświetlanie. Jeżeli swoje oczekiwania ograniczysz do czegoś takiego, jest to w zasięgu. Jeśli do projektu chcesz włączyć moduły radiowe, GSM czy BT, wykonywanie komend, zdalne zmiany stanu z jednoczesną kontrolą procesów, będzie trudno bez dogłębnego zrozumienia jak to w ogóle da się zrobić jednocześnie. I nie, kolejne dopisywane czy kopiowane z innych programów pętelki nie zadziałają. Nikt Ci nie jest w stanie pomóc jednym zdaniem czy nawet kilkoma postami, bo Twój problem nie sprowadza się do znalezienia jakiegoś błędu w kodzie tylko do nauczenia Cię pisania zaawansowanych programów. Nie możesz tego oczekiwać od Forum, to Ty musisz zakasać rękawy i wziąć się do roboty. A zacznij od rzeczy prostych: od problemów mrugania dwoma (a potem dziesięcioma) diodami niezależnie, od napisania prostego sterowania dwoma osobnymi wyjściami na podstawie dwóch mierzonych temperatur i dwóch różnych algorytmów, od wniknięcia jak działają moduły radiowe i jak z nich korzystać, napisz coś własnego co korzysta z bibliotek do takich modułów, od współpracy z pamięcią EERPROM w której trzymasz nastawy takiego sterownika, itd itp.. Cóż, powodzenia. Możemy tu odpowiadać na szczegółowe pytania, ale nikt nie będzie robił szkółki programowania.

Link do komentarza
Share on other sites

witam marku

mimo wszystko dzieki za sugestie.

bede probowal az do skutku a ze na razie nie zalezy mi na kontroli poprzez bluetooth i gsm (najpierw chcialbym aby system dzialal po wgraniu 'glownego' programu) moze bedzie prosciej.

jeszcze raz dzieki

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

no wiec troche juz mam.

na chwile obecna zrobilem kod w THINKERCAD-dzie i podczas symulacji dziala.

www.tinkercad.com/things/4rGpoGkX7am

sam kod rozbudowalem o obluge bluetooth (wlaczenie strefowe + on/off piec olejowy)

utknalem na module data logging (RTC) nano shield 8105.

chcialbym aby zegar mogl dac mi opcje ustawiania czasowego(dzien w tyg.+ czas trwania) wla/wyl pieca a poprzez karte sd miec dostep do statystyk poprzez bluetooth (ile czasu pracowaly pompy, temp. na panelu i kominku).

aplikacja na adroida jest do zrobienia poprzez appinventor.

www.ai2.appinventor.mit.edu

kod wyglada tak (prosze o wyrozumialosc, dzialam w arduino dopiero od kilku dni)

int value1 = 0;

int temp1 = 0;

int value2 = 0;

int temp2 = 0;

int value3 = 0;

int temp3 = 0;

int value4 = 0;

int temp4 = 0;

int button = 0;

int heatingrads = 0;

int heatingunderfoor = 0;

int heatingtank = 0;

int previous = 0;

int oilburner = 0;

int light = 0;

int Received = 0;

int light_state = 0;

int heatingtank_state = 0;

int oilburner_state = 0;

////////////////// 6 degrees for diffON and 3 degrees for diffOFF, these give hysteresis which prevents the pump switching on and off repeatedly/////////////////////////

const int diffON = 6;

const int diffOFF = 3;

void setup()
{ 
 Serial.begin(9600);
 pinMode(A0, INPUT);
 pinMode(A1, INPUT);
 pinMode(A2, INPUT);
 pinMode(A3, INPUT);
 pinMode(5, INPUT);
 pinMode(10, INPUT);
 pinMode(11, INPUT);
 pinMode(12, INPUT);
 pinMode(13, INPUT);
 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 pinMode(10, OUTPUT);
 pinMode(11, OUTPUT);
 pinMode(12, OUTPUT);
 digitalWrite(10, HIGH);
 pinMode(heatingunderfoor,OUTPUT);
 pinMode(heatingtank,OUTPUT);
 pinMode(light,OUTPUT);
 pinMode(oilburner,OUTPUT);
}

void loop()
{
 value1 = analogRead(A0);
 temp1 = (value1 * 0.48828);
 value2 = analogRead(A1);
 temp2 = (value2 * 0.48828);
 value3 = analogRead(A2);
 temp3 = (value3 * 0.48828);
 value4 = analogRead(A3);
 temp4 = (value4 * 0.48828);
 oilburner = digitalRead(5);
 heatingrads = digitalRead(10);
 heatingunderfoor = digitalRead(11);
 heatingtank = digitalRead(12);
 button = digitalRead(13);
 light = digitalRead(6);


////////////////////bluetooth control (control by letters & numbers - 1,a,2,8,9 ////////////////////  
  if(Serial.available()>0)
{ 
   Received = Serial.read();

}
////////////////LIGHT - touch and go/////////////////////
if (light_state == 0 && Received == '1')
 {
   digitalWrite(light,HIGH);
   light_state=1;
   Received=0;  
 }
if (light_state ==1 && Received == '1')
 {
   digitalWrite(light,LOW);
   light_state=0;
   Received=0;
 }

////////////////heatingtank/////////////////////
if (heatingtank_state == 0 && Received == 'a')
 {
   digitalWrite(heatingtank,HIGH);
   heatingtank_state=1;
   Received=0;  
 }
if (heatingtank_state ==1 && Received == 'a')
 {
   digitalWrite(heatingtank,LOW);
   heatingtank_state=0;
   Received=0;
 }

////////////////oilburner////////////////////
if (oilburner_state == 0 && Received == '2')
 {
   digitalWrite(oilburner,HIGH);
   oilburner_state=1;
   Received=0;  
 }
if (oilburner_state ==1 && Received == '2')
 {
   digitalWrite(oilburner,LOW);
   oilburner_state=0;
   Received=0;
 }

////////////////heatingunderfoor/////////////////////
if (Received =='8'){
  digitalWrite(heatingunderfoor,HIGH);   
 }  
if (Received == '9'){
digitalWrite(heatingunderfoor,LOW);
}

///////////////////////set-up of temperatures//////////////////////

 if (temp3 > (temp1 + diffON)) {
   digitalWrite(2, HIGH);
 } 
 if  (temp3 < (temp1 + diffOFF)) {
   digitalWrite(2, LOW);
 } 
 if (temp2 > 110 && temp4 < 82) {
   digitalWrite(3, HIGH);
 } else {
   digitalWrite(3, LOW);
 }
 if (temp4 > 105) {
   digitalWrite(4, HIGH);
 } else {
   digitalWrite(4, LOW);
 }

 ///////////////////////////push button option////////////////////

 if (button == HIGH) {
   if (previous == 0) {
     digitalWrite(10, HIGH);
     digitalWrite(11, LOW);
     digitalWrite(12, LOW);
     previous = 1;
     delay(100); // Wait for 100 millisecond(s)
   } else {
     if (previous == 1) {
       digitalWrite(10, LOW);
       digitalWrite(11, HIGH);
       digitalWrite(12, LOW);
       previous = 2;
       delay(100); // Wait for 100 millisecond(s)
     } else {
       if (previous == 2) {
         digitalWrite(10, LOW);
         digitalWrite(11, LOW);
         digitalWrite(12, HIGH);
         previous = 3;
         delay(100); // Wait for 100 millisecond(s)
       } else {
         digitalWrite(10, HIGH);
         digitalWrite(11, HIGH);
         digitalWrite(12, HIGH);
         previous = 0;
         delay(100); // Wait for 100 millisecond(s)
       }
     }
   }
 }
}

wielkie dzieki za wszelka pomoc

pzdr

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.