"Intelligens" radiator aramlas vezerlo - megirtam a programot, szerintetek mukodni fog?

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Tiborx8
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2016. november 28. hétfő, 19:40

"Intelligens" radiator aramlas vezerlo - megirtam a programot, szerintetek mukodni fog?

Hozzászólás Szerző: Tiborx8 »

Sziasztok,

uj vagyok a forumon es az arduino programozasban is, de irtam egy programot ami nem hibas, de ettol meg nem biztos hogy csinal is valamit. :) Mivel meg nem tudom megepiteni ra a modellt, itt gondoltam kozzetenni, hatha Ti ki tudtok szurni benne valamilyen hibat.

Adott ket homero bemenet es egy dc motorvezerlo kimenet. A Dc motor egy vizpumpa es eppen akkora sebesseggel szeretnem aramoltatni a futofolyadekot, hogy a ket homero kozotti radiatorban athaladva a legtobb hot tudja leadni azaz a ket homero kozott a leheto legnagyobb legyen a homerseklet kulonbseg. Empirikus modon gondoltam megtalalni az optimalis motor sebesseget, azaz eloszor csokkkentem eggyel a motor sebesseget es ha ennek hatasara nott a homerseklet kulonbseg, akkor addig csokkentem a motor sebesseget amig a homerseklet kulonbseg no. Ha a motor sebessegenek csokkenese nem okozta a homerseklet kulonbseg novekedeset, akkor elkezdem novelni a motor fordulatszamat addig, amig a homerseklet kulonbseg no.

A legfobb problemam, hogy a while utasitas feltetelekent megadott homerseklet kulonbseg valtozni fog-e, vagyis hogy a while elotti loop szakasz ismetlodik-e folyamatosan, vagy a while megakasztja a loop futasat oly modon hogy while felteteleul adott homerseklet kulonbseg allando marad.

Itt a program, minden eszrevetelt koszonok.

Kód: Egész kijelölése

float sensorPin1 = 2;  // a bemeneti homerseklet szenzor                                            
float sensorPin2=3;   // a kimeneti homerseklet szenzor
float motor = 6;
byte motorspeed;


void setup()
{
  pinMode(sensorPin1,INPUT);
  pinMode(sensorPin2,INPUT);
  pinMode(motor,OUTPUT);
  analogWrite(motor,motorspeed);

  Serial.begin(9600);  //csak hogy kovetni tudjam majd a folyamatot
                        

  motorspeed = 130;   // a kezdeti ertek, ez kb. 50% -os motorfordulat

}
 
void loop()                     
{
  
 float reading1 = analogRead(sensorPin1);
 float reading2 = analogRead(sensorPin2); 

 
 // convertalom a szenzor ertekeket celsius fokokka 
 float temperatureBE = ((reading1 * 5.0)-0.5)*100;
 
 float temperatureKI = ((reading2 * 5.0)-0.5)*100;
 
 // megjelenitem az adatokat
 Serial.print(temperatureBE); Serial.println(" temperature in: ");
 Serial.print(temperatureKI); Serial.println(" temperature out: ");

 // meghatarozom az elso homerseklet kulonbseget
 float temperatureDIFF = (temperatureKI - temperatureBE);
 Serial.print(temperatureDIFF); Serial.println(" temperature difference ");

// kiserletkepp csokkentem a motorsebesseget
  motorspeed--;

  delay(10000);

// ujra meghatorozom a homerseklet kulonbseget
  int reading1n = analogRead(sensorPin1);
  int reading2n = analogRead(sensorPin2); 


 float temperatureBEn = ((reading1n * 5.0)-0.5)*100;
 
 float temperatureKIn = ((reading2n * 5.0)-0.5)*100;
 
 float temperatureDIFFn = (temperatureKIn - temperatureBEn);
 

 if(temperatureDIFF > temperatureDIFFn)                 
 
{ while (( temperatureDIFFn < temperatureDIFF ) || motorspeed > 0); // Szerintetek ez a homerseklet kulonbseg nem marad konstans?
{ motorspeed -- ;
delay(10000);
}}

else if (temperatureDIFF < temperatureDIFFn)
{ while (( temperatureDIFFn < temperatureDIFF ) || motorspeed < 255 );
{ motorspeed ++ ;
delay(10000);
}}

 delay(1800000);                    
 }

