Bin ein Neuling was den Arduino angeht und habe ein Problem mit meinem "ersten" kleinerem Projekt.
Ich bin dabei eine 2 Punkt Regelung aufzubauen die wie folgt ausschaut:
Ein Temperatur Sensor (TMP36GT9Z) misst den Ist Wert und vergleicht diesen mit dem Soll Wert.
Der Soll Wert wird über ein Potentiometer eingestellt. Wird der Soll Wert unterschritten werden 2 Led´s und ein Relais geschalten. Das Relais soll später ein 12V Heizelement schalten.
Nun habe ich das Problem das die gemessene Temperatur sich verändert sobald ich am Potentiometer drehe . Hoffe ihr versteht mein Problem... Unten noch der Code und ein Auszug aus den Daten des Seriellen Monitors:
28.05C (Ist-Wert)
26C (Soll-Wert)
23.66C (Ist-Wert)
36C (Soll-Wert)
24.63C (Ist-Wert)
33C (Soll-Wert)
28.05C (Ist-Wert)
32C (Soll-Wert)
28.05C (Ist-Wert)
32C (Soll-Wert)
28.05*C (Ist-Wert) Nun der Code:
int settemp;
int isttemp;
int Wert;
int temPin = 0;
int potPin = 1;
int rlsPin = 13;
int bluPin = 2;
int redPin = 3;
int yelPin = 12;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(rlsPin, OUTPUT);
pinMode(bluPin, OUTPUT);
pinMode(redPin, OUTPUT);
digitalWrite(rlsPin, HIGH);
digitalWrite(bluPin, LOW);
digitalWrite(redPin, LOW);
}
void loop() {
{
settemp =map(Wert, 0, 1023, -10, 50);
Serial.print(settemp);
Serial.println("*C (Soll-Wert)");
}
{
Wert = analogRead(potPin);
int rawvoltage= analogRead(temPin);
float volts= rawvoltage/205.0;
float isttemp= 100.0 * volts -50;
Serial.print (isttemp);
Serial.println("*C (Ist-Wert)");
delay(2000);
}
if (isttemp < settemp) {
digitalWrite(rlsPin, LOW);
digitalWrite(redPin, HIGH);
digitalWrite(bluPin, LOW);
digitalWrite(yelPin, HIGH);
} else {
digitalWrite(rlsPin, HIGH);
digitalWrite(redPin, LOW);
digitalWrite(bluPin, HIGH);
digitalWrite(yelPin, LOW);
}
}
Erstmal Danke für die schnelle Antwort!
Ja habe jeweils 100 Ohm Vorwiderstände an den LED´s. Das Relais hab ich an GND, 5v und an den Digitalen Pin 13 angeschlossen.
Gruß
nicdi:
Alles klar ich werd es mal mit größeren Widerständen und dem Code probieren. Eh hab das Relais mit dem IN anschluss direkt am Arduino verbunden.
Dann poste mal einen Link des Relais, wahrscheinlich ist es nicht nur ein Relais, sondern ein Relais-Board.
http://www.ebay.de/itm/like/390782140462?lpid=106&chn=ps&ul_noapp=true ich verwende die 1 Kanal Version.
Habe das mit größeren Widerständen und dem Code probiert, jedoch nimmt das Potentiometer immernoch Einfluss auf die Temperatur.
Hier nochmal ein sehr deutliches Beispiel aus dem Seriellen Monitor:
30C (Soll-Wert)
23.17C (Ist-Wert)
30C (Soll-Wert)
25.61C (Ist-Wert)
30C (Soll-Wert)
30.00C (Ist-Wert)
30C (Soll-Wert)
23.17C (Ist-Wert)
30C (Soll-Wert)
25.61C (Ist-Wert)
Danke für die vielen antworten!
Nein habe immernoch das Problem das sobald ich den Soll Wert hochstelle automatisch die Temperatur steigt...
-10C (Soll-Wert) // cira 22/23C Stimmt
23.66C (Ist-Wert)
50C (Soll-Wert) // Soll auf 50C gestellt
22.20C (Ist-Wert)
50C (Soll-Wert)
26.10C (Ist-Wert)
49C (Soll-Wert)
31.95C (Ist-Wert) // ist Wert steigt an...
-10C (Soll-Wert) // Soll wieder runter auf -10C
22.68*C (Ist-Wert) // Temperatur stimmt wieder...
Edit; hatte das Problem wenn ich es nur durch float deklariert habe das er einen fehler ausgespuckt hat das ich isttemp nicht deklariert wäre
int settemp;
int isttemp;
int Wert;
int temPin = A5;
int potPin = A4;
int rlsPin = 13;
int bluPin = 2;
int redPin = 3;
int yelPin = 12;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(rlsPin, OUTPUT);
pinMode(bluPin, OUTPUT);
pinMode(redPin, OUTPUT);
pinMode(yelPin, OUTPUT);
digitalWrite(rlsPin, HIGH);
digitalWrite(bluPin, LOW);
digitalWrite(redPin, LOW);
}
void loop() {
Wert = analogRead(potPin);
settemp = map(Wert, 0, 1023, -10, 50);
Serial.print(settemp);
Serial.println("*C (Soll-Wert)");
int rawvoltage = analogRead(temPin);
float volts = rawvoltage / 205.0;
float isttemp = 100.0 * volts - 50;
Serial.print (isttemp);
Serial.println("*C (Ist-Wert)");
delay(2000);
if (isttemp < settemp) {
digitalWrite(rlsPin, LOW);
digitalWrite(redPin, HIGH);
digitalWrite(bluPin, LOW);
digitalWrite(yelPin, HIGH);
} else {
digitalWrite(rlsPin, HIGH);
digitalWrite(redPin, LOW);
digitalWrite(bluPin, HIGH);
digitalWrite(yelPin, LOW);
}
}
das ist der Sketch momentan. Wenn das lokale float rausnehme fehlt mir doch "100.0 * volts - 50;"? Nehme ich das globale "int isttemp" raus sind die gemessenen Werte unrealistisch
Funktioniert schon etwas besser, jedoch immernoch das Problem das sobald ich das Potentiometer hochdrehe (also denn Sollwert) die Ist temperatur mitsteigt:
50C (Soll-Wert) // Sollwert hochgestellt
27.07C (Ist-Wert)
49C (Soll-Wert)
34.88C (Ist-Wert)
49C (Soll-Wert)
34.88C (Ist-Wert) // Temperatur steigt
-9C (Soll-Wert) // Sollwert runtergestellt
34.39C (Ist-Wert)
-10C (Soll-Wert)
22.68C (Ist-Wert) // Temp wieder auf dem wirklichen IST Stand
nicdi:
Funktioniert schon etwas besser, jedoch immernoch das Problem das sobald ich das Potentiometer hochdrehe (also denn Sollwert) die Ist temperatur mitsteigt:
50C (Soll-Wert) // Sollwert hochgestellt
27.07C (Ist-Wert)
49C (Soll-Wert)
34.88C (Ist-Wert)
49C (Soll-Wert)
34.88C (Ist-Wert) // Temperatur steigt
-9C (Soll-Wert) // Sollwert runtergestellt
34.39C (Ist-Wert)
-10C (Soll-Wert)
22.68C (Ist-Wert) // Temp wieder auf dem wirklichen IST Stand
Das ist nicht besser, sondern immer noch "Mist". Das darf nicht sein.
Was hast du für ein Netzteil dran? Ist die Spannung sauber und stabil?
Wie lang sind die Kabel?
Und warum packst du den Sketch nicht in Code-Tags?