Keresés

Részletes keresés

Amperszag Creative Commons License 2015.01.18 0 0 584

Hát igen, ez már majdnem olyan mint amire gondolok... :))

Apró eltérések ugyan vannak, de azok lényegtelenek :). Őőőőő, csak én nem látok kijelzőt vagy esetleg tényleg nincs.

 

Előzmény: Törölt nick (583)
Törölt nick Creative Commons License 2015.01.18 0 0 583

http://www.hobbytronics.co.uk/ds18b20-arduino

K hőelemre meg korábban írtam.

Előzmény: Amperszag (581)
Amperszag Creative Commons License 2015.01.18 0 0 582

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.

Előzmény: sur5al (580)
Amperszag Creative Commons License 2015.01.18 0 0 581

Az eredeti kérdés nagyjából az, hogy Arduinoval meg lehet-e csinálni valami hasonlót?

http://www.aliexpress.com/item/English-Menu-6-Channel-Data-Logger-r-Universal-Input-220VAC/2035522823.html

 

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.

Előzmény: Prof (579)
sur5al Creative Commons License 2015.01.18 0 0 580

Halihó!

 

É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!

Prof Creative Commons License 2015.01.18 0 0 579

Eredeti kérdést is, ha lehet! :-)

Előzmény: Amperszag (577)
Törölt nick Creative Commons License 2015.01.18 0 0 578

Itt visszaolvasva láthatod van megoldás, készségesen segítenek.

Először fogalmazd meg, mire gondoltál, mit szeretnél megvalósítani.

Előzmény: Amperszag (577)
Amperszag Creative Commons License 2015.01.18 0 0 577

Szóval akkor itt folytatom.

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.

 

Előzmény: Törölt nick (575)
granov Creative Commons License 2015.01.18 0 0 576

Kiinduláshoz talán elegendő ez:

http://playground.arduino.cc/Code/PIDLibrary

 

Előzmény: Törölt nick (574)
Törölt nick Creative Commons License 2015.01.18 0 0 575

Az Excelbe kiíráshoz a kód átírva:

 

/*
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);

int hofok10 = temp.read_temp()*10;
if(hofok10 > 300) {
digitalWrite(HIDEGEBB, LOW);
}
if(hofok10 < 290) {
digitalWrite(MELEGEBB, LOW);
}
delay(MOTORFUTASIDO);
digitalWrite(HIDEGEBB, HIGH);
digitalWrite(MELEGEBB, HIGH);
delay(CIKLUSIDOMP*100);
}

Előzmény: Törölt nick (574)
Törölt nick Creative Commons License 2015.01.18 0 0 574

Az eredeti célkitűzés egy termosztát PID-es. szabályozással, az adatok logolása Excelbe.

Ez utóbbi is megoldva a PLX-DAQ makróval:

 

 

Logolás Excelbe, on-line grafikon.

 

Előzmény: granov (573)
granov Creative Commons License 2015.01.18 0 0 573

Mit szeretnél PID használatával szabályozni?

Előzmény: Törölt nick (572)
Törölt nick Creative Commons License 2015.01.17 0 0 572

Működik 2 relével a termosztát MAX6675 bredboarddal, SainSmart Due SAM3X8E 32-bit ARM Cortex-M alaplappal.

A PID-es szabályozáshoz hogyan tovább?

Törölt nick Creative Commons License 2015.01.17 0 0 571

MAX6675.ccp fájl:

 

/*
MAX6675.h - Library for reading temperature from a MAX6675.

/*
MAX6675.cpp - Library for reading temperature from a MAX6675.

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
http://creativecommons.org/licenses/by-sa/3.0/
*/

#include <MAX6675.h>

MAX6675::MAX6675(uint8_t CS_pin, uint8_t SO_pin, uint8_t SCLK_pin, uint8_t units)
{
pinMode(CS_pin, OUTPUT);
pinMode(SO_pin, INPUT);
pinMode(SCLK_pin, OUTPUT);

digitalWrite(CS_pin, HIGH);

_CS_pin = CS_pin;
_SO_pin = SO_pin;
_SCLK_pin = SCLK_pin;
_units = units;
}

