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