Admin, szerk: Program beszúrása: Code feliratú gombbal. Így olvasható marad.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: "Intelligens" radiator aramlas vezerlo - megirtam a programot, szerintetek mukodni fog?

Hozzászólás Szerző: Robert »

Ha analóg a hőmérőd, akkor annak kalibrálása szükséges. Itt egyetlen minta az zajjal lesz terhelt.
Én DS18B20 digitális hőmérőt tennék fel.

Hibakezelés hiányzik:
- Mi van ha hideg a fűtőfolyadék?
- Mi van ha leszakad az egyik hőmérő? Vagy abs. hibás adat jön?


A rengeteg delay helyett:

Kód: Egész kijelölése

elteltidő=millis()-meres.
if eltelt idő>xxxx akkor
   meres=millis();
   ....
Így a delay idején nem állok bambán, hanem: logolom SD-re, WiFin kimegy hálóra, SMS-t küld, emailezik vagy külső beavatkozást fogad vagy riaszt eseménykor....
http://www.tavir.hu - a gazda :)
Tiborx8
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2016. november 28. hétfő, 19:40

Re: "Intelligens" radiator aramlas vezerlo - megirtam a programot, szerintetek mukodni fog?

Hozzászólás Szerző: Tiborx8 »

Koszonom a hozzaszolast.
Igen, dolgozni fogok rajta hogy vedve legyen minden varatlan eshetoseh ellen - ehhez irok meg egy else lehetoseget az if reszhez, ami soran stabilizalom a motor sebesseget.

A zajt csokkenteni a belso ellenallas bekapcsolasaval lehet? A tanfolyam alapjan ez remlik..:)

Udv.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: "Intelligens" radiator aramlas vezerlo - megirtam a programot, szerintetek mukodni fog?

Hozzászólás Szerző: Robert »

Rosszul rémlik, sosem írtam ilyet:).
Többszörös mintavétel, átlagolás.
http://www.tavir.hu - a gazda :)
Tiborx8
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2016. november 28. hétfő, 19:40

Re: "Intelligens" radiator aramlas vezerlo - megirtam a programot, szerintetek mukodni fog?

Hozzászólás Szerző: Tiborx8 »

Igen, valoban ez a megoldas. :)
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: "Intelligens" radiator aramlas vezerlo - megirtam a programot, szerintetek mukodni fog?

Hozzászólás Szerző: csegebiga »

Apró logikai gixereket véltem felfedezni a programodban.
lehet, hogy én nem értettem valamit, ezért csak kérdezek:
1. hogyan vezérled a motort?
ugyanis a setup() on kívül sehol nem látok
analogWrite(motor,motorspeed); utasítást.
az szép, hogy a motorspeed-nek adsz értékeket, de az nem kerül ki a motor lábra.

2. hogyan szabályzod finoman a motor sebességét?
ugyanis a while ciklusaid mindig a motorpeed szélső értékéig futnak. (0 v 255)
mert a cikluson belül nem mérsz hőmérsékletet, és azok különbségeit.

3. milyen értéket ad az analóg hőmérőd a méréskor?
az int reading1n = analogRead(sensorPin1);értékkészlete 0-1023 egész számok
ezekután ezzel az értékkel varázsolsz egy kicsit:
((reading1n * 5.0)-0.5)*100
ez 1 bemenő értéknél ugye 450
10 nél 4950
100nál 49950
1000nél 499950
mit számolsz?
hogyan lesz ebből Celsius fok?
Tiborx8
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2016. november 28. hétfő, 19:40

Re: "Intelligens" radiator aramlas vezerlo - megirtam a programot, szerintetek mukodni fog?

Hozzászólás Szerző: Tiborx8 »

Jaj de jo, hogy reszletesen atnezted! Koszonom.

1. Az analogWrite motorvezerlest ezekszerint a loop-ban is meg kell ismetelnem.

2. Epp ebben nem voltam biztos, hogy a while utasitas feltetele gamis lesz-e valamikor. A tervem az, hogy ujra-es-ujra megtegye a motrospeed csokkentes-delay-MERES-delay-MERES hurkot amit a loop elejen irtam. Ezt ezekszerint nem fogja vegrehajtani - mi lehet itt a megoldas? A while utan ismeteljem meg az utasitassort ami a loop elejen van (a ket meres)?

3. A homerseklet elovarazsolasat celsiusban pontositom a digitalis homero tulajdonsagai alapjan.

