Arduino UNO R3 / analogeRead gibt 0 zurück

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);
  }
}

Hallo kryss98

Nimm mal den Widerstand raus.

Das grüne Kabel ist schuld ....

Dann ist irgendwo die Verbindung vom Sensor zu A1 unterbrochen, oder GND hat keine Verbindung zum Sensor.

1 Like

Das kann nicht sein, oder du verwechselst es mit einem digitalen Input.
Der analoge muß ohne den Widerstand (nur mit i) am Sensor angeschlossen werden.
Ausnahmen gibt es, wenn durch höhere Spannung ein Spannungsteiler vorgeschaltet werden muss.
Und GND muß verbunden werden.

Tausend Fliegen können nicht irren.
Darf ich dich fragen warum dein Sensor geheim bleiben muss?

Leider geheim, wo angeschlossen.

Widerstand, nicht Wiederstand.
Leitungsunterbrechung.

Hallo nochmal,
danke für die Antworten.

Der Sensor ist ein IFM PQC812.

Das Multimeter ist zwischen Sensor Analog Ausgang und Masse geschalten.

Den Wiederstand habe ich rausgenommen, soll laut mehren Posts die Random Zahlen beseitigen. Jetzt wo dieser raus ist bekomme ich wieder randome Zahlen die nicht passen können.

Serial Monitor spuckt aus:
23
1023
120
8
1023
421
57
1023
594
5
1023
733
0
1023
776

Das Multimeter seigt langsam von 1V auf 1.3V in circa 5-10 Sekunden.

Hast du den GND vom Sensor mit GND von Uno verbunden ?

Nein hab ich nicht. Jeweils eigene Kreise, wäre es besser die zu verbinden ?

Nochmal, es ist ein Widerstand.

Hatte ich schon geschrieben. Der muss verbunden sein, sonst fließt kein Strom.
Dein Messgerät braucht doch auch zwei Leitungen.

@HotSystems jetzt hab ich den Fehler gefunden. Ich hab zwei Stromkreise eine mit 24V und einen mit 5V. Und stimmt der Strom vom Sensor in ardiuino muss dann Ja noch weiter zu GRD. Danke nochmal.

Genau, Glückwunsch.
Merke, damit es funktioniert, muß in deinem Fall GND verbunden sein.
Es gibt durchaus andere Schaltungen.

Siehe mein Post #4. Wenn Dich Hilfe nicht interessiert, warum fragst Du dann überhaupt?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.