- MQ6 dujų jutiklis
- Kaip išmatuoti PPM naudojant MQ dujų jutiklius?
- Reikalingi komponentai
- Schema
- MQ jutiklis su PIC programavimu
MQ serijos dujų jutikliai yra labai dažni jutiklių tipai, naudojami dujų detektoriuose tam tikroms dujoms aptikti ar matuoti. Šie jutikliai plačiai naudojami visuose su dujomis susijusiuose įrenginiuose, pavyzdžiui, nuo paprastų dūmų detektorių iki pramoninių oro kokybės monitorių. Šiuos MQ dujų jutiklius jau naudojome su „Arduino“, kad matuotume kai kurias kenksmingas dujas, tokias kaip amoniakas. Šiame straipsnyje mes sužinosime, kaip naudoti šiuos dujų jutiklius su PIC mikrovaldikliais, išmatuoti dujų PPM vertę ir parodyti ją 16x2 LCD ekrane.
Kaip minėta anksčiau, rinkoje yra įvairių rūšių MQ serijos jutiklių ir kiekvienas jutiklis gali matuoti skirtingų tipų dujas, kaip parodyta toliau pateiktoje lentelėje. Dėl šio straipsnio naudosime dujų jutiklį MQ6 su PIC, kuris gali būti naudojamas SND dujų koncentracijai ir koncentracijai nustatyti. Tačiau naudojant tą pačią aparatinę ir programinę aparatinę įrangą kiti MQ serijos jutikliai taip pat gali būti naudojami be didelių modifikacijų kodo ir aparatinės įrangos dalyje.
Jutiklis | Aptinka |
MQ-2 | Metanas, butanas, SND, dūmai |
MQ-3 | Alkoholis, etanolis, rūkymas |
MQ-4 | Metanas, CNG dujos |
MQ-5 | Gamtinės dujos, SND |
MQ-6 | SND, butano dujos |
MQ-7 | Smalkės |
MQ-8 | Vandenilio dujos |
MQ-9 | Anglies monoksidas, degios dujos. |
MQ131 | Ozonas |
MQ135 | Oro kokybė (benzenas, alkoholis, dūmai) |
MQ136 | Vandenilio sulfido dujos |
MQ137 | Amoniakas |
MQ138 | Benzenas, toluolas, alkoholis, acetonas, propanas, formaldehido dujos, vandenilis |
MQ214 | Metanas, gamtinės dujos |
MQ216 | Gamtinės dujos, Anglies dujos |
MQ303A | Alkoholis, etanolis, rūkymas |
MQ306A | SND, butano dujos |
MQ307A | Smalkės |
MQ309A | Anglies monoksidas, degios dujos |
MG811 | Anglies dioksidas (CO2) |
AQ-104 | Oro kokybė |
MQ6 dujų jutiklis
Žemiau esančiame paveikslėlyje parodyta MQ6 jutiklio kaiščių schema. Tačiau kairysis vaizdas yra modulio pagrindu sukurtas MQ6 jutiklis, skirtas sąsajai su mikrovaldiklio bloku, tame paveikslėlyje taip pat rodoma modulio kaiščių schema.
1 kaištis yra VCC, 2 kaištis yra GND, 3 kaištis yra skaitmeninis išėjimas (logika maža, kai nustatomos dujos.) Ir 4 kaištis yra analoginis išėjimas. Puodas naudojamas jautrumui sureguliuoti. Tai nėra RL. RL rezistorius yra tinkamas šviesos diodo DOUT rezistorius.
Kiekvienas MQ serijos jutiklis turi kaitinimo elementą ir jutimo varžą. Priklausomai nuo dujų koncentracijos, jutimo varža pasikeičia ir nustatant besikeičiantį pasipriešinimą, galima išmatuoti dujų koncentraciją. Norėdami išmatuoti dujų koncentraciją PPM, visi MQ jutikliai pateikia logaritminį grafiką, kuris yra labai svarbus. Grafike pateikiama dujų koncentracijos apžvalga su RS ir RO santykiu.
Kaip išmatuoti PPM naudojant MQ dujų jutiklius?
RS yra jutimo varža esant tam tikroms dujoms, o RO - jutimo varža gryname ore be jokių ypatingų dujų. Žemiau pateiktame logaritminiame grafike, paimtame iš duomenų lapo, pateikiama dujų koncentracijos apžvalga su jutiklio MQ6 jutimo atsparumu. MQ6 jutiklis naudojamas SND dujų koncentracijai nustatyti. Todėl MQ6 jutiklis užtikrins ypatingą pasipriešinimą švaraus oro sąlygomis, kai SND dujų nėra. Taip pat pasipriešinimas pasikeis, kai MQ6 jutiklis aptiks SND dujas.
Taigi, turime pateikti šią schemą į savo programinę aparatinę įrangą, panašią į tai, ką padarėme vykdydami „Arduino“ dujų detektoriaus projektą. Formulė turi turėti 3 skirtingus duomenų taškus. Pirmieji du duomenų taškai yra SND kreivės pradžia X ir Y koordinatėmis. Treti duomenys yra nuolydis.
Taigi, jei mes pasirenkame gilią mėlyną kreivę, kuri yra SND kreivė, kreivės pradžia X ir Y koordinatėmis yra 200 ir 2. Taigi, pirmasis logaritminės skalės duomenų taškas yra (log200, log2), kuris yra (2,3, 0,30).
Padarykime tai kaip, X1 ir Y1 = (2,3, 0,30). Kreivės pabaiga yra antrasis duomenų taškas. Tuo pačiu aukščiau aprašytu procesu X2 ir Y2 yra (log 10000, log0,4). Taigi, X2 ir Y2 = (4, -0,40). Norėdami gauti kreivės nuolydį, formulė yra
= (Y2-Y1) / (X2-X1) = (- 0,40 - 0,30) / (4 - 2,3) = (-0,70) / (1,7) = -0,41
Mums reikalingą grafiką galima pateikti kaip
LPG_Curve = {pradedant X ir pradedant Y, nuolydis} LPG_Curve = {2.3, 0.30, -0.41}
Dėl kitų MQ jutiklių gaukite aukščiau nurodytus duomenis iš duomenų lapo ir logaritminio grafiko diagramos. Vertė skirsis atsižvelgiant į išmatuotą jutiklį ir dujas. Šiam moduliui jis turi skaitmeninį kaištį, kuriame pateikiama tik informacija apie esamas dujas ar ne. Šiam projektui jis taip pat naudojamas.
Reikalingi komponentai
Reikalingi komponentai, skirti susieti MQ jutiklį su PIC mikrovaldikliu, pateikti žemiau.
- 5 V maitinimo šaltinis
- Bandomoji Lenta
- 4.7k rezistorius
- LCD 16x2
- 1k rezistorius
- 20Mhz kristalas
- 33pF kondensatorius - 2vnt
- PIC16F877A mikrovaldiklis
- MQ serijos jutiklis
- Berg ir kiti prijungimo laidai.
Schema
Šio dujų jutiklio su PIC projektu schema yra gana tiesi. Analoginis kaištis yra prijungtas prie RA0, o skaitmeninis - su RD5, kad būtų galima išmatuoti dujų jutiklio modulio teikiamą analoginę įtampą. Jei esate visiškai naujas „PIC“ vartotojas, norėdami geriau suprasti šį projektą, galbūt norėsite pasidomėti PIC ADC ir PIC LCD pamoka.
Grandinė sukonstruota duonos lentoje. Užbaigus ryšius, mano sąranka atrodo taip, kaip parodyta žemiau.
MQ jutiklis su PIC programavimu
Pagrindinė šio kodo dalis yra pagrindinė funkcija ir kitos susijusios periferinės funkcijos. „Complete“ programą rasite šio puslapio apačioje, svarbūs kodo fragmentai paaiškinami taip
Žemiau pateikta funkcija naudojama norint gauti jutiklio pasipriešinimo laisvame ore vertę. Naudojant analoginį kanalą 0, jis gauna duomenis iš analoginio kanalo 0. Tai skirta MQ dujų jutikliui kalibruoti.
float SensorCalibration () { int skaičius; // Ši funkcija sukalibruos jutiklį laisvo oro plūdės val = 0; for (count = 0; count <50; count ++) {// paimkite kelis pavyzdžius ir apskaičiuokite vidutinę vertę val + = apskaičiuokite atsparumą (ADC_Read (0)); __delay_ms (500); } val = val / 50; val = val / RO_VALUE_CLEAN_AIR; // padalijus iš RO_CLEAN_AIR_FACTOR gaunamas Ro grįžtamasis val; }
Žemiau funkcija naudojama nuskaityti MQ jutiklio analogines vertes ir vidutiniškai apskaičiuoti Rs vertę
plūdė skaityti_MQ () { int skaičius; plūdės rs = 0; už (count = 0; count <5; count ++) {// paimkite kelis rodmenis ir jo vidurkį. rs + = apskaičiuoti atsparumą (ADC_Read (0)); // rs keičiasi atsižvelgiant į dujų koncentraciją. __delay_ms (50); } rs = rs / 5; grįžti rs; }
Žemiau pateikta funkcija naudojama apskaičiuojant atsparumą iš įtampos daliklio rezistoriaus ir apkrovos varžą.
plūdinis apskaičiuokite atsparumą (int adc_channel) {// jutiklis ir apkrovos rezistorius suformuoja įtampos daliklį. taigi naudojant analoginę vertę ir apkrovos vertės grąžą (((float) RL_VALUE * (1023-adc_channel) / adc_channel)); // rasime jutiklio rezistorių. }
RL_VALUE yra apibrėžta kodo pradžioje, kaip parodyta žemiau
#define RL_VALUE (10) // apibrėžkite lentos pasipriešinimą kilogramais omų
Pakeiskite šią vertę patikrinę laivo apkrovos atsparumą. Jis gali skirtis kitose MQ jutiklių plokštėse. Turimiems duomenims suskaičiuoti į žurnalo skalę naudojama ši funkcija.
int gas_plot_log_scale (plūduriuojanti rs_ro_ratio, plūduriuojanti * kreivė) { grįžtamoji galia (10, (((log (rs_ro_ratio) kreivė) / kreivė) + kreivė)); }
Kreivė yra aukščiau apibrėžta SND kreivė, kuri anksčiau buvo apskaičiuota aukščiau esančiame mūsų straipsnyje.
plūduriuojanti MQ6_curve = {2,3,0,30, -0,41}; // Grafiko diagrama, pakeiskite tai konkrečiam jutikliui
Galiausiai, pagrindinė funkcija, kurios metu matuojame analoginę vertę, apskaičiuojame PPM ir rodome ją LCD, pateikiama žemiau
void main () { system_init (); clear_screen (); lcd_com (FIRST_LINE); lcd_puts ("Kalibruojama…."); Ro = jutiklio kalibravimas (); // valyti ekraną (); lcd_com (FIRST_LINE); lcd_puts ("Atlikta!"); // valyti ekraną (); „lcd_com“ (FIRST_LINE); lcd_print_number (Ro); lcd_puts ("K omai"); __delay_ms (1500); gas_detect = 0; while (1) { if (gas_detect == 0) { lcd_com (FIRST_LINE); lcd_puts ("Dujų yra"); „lcd_com“ (SECOND_LINE); lcd_puts ("Dujų ppm ="); plūduriuoti rs = skaityti_MQ (); plūdės santykis = rs / Ro; lcd_print_number (gas_plot_log_scale (santykis, MQ6_curve)); __delay_ms (1500); clear_screen (); } dar { lcd_com (FIRST_LINE); lcd_puts ("Dujų nėra"); } } }
Pirma, jutiklio RO matuojamas gryname ore. Tada nuskaitomas skaitmeninis kaištis, siekiant patikrinti, ar yra dujų. Jei yra dujų, dujos matuojamos pagal pateiktą SND kreivę.
Aš naudoju žiebtuvėlį, kad patikrinčiau, ar aptikus dujas keičiasi PPM vertė. Šiuose cigaro žiebtuvėliuose yra suskystintų dujų, kurias išleidus į orą nuskaitys mūsų jutiklis, o LCD ekrane pasikeis PPM vertė, kaip parodyta žemiau.
Visą darbą galite rasti vaizdo įraše, pateiktame šio puslapio apačioje. Jei turite klausimų, palikite juos komentarų skyriuje arba naudokite mūsų forumus kitiems techniniams klausimams.