A 2. pontban irt kommented fejen talalta a szoget, ez a lenyege a programnak, hogy a motor gyorsul/lassul addig amig megtalalja a max. Homerseklet kulonbseget, ezutan ez a motorseb stabilizalodik a kovetkezo meresi periodusig.
Udv.
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: "Intelligens" radiator aramlas vezerlo - megirtam a programot, szerintetek mukodni fog?

Hozzászólás Szerző: csegebiga »

a digitális hőmérő már a kész értéket küldi adatként. vagy farenheit vagy celsius skálán
nézd meg ezt: DS18B20
egy portra felfűzhető az összes hőmérő, és a gyárilag előre beépített azonosítóval címezheted őket
Példák
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: "Intelligens" radiator aramlas vezerlo - megirtam a programot, szerintetek mukodni fog?

Hozzászólás Szerző: SanyiSay »

Ezt én is köszi.
Legalább kicsit belenéztem miket is tud ez a DS hőmérő. Most épp a risztáson akadt meg a szemem. :D
Tiborx8
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2016. november 28. hétfő, 19:40

Re: "Intelligens" radiator aramlas vezerlo - megirtam a programot, szerintetek mukodni fog?

Hozzászólás Szerző: Tiborx8 »

"
A rengeteg delay helyett:

Kód: Egész kijelölése

elteltidő=millis()-meres.
if eltelt idő>xxxx akkor
   meres=millis();
   ....
Így a delay idején nem állok bambán, hanem: logolom SD-re, WiFin kimegy hálóra, SMS-t küld, emailezik vagy külső beavatkozást fogad vagy riaszt eseménykor....[/quote]
"
ez a millis if hogyan allitja meg a programot? ertem hogy fut egy szamlalo 0-xxxx kozott, de ettol meg nem szakad meg a loop futasa rosszul gondolom?
Tiborx8
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2016. november 28. hétfő, 19:40

Re: "Intelligens" radiator aramlas vezerlo - megirtam a programot, szerintetek mukodni fog?

Hozzászólás Szerző: Tiborx8 »

A kommentjeitek alapjan faragtam a programon:

1. beraktam az analogWrite(motor,motorspeed); definiciot a loopba,
2. a legfontosabb: a while utasitas utan beraktam mintaveteleket amik soran - remenyeim szerint - a while feltetele sem lesz allandoan igaz,

nem sikerult tobbszoros mintavetelt beleirnom: a for utasitassal foglalkoztam, de az ott kalkulalt atlagos homersekletet nem tudtam kihozni a for kapcsos zarojelein kivulre ott mar nem ismeri fel a for loopjaban definialt valtozokat.

Ha van meg energiatok ranezni a programra, megkoszonom.

Udv.

Kód: Egész kijelölése

float sensorPin1 = 2;  // a bemeneti homerseklet szenzor                                            
float sensorPin2=3;   // a kimeneti homerseklet szenzor
float motor = 6;
byte motorspeed;


void setup()
{
 
  pinMode(sensorPin1,INPUT);
  pinMode(sensorPin2,INPUT);
  pinMode(motor,OUTPUT);
  analogWrite(motor,motorspeed);

  Serial.begin(9600);  //csak hogy kovetni tudjam majd a folyamatot
                        

  motorspeed = 130;   // a kezdeti ertek, ez kb. 50% -os motorfordulat

}
 