float MAX6675::read_temp()
{
uint16_t value = 0;
uint8_t error_tc = 0;
float temp = 0.0;

/*
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;
}
}

 

MAX6675.h library fájl:

 

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
http://creativecommons.org/licenses/by-sa/3.0/
*/

#ifndef MAX6675_h
#define MAX6675_h

#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif

class MAX6675
{
public:
MAX6675(uint8_t CS_pin, uint8_t SO_pin, uint8_t SCLK_pin, uint8_t units);
float read_temp();
private:
uint8_t _CS_pin;
uint8_t _SO_pin;
uint8_t _SCLK_pin;
uint8_t _units;
uint8_t chip_read(uint8_t CS_pin, uint8_t &error_tc);
};

#endif

DUE_thermostat_MAX6675.ino ilyen lett:

/*
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);

int hofok10 = temp.read_temp()*10;
if(hofok10 > 300) {
digitalWrite(HIDEGEBB, LOW);
}
if(hofok10 < 290) {
digitalWrite(MELEGEBB, LOW);
}
delay(MOTORFUTASIDO);
digitalWrite(HIDEGEBB, HIGH);
digitalWrite(MELEGEBB, HIGH);
delay(CIKLUSIDOMP*100);
}

Törölt nick Creative Commons License 2015.01.16 0 0 570

Rosszul fogalmaztam.

Korrekten kiírja a max6675 hőfok értékét C-ban, ennél a csipnél nincs a kompenzációs hőfok is kiírva.

Az arduino IDE könyvtárbeállításban megadott helyre kell telepíteni a korábban megadott zipes módszerrel, + átírtam a kódot.

A következő a relé működtetése lesz, még tanulmányozom a lap mellé kapott modul milyen kiépítésű, nehogy gond legyen a 3,3 V miatt.

Előzmény: Prof (569)
Prof Creative Commons License 2015.01.15 0 0 569

Serial.print-et neki, hogy a kiolvasás megy-e, vagy már azzal is gond van, nem csak a megjelenítéssel.

Előzmény: Törölt nick (568)
Törölt nick Creative Commons License 2015.01.14 0 0 568

Az SCK átírva SCLK-ra megoldódott a hiba, sikeresen ment a fordítás, a feltöltés a DUE-re.

Jelenleg egy értékket jelez, a referencia hőfokot nem.

Előzmény: Törölt nick (567)
Törölt nick Creative Commons License 2015.01.14 0 0 567

https://codebender.cc/library/MAX6675#MAX6675.h

https://codebender.cc/library/MAX6675#MAX6675.cpp

https://github.com/ryanjmclaughlin/MAX6675-Library

A legújabb források.

ZIP-ből megnyitottam a könyvtárat.

 

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.

 

Most ez a hibaüzenet.

Előzmény: Prof (564)
Törölt nick Creative Commons License 2015.01.13 0 0 566

Könyvtár probléma.

 

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.

Előzmény: Törölt nick (563)
John Zero Creative Commons License 2015.01.13 0 0 565

Letöltötted a két ZIP-et (library-k?)

    MAX6675 Libary – ZIP
    I2C LCD Library – ZIP

 

Nem kell kitömöríteni!
Utána pedig  Sketch - import library - Add Library... -> kiválasztani a ZIP-et.

 

Előzmény: Törölt nick (563)
Prof Creative Commons License 2015.01.13 0 0 564

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.

Előzmény: Törölt nick (563)
Törölt nick Creative Commons License 2015.01.13 0 0 563

Megérkezett a sainsmart DUE és a max6675 thermocouole breakout, összedrótoztam.

Az AURDINO 1.5.8 IDE az http://hobbybotics.com/projects/hobbybotics-max6675-thermocouple-breakout/

innét származó sketchnél

 

Arduino: 1.5.8 (Windows 7), Board: "Arduino Due (Programming Port)"

MAX6675_Serial.ino:7:21: fatal error: MAX6675.h: No such file or directory
compilation terminated.
Hiba a fordítás során.

This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.

 

a fenti hibát jelzi.

 

Hogyan tovább?

Törölt nick Creative Commons License 2015.01.08 0 0 562

"

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.

 

 

Előzmény: granov (556)
Törölt nick Creative Commons License 2015.01.08 0 0 561

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.

Előzmény: granov (560)
granov Creative Commons License 2015.01.08 0 0 560

Talán az éjjeli fojtott működést.

De ez talán. 

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).

Előzmény: Törölt nick (557)
Törölt nick Creative Commons License 2015.01.08 0 0 559

Érkeznek lassan a modulok, usb/rs232, max6675 K hőelemmel.

Kellene egy kiépítési koncepció pl a füstgáz szabályozóra, a N2006P  ugye egy komplett PID-es mikrokontroller házzal.

A modulokból egy síkban, egymás mellett, mit a bővítőkártyáknál, vagy egymásra tornyozva arduinósan lenne praktikusabb építkezni?

Törölt nick Creative Commons License 2015.01.08 0 0 558

Mindig rendszerhatásfokot kell venni alapul, a végén a fizetendő összeget az határozza meg.

A puffer nálam nem a maximális töltés szempontjából érdekes, csak a hatásfok függvényében.

Hőszigeteléssel változik a vesztesége.

Előzmény: granov (556)
Törölt nick Creative Commons License 2015.01.08 0 0 557

 

Bocs, hogy betaszigálom ide a fűtési grafikonokat, csak érzékeltetném a feladatot.

A vegyestüzelésű kazán jelenleg radiátorra dolgozik, itt éppen 24 órás üzemben, éjjel fojtott működéssel.

Az előremenő hőfok változásai követik a kazánteljesítményt, viszonylag egyenletes belső hőfok mellett, a külső hőfoktól látszólag kevésbé függően.

Mit lehet ezen javítani?

A helyiségekben lehetne egyenletesebb a hőfok, állandóan, a hőkomfortnak megfelelően sugárzó radiátorokkal.

A radiátor visszatérő hőfokon látszik, jelenleg nem egyenletes a hőleadás.

Előzmény: granov (555)
granov Creative Commons License 2015.01.08 0 0 556

Had mondjak ellent egy kicsit:

"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).

 

 

Előzmény: Törölt nick (551)
granov Creative Commons License 2015.01.08 0 0 555

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ű).

 

 

 

 

Előzmény: Törölt nick (550)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!