Guten Tag,
Ich beschäftige mich seit ca. 3 Wochen mit Microcontrollern. Im Vorfeld habe ich mit der Thematik nicht all zu viel zu schaffen gehabt und bitte daher mein eventuell naiven Umgang mit der Materie zu entschuldigen. Vielen Dank ![]()
Zum Projekt. Realisieren Möchte ich einen Kühlstellenregler der über Taster bedient werden kann. Soweit ich das von meiner Warte aus beurteilen kann funktioniert alles bis dato wie ich es mir vorstelle.
Aktuell beschäftigt mich jedoch ein Problem mit der Temperaturerfassung mittels LM35 für das ich bis jetzt nicht in der Lage war selbstständig eine Lösung zu erdenken. ( 99.9% wahrscheinlich durch mangelhaftes wissen bedingt).
Der Temperatur wert wird akkurat gelesen. Wird jedoch das Relais oder die Displaybeleuchtung geschaltet beeinflusst dies den gemessenen Temperaturwert im bereich von 1 bis 10K.
Ich vermute das dies an einem absinken der Spannung am 5V Pin liegt wenn Verbraucher geschlatet werden. Hier sinkt der wert von 5,0V auf bis zu 4,78V ab.
Versuche das Phänomen mittels analogReference() bei zu kommen sind gescheitert.
Untitled Sketch_Steckplatine.png zeigt eine grobe Übersicht der Verbraucher( Verwende Arduino MEGA habe diesen aber im Fritzing nicht gefunden. Daher ist die Verdrahtung nicht 1:1 abgebildet )
#include <LiquidCrystal.h>
#include <EEPROM.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#define UP 30
#define DOWN 31
#define PLUS 32
#define MINUS 33
#define COMP 29
#define SAVE 28
#define LED 27
#define LIGHT 26
#define PROBE A0
int UPx; // Button UP
int DOWNx; // Button DOWN
int PLUSx; // Button +
int MINUSx; // Button -
int SAVEx = 1; // Button SAVE (Sollwert und Hysterese wird in EEPROM geschrieben)
int LEDx; // Button Displaylight on/off
int LEDs; // Displaylight Status on/off
int PROBEx; // Thermoresistor
float PROBEy; // Temperaturdurchschnitt aus 5 Messungen
int menuPage = 0; // Bei Start Menuseite 1 anzeigen
int WANTx = EEPROM.read(100); // Sollwert bei Start aus EEPROM lesen
int HYSTx = EEPROM.read(101); // Hysterese bei Start aus EEPROM lesen
//----------------\/--SETUP--\/------------------
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(UP, INPUT_PULLUP);
pinMode(DOWN, INPUT_PULLUP);
pinMode(PLUS, INPUT_PULLUP);
pinMode(MINUS, INPUT_PULLUP);
pinMode(COMP, OUTPUT);
pinMode(SAVE, INPUT_PULLUP);
pinMode(LED, INPUT_PULLUP);
pinMode(LIGHT, OUTPUT);
pinMode(PROBE, INPUT);
int LEDs = 0;
}
//----------------/\--SETUP--/\-------------------
//----------------\/--LOOP--\/--------------------
void loop(){
UPx = digitalRead(UP);
DOWNx = digitalRead(DOWN);
PLUSx = digitalRead(PLUS);
MINUSx = digitalRead(MINUS);
SAVEx = digitalRead(SAVE);
LEDx = digitalRead(LED);
PROBEx = analogRead(PROBE);
//---------------\/--DISPLAY LIGHT--\/-------------
if(LEDx < 1){
delay(300);
if(LEDs >= 1){LEDs = 0;}
else{LEDs++;}
}
if(LEDs > 0){ // (---- Displaylight on/off
digitalWrite(LIGHT, HIGH);
}
if(LEDs < 1){
digitalWrite(LIGHT, LOW);
}
//---------------/\--DISPLAY LIGHT--/\-------------
//---------------\/--BUTTON INPUT--\/--------------
if(UPx < 1){
delay(300);
++menuPage;
if(menuPage == 3)
menuPage = 0;
}
if(DOWNx < 1){
delay(300);
--menuPage;
if(menuPage < 0)
menuPage = 2;
}
if(PLUSx < 1){
delay(300);
if(menuPage == 1){ // (---- Menu Scrollen und Werte ändern
++WANTx;
}
if(menuPage == 2){
++HYSTx;
}
}
if(MINUSx < 1){
delay(50);
if(menuPage == 1){
--WANTx;
}
if(menuPage == 2){
--HYSTx;
}
}
//---------------/\--BUTTON INPUT--/\--------------
// ----------------\/--NAVIGATE--/\----------------
if(menuPage == 0){
roomTemp();
}
if(menuPage == 1){
wantTemp(); // (---- Menu Seiten
}
if(menuPage == 2){
hyst();
}
// ----------------/\--NAVIGATE--/\----------------
// ----------------\/--COMP RELAIS--/\-------------
if(PROBEy > WANTx){
digitalWrite(COMP, HIGH);
} // (---- Relais Schaltlogik
if(PROBEy <= (WANTx - HYSTx)){
digitalWrite(COMP, LOW);
}
// ----------------/\--COMP RELAIS--/\-------------
// ------------\/--SAVE PARAMETERS--\/-------------
if(SAVEx < 1){
lcd.clear();
lcd.setCursor(6, 0);
lcd.print("SAVE"); // (---- Aktuelle Werte in EEPROM speichern
EEPROM.update(100, WANTx);
EEPROM.update(101, HYSTx);
delay(1000);
}
// ------------/\--SAVE PARAMETERS--/\-------------
}
//----------------\/--AVRAGE VAL--\/---------------
void avragePROBE(){
float temp[5];
temp[1]=(5.0 * 100.0 * analogRead(PROBE)) / 1024;
delay(100);
temp[2]=(5.0 * 100.0 * analogRead(PROBE)) / 1024;
delay(100);
temp[3]=(5.0 * 100.0 * analogRead(PROBE)) / 1024; // (---- Fühler Durchnittswert ermitteln
delay(100);
temp[4]=(5.0 * 100.0 * analogRead(PROBE)) / 1024;
delay(100);
temp[5]=(5.0 * 100.0 * analogRead(PROBE)) / 1024;
delay(100);
PROBEy = (temp[1]+temp[2]+temp[3]+temp[4]+temp[5])/5;
}
//----------------/\--AVRAGE VAL--/\---------------
//--------------\/--MENU ROOMTEMP--\/--------------
void roomTemp(){
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Raumtemperatur");
lcd.setCursor(4, 1);
lcd.print(PROBEy); // (---- Menu Raumtemperatur
lcd.setCursor(10, 1);
lcd.print(char(223));
lcd.print("C");
avragePROBE();
}
//--------------/\--MENU ROOMTEMP--/\--------------
//--------------\/--MENU WANTTEMP--\/--------------
void wantTemp(){
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Sollwert");
lcd.setCursor(5, 1);
lcd.print(WANTx); // (---- Menu Sollwert
lcd.setCursor(8, 1);
lcd.print(char(223));
lcd.print("C");
delay(150);
}
//--------------/\--MENU WANTTEMP--/\--------------
//--------------\/--MENU HYSTERESE--\/-------------
void hyst(){
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Hysterese");
lcd.setCursor(7, 1);
lcd.print(HYSTx); // (---- Menu Hysterese
lcd.setCursor(9, 1);
lcd.print("K");
delay(150);
}
//--------------/\--MENU HYSTERESE--/\-------------