void loop()                     
{
   
 float temperatureBE = analogRead(sensorPin1);
 float temperatureKI = analogRead(sensorPin2); 

 
 // megjelenitem az adatokat
 Serial.print(temperatureBE); Serial.println(" temperature in: ");
 Serial.print(temperatureKI); Serial.println(" temperature out: ");

 // meghatarozom az elso homerseklet kulonbseget
 float temperatureDIFF = (temperatureKI - temperatureBE);


 delay(10000);

 
 Serial.print(temperatureDIFF); Serial.println(" temperature difference ");

// kiserletkepp csokkentem a motorsebesseget
  motorspeed--;

analogWrite(motor,motorspeed);

  delay(10000);

// ujra meghatorozom a homerseklet kulonbseget
  float temperatureBEn = analogRead(sensorPin1);
  float temperatureKIn = analogRead(sensorPin2); 
 
 float temperatureDIFFn = (temperatureKIn - temperatureBEn);
 

 if(temperatureDIFF > temperatureDIFFn)                 
 
{ while (( temperatureDIFFn < temperatureDIFF ) && motorspeed > 0); // Szerintetek ez a homerseklet kulonbseg nem marad konstans?
{ 
  float temperatureBE1 = analogRead(sensorPin1);
 float temperatureKI1 = analogRead(sensorPin2); 

 
 // megjelenitem az adatokat
 Serial.print(temperatureBE1); Serial.println(" temperature in: ");
 Serial.print(temperatureKI1); Serial.println(" temperature out: ");

 // meghatarozom az elso homerseklet kulonbseget
 float temperatureDIFF1 = (temperatureKI1 - temperatureBE1);

temperatureDIFF1 = temperatureDIFF; //frissitem a while felteteleben szereplo egyik valtozot 

 delay(10000);

 
 Serial.print(temperatureDIFF); Serial.println(" temperature difference ");


  motorspeed--;

analogWrite(motor,motorspeed);

  delay(10000);

// ujra meghatorozom a homerseklet kulonbseget
  float temperatureBE2 = analogRead(sensorPin1);
  float temperatureKI2 = analogRead(sensorPin2); 
 
 float temperatureDIFF2 = (temperatureKI2 - temperatureBE2);
 
  temperatureDIFF2 = temperatureDIFFn;  // frissitem a while felteteleben szereplo masik valtozot

  delay(1000);
}}

else if (temperatureDIFF < temperatureDIFFn)

{ while (( temperatureDIFFn < temperatureDIFF ) && motorspeed < 255 );
{ float temperatureBE1 = analogRead(sensorPin1);
 float temperatureKI1 = analogRead(sensorPin2); 

 
 // megjelenitem az adatokat
 Serial.print(temperatureBE1); Serial.println(" temperature in: ");
 Serial.print(temperatureKI1); Serial.println(" temperature out: ");

 // meghatarozom az elso homerseklet kulonbseget
 float temperatureDIFF1 = (temperatureKI1 - temperatureBE1);

temperatureDIFF1 = temperatureDIFF;

 delay(10000);

 
 Serial.print(temperatureDIFF); Serial.println(" temperature difference ");


  motorspeed++;

analogWrite(motor,motorspeed);

  delay(10000);

// ujra meghatorozom a homerseklet kulonbseget
  float temperatureBE2 = analogRead(sensorPin1);
  float temperatureKI2 = analogRead(sensorPin2); 
 
 float temperatureDIFF2 = (temperatureKI2 - temperatureBE2);
 
  temperatureDIFF2=temperatureDIFFn;

  delay(1000);

}}

delay (1800000);
                   
 }

Admin: Kérlek használd a "CODE" gombot a hozzászólás szerkesztőablaka felett, ha kódot illesztesz be. Áttekinthetőbb marad.
Bearnie74
DrótVégénSzéndarab
Hozzászólások: 34
Csatlakozott: 2016. november 25. péntek, 7:10

Re: "Intelligens" radiator aramlas vezerlo - megirtam a programot, szerintetek mukodni fog?

Hozzászólás Szerző: Bearnie74 »

Kérdezhetek valamit?

Nem okoskodni akarok, csak a fizikát is számitásba veszem.

Bemenő hőmérséklet ok, kimenő mindig kisebb lesz, de minél lassabban folyik át a viz annál hidegebb lesz a kimenő vized. A legnagyobb hőmérséglet külömbséged mindig a legkisebb áramlási sebességen lesz.

Hiszen a radiátor lényegi funkciója, hogy minnél több hőt adjon le a felületén.

Tehát, logikai következtetés alapján.
Bemenő x, fordulat z, kimenő y
Ha az x állandó, akkor a kimenő y is minden z,n fordulathoz állandó lesz. Mely a radiátor hőleadó tényezőjétöl és a környezeti hőmérséglettől függ.

Igy ha már szabályzás, akkor az arra lesz jó, hogy minnél melrgebb van a szobéban, annál kisebb motorfordulat kell,, ugyanakkora hőkülömbséghez x és y között.

De ettől függetlenűl látom értelmét, ha okos otthont épitesz.
A microkontroler sok mindenre alkalmas. a Pc bármire amire meg tudod tanítani.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: "Intelligens" radiator aramlas vezerlo - megirtam a programot, szerintetek mukodni fog?

Hozzászólás Szerző: Robert »

