Programmieren mit MicroPython #8: Gas Sensor MQ-9 am ESP32 betreiben

In diesem Beitrag möchte ich dir zeigen wie du den Gas Sensor MQ-9 am ESP32 betreiben kannst. 

Diesen Sensor habe ich bereits für den Arduino im gleichnamigen Beitrag Arduino Lektion #112: Sensor MQ-9 für Kohlenmonoxid und entflammbare Gase vorgestellt. In diesem Beitrag jedoch gehe ich darauf ein wie dieser mit der Sprache MicroPython am ESP32 programmiert und betrieben wird.

Bezug

Diesen Sensor habe ich über ebay.de für knapp 4,5€ inkl. Versandkosten erstanden. 

Technische Daten des Gas Sensors MQ-9

  • Betriebsspannung 5V
  • Heizwiderstand 31 Ω  ± 3Ω
  • Stromaufnahme des Heizelements ≤ 180mA
  • Heizspannung 5V ± 0,1V / 1,5V ± 0,1V
  • Heizenergieleistung max. 350mW
  • Genauigkeit ≥ 3%
  • Antwortzeit ≤ 1sek.
  • Ansprechzeit nach dem Einschalten ≤ 30sek.

Aufbau & Schaltung

Die Platine des Gas Sensors MQ-9 verfügt über 4 Pins welche wie folgt mit dem ESP32 verbunden werden.

Sensor MQ-9 ESP32
VCC 5V von externem Power Shield
GND G
DO GPIO 16
AO GPIO 0
 
Aufbau der Schaltung - Gas Sensor MQ-9 am ESP32
Aufbau der Schaltung – Gas Sensor MQ-9 am ESP32

Pinout des ESP32

Der ESP32 verfügt nicht an jedem GPIO Pin über die Möglichkeit einen analogen Sensor zu lesen. In der nachfolgenden Grafik sind die GPIO Pins für das lesen von analogen Sensoren mit der Beschriftung „A2:n“ bzw „A1:n“ versehen.

Pinout des Microcontrollers ESP32 - LOLIN32
Pinout des Microcontrollers ESP32 – LOLIN32

Stromversorung

Das ESP32 Board verfügt nur über einen 3V Pin somit müssen wir in diesem Fall eine externe Stromversorgung wählen. Da ich den ESP32 auf einem 400 Pin Breadboard gesteckt habe kann ich ein passendes Power Shield für ein Breadboard verwenden.

Power Shield für ein 400 / 720 Pin Breadboard
Power Shield für ein 400 / 720 Pin Breadboard

Programmieren mit MicroPython

Damit wir die Daten unverfälscht lesen können müssen wir zunächst den Sensor in der aktuellen Umgebung kalibrieren. 

from machine import Pin, ADC #Bibliothek zum auslesen von analogen Werten
from time import sleep #importieren der Funktion sleep aus dem Modul time

#der GPIO Pin 34 als analogen Eingang verwenden
mq9 = ADC(Pin(34))

#globale Variable
R0 = 0

print("calibration")
sensorValue = 0

#Schleife von 1 bis 100
for value in range(1,100):
  sensorValue = sensorValue + mq9.read()

#berechnen des Durchschnittwertes
sensorValue = sensorValue / 100.00

sensor_volt = (sensorValue / 1024) * 5.0
RS_air = (5.0 - sensor_volt) / sensor_volt
R0 = RS_air/9.9 #der Wert 9.9 wurde aus dem Datenblatt zum Gas Sensor MQ-9 entnommen

#Beginn der Endlosschleife
while(1):
  #lesen des aktuellen analogen Wertes
  sensorValue = mq9.read()
  sensor_volt = (sensorValue / 1024)  *  5.0
  RS_gas = (5.0 - sensor_volt) / sensor_volt
  ratio = RS_gas / R0
  
  #Ausgabe der Messwerte
  print("sensorVolt: "+ str(sensor_volt))
  print("RS_ration: " + str(RS_gas))
  print("Rs/R0: "+ str(ratio))
  
  #eine Pause von 1,5 Sekunden
  sleep(1.5)

Es ist wichtig das die externe Stromversorgung VOR dem ausführen des Programmes aktiviert wird denn sonst gibt es die Fehlermeldung „Division by Zero“.

In dem oben gezeigten Programm werden die Daten in die Konsole mit dem Befehl „print“ geschrieben. 

IDE upyCraft - Gas Sensor MQ-9
IDE upyCraft – Gas Sensor MQ-9

schreiben der Daten in eine CSV Datei

In diesem Abschnitt möchte ich dir nun zeigen wie du diese Daten in eine CSV Datei schreiben kannst. Die Datei können wir dann später mit zbsp. Microsoft Excel öffnen und in Diagramme visualisieren.

Für die Programmierung des ESP32s nutze ich die Entwicklungsumgebung upyCraft diese ist kostenfrei erhältlich und hat einen sehr guten Funktionsumfang jedoch muss man ein paar Abstriche machen einer davon ist dass diese Anwendung nur *.py, *.txt und *.json Dateien öffnen kann. Somit müssen wir unsere CSV Datei als *.txt Datei abspeichern.

from machine import Pin, ADC
from time import sleep

mq9 = ADC(Pin(34))

R0 = 0

print("calibration")
sensorValue = 0

for value in range(1,100):
  sensorValue = sensorValue + mq9.read()
  
sensorValue = sensorValue / 100.00
sensor_volt = (sensorValue / 1024) * 5.0
RS_air = (5.0 - sensor_volt) / sensor_volt
R0 = RS_air/9.9

#Datei mq9_data.txt anlegen und öffnen zum schreiben
#bereits vorhandene Daten werden überschrieben
#Wenn neue Daten angehängt werden sollen, dann muss
#der Parameter 'w' durch 'a' (append) ausgetauscht werden.
index = 0
with open('mq9_data.txt','w') as file:
  file.write(';sensor_volt;RS_gas;ratio\n')
  while(1):
    index = index + 1
    sensorValue = mq9.read()
    sensor_volt = (sensorValue / 1024)  *  5.0
    RS_gas = (5.0 - sensor_volt) / sensor_volt
    ratio = RS_gas / R0
    #schreiben der Daten in die Datei
    file.write(str(index)+';'+str(sensor_volt).replace('.',',')+';'+str(RS_gas).replace('.',',')+';'+str(ratio).replace('.',',')+'\n')
    #einen Punkt auf der Konsole ausgeben
    print('.', end='')
    #eine kleine Pause von 1,5 Sekunden
    sleep(1.5)

Video

Sollte das Video etwas verschwommen sein, so stelle die Qualität auf „1080P“.

ESP32 Daten des Gas Sensors MQ-9 sammeln und in Microsoft Excel visualisieren

 

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert