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.