Hallo zusammen,
ich versuche einen Prototypen für eine Befüllprüfung zu bauen (ganz primitiv/Einsteiger). Hier wird beim drücken eines Schalter ein Relai angesteuert, dass ein Ventil mit Druckluft öffnet. Hierbei soll überprüft werden ob der Istdruck den Solldruck erreicht hat, wenn ja Ventil schließen, wenn nicht geht die Schleife in ein Timeout und das Ventil wird ebenfalls geschlossen.
Der Istdruck wird mit einem Drucksensor gemessen der ein Analogsignal zwischen 1-5 Volt ausgibt 1V = 0Bar, 5V = 2Bar. Der Sensor wird extern mit Strom gespeist und nur der Messwert wird an den Arduino A1 Port übermittelt. Der A1 Port ist mit einem Pull-Down Wiederstand an GRD geschalten, wurde im Forum mehrmals empfohlen.
Wenn ich jetzt meine void fuellen() starte und den Istdruck abfragen möchte mit analogeRead() gibt er mir immer "0" zurück und läuft somit in Timeout. Dass angescholssene Multimeter zeigt aber einen Wert von 1,3 Volt was circa 266 Bit entsprechen müsste. Nehme ich den Wiederstand raus bekomme ich Random Zahlen.
#define PIN_START_TASTER 7 // Pin Taster
#define PIN_AIRINPUT 3
#define PIN_AIROUTPUT 4
#define PIN_RESTART_TASTER 8
#define PIN_LED_MESSUNG 12
#define PIN_LED_BEREIT 13
int inputDruck = A1;
int druck = 5;
int pruefDruck = 266;
int timeout = 30; // Timeout für befüllen des Behälters = timeout = timer * 10 -> aktuell 30 Sek.
int timer = 0;
int startTaster;
int restartTaster;
int messZeit = 5;
void setup() {
Serial.begin(9600);
pinMode(PIN_START_TASTER, INPUT);
pinMode(PIN_RESTART_TASTER, INPUT);
pinMode(PIN_AIRINPUT, OUTPUT);
pinMode(PIN_AIROUTPUT, OUTPUT);
pinMode(PIN_LED_MESSUNG, OUTPUT);
pinMode(PIN_LED_BEREIT, OUTPUT);
//Grundeinstellung
digitalWrite(PIN_AIRINPUT, LOW); //Luftinput/output schließen
digitalWrite(PIN_AIROUTPUT, LOW);
}
void fuellen() {
//Intaliesierung Start
digitalWrite(PIN_LED_BEREIT, LOW); //Grüne LED
digitalWrite(PIN_LED_MESSUNG, HIGH); //Rote LED
digitalWrite(PIN_AIROUTPUT, LOW);
digitalWrite(PIN_AIRINPUT, HIGH);
timer = 0;
while (timer < timeout && druck < pruefDruck) {
druck = analogRead(inputDruck);
delay(5); //delay 1 sek.
Serial.println(druck);
timer = timer + 1; //Fehler abgreifen, wenn kein Druckaufbau
delay(1000);
}
druck = 0;
digitalWrite(PIN_AIRINPUT, LOW);
delay(1000);
if (timer == timeout) {
error();
}
}
void error() {
while (restartTaster != HIGH) {
restartTaster = digitalRead(PIN_RESTART_TASTER);
delay(100);
digitalWrite(PIN_LED_MESSUNG, HIGH);
delay(100);
digitalWrite(PIN_LED_MESSUNG, LOW);
delay(100);
}
digitalWrite(PIN_RESTART_TASTER, LOW);
digitalWrite(PIN_LED_MESSUNG, LOW);
leeren();
}
void messung() {
for (int i = 0; i <= messZeit; i++) {
digitalWrite(PIN_LED_MESSUNG, HIGH);
delay(450);
digitalWrite(PIN_LED_MESSUNG, LOW);
delay(50);
digitalWrite(PIN_LED_BEREIT, HIGH);
delay(450);
digitalWrite(PIN_LED_BEREIT, LOW);
delay(50);
}
}
void leeren() {
digitalWrite(PIN_AIROUTPUT, HIGH);
delay(5000);
}
void loop() {
startTaster = digitalRead(PIN_START_TASTER);
restartTaster = digitalRead(PIN_RESTART_TASTER);
if (startTaster == HIGH) {
delay(1000);
fuellen();
if (timer != timeout) {
messung();
}
digitalWrite(PIN_LED_BEREIT, HIGH);
digitalWrite(PIN_START_TASTER, LOW);
}
if (restartTaster == HIGH) {
delay(1000);
leeren();
digitalWrite(PIN_LED_BEREIT, HIGH);
digitalWrite(PIN_RESTART_TASTER, LOW);
}
}