Ha globális változó kell (azaz amit _bárhol_ használhatsz), akkor azt a setup() előtt definiáld. Mindenütt igaz az, hogy ahol először defiiálod a változót, az alatti részen (mélységében értendő) használható. A felett egyszerűen nem létezik. Fontos: ha kilépsz felülre és vissza, akkor a változó megsemmisül, és nem eltárolódik!
http://www.tavir.hu - a gazda :)
Tiborx8
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2016. november 28. hétfő, 19:40

Re: "Intelligens" radiator aramlas vezerlo - megirtam a programot, szerintetek mukodni fog?

Hozzászólás Szerző: Tiborx8 »

Bearnie74 írta:Kérdezhetek valamit?

Nem okoskodni akarok, csak a fizikát is számitásba veszem.

Bemenő hőmérséklet ok, kimenő mindig kisebb lesz, de minél lassabban folyik át a viz annál hidegebb lesz a kimenő vized. A legnagyobb hőmérséglet külömbséged mindig a legkisebb áramlási sebességen lesz.

Hiszen a radiátor lényegi funkciója, hogy minnél több hőt adjon le a felületén.

Tehát, logikai következtetés alapján.
Bemenő x, fordulat z, kimenő y
Ha az x állandó, akkor a kimenő y is minden z,n fordulathoz állandó lesz. Mely a radiátor hőleadó tényezőjétöl és a környezeti hőmérséglettől függ.

Igy ha már szabályzás, akkor az arra lesz jó, hogy minnél melrgebb van a szobéban, annál kisebb motorfordulat kell,, ugyanakkora hőkülömbséghez x és y között.

De ettől függetlenűl látom értelmét, ha okos otthont épitesz.

Szia,

nem akartam az egesz rendszert bemutatni az egyszeruseg miatt, de ha mar kerdezted, elmondom.

Ez egy rekuperator lesz, ami a beszivott friss levegot melegiti majd fel - csak akkor kapcsol be, ha minusz fokok vanak amikor a gyari hocserelok tobbnyire elektromosan elomelegitik a levegot vagy elegansan leallnak.:)

Syoval az en rendszerem: mivel van a koezlben egy kut amibel telen-nyaron azonos a viz homerseklete, leeresztek egy rezcso spiralt, amiben fagyallo kering. az igy felmelegiette (8 fok) fagyallo a haz alatt bejon a cserepkalyha es a fal koze, ott hajlitott rezcsovon felmegy a menyezetig, ahol ket auto hutoradiatoron is atmegy. Igy felmelegszik, ha a cserepkalyha is megy (de minuszoknal megy). ezutan a fagyallo felmegy a padlasra es ott egy hoszigetelt dobozban atmemegy 4 auto futoradiatoron - ezek adjak at az energiat a dobozon atvezetett kulso levegonek. A lehult fagyallo ezutan visszamegy a kutban levo rez spiralba.

A rendszerben igy eleg sok valtozo van: a fagyallo homerseklete a radiator bemeneten, a kulso levego homerseklete, valamint a kulso levego aramlasi sebessege is... Ezert - szerintem - nem oyan egyszeru a modell hogy minel lassabban kell keringetni a vizet. HA pl. tul lassu a keringes, akkor mar esetleg a radiator felenel felveszi a kulso levego homersekletet, nem szallt eleg meleget pedig a frisslevego bearamlas pl. eppen megnott mert fozunk es valaki zuhanyzik is.... ekkor pl. erdemes lehet novelni az aramlas sebesseget.

mindenesetre - ha Neked van igazad - hamar ki fog derulni hiszen ebben az esetben az arduino majd leszabalyozza a keringeto szivattyu sebesseget.
Udv.
Tiborx8
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2016. november 28. hétfő, 19:40

Re: "Intelligens" radiator aramlas vezerlo - megirtam a programot, szerintetek mukodni fog?

Hozzászólás Szerző: Tiborx8 »

Robert írta:Ha globális változó kell (azaz amit _bárhol_ használhatsz), akkor azt a setup() előtt definiáld. Mindenütt igaz az, hogy ahol először defiiálod a változót, az alatti részen (mélységében értendő) használható. A felett egyszerűen nem létezik. Fontos: ha kilépsz felülre és vissza, akkor a változó megsemmisül, és nem eltárolódik!
Koszi.ezekszerint valtozot tudok hasznalni az egesz loopban ha a setup elott definialom, de az erteket - ha valtoztatom a loopban - nem vihetem ki a kapcsos zarolejen kivulre? nincsen erre valamilyen external utasitas?

Udv.
Válasz küldése