- MQ6-gassensor
- Hoe PPM te meten met behulp van MQ-gassensoren?
- Vereiste componenten
- Schematisch
- MQ-sensor met PIC-programmering
Gassensoren uit de MQ-serie zijn veel voorkomende soorten sensoren die worden gebruikt in gasdetectoren om bepaalde soorten gassen te detecteren of te meten. Deze sensoren worden veel gebruikt in alle gasgerelateerde apparaten, zoals van eenvoudige rookmelders tot industriële luchtkwaliteitsmonitors. We hebben deze MQ-gassensoren al gebruikt met Arduino om enkele schadelijke gassen zoals ammoniak te meten. In dit artikel zullen we leren hoe we deze gassensoren kunnen gebruiken met PIC Microcontrollers, om de PPM-waarde van het gas te meten en weer te geven op een 16x2 LCD.
Zoals eerder vermeld, zijn er verschillende soorten sensoren uit de MQ-serie op de markt en elke sensor kan verschillende soorten gassen meten, zoals weergegeven in de onderstaande tabel. In het belang van dit artikel zullen we de MQ6-gassensor met PIC gebruiken die kan worden gebruikt om de aanwezigheid en concentratie van LPG-gas te detecteren. Door dezelfde hardware en firmware te gebruiken, kunnen echter ook andere sensoren uit de MQ-serie worden gebruikt zonder grote wijzigingen in het code- en hardwaregedeelte.
Sensor | Detecteert |
MQ-2 | Methaan, Butaan, LPG, rook |
MQ-3 | Alcohol, ethanol, rook |
MQ-4 | Methaan, CNG-gas |
MQ-5 | Aardgas, LPG |
MQ-6 | LPG, butaangas |
MQ-7 | Koolmonoxide |
MQ-8 | Hydrogen gas |
MQ-9 | Koolmonoxide, brandbare gassen. |
MQ131 | Ozon |
MQ135 | Luchtkwaliteit (benzeen, alcohol, rook) |
MQ136 | Waterstofsulfidegas |
MQ137 | Ammoniak |
MQ138 | Benzeen, tolueen, alcohol, aceton, propaan, formaldehyde gas, waterstof |
MQ214 | Methaan, aardgas |
MQ216 | Aardgas, kolengas |
MQ303A | Alcohol, ethanol, rook |
MQ306A | LPG, butaangas |
MQ307A | Koolmonoxide |
MQ309A | Koolmonoxide, brandbare gassen |
MG811 | Kooldioxide (CO2) |
AQ-104 | Luchtkwaliteit |
MQ6-gassensor
De onderstaande afbeelding toont het MQ6-sensorpen-diagram. De linkerafbeelding is echter een op modules gebaseerde MQ6-sensor voor koppeling met de microcontrollereenheid, het pindiagram van de module wordt ook in die afbeelding weergegeven.
Pin 1 is VCC, Pin 2 is de GND, Pin 3 is de digitale uitgang (logica laag wanneer gas wordt gedetecteerd.) En Pin 4 is de analoge uitgang. De pot wordt gebruikt om de gevoeligheid aan te passen. Het is geen RL. De RL-weerstand is de rechterweerstand van de DOUT-led.
Elke sensor uit de MQ-serie heeft een verwarmingselement en een detectieweerstand. Afhankelijk van de gasconcentratie verandert de detectieweerstand en door de veranderende weerstand te detecteren, kan de gasconcentratie worden gemeten. Om de gasconcentratie in PPM te meten, bieden alle MQ-sensoren een logaritmische grafiek die erg belangrijk is. De grafiek geeft een overzicht van de gasconcentratie met de verhouding tussen RS en RO.
Hoe PPM te meten met behulp van MQ-gassensoren?
De RS is de zintuiglijke weerstand tijdens de aanwezigheid van een bepaald gas, terwijl de RO de zintuiglijke weerstand is in schone lucht zonder een bepaald gas. De onderstaande logaritmische grafiek uit het gegevensblad geeft een overzicht van de gasconcentratie met de meetweerstand van de MQ6-sensor. De MQ6-sensor wordt gebruikt om de LPG-gasconcentratie te detecteren. Daarom zal de MQ6-sensor een bepaalde weerstand bieden tijdens de schone luchttoestand waarin het LPG-gas niet beschikbaar is. Ook verandert de weerstand wanneer het LPG-gas wordt gedetecteerd door de MQ6-sensor.
Dus we moeten deze grafiek in onze firmware plotten, vergelijkbaar met wat we deden in ons Arduino Gasdetector Project. De formule is om 3 verschillende gegevenspunten te hebben. De eerste twee gegevenspunten zijn het begin van de LPG-curve, in X- en Y-coördinaten. De derde gegevens zijn de helling.
Dus als we de diepblauwe curve selecteren die de LPG-curve is, is het begin van de curve in X- en Y-coördinaat de 200 en 2. Het eerste gegevenspunt van de logaritmische schaal is dus (log200, log2), dat is (2,3, 0,30).
Laten we het maken als, X1 en Y1 = (2,3, 0,30). Het einde van de curve is het tweede gegevenspunt. Volgens hetzelfde proces als hierboven beschreven, zijn X2 en Y2 (log 10000, log0,4). Dus X2 en Y2 = (4, -0,40). Om de helling van de curve te krijgen, is de formule
= (Y2-Y1) / (X2-X1) = (- 0,40 - 0,30) / (4 - 2,3) = (-0,70) / (1,7) = -0,41
De grafiek die we nodig hebben, kan worden gegeven als
LPG_Curve = {start X en start Y, helling} LPG_Curve = {2.3, 0.30, -0.41}
Haal voor andere MQ-sensoren de bovenstaande gegevens op uit het gegevensblad en de logaritmische grafiek. De waarde zal verschillen op basis van de sensor en het gemeten gas. Voor deze specifieke module heeft deze een digitale pin die alleen informatie geeft over aanwezig gas of niet. Voor dit project wordt het ook gebruikt.
Vereiste componenten
De vereiste componenten voor het koppelen van de MQ-sensor met PIC-microcontroller worden hieronder gegeven-
- 5V voeding
- Breadboard
- 4.7k weerstand
- LCD 16x2
- 1k weerstand
- 20Mhz kristal
- 33pF condensator - 2st
- PIC16F877A microcontroller
- Sensor uit de MQ-serie
- Berg en andere aansluitdraden.
Schematisch
Het schema voor deze gassensor met een PIC-project is vrij eenvoudig. De analoge pin is verbonden met de RA0 en de digitale met de RD5 om de analoge spanning te meten die wordt geleverd door de gassensormodule. Als je helemaal nieuw bent bij PIC, dan wil je misschien de PIC ADC tutorial en PIC LCD tutorial bekijken om dit project beter te begrijpen.
Het circuit is opgebouwd uit een breadboard. Nadat de verbindingen waren voltooid, ziet mijn opstelling er als volgt uit, hieronder weergegeven.
MQ-sensor met PIC-programmering
Het grootste deel van deze code is de hoofdfunctie en andere bijbehorende randfuncties. Het complete programma vindt u onderaan deze pagina, de belangrijke codefragmenten worden als volgt uitgelegd
De onderstaande functie wordt gebruikt om de sensorweerstandswaarde in de vrije lucht te verkrijgen. Aangezien het analoge kanaal 0 wordt gebruikt, ontvangt het gegevens van het analoge kanaal 0. Dit is voor het kalibreren van de MQ-gassensor.
zweven SensorCalibration () { int count; // Deze functie kalibreert de sensor in free air float val = 0; for (count = 0; count <50; count ++) {// neem meerdere monsters en bereken de gemiddelde waarde val + = bereken_weerstand (ADC_Read (0)); __delay_ms (500); } val = val / 50; val = val / RO_VALUE_CLEAN_AIR; // gedeeld door RO_CLEAN_AIR_FACTOR levert de Ro- retourwaarde op; }
De onderstaande functie wordt gebruikt om de analoge waarden van de MQ-sensor te lezen en deze te middelen om de Rs-waarde te berekenen
float read_MQ () { int count; zweven rs = 0; for (count = 0; count <5; count ++) {// neem meerdere metingen en neem het gemiddelde. rs + = bereken_weerstand (ADC_Read (0)); // rs verandert volgens de gasconcentratie. __delay_ms (50); } rs = rs / 5; retourneer rs; }
De onderstaande functie wordt gebruikt om de weerstand van de spanningsdelerweerstand en de belastingsweerstand te berekenen.
float bereken_weerstand (int adc_channel) {// sensor en belastingsweerstand vormen een spanningsdeler. dus met behulp van analoge waarde en laadwaarde retour (((float) RL_VALUE * (1023-adc_channel) / adc_channel)); // we zullen sensorweerstand vinden. }
De RL_VALUE wordt gedefinieerd aan het begin van de code zoals hieronder getoond
#define RL_VALUE (10) // definieer de belastingsweerstand op het bord, in kilo-ohm
Wijzig deze waarde na het controleren van de belastingsweerstand aan boord. Bij andere MQ-sensorborden kan het anders zijn. Om de beschikbare gegevens in de logschaal te plotten, wordt de onderstaande functie gebruikt.
int gas_plot_log_scale (float rs_ro_ratio, float * curve) { return pow (10, (((log (rs_ro_ratio) -curve) / curve) + curve)); }
De curve is de LPG-curve die hierboven is gedefinieerd van de code die eerder in ons artikel hierboven is berekend.
zweven MQ6_curve = {2,3,0,30, -0,41}; // Graph Plot, verander dit voor een bepaalde sensor
Ten slotte wordt hieronder de belangrijkste functie gegeven waarin we de analoge waarde meten, de PPM berekenen en weergeven op het LCD-scherm
void main () { system_init (); scherm wissen(); lcd_com (FIRST_LINE); lcd_puts ("Kalibreren…"); Ro = Sensorkalibratie (); //scherm wissen(); lcd_com (FIRST_LINE); lcd_puts ("Klaar!"); //scherm wissen(); lcd_com (FIRST_LINE); lcd_print_number (Ro); lcd_puts ("K Ohms"); __delay_ms (1500); gas_detect = 0; while (1) { if (gas_detect == 0) { lcd_com (FIRST_LINE); lcd_puts ("Gas is aanwezig"); lcd_com (SECOND_LINE); lcd_puts ("Gas ppm ="); float rs = read_MQ (); vlotterverhouding = rs / Ro; lcd_print_number (gas_plot_log_scale (ratio, MQ6_curve)); __delay_ms (1500); scherm wissen(); } else { lcd_com (FIRST_LINE); lcd_puts ("Gas niet aanwezig"); } } }
Eerst wordt de RO van de sensor gemeten in schone lucht. Vervolgens wordt de digitale pin uitgelezen om te controleren of het gas aanwezig is of niet. Als het gas aanwezig is, wordt het gas gemeten aan de hand van de meegeleverde LPG-curve.
Ik heb een aansteker gebruikt om te controleren of de PPM-waarde verandert wanneer het gas wordt gedetecteerd. Deze sigarenaanstekers bevatten LPG-gas, dat bij het vrijkomen in de lucht wordt gelezen door onze sensor en de PPM-waarde op het LCD-scherm verandert zoals hieronder weergegeven.
De volledige werking is te vinden in de video onderaan deze pagina. Als je vragen hebt, laat ze dan achter in het commentaargedeelte of gebruik onze forums voor andere technische vragen.