– There is also an English Version of this tutorial available –
Um die Bestandteile der Luft zu erfassen sind Sensoren nötig. Diese sind z.B. in Rauchmeldern verbaut. Allerdings sind Anleitungen zur Nutzung dieser Gas-Sensoren am Raspberry Pi selten, weshalb es in diesem Tutorial um die generelle Nutzung solcher MQ Module am Raspberry Pi geht. Damit können z.B. Rauchmelder oder Luftqualitätstester gebaut werden.
Wie man jegliche MQ Sensoren konfiguriert und ausließt wird am Beispiel des Raspberry Pi Gas Sensor MQ2 in diesem Tutorial gezeigt. Alle anderen Sensoren (MQ3, MQ-135, usw.) können mit ein paar zusätzlichen Schritten ebenso angepasst werden.
Zubehör
Jegliche MQ-X Sensoren geben analoge Signale zurück, welche wir nicht ohne weiteres am Raspberry Pi auslesen könnten. Eine Möglichkeit wäre einen Arduino zu verwenden, allerdings können wir auch einen Analog-Digital Wandler benutzen, welcher über den I2C Bus ausgelesen werden kann. Ein recht ausführliches Tutorial zur Verwendung des ADCs findest du hier. Daneben benötigen wir auch noch einen Pegelwandler
Diese Bauteile sind unabhängig vom gewählten Gas Sensor. Weiterhin gibt es noch viele verschiedene Sensoren für den Raspberry Pi, welche bereits für wenige Euro erhältlich sind und jeweils für unterschiedliche Gase geeignet sind:
- MQ-2: Methan, Butan, LPG (Autogas), Rauch
- MQ-3: Alkohol, Ethanol, Rauch
- MQ-4: Methan, CNG Gas (komprimiertes Erdgas)
- MQ-5: Erdgas, LPG (Autogas)
- MQ-6: LPG (Autogas), Butan
- MQ-7: Kohlenmonoxid
- MQ-8: Wasserstoffgas
- MQ-9: Kohlenmonoxid, entflammbare Gase
- MQ131: Ozon Gas
- MQ135: Luft Qualität (Benzol, Alkohol, Rauch)
- MQ136: Schwefelwasserstoffgas
- MQ137: Ammoniak
- MQ138: Benzol, Steinkohlenteeröl (Toluol), Aceton, Propan, Formaldehyd, Wasserstoffgas
- MQ214: Methan, Erdgas
- MQ216: Erdgas, Kohlegas
- MQ303A: Alkohol, Ethanol, Rauch
- MQ306A: LPG (Autogas), Butan
- MQ307A: Kohlenmonoxid
- MQ309A: Kohlenmonoxid, entflammbare Gase
- MG811: Kohlendioxid (CO2)
- AQ-104: Luftqualität
- AQ-2: entflammbare Gase, Rauch
- AQ-3: Alkohol, Benzin
- AQ-7: Kohlenmonoxid
Ich empfehle einen Sensor mit aufgelöteten PCB zu nehmen, weil dadurch keine weitere Verkabelung und Einsetzen von Widerständen und Kondensatoren nötig ist.
Details zu den einzelnen Raspberry Pi Gas Sensoren findest du auch in den dazugehörigen Datenblättern. Dazu einfach den Namen des Sensors inkl. „datasheet“ googlen. Darin ist auch erwähnt mit welcher Spannung der Sensor arbeitet.
Falls jemand einen Alkoholtester o.ä. bauen will, sollte sich allerdings auch dessen bewusst sein, dass diese Module alle nicht absolut genau sind und dementsprechend mit einer professionellen Messung nicht mithalten können.
Anschluss zwischen MQ-2 und Raspberry Pi
In diesem Beispiel wird von einer 5V SPannung ausgegangen. Dies ist für die GPIOs zu viel, weshalb wir einen Logik Level Konverter (TTL) nutzen, der die Spannung herunterbricht. Falls du einen anderen Sensor als den MQ-2 verwendest und dieser eine andere Spannung hat, muss der Aufbau natürlich angepasst werden.
Nachdem der MCP3008 richtig angeschlossen ist, nutzen wir den Port 0 und verbinden ihn an RX0 des TTLs. Auf der gegenüberliegenden Seite befindet sich RX1, welches an den Analog Pin (A0) des MQ2 Sensors kommt. Außerdem wird an den TTL 3.3V vom Raspberry Pi (LV) und 5V (HV) angeschlossen. Ebenso kommen 5V an den VCC Pin des Gas Sensors und GND vom Raspberry Pi kommt an GND auf der LV und HV Seite des TTLs, sowie an GND vom MQ2.
Schematisch sieht das ganze dann folgendermaßen aus:
Ich nutze hierbei die 5V des Raspberry Pi’s. Allerdings ist eine externe Stromversorgung zu empfehlen, falls noch andere Sensoren und Module bzw. Eingabegeräte (Tastatur, Maus, Touchscreen) verwendet werden. Dazu wird der Sensor einfach von der externen Quelle mit Strom beliefert (HV Seite des TTL) und der Masse Anschluss (Minus/GND) mit GND des Raspberry Pi’s verbunden.
Konfiguration des Raspberry Pi Gas Sensor – Vorbereitung
Die Angaben der Konzentration eines Gases werden in PPM (parts per million) angegeben. Eine Schwierigkeit des MQ-2 ist nun, dass ein einziger analoger Wert ausgegeben wird, mit welchem der Gasgehalt in der Luft für die verschiedenen unterstützten Gase berechnet werden muss. Allerdings muss dafür der Sensor zum einen konfiguriert werden. Da diese Anleitung auch für einen anderen Raspberry Pi Gas Sensor übertragbar sein soll, ist hier die Vorgehensweise:
Zu Beginn schauen wir ins Datenblatt des jeweiligen Moduls, worin sich u.a. ein Diagramm befindet.
Die Skalierung der Werte ist allerdings nicht linear sondern logarithmisch zur Basis 10 (log). Das bedeutet, dass der erste Strich auf der X-Achse 200 entspricht, danach 300 usw. Der erste Strich nach 1000 ist 2000, usw. Der Abstand dazwischen ist linear. Die Idee, welche hinter diesem Skript zur Kalibrierung und Auslesung steckt, ist eine Gerade zu erstellen und so den Anteil des Gases (in ppm) zu berechnen. Dazu brauchen wir zwei Punkte, um die Steigung zu berechnen.
Veranschaulichen wir das am Beispiel von LPG. Wir nehmen also den Punkt P1(x=200, y= ~1.62) und P2(x=10000, y= ~0.26). Um die „echten“ Werte zu berechnen, wenden wir den Zehner-Logarithmus an. Mit Hilfe der Zwei-Punkte Form können wir die Steigung berechnen, die in unserem Fall -0.47 ist (Link zur Rechnung). Mit der Steigung und dem gezogenen Logarithmus aus dem linken Punkt (x=2.3, y=0.21) können wir die Gerade nun bestimmen.
Für die restlichen Gase ist die Berechnung äquivalent und kann genauso durchgeführt werden. Wer weiteren Lesestoff dazu haben will, kann diesen u.a. hier bekommen (Englisch).
Kalibrierung des Raspberry Pi Gas Sensor – Code
Genug der Theorie – wir wollen den Sensor nun anfangen zu verwenden. Dazu kann der von mir angepasste Code verwendet werden, welcher sich in einem GitHub Repository befindet. Mit dabei ist auch eine Klasse zum Auslesen des MCP3008. Zunächst klonen wir das Verzeichnis:
git clone https://github.com/tutRPi/Raspberry-Pi-Gas-Sensor-MQ
Anschließend wechseln wir in das Verzeichnis und führen die vorhandene Python Test-Datei aus.
cd Raspberry-Pi-Gas-Sensor-MQ sudo python example.py
Bei der Initialisierung wird die Kalibrierung automatisch gestartet. Es ist wichtig, dass sich der Sensor in guter / frischer Luft befindet, da Rauch / andere Gase die Kalibrierung verfälschen würden. Der Vorgang dauert ein paar Sekunden, jedoch kann danach bereits der Gasgehalt gemessen werden (siehe Video). Einige Sensoren werden recht heiß, was aber kein Grund zur Sorge sein sollte.
Manche Nutzer berichteten, dass die Werte erst nach einiger Zeit genau werden. Ich kann dies leider nicht verifizieren, da ich kein professionelles Messgerät habe. Sollte jemand das bestätigen oder überprüfen können, da er ein solches Gerät zuhause hat, würde ich mich über eine Rückmeldung als Kommentar freuen 🙂
87 Kommentare
Tolles Thema. Gute Anleitung. Danke!
when i run example.py, i am getting float division by zero exception
Hallo. Welchen MQ kann ich verwenden um pupse zu messen? Brauch ich da mehrere die ich über gpio ansteuere? Würde gerne wissen wie oft meine Freundin pupst, da sie es nicht zugibt ^^
Haha 😀
Kurze Google Recherche ergab: Fürze bestehen hauptsächlich aus Methan, Hydrogen, Nitrogen, Sauerstoff und Carbon Dioxid. Wahrscheinlich bräuchtest du mehrere Sensoren, um alle Gase festzustellen. Die genaue Zusammensetzung kenne ich aber nicht 😀
Hi Mathias
Bin grad über deine Frage gestolpert. Ich weiß nicht ob sie noch aktuell ist aber hier:
https://www.raspberrypi.org/learning/fart-detector/
findest du eine sehr gelungene Anleitung wie du einen Furz-Detektor bauen kannst.
it is not working for me.
it just displays message calibrating …
Abort by User
Check if you have enabled „SPI“ in the Raspberry Pi Configuration
Hallo Felix,
ich mal wieder.
Hast du Lust, uns Losern zu erklären, wie man die Daten der Sensoren auf ein Nokia 5110 Display oder HD44780 bekommt?
Wobei ein Nokia-Display erstens cooler und zweitens günstiger ist.
Gruß Ingo
Hi Ingo,
sofern die Daten ausgelesen sind, können diese super einfach auf einem HD44780 angezeigt werden: HD44780 LCD Display per I2C mit dem Raspberry Pi ansteuern
So ein Display gibt es ja bereits ab ca. 5€. Ich nutze es selbst in einigen Videos.
LG, Felix
Ich habe auch das Problem dass er nach der Meldung „calibrating …“ abricht mit „Abort by User“. Und nein, ich drücke nicht Strg+C. Kann mir jemand weiterhelfen?
Da scheint ein anderer Fehler aufzutreten. Du müsstest mal innerhalb der Datei Logs setzen, um rauszufinden, was nicht klappt.
Schau mal, ob du „SPI“ in der Rasp-Konfiguration aktiviert hast
Hi Felix,
ich habe das Ganze mit einem MQ3 zusammengebaut (Fehllieferng)
und bekomme die Fehlermeldung:
Traceback (most recent call last):
File „example.py“, line 1, in
from mq import *
File „/root/Raspberry-Pi-Gas-Sensor-MQ/mq.py“, line 6, in
from MCP3008 import MCP3008
File „/root/Raspberry-Pi-Gas-Sensor-MQ/MCP3008.py“, line 1, in
from spidev import SpiDev
ImportError: No module named spidev
Liegt das an dem andern MQ-Sensor oder habe ich einen Fehler gemacht?
Gruß Ingo
Dir fehlt SpiDev.
Alles klar, hier mit:
https://tutorials-raspberrypi.de/raspberry-pi-mcp3008-analoge-signale-auslesen/
habe ich erst mal die SpiDev installiert.
Nun funktioniert auch erst mal das example.py; es werden nach dem Calibrieren die drei Werte angezeigt.
Aber nach ein paar Sekunden kommt: „Abort by user“
Natürlich habe ich nix mit CTRL+C gedrückt, oder so…
Hat einer ne Idee, woran das liegen kann…?
Gruß Info
Hello, thank you for the tutorial. I have and MG811 (CO2 sensor), would the code that you have above, work for that specific sensor? Or would I need to come up with some other formula?
The Code above is just for the MQ-2. For other Sensors you have to implement the formula, depending on what is written in the datasheet of that specific sensor.
Hallo,
verstehe ich das richtig, dass alle hier vorgestellten Sensoren, ausser auf einem RasPi, auch auf einem ESP8266 oder ESP32 genau so verwendet werden können?
Grüße
Peter
Ja, die aller meisten Sensoren können auch von einem ESPxx oder Arduino verwendet werden. Falls es genügend Leute interessiert, werde ich zu den ESP’s auch Tutorials erstellen.
Also mein Interesse für Tutorials zu ESP8266 und ESP32 wäre vorhanden.
what should i have to do for mq135 ?
You have to adjust the equatuion (depending on the graph in the datasheet) as described above.
after the calculation as per graph i got output like ,
ro=0.0
abort by user
what should be value of Ro and RL?
I want use mq2 sensor output in node red using tcp node.can I use this? import output
import socket
TCP_IP = ‚127.0.0.1‘
TCP_PORT = 1888
class Print(output.Output):
requiredData = []
optionalData = []
def __init__(self,data):
pass
def outputData(self,dataPoints):
for i in dataPoints:
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(i[„name“] + „:“ + str(round(i[„value“],1)))
s.close()
except:
pass
return True
I want to use mq2 sensor output in node red.what I do?
Hallo,
ich habe das Projekt mit einem MQ3 zusammengebaut und das Skript zur Kalibrierung entsprechend verändert so wie es in der Anleitung steht. Und zwar ist dann das Problem, dass das analoge Signal immer anders also zufällig ist und manchmal sogar 0 und ich weiß da einfach nicht mehr weiter 🙁 Hätte da jemand eine Idee?
Hi 🙂
Bei mir wird leider die Kalibrierung abgebrochen, weil die Spannung vom AD-Wandler auf 0 abfällt. In der Funktion „MQResistanceCalculation“ wird dann mit 0 dividiert, was natürlich einen Fehler zurückgibt. Hat jemand eine Idee an was das liegen kann?
Vielen Dank schon mal für Eure Hilfe!
Guten Tag Zusammen
Wenn ich das richtig sehe, stimmt die Berechnung in MQResistanceCalculation nicht. Dort steht folgende Berechnung:
RS_VALUE = self.RL_VALUE * (1023.0-raw_adc) / float(raw_adc)
Nach meiner Umstellung der Ursprungsformel für Spannungdivisoren ergibt sich folgendes:
RS_VALUE = (self.RL_Value * 1023 / float(raw_adc)) – self.RL_VALUE
Beim MQ2-Sensor fällt diese Fehlberechnung nicht so ins Gewicht, da die RS und RL Werte sich nicht so stark unterscheiden. Beim MQ3 mit 200k RL und bis zu 8M RS sieht das ganze schon etwas anders aus
Vielleicht hilft das dem einen oder anderen weiter 😉
Okee, ich bin anscheined zu blöd um richtig zu vereinfachen, die Berechnung stimmt so. *facepalm*
Danke für den Artikel.
Funktioniert … aber … Ich habe am 3008 mehrere Sensoren angeschlossen.
Ich muss in der mq.py daher an zwei Stellen den Analog Port (hier 7) einstellen.
Einmal oben und einmal beim __init call.
MQ_PIN = 7 # define which analog input channel you are going to use (MCP3008)
def __init__(self, Ro=10, analogPin=7):
Richtig, daher habe ich die Pinnummer nicht hardcoded 😉
also verstehe ich das hier richtig. Bei dem oben aufgezeichneten Aufbau wird der analog input channel „7“ benutzt und dies muss im Code noch umgeändert werden, richtig?
Dann muss dies wahrscheinlich auch in der MCP3008 datei geändert werden ? und wenn ja, dann wo genau(welche Zeile im code)?
Du musst in der mq.py den Wert von
MQ_PIN
ändern (im Moment = 0)Hallo, ich habe den MQ-2 so angeschlossen wie in der Anleitung beschrieben. Vielen Dank dafür. Nur leider bricht er bei mir auch die Kalibrierung ab… woran könnte das denn liegen?
Am besten du lässt die Exception mal ausgeben (im catch Block).
Danke Felix.
Ich schreibe das jetzt mal für jeden der nicht genau weiß was er dann machen muss:
in dem Programm „example.py“ fügt man in der „Exception“ (except) folgende zwei Zeilen ein:
e = sys.exc_info()[0]
print(„Error: %s“ % e)
das gibt dann ALLE Fehlermeldungen aus die es geben kann.
Ich habe den Fehler:
ZeroDivisionError
Das liegt vermutlich daran das mein ADC nicht richtig funktioniert…
Vielen Dank für die Anleitung zum Bau des Gassensors. Auch nach mehreren Versuchen und nach dem Herunterladen und Auspacken von SpiDev will das Ganze bei mir nicht laufen. Die example.py wird mit folgendem Fehler beendet:
File „example.py“, line 19
SyntaxError: Non-ASCII character ‚xe2‘ in file example.py on line 19, but no encoding declared;
Wo liegt der Fehler? Ich habe mich abgesehen vom Ausgeben der Exception an die Anleitung gehalten.
Gruß, Michael
Schreib mal in die erste Zeile
Bei mir kommt FileNotFoundError: [Errno 2] No such file or Director
Auf der 10 Zeile in MCP3008.py in Open self.spi.open(self.bus, self.device)
Kann mir jemand helfen?
Ist SPI aktiviert und hast du spidev installiert?
Vielen Dank für die Antwort, SPI war deaktiviert jetzt geht es?
Bei mir kommen die Werte an aber ändern sich überhaupt nicht.
Kann sein das der MCP3008 defekt ist?
Ich habe nur einen wie kann man den überprüfen?
pi@raspberrypi:~/Raspberry-Pi-Gas-Sensor-MQ $ sudo python example.py
Press CTRL+C to abort.
Calibrating…
Calibration is done…
Ro=0.117521 kohm
LPG: 0.00765901 ppm, CO: 0.00496327 ppm, Smoke: 0.0204346 ppm
Ich muss nochmal nachfragen. Ich hab alles Verkabelt, ich bekomme auch ein Signal bis nach dem Level-Converter auf 3,3 Volt. Das klappt alles. Nur kommt auf den Raspi durch den ADC nichts durch.
Sind die physikalischens Pins (23 und 29) in dem Frizing Plan gebrückt (gelbes Kabel) oder nur eine Abzweigung auf physikalisch 23 (Physikalisch Pin 23 = logisch 11 und physikalische 29 = logisch 5)
Vielen Dank
Konntest du den MCP denn mal generell nutzen / Werte damit auslesen?
Danke für die Antwort. Nein, konnte ich noch nicht. Mein einziger Werteliferant wäre der MQ2.
Sind die physikalischens Pins (23 und 29) in dem fritzing Plan gebrückt (gelbes Kabel) ?
Ich hab mich an diese Anleitung gehalten beim MCP https://tutorials-raspberrypi.de/raspberry-pi-mcp3008-analoge-signale-auslesen/
Du kannst zum testen einfach mal GND bzw. 3.3V an einen analogen MCP Pin anschließen. Das sollte 0 bzw. 1023 anzeigen.
was ist wenn selbst dann keine 0 bzw 1023 werte ausgegeben werden?
Dann scheint der MCP nicht richtig ausgelesen zu werden 🙁
Danke für diesen super Tutorial,
ich benutze bei mir einen MQ3 und möchte gerne heraus finden
was der RO_CLEAN_AIR_FACTOR bei mir wäre. In dem Datenblatt hab ich dazu nicht wirklich etwas genaues gefunden.
Also wie kann ich diesen Wert auch für den MQ3 herausfinden ?
Und der Wert der ausgegeben wird , ist kein konstantes Ergebnis.
Der ändert sich die ganze Zeit.
Wie kann man das stabilisieren, sodass z.b als Gas Alkohol
ein fester promillenwert dabei herauskommt.
Wie sehr ändert er sich? Auch beim nichts tun? Im Video zeige ich, dass der Wert sich beim Gas dran halten verändert.
Genau, beim halten des gases ändert sich der Wert ständig.
Aber bei alkohol soll er z.b promille anzeigen und dabei ist es sehr ungünstig das sich der Wert ständig ändert.
Wie könnte ich dies stabilisieren. z.b wenn man den alkohol im atem an den sensor anhauche?
Du könntest erst beim Pressen eines Buttons o.ä. die Messung beginnen.
Die Werte sind echt unterschiedlich groß.
man kann Werte von 0 bis über 8000 ablesen.
Und wie bist du auf diese Formel gekommen beim MQResistanceCalculation()
RS_VALUE = self.RL_VALUE * (1023.0-raw_adc) / float(raw_adc)
???
Ist fast 1:1 von der Arduino Bibliothek (in Python übersetzt)
Oben in der Beschreibung zur Berechnung sagst du z.B.
“Mit der Steigung und dem gezogenen Logarithmus aus dem linken Punkt (x=2.3, y=0.21) können wir die Gerade nun bestimmen.“
Ich verstehe hier nicht ganz, was du mit dem „linken Punkt meinst“ ?
Log10(200) = 2.3, Log10(1.62) = 0.21
Hallo Felix,
ich werde mein Abschlussprojekt über dieses Thema machen. Praktisch eine Serverüberwachungsanlage mit dem Sensor und dem Temperatur und Luftfeuchtigkeitssensor DHT22.
Die sollen beide an den gleichen Raspberry angeschlossen werden. Benötige ich dazu noch ein externes 5 Volt Netzteil und einen Stützkondensator für den AD Wandler?
Und wie schließe icj das externe Netzteil an mein Steckbrett richtig an?
Tolles Tutorial und viele Grüße
Tom
Normalerweise reicht für Sensoren die Stromstärke des Raspberry Pi’s. Ansonsten kannst du den Sensor VCC Pin mit einer externen Stromquelle verbinden (Datenkabel vom Pi) und GND an Pi und externe Stromverbindung anschließen. Quasi wie in diesem Projekt.
Naja Du hast ja in dem Tutorial geschrieben, dass Du eine externe Stromversorgung empfehlen würdest, wenn noch mehr Module/Sensoren angeschlossen werden. Das ist bei mir der Fall und ich würde deshalb einfach ein weiteres Raspi Netzteil nehmen und das Kabel entsprechend aufschneiden.
Oder reicht die Stromstärke doch?
Gruß
Tom
Wills du mehrere MQ Sensoren betreiben? Darauf war das bezogen. Ein DHT zusätzlich sollte kein Problem sein.
moin,
wenn ich das alles so befolge bekomme ich bei einem MQ-5 folgenden Fehler:
Error:
Mein googlekünste haben nichts dazu herausgefunden.
Error: type ‚exceptions.IOError‘
Es handelt sich dabei wohl speziell um diesen fehler:
I/O error(9): Bad file descriptor
I/O error(9): Bad file descriptor
Traceback (most recent call last):
File „example.py“, line 5, in
mq = MQ();
File „/home/pi/Raspberry-Pi-Gas-Sensor-MQ/mq.py“, line 34, in __init__
self.adc = MCP3008()
File „/home/pi/Raspberry-Pi-Gas-Sensor-MQ/MCP3008.py“, line 7, in __init__
self.spi.max_speed_hz = 1000000 # 1MHz
OSError: [Errno 9] Bad file descriptor
es funzt schlicht nicht
Wie bekommt man die Daten in eine Db?
Da gibt es verschiedene Möglichkeiten: Zum Beispiel so
Hallo,
wenn ich den Y-Wert mit 0,21 von LPG betrachte, die Smoke Y=0,53 und die CO Y=0,73 (Auszug aus Librarie MQ2.h) frage ich mich wie diese Werte abgelesen wurden?
Ich möchte nämlich eine MQ9 Bibliothek erstellen.
Hallo Felix,
erstmal vielen Dank für deine Tutorials. Gibt es eine Möglichkeit wie man mehrere Sensoren (ca. 4-5) gleichzeitig messen lassen kann und die Messergebnisse, alle paar Sekunden, in eine Datei schreibt?
Vielen Dank im Vorraus
Mika
Hallo Felix,
ich benutze den Grove MQ2 Sensor und wollte wissen, welche Maßeinheit ich bei der Raucherfassnung nehmen kann und was für eine Skala.
viele Grüße
tzabbi
Hallo,
ich hab das Problem, dass nach dem Befehl „sudo python example.py“ direkt die Meldung kommt
„Press CTRL+C to abort.
Abort by user“.
Calibrating wird mir gar nicht angezeigt, woran kann es liegen?
PS. ich drücke natürlich nicht STRG+C 😉
Hab das gleiche Problem. Lösung gefunden?
– Sind die PIN-Leisten des Pegelwandlers verlötet?
– leg den Eingangschannel (Channel 0 im Bild oben) vom A/D Wandler mal auf die 3,3V Schiene, läuft der Kalibrierungsvorgang jetzt durch?
Hallo Felix,
laut der Arduino-Anleitung (https://playground.arduino.cc/Main/MQGasSensors) braucht man einen Load-Widerstand. In der Schematic oben taucht allerdings kein Widerstand auf. Ist der schon auf dem Board des Sensors enthalten? In deinem Code verwendest du in der mq.py einen Wert von 5kOhm für diesen Widerstand. Woher hast du diesen Wert?
Vielen Dank schon mal
Christian
Hallo Felix,
vielen Dank für das tolle Tutorial!
Eine Sache habe ich jedoch noch nicht begriffen. Wenn ich dein Tutorial und den Quellcode richtig verstanden habe, werden die Werte für alle Gase in einem Widerstandswert ausgegeben. Das heißt, du liest einen Widerstand aus und berechnest mit den unterschiedlichen Steigungen und Offsets der Kurven die ppm jedes Stoffs. Aber hängen dann nicht die Stoffe zusammen? Also wenn jetzt z.B. ausschließlich LPG zunimmt, dann müsste gemäß des Diagramms der Widerstand steigen. Dann würde aber auch ein höherer Wert für z.B. CO oder SMOKE berechnet werden, obwohl die sich nicht verändert haben. Das macht ja keinen Sinn, habe ich was übersehen?
Viele Grüße
TwinT
Moin,
falls in Zukunft hier noch jemand mitliest, möchte ich kurz meine Stolpersteine und deren Lösung aufzeigen:
Wenn ihr den FileNotFOundError in der MCP3008.py bekommt: SPI mit Raspi-config aktivieren.
Wenn ihr Division by zero als Fehler bekommt und/oder der Kalibrierungsvorgang sofort abbricht, bekommt der MCP3008 keine Eingangsspannung. Hier könnt ihr testen, ob der MCP überhaupt funktioniert, indem ihr den Channel 0 nicht mit dem Spegelwandler sondern mit der 3,3V Schiene bedient. Jetzt sollte der Kalibrierungsvorgang durchlaufen (auch wenn ihr keine plausiblen Werte bekommt)
Also liegt der Fehler im Pegelwandler:
1.) das Ding muss natürlich mit den mitgelieferten Pin-Leisten verlötet werden, ein einfaches auflegen reicht nicht!
2) für die die sich gedacht haben: statt dem 4Kanal-Pegelwandler kaufe ich mir gleich, bei minimalen Mehrkosten, den 8-Kanal-Wandler (https://www.amazon.de/8-Kanal-Bi-directional-Converter-Raspberry-Mikrocontroller/dp/B01N9YI8J0/): hier müsst ihr darauf achten, dass der 0E Pin _NICHT_ an Ground angeschlossen wird (denn dann werden alle Ausgänge hochohmig) sondern an den 3,3V verbunden wird..
Ich hoffe das hilft jemandem 🙂
Hi,
vielen Dank für das wunderbare Tutorial.
Ich bin neu in Sachen Programmieren und konnte nach Analyse des Codes alles nachvollziehen. Leider ändern sich meine Werte überhaupt nicht und befinden sich beständig bei etwa 0,005 ppm (für CO-Wert). Ich habe daraufhin getestet, ob der MCP3008 funktioniert. Dazu ein Poti an Channel 0 angeschlossen und ausgelesen. Die Werte ändern sich daraufhin! –> AD-Wandler funktioniert also.
Jetzt vermute ich, dass der TTL Converter meine Messung beeinflusst. Benutze hierfür den AC-LLC8-V2. Kann es sein, dass dieser nicht für die Weiterleitung von Analogsignalen geeignet ist (und jedes Mal 3,3V an den MCP3008 weitergibt?
Wäre über eine Antwort sehr dankbar!
Viele Grüße, Daniel
Hallo Daniel,
Bei deinem Bauteil handelt es sich um einen digitalen Signalwandler, der mit analogen Signalen nichts anfangen kann. Den MCP3008 über Vdd und Vref an 5V anschließen. Das Signal vom Sensor an den MCP3008 stecken. Mittels deines TTLs dann die Ausgänge vom AD-Wandler von 5V auf 3,3V wandeln und an den Pi anbinden.
Gruß Dominik
Hi Felix!
Hast du ne Idee wie ich bei Überschreiten eines zuvor definierten Gas-Grenzwertes mit dem RasPi als Folge ein Relais auslösen kann?
Ich möchte den RasPi auf diese Weise an mein KNX-System anbinden und so bei einem Alarm des Gasmelders zB Lampen blinken lassen, etc.
Danke dir!
Lg Fabi
Hallo,
hätte eine kurze Frage welchen Zweck das Poti hat. Bei mir ändern sich die Werte nämlich kaum bzw. gar nicht obwohl ich daran drehe. Normalerweise müsste sich doch die Ausgangsspannung ändern, da nun ein anderer Spannungsteiler vorhanden ist. Allerdings ist mir auch nicht klar wie man den Widerstand des Potis messen kann, da das Poti fest verlötet ist und man somit die Schaltung des Sensors mit misst und nicht nur das Poti. Laut Datenblatt sollte dies nämlich auf 5k Ohm eingestellt werden.
Außerdem bekomme ich nach dem Kalibrieren sehr unterschiedliche Werte für R0. Dieser müsste laut Datenblatt bei 30k Ohm bei sauberere Luft liegen.
Hat jemand Tipps wie man den Sensor nun richtig einstellen kann?
Freundliche Grüße
Wenn ihr Daten für andere Sensoren braucht….https://github.com/miguel5612/MQSensorsLib/tree/master/examples. Hier sind fast alle hinterlegt !
Sind zwar Arduino Codes aber die Umrechnungs werte kann man gut rauslesen ! – dann braucht man nicht Stundenlang suchen….
Dein Video ist echt gut…. jetzt muss ich nur noch raussuchen wie ich mehrere über I²c auslese… ich will nämlich alle wichtigen (brennbar, giftig) zusammen anzeigen…bin leider noch Anfänger….
Guten Tag,
kann einer der Sensoren auch Ameinsensäure, Oxalsäure erkennen? ggf. kann man den Ethanolsensor oder den Luftqualitätsensor dafür verwenden.
Der Hintergrund ist der, dass ich den Sensor in meinen Bienestöcken einsetzen möchte. Zur Behandlung der Varroa-Milbe muss dort Ameisensäure eingesetzt werden, die Konzentration ist aber sehr schwankend und wenn es zu viel ist sterben die Bienen.
Gruß,
C. H.
Very good written story. It will be supportive to anybody who usess it, as well as me. Keep up the good work – can’r wait to read more posts.
Kann ich denn auch zwei MQ-Sensoren mit einem MCP3008 vom Raspi auslesen lassen?
Und wenn ja wie?
MFG Moritz
Excuse me, I use two types of sensors, MQ-7 and MQ-138, to detect ambient air quality at the same time. I can also use your method. If so, how should I arrange the wiring, analog digital converter and logic level?