- MQ6 gassensor
- Hvordan måles PPM ved hjælp af MQ-gassensorer?
- Nødvendige komponenter
- Skematisk
- MQ-sensor med PIC-programmering
MQ-seriens gassensorer er meget almindelige typer sensorer, der bruges i gasdetektorer til at detektere eller måle visse typer gasser. Disse sensorer bruges i vid udstrækning i alle gasrelaterede enheder som fra enkle røgdetektorer til industrielle luftkvalitetsmonitorer. Vi har allerede brugt disse MQ-gassensorer med Arduino til at måle nogle skadelige gasser som ammoniak. I denne artikel lærer vi, hvordan man bruger disse gassensorer med PIC Microcontrollers, til at måle PPM-værdien af gassen og vise den på et 16x2 LCD.
Som nævnt tidligere er der forskellige slags sensorer i MQ-serien tilgængelige på markedet, og hver sensor kan måle forskellige typer gasser som vist i nedenstående tabel. Af hensyn til denne artikel bruger vi MQ6-gassensoren med PIC, der kan bruges til at detektere LPG- gasens tilstedeværelse og koncentration. Ved at bruge den samme hardware og firmware kan andre sensorer i MQ-serien også bruges uden større ændringer i kode- og hardwaredelen.
Sensor | Registrerer |
MQ-2 | Metan, butan, LPG, røg |
MQ-3 | Alkohol, etanol, røg |
MQ-4 | Methan, CNG Gas |
MQ-5 | Naturgas, LPG |
MQ-6 | LPG, butangas |
MQ-7 | Carbonmonoxid |
MQ-8 | Brintgas |
MQ-9 | Kulilte, brandfarlige gasser. |
MQ131 | Ozon |
MQ135 | Luftkvalitet (benzen, alkohol, røg) |
MQ136 | Hydrogensulfidgas |
MQ137 | Ammoniak |
MQ138 | Benzen, toluen, alkohol, acetone, propan, formaldehydgas, brint |
MQ214 | Metan, naturgas |
MQ216 | Naturgas, kulgas |
MQ303A | Alkohol, etanol, røg |
MQ306A | LPG, butangas |
MQ307A | Carbonmonoxid |
MQ309A | Kulilte, brandfarlige gasser |
MG811 | Kuldioxid (CO2) |
AQ-104 | Luftkvalitet |
MQ6 gassensor
Nedenstående billede viser MQ6-sensorens pin-diagram. Det venstre billede er dog en modulbaseret MQ6-sensor til grænseflade med mikrokontroller-enheden, pin-diagrammet for modulet vises også i det billede.
Pin 1 er VCC, Pin 2 er GND, Pin 3 er den digitale udgang (Logisk lav, når der registreres gas.) Og Pin 4 er den analoge udgang. Gryden bruges til at justere følsomheden. Det er ikke RL. RL-modstanden er den rigtige modstand på DOUT LED.
Hver sensor i MQ-serien har et varmeelement og en følemodstand. Afhængig af koncentrationen af gassen ændres følemodstanden, og ved at detektere den skiftende modstand kan gaskoncentrationen måles. For at måle gaskoncentrationen i PPM giver alle MQ sensorer en logaritmisk graf, som er meget vigtig. Grafen giver en oversigt over gaskoncentrationen med forholdet mellem RS og RO.
Hvordan måles PPM ved hjælp af MQ-gassensorer?
RS er følsomhedsmodstanden under tilstedeværelsen af en bestemt gas, mens RO er følsomhedsmodstanden i ren luft uden nogen særlig gas. Den nedenstående logaritmiske graf taget fra databladet giver en oversigt over gaskoncentrationen med MQ6-sensorens følsomhed. MQ6-sensoren bruges til at detektere LPG-gaskoncentration. Derfor vil MQ6-sensoren give en særlig modstand under ren luft, hvor LPG-gassen ikke er tilgængelig. Modstanden vil også ændre sig, hver gang LPG-gas detekteres af MQ6-sensoren.
Så vi er nødt til at plotte denne graf i vores firmware svarende til hvad vi gjorde i vores Arduino gasdetektorprojekt. Formlen er at have 3 forskellige datapunkter. De første to datapunkter er starten på LPG-kurven i X- og Y-koordinater. De tredje data er hældningen.
Så hvis vi vælger den dybblå kurve, der er LPG-kurven, er kurvens start i X- og Y-koordinaten 200 og 2. Så det første datapunkt fra den logaritmiske skala er (log200, log2), som er (2,3, 0,30).
Lad os gøre det som, X1 og Y1 = (2.3, 0.30). Slutningen af kurven er det andet datapunkt. Ved den samme fremgangsmåde som beskrevet ovenfor er X2 og Y2 (log 10000, log0.4). Således er X2 og Y2 = (4, -0,40). For at få kurvens hældning er formlen
= (Y2-Y1) / (X2-X1) = (- 0,40 - 0,30) / (4 - 2,3) = (-0,70) / (1,7) = -0,41
Den graf, vi har brug for, kan gives som
LPG_Curve = {starter X og starter Y, hældning} LPG_Curve = {2.3, 0.30, -0.41}
For andre MQ-sensorer skal du hente ovenstående data fra databladet og det logaritmiske grafdiagram. Værdien vil variere afhængigt af sensoren og den målte gas. For dette særlige modul har den en digital pin, der kun giver information om tilstedeværende gas eller ej. Til dette projekt bruges det også.
Nødvendige komponenter
De nødvendige komponenter til grænseflade mellem MQ-sensor og PIC-mikrocontroller er angivet nedenfor -
- 5V strømforsyning
- Brødbræt
- 4,7 k modstand
- LCD 16x2
- 1k modstand
- 20Mhz krystal
- 33pF kondensator - 2stk
- PIC16F877A mikrokontroller
- MQ-serie sensor
- Berg og andre tilslutningsledninger.
Skematisk
Skematisk for denne gassensor med et PIC-projekt er ret ligetil. Den analoge stift er forbundet med RA0 og den digitale med RD5 for at måle den analoge spænding fra gassensormodulet. Hvis du er helt ny til PIC, kan du måske undersøge PIC ADC tutorial og PIC LCD tutorial for bedre at forstå dette projekt.
Kredsløbet er konstrueret i et brødbræt. Når forbindelserne var afsluttet, ser min opsætning sådan ud, vist nedenfor.
MQ-sensor med PIC-programmering
Hoveddelen af denne kode er hovedfunktionen og andre tilknyttede perifere funktioner. Det komplette program kan findes nederst på denne side, de vigtige kodestykker forklares som følger
Nedenstående funktion bruges til at få sensorens modstandsværdi i fri luft. Da den analoge kanal 0 bruges, henter den data fra den analoge kanal 0. Dette er til kalibrering af MQ-gassensoren.
float SensorCalibration () { int count; // Denne funktion kalibrerer sensoren i fri luft float val = 0; for (count = 0; count <50; count ++) {// tage flere prøver og beregne gennemsnitsværdien val + = calcip_resistance (ADC_Read (0)); __forsink_ms (500); } val = val / 50; val = val / RO_VALUE_CLEAN_AIR; // divideret med RO_CLEAN_AIR_FACTOR giver Ro- returværdien; }
Nedenstående funktion bruges til at læse MQ-sensorens analoge værdier og beregne gennemsnittet for at beregne Rs-værdien
float read_MQ () { int antal; flyde rs = 0; for (count = 0; count <5; count ++) {// tage flere målinger og gennemsnit det. rs + = beregne modstand (ADC_Read (0)); // rs ændringer i henhold til gaskoncentration. __forsink_ms (50); } rs = rs / 5; returnere rs; }
Nedenstående funktion bruges til at beregne modstanden fra spændingsdelermodstanden og belastningsmodstanden.
float calcut_resistance (int adc_channel) {// sensor og belastningsmodstand danner en spændingsdeler. så brug af analog værdi og returværdi for belastningsværdi (((float) RL_VALUE * (1023-adc_channel) / adc_channel)); // vi finder sensormodstand. }
RL_VALUE defineres ved starten af koden som vist nedenfor
#define RL_VALUE (10) // definer belastningsmodstanden på tavlen i kilo-ohm
Skift denne værdi efter kontrol af den indbyggede belastningsmodstand. Det kan være anderledes i andre MQ-sensorkort. For at plotte de tilgængelige data i logskalaen anvendes nedenstående funktion.
int gas_plot_log_scale (float rs_ro_ratio, float * curve) { return pow (10, (((log (rs_ro_ratio) -kurve) / curve) + curve)); }
Kurven er LPG-kurven defineret ovenfor af den kode, der tidligere er beregnet i vores artikel ovenfor.
flyde MQ6_curve = {2.3,0.30, -0.41}; // Grafplot, skift dette for en bestemt sensor
Endelig er hovedfunktionen, inden for hvilken vi måler den analoge værdi, beregner PPM og viser den på LCD'en nedenfor
ugyldig main () { system_init (); clear_screen (); lcd_com (FIRST_LINE); lcd_puts ("Kalibrering…."); Ro = SensorCalibration (); // clear_screen (); lcd_com (FIRST_LINE); lcd_puts ("Udført!"); // clear_screen (); lcd_com (FIRST_LINE); lcd_print_number (Ro); lcd_puts ("K Ohms"); __forsink_ms (1500); gas_detect = 0; mens (1) { hvis (gas_detect == 0) { lcd_com (FIRST_LINE); lcd_puts ("Gas er til stede"); lcd_com (SECOND_LINE); lcd_puts ("Gas ppm ="); flyde rs = read_MQ (); flydeforhold = rs / Ro; lcd_print_number (gas_plot_log_scale (ratio, MQ6_curve)); __forsink_ms (1500); clear_screen (); } andet { lcd_com (FIRST_LINE); lcd_puts ("Gas ikke til stede"); } } }
For det første måles sensorens RO i ren luft. Derefter læses den digitale pin for at kontrollere, om gassen er til stede eller ej. Hvis gassen er til stede, måles gassen ved hjælp af den medfølgende LPG-kurve.
Jeg har brugt en lighter til at kontrollere, om PPM-værdien ændres, når gassen registreres. Disse cigartændere har LPG-gas indeni, som, når de frigives i luften, læses af vores sensor, og PPM-værdien på LCD-skærmen ændres som vist nedenfor.
Det komplette arbejde kan findes i videoen, der er angivet nederst på denne side. Hvis du har spørgsmål, bedes du lade dem være i kommentarsektionen eller bruge vores fora til andre tekniske spørgsmål.