Az a bajom hogy én a kettő között vergődöm. Az ipari elektronika és vezérlés nem gond mert az a munkám nap mint nap időnként megspékelve egy kis PLC-vel. Viszont a mikrokontroller és az Arduino programozás nekem magas, a suliban még nem tanultunk ilyesmit autodidakta módon meg már többször nekifutottam de reménytelen.
A kis programozható vezérlőkből (Siemens Logo, Schneider Zelio stb.)nem gond összerakni egy komplett kazán-puffer vezérlést mindenféle ínyencségekkel, de azoknak nincs vagy rettentő primitív (és drága) grafikus felületeik vannak.
Igazából nekem "csak" a mérő/kijelző részre lenne szükségem, nem kellenek univerzális bemenetek, diagramok, logolás stb. Gyakorlatilag egy 6 csatornás hőmérő amely egyszerre grafikusan jelzi ki az értékeket. 5 bemenet DS18B20 érzékelővel vagy Pt100-zal az hatodik pedig "K" hőelem fogadással vagy elég a 0...10V mert átalakítóm van. Ennyi :)
Aztán ha véletlenül összejönne a dolog lehetne cifrázni 1-2 alarm kimenettel ami csipogót vagy relét működtet.
A fent belinkelt eszköz tökéletes lenne erre a célra de nem nagyon olcsó... :) és még cinkes hogy vám-áfa is rámenne.
Épp a hetekben kezdtem el tanulmányozni ezt a jópofa programozható logikai megoldást, egyelőre fűtésvezérlés témakörben gondolok valamit építeni az eddigi REX C-100 alapú megoldás upgrade-jeként. Visszaolvasok és visszatérek majd!
Ha csak a kijelzőn múlna már itt ketyegne az asztalon. Azért arra rá is kell varázsolni a mért értékeket meg formába önteni meg minden :) Persze aki ért hozzá annak rutinfeladat, de eddig még nem sikerült fellelnem sehol még hasonló ketyerét sem.
/* Single_Temp.pde - Example using the MAX6675 Library. Created by Ryan McLaughlin <ryanjmclaughlin@gmail.com>
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. http://creativecommons.org/licenses/by-sa/3.0/ */ #define HIDEGEBB 6 // relay1 #define MELEGEBB 7 // relay2 #define MOTORFUTASIDO 1000 #define CIKLUSIDOMP 30 #include <MAX6675.h> int x = 0; int row = 0; int LED1 = 13; // Status LED Pin int CS = 4; // CS pin on MAX6675 int SO = 3; // SO pin of MAX6675 int SCLK = 5; // SCLK pin of MAX6675 int units = 1; // Units to readout temp (0 = raw, 1 = ˚C, 2 = ˚F) float temperature = 0.0; // Temperature output variable float hofok10 = 0.0;
// Initialize the MAX6675 Library for our chip MAX6675 temp(CS,SO,SCLK,units);
// Setup Serial output and LED Pin // MAX6675 Library already sets pin modes for MAX6675 chip! void setup() { Serial.begin(9600); Serial.println("CLEARDATA"); Serial.println("LABEL, TIME, temperature"); pinMode(LED1, OUTPUT); pinMode(HIDEGEBB, OUTPUT); pinMode(MELEGEBB, OUTPUT); }
void loop() { // Read the temp from the MAX6675 temperature = temp.read_temp();
if(temperature < 0) { // If there is an error with the TC, temperature will be < 0 Serial.print("Thermocouple Error on CS"); Serial.println( temperature ); digitalWrite(LED1, HIGH); } else { //Serial.print("Current Temperature: "); Serial.println(temperature ); digitalWrite(LED1, LOW); Serial.print("DATA, TIME,"); row++; x++; } // Wait one second before reading again delay(500);
/* Initiate a temperature conversion. According to MAX's tech notes FAQ's for the chip, Line going high initiates a conversion, which means, we need to clock the chip low to high to initiate the conversion, then wait for the conversion to be complete before trying to read the data from the chip. */ digitalWrite(_CS_pin,LOW); delay(2); digitalWrite(_CS_pin,HIGH); delay(220);
/* Read the chip and return the raw temperature value */
/* Bring CS pin low to allow us to read the data from the conversion process */ digitalWrite(_CS_pin,LOW);
/* Cycle the clock for dummy bit 15 */ digitalWrite(_SCLK_pin,HIGH); delay(1); digitalWrite(_SCLK_pin,LOW);
/* Read bits 14-3 from MAX6675 for the Temp. Loop for each bit reading the value and storing the final value in 'temp' */ for (int i=11; i>=0; i--) { digitalWrite(_SCLK_pin,HIGH); value += digitalRead(_SO_pin) << i; digitalWrite(_SCLK_pin,LOW); }
/* Read the TC Input inp to check for TC Errors */ digitalWrite(_SCLK_pin,HIGH); error_tc = digitalRead(_SO_pin); digitalWrite(_SCLK_pin,LOW);
/* Read the last two bits from the chip, faliure to do so will result in erratic readings from the chip. */ for (int i=1; i>=0; i--) { digitalWrite(_SCLK_pin,HIGH); delay(1); digitalWrite(_SCLK_pin,LOW); }
// Disable Device digitalWrite(_CS_pin, HIGH);
/* Keep in mind that the temp that was just read is on the digital scale from 0˚C to 1023.75˚C at a resolution of 2^12. We now need to convert to an actual readable temperature (this drove me nuts until I figured this out!). Now multiply by 0.25. I tried to avoid float math but it is tough to do a good conversion to ˚F. THe final value is converted to an int and returned at x10 power.
2 = temp in deg F 1 = temp in deg C 0 = raw chip value 0-4095 */ if(_units == 2) { temp = (value*0.25) * 9.0/5.0 + 32.0; } else if(_units == 1) { temp = (value*0.25); } else { temp = value; }
/* Output negative of CS_pin if there is a TC error, otherwise return 'temp' */ if(error_tc != 0) { return -_CS_pin; } else { return temp; } }
/* Single_Temp.pde - Example using the MAX6675 Library. Created by Ryan McLaughlin <ryanjmclaughlin@gmail.com>
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. http://creativecommons.org/licenses/by-sa/3.0/ */ #define HIDEGEBB 6 // relay1 #define MELEGEBB 7 // relay2 #define MOTORFUTASIDO 1000 #define CIKLUSIDOMP 30 #include <MAX6675.h>
int LED1 = 13; // Status LED Pin int CS = 4; // CS pin on MAX6675 int SO = 3; // SO pin of MAX6675 int SCLK = 5; // SCLK pin of MAX6675 int units = 1; // Units to readout temp (0 = raw, 1 = ˚C, 2 = ˚F) float temperature = 0.0; // Temperature output variable float hofok10 = 0.0;
// Initialize the MAX6675 Library for our chip MAX6675 temp(CS,SO,SCLK,units);
// Setup Serial output and LED Pin // MAX6675 Library already sets pin modes for MAX6675 chip! void setup() { Serial.begin(9600); pinMode(LED1, OUTPUT); pinMode(HIDEGEBB, OUTPUT); pinMode(MELEGEBB, OUTPUT); }
void loop() { // Read the temp from the MAX6675 temperature = temp.read_temp();
if(temperature < 0) { // If there is an error with the TC, temperature will be < 0 Serial.print("Thermocouple Error on CS"); Serial.println( temperature ); digitalWrite(LED1, HIGH); } else { Serial.print("Current Temperature: "); Serial.println( temperature ); digitalWrite(LED1, LOW); } // Wait one second before reading again delay(1000);
Arduino: 1.5.8 (Windows 7), Board: "Arduino Due (Programming Port)"
read_temp.pde:14:5: error: conflicting declaration 'int SCK' In file included from D:arduinohardwarearduinosamcoresarduino/Arduino.h:189:0, from C:Userswindows71DocumentsArduinolibrariesMAX6675-Library-master/MAX6675.h:12, from read_temp.pde:9: D:arduinohardwarearduinosamvariantsarduino_due_x/variant.h:135:22: error: 'SCK' has a previous declaration as 'const uint8_t SCK' static const uint8_t SCK = PIN_SPI_SCK; ^ Hiba a fordítás során.
This report would have more information with "Show verbose output during compilation" enabled in File > Preferences.
Azt is illik figyelembe venni, hogy az 1.5.8 BETA verzió máshogy kezeli a könyvtárakat mint a korábbi verziók. Akinek van ideje érdemes összehasonlítani egy régebbit az újjal, kicsit belemászva. Speciális meghatározott felépítése van, hogyan kell felépülnie a könyvtáraknak és van mindegyikben egy fájl is, ami leírja a könyvtár tartalmát.
Első gyanúm a hibaüzenet alapján, hogy neked ez a könyvtár nincs is telepítve, így bele se tudja fordítani a kódba. Így azt le kell töltened, és hozzá kell adni a könyvtárakhoz.
Ha régi felépítésű könyvtárt találsz, akkor egy korábbi Arduino verziószámmal kell feltöltened, vagy át kell alakítani a könyvtár szerkezetét.
Tipp: rosszul van telepítve a könyvtár. Szedd le, nézz bele editorral, hogy nincs-e benne hibás belső hivatkozás, aztán tedd fel újra rendes, hivatalos úton.
Mert hiába rakod tele ha az este úgyis be kell gyújtani. A 85/70 fokos pufi vesztesége 25%-al több mint egy 70/70-re fűtött pufié.
Igaz 25%-al több energiát raktál bele, de annak a 20%-át buktad veszteség formájában."
Ez így nagyon általános megfogalmazás.A fenti érték saccra 5-10 cm szigeteléssel lehet igaz, de ha emeled a szigetelés vastagságát ezek a számok már nagyon nem igazak.
Nem cél a fojtott működés, a teljesítmény csökkentés szülte kényszer.
Viszont a rendszerhatásfokát inkább növeli, ez mért adat.
A napi hőmérséklet időszakfüggő, de egy hőigényen felül az alacsonyabb periódusban inkább gazdaságos a fojtott üzem, mint a nagyintenzitású ezért alacsonyabb hatásfokú felfűtés.
Az emberi bioszenzor érzékenységétől függ, mekkora hőingadozást visel el rövidtávon, hogyan működik a hőkomfortja.
Mert ez kényelmes lehet, de én nem hiszek abban, hogy ez kevesebb fűtőanyagot igényelne.
A hőfok érdekes kérdés. Mert nem feltétlen jó az egyenletes hőfok. Ha már közel van az elvárt értékhez a helyiség hőmérséklete a lecsökkentett hőmérsékletű radiátor szerintem jobb komfortot (és megtakarítást is) eredményez.
E mellett számomra jobb ha éjszaka hidegebb van. Egy szolid 3-5 fokos hőfoklépcső ha beilleszthető a napi rutinba jelentős, 20-30% megtakarítást is eredményezhet. (ezt viszont saját tapasztalatból tudom, mert mértem még anno gázból).
"A kazán-puffer viszonylatában a maximális kazánhatásfok, maximális pufferhőfok, a puffer-radiátor oldalon a maximális hőkomfort, az időjáráskövető egyenletes, a helyiséghasználatot követő hőleadás a cél."
A maximális pufferhőfok nagyon csalóka. Több topicban is zajlik a licitálás a ki tud többet berakni a pufferbe verseny.
HA a puffer nem fűtött térben van, hanem kazánház, pince, garázs ez full totális veszteség.
Inkább a puffer kapacitásának illesztése a hőigényhez lenne érdekes.
Mert hiába rakod tele ha az este úgyis be kell gyújtani. A 85/70 fokos pufi vesztesége 25%-al több mint egy 70/70-re fűtött pufié.
Igaz 25%-al több energiát raktál bele, de annak a 20%-át buktad veszteség formájában.
Ha így közelíted meg, akkkor egy arduinó képes lehet (???) megmondani, hogy mennyi fa kell ahhoz, hogy a tárolási veszteséged csökkenjen. (Tudom, így leírva utópia, de valahol ez lehet a megtakarítás egyik alapja).
Pont olyan dologról írtok amit majd valamikor szeretnék megvalósítani.
Nem az ésszerűség hanem a hobbi miatt.
Ami nekem folyamatirányításból átjött anno és szerintem a neheze az a differenciál egyenlet felírása.
Tegyük fel, hogy a házunk fűtéséhez készülő pid vezérléshez akarom felírni az egyenletet.
Mi az alapja az egyenletnek?
Amiket látok PID-nek mondott vezérléseket mind hőfokra, füstgázra vezérel.
Én egy picit másképp gondoltam: az energia mennyiségre szeretném felírni az egyenletet.
Az épület hőveszteségét kell pótolni. De beleszámít a hőtároló kapacitás, a rendszer saját tároló képessége, puffer (mint tárolós tag a "P", "I", "D" tagon felül).....
Ezek szerencsére létező s jól megfogható összefüggések. Szerintem egy arduino simán elboldogulna vele, merthogy az egyenletek egy jelentős része előre meghatározható, nem változó, hanem konstans értékekkel számolható. (pl a falak hűlése egy felmérés után alig tartalmaz változót: a rétegrendből származó hőátbocsájtás innentől egyszerű).