- MQ6 Gassensor
- Wie misst man PPM mit MQ-Gassensoren?
- Erforderliche Komponenten
- Schema
- MQ-Sensor mit PIC-Programmierung
Gassensoren der MQ-Serie sind sehr gebräuchliche Arten von Sensoren, die in Gasdetektoren zum Erfassen oder Messen bestimmter Arten von Gasen verwendet werden. Diese Sensoren sind in allen gasbezogenen Geräten weit verbreitet, beispielsweise von einfachen Rauchmeldern bis hin zu industriellen Luftqualitätsmonitoren. Wir haben diese MQ-Gassensoren bereits mit Arduino verwendet, um einige schädliche Gase wie Ammoniak zu messen. In diesem Artikel erfahren Sie, wie Sie diese Gassensoren mit PIC-Mikrocontrollern verwenden, um den PPM-Wert des Gases zu messen und auf einem 16x2-LCD anzuzeigen.
Wie bereits erwähnt, sind auf dem Markt verschiedene Arten von Sensoren der MQ-Serie erhältlich, und jeder Sensor kann verschiedene Arten von Gasen messen, wie in der folgenden Tabelle gezeigt. In diesem Artikel verwenden wir den MQ6-Gassensor mit PIC, mit dem das Vorhandensein und die Konzentration von Flüssiggas erfasst werden kann. Durch Verwendung derselben Hardware und Firmware können jedoch auch andere Sensoren der MQ-Serie verwendet werden, ohne dass wesentliche Änderungen am Code- und Hardwareteil vorgenommen werden müssen.
Sensor | Erkennt |
MQ-2 | Methan, Butan, LPG, Rauch |
MQ-3 | Alkohol, Ethanol, Rauch |
MQ-4 | Methan, CNG-Gas |
MQ-5 | Erdgas, LPG |
MQ-6 | LPG, Butangas |
MQ-7 | Kohlenmonoxid |
MQ-8 | Wasserstoffgas |
MQ-9 | Kohlenmonoxid, brennbare Gase. |
MQ131 | Ozon |
MQ135 | Luftqualität (Benzol, Alkohol, Rauch) |
MQ136 | Schwefelwasserstoffgas |
MQ137 | Ammoniak |
MQ138 | Benzol, Toluol, Alkohol, Aceton, Propan, Formaldehydgas, Wasserstoff |
MQ214 | Methan, Erdgas |
MQ216 | Erdgas, Kohlegas |
MQ303A | Alkohol, Ethanol, Rauch |
MQ306A | LPG, Butangas |
MQ307A | Kohlenmonoxid |
MQ309A | Kohlenmonoxid, brennbare Gase |
MG811 | Kohlendioxid (CO2) |
AQ-104 | Luftqualität |
MQ6 Gassensor
Das folgende Bild zeigt das Pin-Diagramm des MQ6-Sensors. Das linke Bild ist jedoch ein modulbasierter MQ6-Sensor für die Schnittstelle mit der Mikrocontrollereinheit. In diesem Bild ist auch das Pin-Diagramm des Moduls dargestellt.
Pin 1 ist VCC, Pin 2 ist der GND, Pin 3 ist der Digitalausgang (Logik niedrig, wenn Gas erkannt wird) und Pin 4 ist der Analogausgang. Der Topf dient zum Einstellen der Empfindlichkeit. Es ist nicht RL. Der RL-Widerstand ist der rechte Widerstand der DOUT-LED.
Jeder Sensor der MQ-Serie verfügt über ein Heizelement und einen Messwiderstand. Abhängig von der Konzentration des Gases ändert sich der Erfassungswiderstand und durch Erfassen des sich ändernden Widerstands kann die Gaskonzentration gemessen werden. Zur Messung der Gaskonzentration in PPM liefern alle MQ-Sensoren einen logarithmischen Graphen, der sehr wichtig ist. Die Grafik gibt einen Überblick über die Gaskonzentration mit dem Verhältnis von RS und RO.
Wie misst man PPM mit MQ-Gassensoren?
Der RS ist der Erfassungswiderstand während der Anwesenheit eines bestimmten Gases, während der RO der Erfassungswiderstand in sauberer Luft ohne ein bestimmtes Gas ist. Das folgende logarithmische Diagramm aus dem Datenblatt bietet einen Überblick über die Gaskonzentration mit dem Erfassungswiderstand des MQ6-Sensors. Der MQ6-Sensor dient zur Erfassung der LPG-Gaskonzentration. Daher bietet der MQ6-Sensor einen besonderen Widerstand während der sauberen Luft, in der das LPG-Gas nicht verfügbar ist. Außerdem ändert sich der Widerstand immer dann, wenn das LPG-Gas vom MQ6-Sensor erfasst wird.
Daher müssen wir dieses Diagramm in unsere Firmware eintragen, ähnlich wie in unserem Arduino-Gasdetektorprojekt. Die Formel lautet 3 verschiedene Datenpunkte. Die ersten beiden Datenpunkte sind der Beginn der LPG-Kurve in X- und Y-Koordinaten. Die dritten Daten sind die Steigung.
Wenn wir also die tiefblaue Kurve auswählen, die die LPG-Kurve ist, ist der Beginn der Kurve in der X- und Y-Koordinate 200 und 2. Der erste Datenpunkt auf der logarithmischen Skala ist also (log200, log2), was (2,3, 0,30).
Machen wir es wie folgt: X1 und Y1 = (2.3, 0.30). Das Ende der Kurve ist der zweite Datenpunkt. Nach dem oben beschriebenen Verfahren sind X2 und Y2 (log 10000, log0.4). Somit ist X2 und Y2 = (4, -0,40). Um die Steigung der Kurve zu erhalten, lautet die Formel
= (Y2-Y1) / (X2-X1) = (- 0,40 - 0,30) / (4 - 2,3) = (-0,70) / (1,7) = -0,41
Das Diagramm, das wir benötigen, kann als angegeben werden
LPG_Curve = {Start X und Start Y, Steigung} LPG_Curve = {2,3, 0,30, -0,41}
Für andere MQ-Sensoren erhalten Sie die obigen Daten aus dem Datenblatt und dem logarithmischen Diagramm. Der Wert hängt vom Sensor und dem gemessenen Gas ab. Für dieses spezielle Modul verfügt es über einen digitalen Pin, der nur Informationen über vorhandenes oder nicht vorhandenes Gas liefert. Für dieses Projekt wird es auch verwendet.
Erforderliche Komponenten
Die erforderlichen Komponenten für die Verbindung des MQ-Sensors mit dem PIC-Mikrocontroller sind nachstehend aufgeführt.
- 5V Stromversorgung
- Steckbrett
- 4,7k Widerstand
- LCD 16x2
- 1k Widerstand
- 20 MHz Kristall
- 33pF Kondensator - 2St
- PIC16F877A Mikrocontroller
- Sensor der MQ-Serie
- Berg und andere Anschlussdrähte.
Schema
Das Schema für diesen Gassensor mit einem PIC-Projekt ist ziemlich einfach. Der analoge Pin ist mit dem RA0 und der digitale mit dem RD5 verbunden, um die vom Gassensormodul bereitgestellte analoge Spannung zu messen. Wenn Sie PIC noch nicht kennen, sollten Sie sich das PIC ADC-Tutorial und das PIC LCD-Tutorial ansehen, um dieses Projekt besser zu verstehen.
Die Schaltung ist in einem Steckbrett aufgebaut. Sobald die Verbindungen hergestellt wurden, sieht mein Setup wie folgt aus (siehe unten).
MQ-Sensor mit PIC-Programmierung
Der Hauptteil dieses Codes ist die Hauptfunktion und andere zugehörige Peripheriefunktionen. Das vollständige Programm finden Sie unten auf dieser Seite. Die wichtigen Codefragmente werden wie folgt erläutert
Die folgende Funktion wird verwendet, um den Sensorwiderstandswert in freier Luft zu erhalten. Wenn der analoge Kanal 0 verwendet wird, werden Daten vom analogen Kanal 0 abgerufen. Dies dient zur Kalibrierung des MQ-Gassensors.
float SensorCalibration () { int count; // Diese Funktion kalibriert den Sensor im freien Luftschwimmer val = 0; for (count = 0; count <50; count ++) {// nehme mehrere Proben und berechne den Durchschnittswert val + = berechne_Widerstand (ADC_Read (0)); __delay_ms (500); } val = val / 50; val = val / RO_VALUE_CLEAN_AIR; // geteilt durch RO_CLEAN_AIR_FACTOR ergibt den Ro- Rückgabewert; }}
Die folgende Funktion wird verwendet, um die analogen Werte des MQ-Sensors zu lesen und zu mitteln, um den Rs-Wert zu berechnen
float read_MQ () { int count; float rs = 0; for (count = 0; count <5; count ++) {// nimm mehrere Messwerte und mittle sie. rs + = berechne_Widerstand (ADC_Read (0)); // rs ändert sich je nach Gaskonzentration. __delay_ms (50); } rs = rs / 5; return rs; }}
Die folgende Funktion wird verwendet, um den Widerstand aus dem Spannungsteilerwiderstand und den Lastwiderstand zu berechnen.
float berechne_Widerstand (int adc_channel) {// Sensor und Lastwiderstand bilden einen Spannungsteiler. also Analogwert und Ladewert zurückgeben (((float) RL_VALUE * (1023-adc_channel) / adc_channel)); // Wir werden einen Sensorwiderstand finden. }}
Der RL_VALUE wird am Anfang des Codes wie unten gezeigt definiert
#define RL_VALUE (10) // Definiere den Lastwiderstand auf der Platine in Kilo-Ohm
Ändern Sie diesen Wert, nachdem Sie den Lastwiderstand an Bord überprüft haben. Bei anderen MQ-Sensorplatinen kann dies anders sein. Um die verfügbaren Daten in der Protokollskala darzustellen, wird die folgende Funktion verwendet.
int gas_plot_log_scale (float rs_ro_ratio, float * Kurve) { return pow (10, (((log (rs_ro_ratio) -Kurve) / Kurve) + Kurve)); }}
Die Kurve ist die oben definierte LPG-Kurve des Codes, der zuvor in unserem obigen Artikel berechnet wurde.
float MQ6_curve = {2.3.0.30, -0.41}; // Graph Plot, ändere dies für einen bestimmten Sensor
Die Hauptfunktion, in der wir den Analogwert messen, den PPM berechnen und auf dem LCD anzeigen, ist unten angegeben
void main () { system_init (); clear_screen (); lcd_com (FIRST_LINE); lcd_puts ("Calibrating…."); Ro = Sensorkalibrierung (); // clear_screen (); lcd_com (FIRST_LINE); lcd_puts ("Fertig!"); // clear_screen (); lcd_com (FIRST_LINE); lcd_print_number (Ro); lcd_puts ("K Ohm"); __delay_ms (1500); gas_detect = 0; while (1) { if (gas_detect == 0) { lcd_com (FIRST_LINE); lcd_puts ("Gas ist vorhanden"); lcd_com (SECOND_LINE); lcd_puts ("Gas ppm ="); float rs = read_MQ (); Float-Verhältnis = rs / Ro; lcd_print_number (gas_plot_log_scale (Verhältnis, MQ6_curve)); __delay_ms (1500); clear_screen (); } else { lcd_com (FIRST_LINE); lcd_puts ("Gas nicht vorhanden"); } } }
Zunächst wird der RO des Sensors in sauberer Luft gemessen. Dann wird der digitale Pin gelesen, um zu prüfen, ob das Gas vorhanden ist oder nicht. Wenn das Gas vorhanden ist, wird das Gas anhand der bereitgestellten LPG-Kurve gemessen.
Ich habe ein Feuerzeug verwendet, um zu überprüfen, ob sich der PPM-Wert ändert, wenn das Gas erkannt wird. Diese Zigarrenfeuerzeuge enthalten LPG-Gas, das bei Freisetzung in der Luft von unserem Sensor abgelesen wird und dessen PPM-Wert auf dem LCD sich wie unten gezeigt ändert.
Die vollständige Arbeitsweise finden Sie im Video unten auf dieser Seite. Wenn Sie Fragen haben, lassen Sie diese bitte im Kommentarbereich oder nutzen Sie unsere Foren für andere technische Fragen.