- MQ6 gassensor
- Hur mäter jag PPM med MQ-gassensorer?
- Nödvändiga komponenter
- Schematisk
- MQ-sensor med PIC-programmering
MQ-seriens gassensorer är mycket vanliga typer av sensorer som används i gasdetektorer för att detektera eller mäta vissa typer av gaser. Dessa sensorer används ofta i alla gasrelaterade enheter, från enkla rökdetektorer till industriella luftkvalitetsmonitorer. Vi har redan använt dessa MQ-gassensorer med Arduino för att mäta några skadliga gaser som ammoniak. I den här artikeln lär vi oss hur man använder dessa gassensorer med PIC Microcontrollers, för att mäta gasens PPM-värde och visa det på en 16x2 LCD-skärm.
Som nämnts tidigare finns det olika typer av MQ-serie sensorer tillgängliga på marknaden och varje sensor kan mäta olika typer av gaser som visas i tabellen nedan. För denna artikels skull kommer vi att använda MQ6-gassensorn med PIC som kan användas för att detektera LPG-gasens närvaro och koncentration. Men genom att använda samma hårdvara och fast programvara kan andra sensorer i MQ-serien också användas utan större ändringar i kod- och hårdvarudelen.
Sensor | Känner av |
MQ-2 | Metan, butan, gasol, rök |
MQ-3 | Alkohol, etanol, rök |
MQ-4 | Metan, CNG Gas |
MQ-5 | Naturgas, LPG |
MQ-6 | LPG, butangas |
MQ-7 | Kolmonoxid |
MQ-8 | Vätgas |
MQ-9 | Kolmonoxid, brandfarliga gaser. |
MQ131 | Ozon |
MQ135 | Luftkvalitet (bensen, alkohol, rök) |
MQ136 | Vätesulfidgas |
MQ137 | Ammoniak |
MQ138 | Bensen, toluen, alkohol, aceton, propan, formaldehydgas, väte |
MQ214 | Metan, naturgas |
MQ216 | Naturgas, kolgas |
MQ303A | Alkohol, etanol, rök |
MQ306A | LPG, butangas |
MQ307A | Kolmonoxid |
MQ309A | Kolmonoxid, brandfarliga gaser |
MG811 | Koldioxid (CO2) |
AQ-104 | Luftkvalitet |
MQ6 gassensor
Bilden nedan visar MQ6-sensorns pin-diagram. Den vänstra bilden är dock en modulbaserad MQ6-sensor för gränssnitt med mikrokontrollenheten, stiftdiagrammet för modulen visas också i den bilden.
Stift 1 är VCC, stift 2 är GND, stift 3 är den digitala utgången (logisk låg när gas detekteras.) Och stift 4 är den analoga utgången. Krukan används för att justera känsligheten. Det är inte RL. RL-motståndet är rätt motstånd för DOUT-LED.
Varje MQ-serie sensor har ett värmeelement och ett avkänningsmotstånd. Beroende på koncentrationen av gasen ändras avkänningsmotståndet och genom att detektera det ändrade motståndet kan gaskoncentrationen mätas. För att mäta gaskoncentrationen i PPM ger alla MQ-sensorer ett logaritmiskt diagram som är mycket viktigt. Grafen ger en översikt över gaskoncentrationen med förhållandet mellan RS och RO.
Hur mäter jag PPM med MQ-gassensorer?
RS är avkänningsmotståndet under närvaron av en viss gas medan RO är avkänningsmotståndet i ren luft utan någon speciell gas. Den nedanstående logaritmiska grafen från databladet ger en översikt över gaskoncentrationen med MQ6-sensorns avkänningsmotstånd. MQ6-sensorn används för att detektera LPG-gaskoncentration. Därför kommer MQ6-sensorn att ge ett särskilt motstånd under rena luftförhållanden där LPG-gasen inte är tillgänglig. Motståndet ändras också när LPG-gasen detekteras av MQ6-sensorn.
Så vi måste plotta den här grafen i vår firmware som liknar vad vi gjorde i vårt Arduino gasdetektorprojekt. Formeln är att ha tre olika datapunkter. De två första datapunkterna är början på LPG-kurvan, i X- och Y-koordinater. Den tredje informationen är lutningen.
Så, om vi väljer den djupblå kurvan som är LPG-kurvan, är början på kurvan i X- och Y-koordinaten 200 och 2. Så den första datapunkten från den logaritmiska skalan är (log200, log2) som är (2,3, 0,30).
Låt oss göra det som, X1 och Y1 = (2.3, 0.30). Slutet på kurvan är den andra datapunkten. Enligt samma process som beskrivs ovan är X2 och Y2 (log 10000, log0.4). Således är X2 och Y2 = (4, -0,40). För att få kurvens lutning är formeln
= (Y2-Y1) / (X2-X1) = (- 0,40 - 0,30) / (4 - 2,3) = (-0,70) / (1,7) = -0,41
Diagrammet vi behöver kan ges som
LPG_Curve = {börjar X och börjar Y, lutning} LPG_Curve = {2.3, 0.30, -0.41}
För andra MQ-sensorer, hämta ovanstående data från databladet och den logaritmiska diagramdiagrammet. Värdet kommer att skilja sig beroende på sensor och mät gas. För den här modulen har den en digital stift som bara ger information om gas som finns eller inte. För detta projekt används det också.
Nödvändiga komponenter
De nödvändiga komponenterna för gränssnitt mellan MQ-sensorn och PIC-mikrokontrollen ges nedan-
- 5V strömförsörjning
- Bakbord
- 4,7 k motstånd
- LCD 16x2
- 1k motstånd
- 20Mhz kristall
- 33pF kondensator - 2st
- PIC16F877A mikrokontroller
- MQ-serie sensor
- Berg och andra anslutningsledningar.
Schematisk
Schemat för denna gassensor med ett PIC-projekt är ganska enkelt. Den analoga stiften är ansluten till RA0 och den digitala med RD5 för att mäta den analoga spänningen från gassensormodulen. Om du är helt ny på PIC, kanske du vill titta på PIC ADC tutorial och PIC LCD tutorial för att bättre förstå detta projekt.
Kretsen är konstruerad i ett brödbräda. När anslutningarna slutförts ser min inställning ut så här, visas nedan.
MQ-sensor med PIC-programmering
Huvuddelen av denna kod är huvudfunktionen och andra tillhörande perifera funktioner. Det kompletta programmet finns längst ner på denna sida, de viktiga kodavsnitten förklaras enligt följande
Funktionen nedan används för att få sensorns motståndsvärde i fri luft. När den analoga kanalen 0 används hämtar den data från den analoga kanalen 0. Detta är för kalibrering av MQ-gassensorn.
float SensorCalibration () { int count; // Denna funktion kalibrerar sensorn i fri luftflöde val = 0; för (count = 0; count <50; count ++) {// ta flera prover och beräkna medelvärdet val + = beräkna motstånd (ADC_Read (0)); __fördröja_ms (500); } val = val / 50; val = val / RO_VALUE_CLEAN_AIR; // dividerat med RO_CLEAN_AIR_FACTOR ger Ro return val; }
Nedan används funktionen för att läsa MQ-sensorns analoga värden och medelvärde för att beräkna Rs-värdet
float read_MQ () { int count; flyta rs = 0; för (count = 0; count <5; count ++) {// ta flera avläsningar och genomsnitt det. rs + = beräkna motstånd (ADC_Read (0)); // rs förändras beroende på gaskoncentration. __fördröja_ms (50); } rs = rs / 5; returnera rs; }
Funktionen nedan används för att beräkna motståndet från spänningsdelningsmotståndet och belastningsmotståndet.
float calcul_resistance (int adc_channel) {// sensor och belastningsmotstånd bildar en spänningsdelare. så att använda analogt värde och returvärdet för lastvärdet (((float) RL_VALUE * (1023-adc_channel) / adc_channel)); // vi hittar sensormotstånd. }
RL_VALUE definieras i början av koden som visas nedan
#define RL_VALUE (10) // definiera belastningsmotståndet på kortet, i kilo-ohm
Ändra detta värde efter att ha kontrollerat lastmotståndet ombord. Det kan vara annorlunda i andra MQ-sensorkort. För att plotta tillgängliga data i loggskalan används nedanstående funktion.
int gas_plot_log_scale (float rs_ro_ratio, float * curve) { return pow (10, (((log (rs_ro_ratio) -kurve) / curve) + curve)); }
Kurvan är den LPG-kurva som definieras ovan av koden som tidigare beräknats i vår artikel ovan.
flottör MQ6_curve = {2.3,0.30, -0.41}; // Diagramdiagram, ändra detta för en viss sensor
Slutligen ges huvudfunktionen inom vilken vi mäter det analoga värdet, beräknar PPM och visar det på LCD-skärmen nedan
ogiltig huvud () { system_init (); rensa skärmen(); lcd_com (FIRST_LINE); lcd_puts ("Kalibrera…."); Ro = SensorCalibration (); //rensa skärmen(); lcd_com (FIRST_LINE); lcd_puts ("Klar!"); //rensa skärmen(); lcd_com (FIRST_LINE); lcd_print_number (Ro); lcd_puts ("K Ohms"); __fördröja_ms (1500); gas_detect = 0; medan (1) { if (gas_detect == 0) { lcd_com (FIRST_LINE); lcd_puts ("Gas är närvarande"); lcd_com (SECOND_LINE); lcd_puts ("Gas ppm ="); flyta rs = read_MQ (); flytförhållande = rs / Ro; lcd_print_number (gas_plot_log_scale (ratio, MQ6_curve)); __fördröja_ms (1500); rensa skärmen(); } annat { lcd_com (FIRST_LINE); lcd_puts ("Gas ej närvarande"); } } }
Först mäts sensorns RO i ren luft. Därefter läses den digitala stiftet för att kontrollera om gasen finns eller inte. Om gasen är närvarande mäts gasen med den tillhandahållna LPG-kurvan.
Jag har använt en tändare för att kontrollera om PPM-värdet ändras när gasen detekteras. Dessa cigarrtändare har LPG-gas inuti, som när de släpps i luften kommer att läsas av vår sensor och PPM-värdet på LCD-skärmen ändras som visas nedan.
Hela arbetet finns i videon längst ner på denna sida. Om du har några frågor vänligen lämna dem i kommentarsektionen, eller använd våra forum för andra tekniska frågor.