Problem mit ESP32+MQ-135 / beim Nano funktioniert es gut

Ich habe bisher den Gassensor MQ-135 mit einem Arduino Nano verwendet und gute Erfahrungen mit den Messwerten gemacht. Doch beim dem ESP32 sind die Messwerte trotz sehr langer Vorwärmzeit unbrauchbar. Und das mit genau den selben und auch andren MQ-135 Sensoren. Es wird ständig "0" angezeigt. Nur wenn ich eine hohe Dosis Butangas oder andere Gase, die bei meinem Arduino Nano auf den Sensor strömen lasse, schlägt er an und geht dann ziemlich schnell wieder auf Null. Das ist beim Nano nicht so. Was ist hier an dem folgenden falsch?
Anbei ein paar Code-Auszüge:

....
const int gas_MQ135_AnalogPin = 34;                        // Der analoge Pin, an dem der Sensor angeschlossen ist beim Nano const int gas_MQ135_AnalogPin = A0; 
int analogMQ135;                                           // Hier die Variable deklarieren
....
pinMode(gas_MQ135_AnalogPin, INPUT);                       // Initialisierung analoge Pins MQ-135 Gassensor D34
....
 int analogMQ135 = analogRead(gas_MQ135_AnalogPin); // Liest den analogen Wert vom Pin gas_MQ135_AnalogPin
                        Serial.print("GassensorWert : ");
                        Serial.print(analogMQ135); // Druckt den analogen Wert über die serielle Schnittstelle
                        Serial.println(" (MQ-135)");
                        client.println("<div style='color: blue; <h4 style='display:inline;'>Gassensor:&nbsp;</h4><h1 style='display:inline;'> " + String(analogMQ135) + " &nbsp;" + "</h1>");
                        client.println("<div style='color: blue; <h4 style='display:inline;'>(MQ-135)");

Codeschnipsel nutzen da nichts.
Ich vermute mal, dein Problem ist die Betriebsspannung des MQ-135.

Ich habe 5V+ auch über eine zusätzlich Einspeisung betrieben. habe aber auch die 3,3V+ versucht.
Immer das gleiche.

Hier der einfache Code:


const int mq2_DigitalPin = 4;
const int mq2_AnalogPin = A0; //(Beim ESP32 steht statt "A0" aber  "VP" dran)
const int sensorThres = 400;

void setup() {
  Serial.begin(115200);  
  pinMode(mq2_DigitalPin, INPUT);
  pinMode(mq2_AnalogPin, INPUT);
  delay (18000); // Beim ersten Start 3 Min. warten.
}

void loop() {
  int mq2_Digital = digitalRead(mq2_DigitalPin);
  int mq2_Analog = analogRead(mq2_AnalogPin);
  
  Serial.print("Analog Value: ");
  Serial.print(mq2_Analog);
  Serial.print("Digital Value: "); 
  Serial.println(mq2_Digital);   // 0 = Kein Gas/Rauch / 1 = Gas/Rauch
  if (mq2_Analog > sensorThres) {
    Serial.println("Analogwert ist überschritten!");
  }
  delay(1000);
}

Dann schau dir doch mal des Datenblatt der MQ-135 an.
Der braucht 5 Volt und liefert bis zu 4 Volt am Ausgang.
Das kann der ESP32 aber am Eingang nicht ab.

Ja das hatte ich auch gelesen, hatte dann eine Widerstand vor geschalten. Hatte leider auch nicht geklappt. Aber vielleicht hatte ich einen falschen genommen :frowning:
Welchen würdest du empfehlen?

Ein einzelner Widerstand reicht da nicht. Du brauchst einen Spannungsteiler, der die 4 Volt auf 3,3 Volt begrenzt.

Ja du hast Recht. Das viel mir vorhin gerade ein :wink: Wie dumm von mir.
Aber ich kann mich erinnern, dass ich das auch schon probiert hatte. Denn Spannungsteiler hatte ich so eingestellte ,, dass vom max. 5V nur noch 3,3V ankommen. Ich denke, das meinst du?

Ich habe jetzt mal gemessen, wie viel Spannung beim Ausgang AO rausgehen, wenn der Gassensor eine volle "Ladung" abbekommt. Es sind max. 1.3V. Am Eingang VCC des MQ-135 liegen 5V an

Das kann dann doch nicht das Problem sein. Bei dem einen MQ-135 sogar nur 1V. Der mit dem Nano funktioniert ist leider fest verlötet. Des kann ich den nicht 1: 1 testen. Kann das sein, dass die beiden anderen defekt sind?

Ich habe nun zwei neue bei AliExpress bestellt (Da habe ich den festverlöteten auch her).

Mein Tipp: Verwende besser GPIO als Pin anstatt A0

Mit einem hochohmigen Spannungsmessgerät kannst Du die Spannung an A0 messen. Der entstehende Meßfehler ist gering.

Ein 5V-Sensor an einem 3,3V µC kann den Sensor beschädigen.

A0 gibt es ESP32 bei mir nicht. Laut Anschlussplan ist der GPIO36 der A0

Und warum schreibst du das in deinem hier gezeigten "einfachen Sketch" ?

Das ist vermutlich der für den Nano.

1 Like

Ok, also falscher Sketch.

@unold
Verwendest du mit dem ESP32 auch WLan ?

Laut Anschlussplan steht da: ADC1_0 / GPIO36 / SensVP am Board VP
Ja, auch WLAN. Ich habe jetzt auch ohne getestet, da geht es scheinbar.
Das verstehe ich jetzt gar nicht mehr.

Ok, das irritiert mich jetzt auch.
Grad nochmal nachgelesen. WLan und der ADC1 (auch GPIO36) sollen zusammen funktionieren.
ADC2 und WLan geht nicht.

Nach länger Zeit geht nun doch wieder auf Null. Was beim Nano nicht ist.
Ich habe jetzt die zwei MQ-135 mal getauscht. Ich dachte der geht ohne WLAN, aber der eine geht ganz schnell auf Null. der andere erst nach längerer Zeit.
Vielleicht sind beide Sensoren defekt. Ich habe wie gesagt 2 neu bestellt. Dauert aber bei AliExpress leider immer etwas.

Schließe mal anstelle des Sensors ein Poti an, ob der ADC funktioniert.

Oder miß mit einem hochohmigen Meßinstrument die Spannung, ob diese einbricht. Das würde auf eine Überlastung des Sensorausgangs deuten.

Du kannst auch mal einen anderen analogen Eingang probieren, VN und VP sind nicht ohne Grund speziell beschriftet.

Ich habe wie folgt die Spannung am MQ-135 gemessen:
5V+ an VCC / GND an GND
Spannungsmesser GND an GND / + an A0
(Eine lange Vorwärmzeit habe ich berücksichtigt!!!!)

Was meinst du mit "3,3 µC" genau ?

Das was wir ganz zu Anfang schon hatten.
Der ESP32 arbeitet intern nur mit 3,3Volt und verträgt diese auch nur an den Pins. Alles was mehr als 10% darüber anliegt, kann den Pin oder mehr töten.