[China-Gimmicks] MQ-X Gas-Sensoren am RPi verwenden

  • Servus Community ...


    ich hab mal wieder ein paar nette Sachen aus Fernost erhalten und möchte Euch die Ergebnisse meiner Versuche natürlich nicht vorenthalten.
    Das erste Gimmick sind diverse Gas-Sensoren mit der Bezeichnung MQ-X. Ihr könnt sie sehr preiswert beim Asiaten Eures Vertrauens erwerben, sie aber auch bei deutschen Anbietern erhältlich...


    Dieses Tutorial schicke ich jetzt mal ab, ohne Garantie auf Vollständigkeit.
    Ich komme derzeit leider einfach nicht dazu, jeden Punkt ein zweites mal zu verifizieren. Also muss das parallel laufen. Falls noch was unklar oder gar fehlerhaft ist: bitte posten.
    Ich hoffe, dass das Tut trotzdem für den einen oder anderen von Euch hilfreich ist.


    Allgemeines zu diesen Sensoren:


    Ich habe einen MQ-2 (Datenblatt) und einen MQ-3 (Datenblatt) Sensor am RPi ausgetestet. Zum Einsatz kamen allerdings nicht die "nackten" Sensoren, sondern diese Module mit einem MQ-2 und einen MQ-3 Sensor. Andere Sensoren mit der Bezeichnung MQ-X sollte analog zu diesen funktionieren.
    Einige interessante Infos zu den Sensoren sind zudem -> hier oder -> hier <- zu finden.


    Der Einsatz der Sensoren klingt zunächst simpel, die Teile haben es aber in sich, was u.a. die ausgelesenen Daten betrifft.



    Zudem habe ich diverse Hinweise auf einen "burn in" der Sensoren gefunden, die weder im - doch eher dürftigen - Datenblatt zum MQ-2 noch im Datenblatt zum MQ-3 erwähnt werden.
    Gemeint ist damit wohl, dass die Sensoren erst nach einer Betriebsdauer von 24 bis 48 Stunden verlässliche Werte liefern.


    Die Bedeutung der ausgelesenen Werte muss man sich anhand des Messbereichs des Sensors und der Auflösung des A/D-Wandlers selbst ausrechnen.
    Zudem müssen die Sensoren kalibriert werden. Wie dies vonstatten geht, wollte ich als Anhang beifügen, aber die ordnen immer ihre Website um, darum funktioniert das wieder mal nicht. ABer ich kann Euch zu einem Beispiel führen: (Quelle: -> hier <- ).
    Ich gehe mal davon aus, dass die dort beschriebene Methode funktioniert. Ich habe nämlich keinen Plan, wie das Kalibrieren ohne teures Equipment sonst funktionieren sollte.
    Beachten muss man dabei, welchen Auflösung der A/D-Wandler hat ( 1023 bei 10 Bit bzw. 255 bei 8 Bit ).
    Die Kalibrierung reicht evtl. dazu aus, um mit den Sensoren zu demonstrieren, wie man Gas-Sensoren verwenden kann und was im Prinzip damit möglich ist.
    Wer genaue Daten benötigt, dem würde ich raten, eine andere Art der Kalibrierung zu verwenden oder gleich auf andere Sensoren auszuweichen.
    Das gilt vor allem für den MQ-3. Ich rate dringend davon ab, diesen Sensor zur Ermittlung der eigenen Fahrtüchtigkeit zu verwenden. Das wird vermutlich ganz böse ins Auge gehen.


    Die Module funktionieren auch ohne permanentes Auslesen. Mit dem Potentiometer kann ein Grenzwert eingestellt werden. Wird dieser überschritten, leuchtet die rote LED und der digitale Ausgang des Moduls wechselt von HIGH auf LOW.


    Den Stromverbrauch eines Sensor-Moduls liegt nach meiner Messung zwischen 130 und 140 mA. Für den relativ hohen Stromverbrauch ist vermutlich die eingebaute Heizung verantwortlich. Das ist für einen Betrieb direkt an einem der GPIOs eher grenzwertig. Solange der RPi über ssh - also ohne Tastatur und Maus - verwendet wird, mag das gehen. Ansonsten empfehle ich dringend eine zusätzliche Stromversorgung für den/die Sensoren zu verwenden, um einen Spannungseinbruch des RPi zu verhindern.


    Die verwendeten Module haben gegenüber der nackten Sensoren einige Vorteile:
    Die Sensoren selbst benötigen zum Anschluss so schräg angeordnete Bohrungen, dass sie wohl niemals direkt auf ein Breadboard aufgesteckt werden können.
    Ausserdem verfügen die Module über einen zusätzlichen digitalen Ausgang, dessen Auslösemoment mittels Potentiometer eingestellt werden kann. Das finde ich dahingehend praktisch, weil es dadurch möglich wird, erst ab einem bestimmten Pegel zyklische Meßvorgänge einzuleiten und ansonsten den Sensor erst gar nicht abzufagen (spart CPU-Leistung).



    Benötigte Hardware:


    Ein MQ-X Sensor-Modul ( z.B. MQ-2, MQ-3, ... )
    Ein Raspberry Pi mit aktueller Version Raspbian wheezy
    Ein PCF8591 A/D-Wandler Modul
    Ein Pegelwandler
    Evtl. eine zusätzliche Stromversorgung 5V
    und, logisch, ein Breadboard und diverse Kabel zum Verdrahten der Komponenten



    Anschluss:



    Die Module habe ich mittels eines A/D-D/A Wandler-Moduls (PCF8591) und einem Pegelwandler am RPi mit 5V betrieben.
    Ich finde diese Pegelwandler einfach super, weil sie out of the box fuktionieren und einfach und unkompliziert einsetzbar sind.


    Das PCF-Modul hat 10k Pullups vom IIC-Bus zu Vcc und kann deshalb nicht ohne Pegelwandler am RPi mit 5V betrieben werden.
    Ein Betrieb des PCF-Moduls mit 3,3 V ist in diesem Fall nicht möglich, weil die Sensoren genau 5V benötigen. Sie liefern zwar auch bei einem Betrieb an 3,3 V Daten, aber ich kann nicht sagen, ob diese stimmen. Im Internet findet man Hinweise, dass sie Sensoren, wenn die Spannung weniger als 4,9 V beträgt, bereits falsche Daten liefern.


    Der Anschluss ist relativ simpel. Bei einer zusätzlichen Stromversorgung gehen Vcc und GND des Sensors gehen auf 5V und Masse des externen Netzteils. A0 und D0 sind der analoge und der digitale Ausgang des Sensors.
    Achtung: D0 kann mit einer Datenleitung des Pegelwandler auf der 5V-Seite verbunden werden, falls der Alarm ausgewertet werden soll. Diese Verbindung habe ich in der Zeichnung nicht verwendet.
    A0 geht auf den freien Eingang des A/D-Wandlers (ohne Jumper, Pin der weiter innen ist). Sollen mehrere Sensoren angeschlossen werden, kann man die anderen Jumper einfach entfernen und die innen liegenden Pins mit den entsprechenden A0-Leitungen verbinden.
    Wird eine eigene Stromversorgung für den/die Sensoren verwendet werden Vcc und GND des A/D-Wandlers mit den externen 5V und der dazugehörigen Masse verbunden.
    SCL und SDA des PCF8591 werden mit zwei freien Datenanschlüssen auf der 5V-Seite des Pegelwandlers angeschlossen.
    Achtung: Falls ein externes Netzteil zur Versorgung des/der Sensoren zum Einsatz kommt unbedingt daran denken, die Masse des externen Netzteils mit der Masse des RPi zu verbinden, da sonst die Pegel nicht stimmen und die Daten fehlerhaft sind.


    Nun fehlen nur noch die Anschlüsse am RPi.
    Also RPi runterfahren, Netzteil abstecken.
    3,3 V und GND des RPi mit Vcc und GND auf der 3,3V-Seite des Pegelwandlers verbinden.
    Soll die Stromversorgung von Sensor und A/D-Wandler über den RPi erfolgen, 5V und GND des RPi mit Vcc des Sensors und Vcc des A/D-Wandlers verbinden. GND des RPi ebenfalls mit jeweils GND des A/D-Wandlers und des Sensors zusammenschalten.
    Bei einem zusätzlichen, externen Netzteil die Masse des Netzteils mit der Masse des RPi verbinden.
    SDA und SCL (GPIO2 und GPIO3) mit den entsprechenden Leitungen des A/D-Wandlers auf der 3,3V - Seite des Pegelwandlers verbinden.
    Bei Anschluss von D0 den entsprechenden Anschluss des Pegelwandlers auf der 3,3V Seite mit einem freien GPIO-Pin verbinden.


    So, ich hoffe, ich habe jetzt nichts vergessen, notfalls gibts ja noch die Fritzing-Zeichnung im Anhang.
    Leider gibt es in Fritzing kein Symbol für das A/D-Wandler-Modul. da musste ich ein bisschen tricksen, aber ich denke, es ist klar ersichtlich wie es gemeint ist.


    Software:


    Ich habe das Testprogramm für den PCF8591 erweitert, dass am freien Eingang ein MQ-2 Sensor genutzt werden kann und auch die Kalibrierung darauf ausgelegt.
    Der Source kann einfach mit


    Code
    $ gcc -o pcf8591-mqx pcf8591-mqx.c -lrt -lm


    sofern gcc installiert ist, übersetzt werden.




    Ja, dann bleibt mir nur, Euch viel Spass beim experimentieren zu wünschen.
    Wenn ich weitere/neue Erkenntnisse habe, dann reiche ich sie hier nach. Es lohnt sich also, hin und wieder mal hier rein zu schauen.


    Viele Grüsse aus dem Bayernland,
    -ds-

    • Official Post
    Quote

    habe ich mal als Anhang beigefügt (Quelle: hier).


    na wo isser denn? :). Und der Link geht auch nicht.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

    Edited once, last by dbv ().

  • Sorry für's Ausgraben - ist das Thema noch aktuell?


    Habe so einen Sensor hier liegen und ihn ohne Zwischenstücke an den Pi angeschlossen - also an 5V, Ground und das DOUT an GPIO7.


    Kann ich den jetzt relativ einfach auslesen? Oder klappt das mit dem Setup so nicht?


  • Sorry für's Ausgraben - ist das Thema noch aktuell?


    Habe so einen Sensor hier liegen und ihn ohne Zwischenstücke an den Pi angeschlossen - also an 5V, Ground und das DOUT an GPIO7.


    Kann ich den jetzt relativ einfach auslesen? Oder klappt das mit dem Setup so nicht?


    Wenn Du den Pi grillen willst, kannst Du das so machen. 5V sollen nie direkt an einen GPIO.


    Ansonsten steht doch oben sehr genau wie es geht. Über den digitalen Ausgang erfährst Du nur, ob der am Poti eingestellte Grenzwert überschritten wurde. Ohne Pegelwandler solltest Du das Teil nicht am Pi betreiben.


    elektronaut

    Using Tapatalk

  • Moin,


    hatte das vergessen zu erwähnen: Der Sensor sitzt auf einem Board, heißt ich habe nicht "nur" den Sensor wie im Beispiel. Deswegen hatte ich das hier auch wieder ausgegraben.


    Der Sensor hat 4 Pins - GND, VC, DOUT und AOUT - brauche ich dann trotzdem einen Wandler? Würde als Anfänger jetzt auf nein tippen, da DOUT und AOUT vorhanden sind...


    Habe gestern mit einem simplen Script einfach den aktuellen Wert ausgeben lassen - er gab mir immer eine 1 aus.


    Heißt ich muss das ganze anders anschließen wegen den 5 volt? Habe nicht wirklich Ahnung von der ganzen Materie.
    Die Sensoren schließe ich nicht über ein Breakboard an sondern direkt.



    EDIT: Das hier ist der Sensor: http://www.sainsmart.com/senso…n-arduino-compatible.html

    Edited once, last by Chris08 ().

  • Hallo,


    ich kann die geänderte Datei [font="monospace"]pcf8591 nicht finden?[/font]


    [font="monospace"]Ich habe auch so einen Qualmsensor.[/font]


    [font="monospace"]Danke[/font]


    [font="monospace"]V_B[/font]

  • Hi zusammen,


    ich bin ein Neuer RPi-User und bastel gerne an verschiedenste Projekte, die ich mir so zusammen Stoppel.

    Ich bekomme nach dem Ausführen des Kommandos:

    Code
    gcc -o pcf8591-mqx pcf8591-mqx.c -lrt -lm


    diese Meldung:



    Code
    root@raspberrypi1:/var/www/pcf8591# gcc -o pcf8591-mqx pcf8591-mqx.c -lrt -lm                                                                               
    pcf8591-mqx.c: In function ‘analogRead’:
    pcf8591-mqx.c:131:22: error: ‘dev_fd’ undeclared (first use in this function)
    pcf8591-mqx.c:131:22: note: each undeclared identifier is reported only once for each function it appears in
    pcf8591-mqx.c: At top level:
    pcf8591-mqx.c:338:23: error: conflicting types for ‘pcf8591_read_value’
    pcf8591-mqx.c:131:2: note: previous implicit declaration of ‘pcf8591_read_value’ was here
    root@raspberrypi1:/var/www/pcf8591#


    Was mache ich evtl. falsch?


    habe mal das überprüft:

    Code
    root@raspberrypi1:/var/www/pcf8591# gcc --version
    gcc (Debian 4.6.3-14+rpi1) 4.6.3
    Copyright (C) 2011 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


    Besten Dank schon mal in voraus!!!
    Und
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Viele Grüsse in das Bayernland an Dirk.[/font]

    Edited once, last by Pi_Paul ().


  • Hallo,


    besten Dank für die Antwort, habe ich geändert und nun bleibt das noch? :

    Code
    root@raspberrypi1:/var/www/pcf8591# gcc -o pcf8591-mqx pcf8591-mqx.c -lrt -lm
    pcf8591-mqx.c:338:23: error: conflicting types for ‘pcf8591_read_value’
    pcf8591-mqx.c:131:2: note: previous implicit declaration of ‘pcf8591_read_value’ was here



    Gruß vom Paul

    Edited once, last by Pi_Paul ().

  • Hallo,
    zunächst einmal Danke für das Bereitstellen der .c Datei.
    Ich muss erst einmal ein grosses Lob aussprechen. Das ich überhaupt bis hierher gekommen bin, toll.
    1. i2c zu installieren, 3 raspis, alle unterschiedliche Bauart, einer war nix, einer war UU und der dritte, also Modell 2 hat geklappt.
    2. nun fehlte ja die .c Datei, daher habe ich eine ganze Nacht gesucht und installiert und und und.
    Stunden mit einem kaputten Sytem verschwendet quick2wire oder so, ein Drama! Also nichts gefunden zu dem Thema, nur ein Programm welches die Register ausgelesen hat, habe ich aber nicht verstanden!


    Und nun bin ich hier, habe zwar ein seltsames Ergebnis, aber ich sehe dem gelassen entgegen, hier wird man ja geholfen:


    reg 40 [light] = ffff [=65535]
    reg 42 [ poti] = ffff [=65535]
    reg 43 [ temp] = ffff [=65535]
    analog ......: = 3c [=60] der zählt nur hoch.
    Der A0 vom MQ2 steckt neben AOUT auf AIN0.
    MQ2 leuchtet rot und grün.
    Diesen "Minichip" habe ich, glaube ich, richtig verdrahtet, die L Seite auf 3,3 Volt, die H Seite auf 5 Volt.



    Ich habe auch eine Sache noch nicht verstanden:
    Im ersten Post, in dem der pcf8591 erklärt wurde ist mir nicht klar geworden was das mit den onboard Sensoren und den Jumpern auf sich hat.
    Ich habe auch NICHTS in der besagten Nacht dazu gefunden, also wie komme ich an Temperatur und Licht auf diesem Chip. Dann hätte ich wenigstens ein Erfolgserlebnis.


    Man beachte die Uhrzeit meinesPostings!


    Danke


    V_B


    NS: Ich habe auch die anderen Sensoren!
    Automatisch zusammengefügt:[hr]
    Ich gebe ja nicht auf.


    PCF8591 dirkt mit PI verbinden!


    Dann alle Jumper ziehen und die onboard Sensoren zeigen Wirkung!


    reg 40 [light] = 15 [=21]
    reg 42 [ poti] = 0e [=14]
    reg 43 [ temp] = 21 [=33]
    analog ......: = 14 [=20]
    Nur eben analog auf PIN A02, wie auf dem einzigen Bild zum Thema Jumper das ich gefunden habe, zu sehen ist, da tut sich nichts.


    Mich würde noch interessieren wo der D0 wie angesclossen wird.



    V_B



  • Hallo,
    ich habe das so eingegeben:


    Dazu kam dann die Meldung:


    Code
    root@raspberrypi1:/var/www/pcf8591# gcc -o pcf8591-mqx pcf8591-mqx.c -lrt -lm
    /tmp/ccsPPyib.o: In function `pcf8591_read_value':
    pcf8591-mqx.c:(.text+0x428): undefined reference to `i2c_smbus_read_byte_data'
    /tmp/ccsPPyib.o: In function `pcf8591_write_value':
    pcf8591-mqx.c:(.text+0x474): undefined reference to `i2c_smbus_write_byte_data'
    collect2: ld returned 1 exit status
    root@raspberrypi1:/var/www/pcf8591#


    Warum funktioniert den das [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Compileren bei Dir [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]V_B ?[/font][/font]


    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"][font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Ich muss dazu sagen C bzw. C++ ist absolutes Neuland für mich!!! :rolleyes: [/font][/font]

    Edited once, last by Pi_Paul ().

  • Hallo Pi_Paul,
    da fehlt Dir wohl das Paket libi2c-dev ...
    Einfach mit

    Code
    sudo apt-get install libi2c-dev


    nachinstallieren (evtl. vorher noch einen

    Code
    sudo apt-get update


    machen) ... dann sollte das klappen :)
    cu,
    -ds-


  • Yes es klappt :danke_ATDE: .


    Hast Du evtl. auch Erfahrung in diesem Zusammenhang mit einem ADS1015 12Bit ADC?


    Kann man eigentlich ein[font="Verdana, Arial, Helvetica, sans-serif"] Arduino-Programm [/font]wie so etwas http://openenergymonitor.org/e…an-arduino-energy-monitorumschreiben für ein RasPi?


    Besten Dank !


    _________________
    cu,
    -pp-

  • So, nachdem ich nun etwas geschlafen habe melde ich mich dann doch noch einmal mit meiner Unwissenheit.


    Ich verstehe ja nun immer mehr, auch das mit dem D0 war mir später schon selber klar, pack es auf GPIO 18 oder 22 oder wohin auch immer.


    Nur. was stelle ich wie und wo mit dem Potentiometer ein um den Alarm zu fixieren?
    Und wie bzw. wo bekomme ich sichtbare Ergebnisse? Genau oder nicht, bisher keinen Dunst wie der MQ2 oder seine Kumpel sich bemerkbar machen.
    Auch die onboard Sensoren sagen mir bisher noch nichts!


    Es war die schwierigste Verdrahtung bisher für mich und bis hierher mit der Software zu kommen, hat mich viel viel Mühe gekostet, nur leider ernte ich noch nichts ausser unverständlichen Zahlenwerten.


    Nu helft doch mal einem alten Mann auf die Beine.
    Naja, ohne EUCH wäre ich niemals bis hierher gekommen:-)


    DANKE