Im Rahmen meines informationstechnologischen Projekts an der technischen Hochschule Köln erstelle ich ein Umweltkontrollsystem auf Basis eines Arduino Unos.
Dieser ist in der Lage für jeden Tag in jedem Monat eines Jahres einen zufälligen Max. und Min. Wert zu generieren und diesen in einem Arry abzuspeichern. Diese ganzen Arrys ergeben dann meine Datenbank.
Außerdem ist er in der Lage Temperaturen auszulesen und diese auch in Arrys abzuspeichern.
Also haben wir nun eine Ist-Temperator, eine TagesMax-Temperatur (Soll), eine TagesMin-Temperatur (Soll). Außerdem sind wir in der Lage die Zeit auszulesen, wann gemessen wurde (quasi wie späht ist es).
Was ich als nächstes versuche ist eine Funktion aufzustellen, die diese TagesMax-Temperatur und TagesMin-Temperatur als Parameter aufnimmt und aus ihnen eine mathematische Funktion aufstellt die den Temperaturverlauf am Tag beschreibt. Hierfür nehme ich einfach an, dass die TagesMin-Temperatur kurz vor Sonnenaufgang erreicht wird und die TagesMax-Temperatur 12 Stunden später. So sollte sich eine einigermaßen schöne kurve ergeben die der Arduino nutzen kann um zu schauen, zu welcher Uhrzeit es wie warm sein sollte.
Die beiden Parameter aggieren hierbei logischerweiße als Extrema. Als return wird dann ein errechneter Temperaturwert (Soll) zurück gegeben.
Ich war leider nie der große Mathecrack ... daher suche ich hier nach konstruktiven Vorschlägen. Diese können auch gerne ganz von meinen Vorstellungen abweichen, sofern die Datenbank so wie sie ist beibehalten wird.
Hier mein bisheriger Quelltext (abgespeckt auf vier Monate im Jahr und ohne auslesen des Temperaturwertes)
int MaxTemp[4]={26,28,28,25};
int MinTemp[4]={20,20,19,11};
int SollMax[30];
int SollMin[30];
int TempMaxJan[30], TempMinJan[30],
TempMaxFeb[30], TempMinFeb[30],
TempMaxMaer[30], TempMinMaer[30],
TempMaxApr[30], TempMinApr[30];
void generator(int TempMax, int TempMin, int Monat1);
void linker(int Monat2);
void setup()
{
Serial.begin(9600);
for (short j=0; j<=3; j++) {
generator(MaxTemp[j],MinTemp[j],j); //<-- Hier wird die Datenbank erstellt
}
}
void loop() {
int i;
Serial.println("-Welchen Monat moechten sie gerne einsehen?");
while(Serial.available()==0);
int eingabe=Serial.parseInt();
linker(eingabe); //<-- siehe weiter unten
Serial.println("Max. Min."); //<-- Zur Kontrolle ob generiert wurde
for (i=0; i<30; i++) {
Serial.print(SollMax[i]);
Serial.print(" ");
Serial.println(SollMin[i]);
}
}
void generator(int TempMax, int TempMin, int Monat1) {
short i;
switch (Monat1) {
case 0:
for (i=0; i<30; i++) {
TempMaxJan[i]=random(TempMax*0.8,TempMax);
TempMinJan[i]=random(TempMin,TempMin*1.2); }
break;
case 1:
for (i=0; i<30; i++) {
TempMaxFeb[i]=random(TempMax*0.8,TempMax);
TempMinFeb[i]=random(TempMin,TempMin*1.2); }
break;
case 2:
for (i=0; i<30; i++) {
TempMaxMaer[i]=random(TempMax*0.8,TempMax);
TempMinMaer[i]=random(TempMin,TempMin*1.2); }
break;
case 3:
for (i=0; i<30; i++) {
TempMaxApr[i]=random(TempMax*0.8,TempMax);
TempMinApr[i]=random(TempMin,TempMin*1.2); }
break;
}
}
void linker(int Monat2) {
short i;
switch (Monat2) {
case 1:
Serial.println("-Januar");
for (i=0; i<30; i++) {
SollMax[i]=TempMaxJan[i];
SollMin[i]=TempMinJan[i]; }
break;
case 2:
Serial.println("-Februar");
for (i=0; i<30; i++) {
SollMax[i]=TempMaxFeb[i];
SollMin[i]=TempMinFeb[i]; }
break;
case 3:
Serial.println("-Maerz");
for (i=0; i<30; i++) {
SollMax[i]=TempMaxMaer[i];
SollMin[i]=TempMinMaer[i]; }
break;
case 4:
Serial.println("-April");
for (i=0; i<30; i++) {
SollMax[i]=TempMaxApr[i];
SollMin[i]=TempMinApr[i]; }
break;
}
}
Weitere Fragen werden natürlich sehr gerne beantwortet!