Përmbajtje:

Arduino CO Monitor duke përdorur sensorin MQ-7: 8 hapa (me fotografi)
Arduino CO Monitor duke përdorur sensorin MQ-7: 8 hapa (me fotografi)

Video: Arduino CO Monitor duke përdorur sensorin MQ-7: 8 hapa (me fotografi)

Video: Arduino CO Monitor duke përdorur sensorin MQ-7: 8 hapa (me fotografi)
Video: Полное тестирование/обзор светодиодного измерителя напряжения и тока постоянного тока 10 А, 0–100 В 2024, Korrik
Anonim
Arduino CO Monitor duke përdorur sensorin MQ-7
Arduino CO Monitor duke përdorur sensorin MQ-7
Arduino CO Monitor duke përdorur sensorin MQ-7
Arduino CO Monitor duke përdorur sensorin MQ-7

Disa fjalë pse u krijua kjo udhëzues: një ditë nëna e të dashurës sonë na telefonoi në mes të natës sepse ndihej vërtet e sëmurë - ajo kishte marramendje, takikardi, nauze, tension të lartë të gjakut, madje edhe i ra të fikët për një kohë të panjohur (ndoshta 5 ~ minuta, por nuk ka asnjë mënyrë për të treguar), të gjitha pa ndonjë arsye të dukshme. Ajo jeton në një fshat të vogël larg spitaleve (60 km nga vendi ynë, 30 km në spitalin më të afërt, 10 km pa ndonjë rrugë normale në mes), kështu që ne nxituam tek ajo dhe arritëm atje menjëherë pas ambulancës. Ajo u shtrua në spital dhe në mëngjes u ndje pothuajse mirë, por mjekët nuk ishin në gjendje të gjenin shkakun e saj. Të nesërmen kishim një ide: mund të kishte qenë helmim nga CO, pasi ajo kishte bojler të ujit me gaz (në foto), dhe ishte ulur pranë tij për gjithë mbrëmjen kur ndodhi. Kohët e fundit kemi blerë sensorin MQ-7 CO, por kurrë nuk kam pasur kohë për të mbledhur një skemë për të, kështu që kjo ishte koha e përsosur për ta bërë këtë. Pas një ore kërkimi në internet për ndonjë udhëzim, kuptova se nuk mund të gjej ndonjë udhëzues që në të njëjtën kohë ndjek udhëzimet e prodhuesit të sensorit të dhëna në fletën e të dhënave të tij dhe shpjegon asgjë fare (një shembull dukej se kishte kod mjaft të mirë, por nuk ishte e qartë se si ta zbatonte atë, të tjerët ishin tepër të thjeshtuar dhe nuk do të funksiononin mirë). Kështu kaluam rreth 12 orë për zhvillimin e skemave, bërjen dhe printimin e kasës 3d, testimin dhe kalibrimin e sensorit, dhe ditën tjetër shkuam në kazanin e dyshimtë. Doli se nivelet e CO atje ishin jashtëzakonisht të larta dhe mund të ishin fatale nëse koha e ekspozimit të CO ishte më e gjatë. Kështu që unë besoj se kushdo që ka një situatë të ngjashme (si kaldaja me gaz ose djegie të tjera që ndodhin brenda një hapësire jetese) duhet të ketë një sensor të tillë për të parandaluar që të ndodhë diçka e keqe.

E gjithë kjo ndodhi dy javë më parë, që atëherë kam përmirësuar skemat dhe programin mjaft shumë, dhe tani duket se është mjaft mirë dhe relativisht e thjeshtë (jo 3 rreshta të kodit të thjeshtë, por akoma). Edhe pse shpresoj se dikush me njehsor të saktë CO do të më japë disa reagime mbi kalibrimin e paracaktuar që kam vënë në skicë - dyshoj se është larg nga e mira. Këtu është një udhëzues i plotë me disa të dhëna eksperimentale.

Hapi 1: Fatura e Materialeve

Fatura e Materialeve
Fatura e Materialeve

Do t'ju duhet: 0. Bordi Arduino. Unë preferoj klonin kinez të Arduino Nano për çmimin e tij të jashtëzakonshëm prej $ 3, por çdo arduino 8-bit do të funksionojë këtu. Skica përdor disa funksione të kohëmatësve të avancuar dhe u testua vetëm në mikrokontrollues atmega328 - edhe pse me siguri do të funksionojë mirë edhe për të tjerët.1. Sensori MQ-7 CO. Më së shpeshti i disponueshëm me këtë modul të sensorit Flying Fish, duhet të kalojë përmes një modifikimi të vogël, detaje në hapin tjetër, ose mund të përdorni një sensor të veçantë MQ-7.

2. Transistor bipolar NPN. Pothuajse çdo transistor NPN që mund të trajtojë 300 mA ose më shumë do të funksionojë këtu. Transistori PNP nuk do të funksionojë me një modul të përmendur Flying Fish (sepse ka pin ngrohës të ngjitur në daljen e sensorit), por mund të përdoret me një sensor diskret MQ-7.

3. Rezistentët: 2 x 1k (nga 0.5k në 1.2k do të funksionojnë mirë), dhe 1 x 10k (ai mbahet më së miri i saktë - edhe pse nëse absolutisht duhet të përdorni një vlerë të ndryshme, rregulloni variablin reference_resistor_kOhm në skicë në përputhje me rrethanat).

4. Kondensatorët: 2 x 10uF ose më shumë. Kërkohen ato tantal ose qeramike, elektrolitika nuk do të funksionojë mirë për shkak të ESR të lartë (ata nuk do të jenë në gjendje të sigurojnë rrymë të mjaftueshme për të zbutur valëzimin me rrymë të lartë).5. LED të gjelbër dhe të kuq për të treguar nivelin aktual të CO (ju gjithashtu mund të përdorni një LED të vetëm me dy ngjyra me 3 terminale, siç kemi përdorur në prototipin tonë të kutisë së verdhë).6. Biezer Piezo për të treguar nivelin e lartë të CO2. Tabela e bukës dhe telat (gjithashtu mund të lidhni gjithçka në kunjat Nano ose të shtrydhni në prizat Uno, por është e lehtë të bëni një gabim në këtë mënyrë).

Hapi 2: Modifikimi i Modulit ose Instalimi i Sensorit Diskret

Modifikimi i Modulit ose Instalimi i Sensorit Diskret
Modifikimi i Modulit ose Instalimi i Sensorit Diskret

Për modulin, duhet të shkrini rezistencën dhe kondensatorin, siç tregohet në foto. Në thelb mund të shkrini gjithçka nëse dëshironi - elektronika e modulit është krejtësisht e padobishme, ne e përdorim atë vetëm si mbajtës për vetë sensorin, por këto dy përbërës do t'ju pengojnë të merrni lexime të sakta, Nëse jeni duke përdorur sensorë diskrete, lidhni kunjat e ngrohësit (H1 dhe H2) në 5V dhe kolektorin e transistorit në mënyrë korresponduese. Lidhni një anë ndijuese (cilindo nga kunjat A) në 5V, një anë tjetër shqisore (cilindo nga kunjat B) në rezistencën 10k, ashtu si kunja analoge e modulit në skematikë.

Hapi 3: Parimi i funksionimit

Parimi i funksionimit
Parimi i funksionimit
Parimi i funksionimit
Parimi i funksionimit

Pse na duhen fare të gjitha këto ndërlikime, pse të mos lidhim 5V, tokëzim dhe thjesht të lexojmë? Epo, për fat të keq nuk do të merrni asgjë të dobishme në këtë mënyrë. Sipas fletës së të dhënave MQ-7, sensori duhet të kalojë përmes dhe ciklet e ngrohjes së ulët për të marrë matjet e duhura. Gjatë fazës së temperaturës së ulët, CO absorbohet në pjatë, duke prodhuar të dhëna domethënëse. Gjatë fazës së temperaturës së lartë, CO e absorbuar dhe komponimet e tjera avullojnë nga pllaka e sensorit, duke e pastruar atë për matjen tjetër.

Pra, në përgjithësi funksionimi është i thjeshtë:

1. Aplikoni 5V për 60 sekonda, mos i përdorni këto lexime për matjen e CO.

2. Aplikoni 1.4V për 90 sekonda, përdorni këto lexime për matjen e CO.

3. Shkoni në hapin 1.

Por këtu është problemi: Arduino nuk mund të sigurojë energji të mjaftueshme për të drejtuar këtë sensor nga kunjat e tij - ngrohësi i sensorit kërkon 150 mA, ndërsa kunja Arduino mund të sigurojë jo më shumë se 40 mA, kështu që nëse lidhet drejtpërdrejt, kunja Arduino do të digjet dhe sensori akoma fiton nuk punon. Pra, ne duhet të përdorim një lloj përforcuesi aktual që merr rrymë të vogël hyrëse për të kontrolluar rrymën e madhe të daljes. Një problem tjetër është marrja e 1.4V. Mënyra e vetme për të marrë me besueshmëri këtë vlerë pa futur shumë përbërës analogë është përdorimi i qasjes PWM (Modulimi i Gjerësisë së Pulsit) me reagime që do të kontrollojnë tensionin e daljes.

Transistori NPN zgjidh të dy problemet: kur ndizet vazhdimisht, voltazhi në sensor është 5V dhe po nxehet për fazën e temperaturës së lartë. Kur aplikojmë PWM në hyrjen e tij, rryma po pulson, pastaj zbutet nga kondensatori dhe tensioni mesatar mbahet konstant. Nëse përdorim PWM me frekuencë të lartë (në skicë ka frekuencë 62.5KHz) dhe mesatarisht shumë lexime analoge (në skicë kemi mesatare mbi 1000 lexime), atëherë rezultati është mjaft i besueshëm.

Criticalshtë kritike të shtoni kondensatorë sipas skemave. Imazhet këtu ilustrojnë ndryshimin në sinjal me dhe pa kondensator C2: pa të, valëzimi PWM është qartë i dukshëm dhe shtrembëron ndjeshëm leximet.

Hapi 4: Skemat dhe Tabela e Breadboard

Skematike dhe Breadboard
Skematike dhe Breadboard
Skematike dhe Breadboard
Skematike dhe Breadboard
Skematike dhe Breadboard
Skematike dhe Breadboard

Këtu është skema dhe montimi i bukës.

KUJDES! Kërkohet modifikimi i një moduli standard të shpërthimit! Pa modifikim moduli është i padobishëm. Modifikimi përshkruhet në hapin e dytë

Isshtë e rëndësishme të përdorni kunjat D9 dhe D10 për LED, pasi atje kemi dalje të harduerit Timer1, do të lejojë që të ndryshojnë pa probleme ngjyrat e tyre. Kunjat D5 dhe D6 përdoren për zile, sepse D5 dhe D6 janë dalje të harduerit Timer0. Ne do t'i konfigurojmë që të jenë të kundërta me njëri -tjetrin, kështu që ata do të kalojnë midis gjendjeve (5V, 0V) dhe (0V, 5V), duke prodhuar kështu zë në zile. Paralajmërim: kjo ndikon në ndërprerjen kryesore të kohës Arduino, kështu që të gjitha funksionet e varura nga koha (si millis ()) nuk do të japin rezultate të sakta në këtë skicë (më shumë për këtë më vonë). Pin D3 ka dalje harduerike Timer2 të lidhur me të (si dhe D11 - por është më pak i përshtatshëm për të vënë tela në D11 sesa në D3) - kështu që ne po e përdorim atë për të siguruar PWM për tranzistorin e kontrollit të tensionit. Rezistori R1 përdoret për të kontrolluar shkëlqimin e LED -ve. Mund të jetë diku nga 300 në 3000 Ohm, 1k është mjaft optimale në shkëlqimin/konsumin e energjisë. Rezistori R2 përdoret për të kufizuar rrymën bazë të transistorit. Nuk duhet të jetë më e ulët se 300 Ohms (për të mos mbingarkuar pinin Arduino), dhe jo më e lartë se 1500 Ohms. 1k ekziston një zgjedhje e sigurt.

Rezistori R3 përdoret në seri me pllakën e sensorit për të krijuar një ndarës të tensionit. Tensioni në daljen e sensorit është i barabartë me R3 / (R3 + Rs) * 5V, ku Rs është rezistenca e sensorit aktual. Rezistenca e sensorit varet nga përqendrimi i CO, kështu që tensioni ndryshon në përputhje me rrethanat. Kondensatori C1 përdoret për të zbutur tensionin e hyrjes PWM në sensorin MQ -7, aq më i lartë është kapaciteti i tij aq më mirë, por gjithashtu duhet të ketë ESR të ulët - aq qeramike (ose tantal) kondensatori preferohet këtu, ai elektrolitik nuk do të funksionojë mirë.

Kondensatori C2 përdoret për të zbutur daljen analoge të sensorit (tensioni i daljes varet nga tensioni i hyrjes - dhe ne kemi një PWM mjaft të lartë të rrymës këtu, që prek të gjitha skemat, kështu që ne kemi nevojë për C2). Zgjidhja më e thjeshtë është përdorimi i të njëjtit kondensator si transistori C1. NPN ose përçon rrymë gjatë gjithë kohës për të siguruar rrymë të lartë në ngrohësin e sensorit, ose punon në modalitetin PWM duke zvogëluar kështu rrymën e ngrohjes.

Hapi 5: Programi Arduino

Programi Arduino
Programi Arduino

KUJDES: SENSORI K RERKON Kalibrim manual për çdo përdorim praktik. PA KALIBRIM, NEP VARSI T P PARAMETERSRVE T S SENSORIT TUAJ T VRTET, KJO SKISH M MUND T T NDIZM ALARMIN N IN AJR C TLE PASTANR DHE T NOT MOS ZBULUAR PONRQCNDRIMIN E MONOKSIDIT TAR KARBONIT LETAL

Kalibrimi përshkruhet në hapat e mëposhtëm. Kalibrimi i ashpër është shumë i thjeshtë, i saktë është mjaft kompleks.

Në nivelin e përgjithshëm, programi është mjaft i thjeshtë:

Së pari ne kalibrojmë PWM -in tonë në mënyrë që të prodhojmë 1.4V të qëndrueshëm të kërkuar nga sensori (gjerësia e duhur e PWM varet nga shumë parametra si vlerat e sakta të rezistencës, rezistenca e këtij sensori të veçantë, kurba VA e tranzistorit etj etj - kështu që mënyra më e mirë është të provoni vlera të ndryshme dhe përdorim atë që i përshtatet më së miri). Pastaj, ne vazhdimisht kalojmë nëpër ciklin e ngrohjes 60 sekonda dhe matjes 90 sekonda. Në zbatim bëhet disi e komplikuar. Ne duhet të përdorim kohëmatës harduerësh sepse gjithçka që kemi këtu ka nevojë për PWM të qëndrueshëm me frekuencë të lartë në mënyrë që të funksionojë siç duhet. Kodi është i bashkangjitur këtu dhe mund të shkarkohet nga github-i ynë, si dhe burimi i skemave në Fritzing. Në program ka 3 funksione që trajtojnë kohëmatësit: setTimer0PWM, setTimer1PWM, setTimer2PWM. Secila prej tyre vendos kohëmatësin në modalitetin PWM me parametrat e dhënë (komentohet në kod), dhe vendos gjerësinë e pulsit sipas vlerave të hyrjes. Fazat e matjes ndërrohen duke përdorur funksionet startMeasurementPhase dhe startHeatingPhase, trajtoni gjithçka brenda. dhe vendosni vlerat e duhura të kohëmatësit për kalimin midis ngrohjes 5V dhe 1.4V. Gjendja e LED-ve përcaktohet nga funksioni i vendosurLEDs i cili pranon shkëlqimin e gjelbër dhe të kuq në hyrjen e tij (në shkallën lineare 1-100) dhe e konverton atë në cilësimin përkatës të kohëmatësit.

Gjendja e zhurmës kontrollohet duke përdorur funksionet buzz_on, buzz_off, buzz_beep. Funksionet e ndezjes/fikjes ndezin dhe fikin tingullin, funksioni i bip prodhon një sekuencë specifike të bipit me një periudhë prej 1.5 sekondash nëse quhet periodikisht (ky funksion kthehet menjëherë në mënyrë që të mos ndalojë programin kryesor - por ju duhet ta thërrisni atë përsëri dhe përsëri për të prodhuar model bip).

Programi së pari ekzekuton funksionin pwm_adjust që zbulon gjerësinë e duhur të ciklit PWM në mënyrë që të arrijë 1.4V gjatë fazës së matjes. Pastaj bip disa herë për të treguar që sensori është gati, kalon në fazën e matjes dhe fillon lakun kryesor.

Në lakin kryesor, programi kontrollon nëse kemi kaluar kohë të mjaftueshme në fazën aktuale (90 sekonda për fazën e matjes, 60 sekonda për fazën e ngrohjes) dhe nëse po, atëherë ndryshon fazën aktuale. Gjithashtu përditëson vazhdimisht leximet e sensorëve duke përdorur zbutjen eksponenciale: vlera e re = 0.999*vlera e vjetër + 0.001*leximi i ri. Me parametra të tillë dhe cikël matës, mesatarisht sinjalizon përafërsisht 300 milisekonda të fundit. KUJDES: SENSORI K RERKON KALIBRIM MANUAL P ANR ÇDO P USRDORIM PRAKTIK. PA KALIBRIM, N D VARSI TAR PARAMETRAVE T S SENSORIT TUAJ TART VRTET, Ky skicë mund të aktivizojë alarmin në ajër të pastër ose të mos zbulojë përqendrim të monoksidit të karbonit lethal.

Hapi 6: Drejtimi i parë: Çfarë të presësh

Vrapimi i parë: Çfarë të presësh
Vrapimi i parë: Çfarë të presësh

Nëse keni mbledhur gjithçka siç duhet, pasi të keni bërë skicën do të shihni diçka si kjo në Serial monitor:

rregullimi i PWM w = 0, V = 4.93

rregullimi i PWM w = 17, V = 3.57PWM rezultati: gjerësia 17, tensioni 3.57

dhe pastaj një seri numrash që përfaqësojnë leximet aktuale të sensorit. Kjo pjesë është rregullimi i gjerësisë së PWM në mënyrë që të prodhojë tensionin e ngrohësit të sensorit sa më afër 1.4V, tensioni i matur zbritet nga 5V, kështu që vlera jonë ideale e matur është 3.6V. Nëse ky proces nuk përfundon ose përfundon kurrë pas një hapi të vetëm (duke rezultuar në gjerësi të barabartë me 0 ose 254) - atëherë diçka nuk shkon. Kontrolloni nëse tranzistori juaj është vërtet NPN dhe është i lidhur siç duhet (sigurohuni që keni përdorur bazën, kolektorin, kunjat e emetuesit djathtas - baza shkon në D3, kolektori në MQ -7 dhe emetuesi në tokë, mos llogarisni në Pamjen e Fritzing breadboard - është gabuar për disa transistorë) dhe sigurohuni që keni lidhur hyrjen e sensorit me hyrjen A1 të Arduino. Nëse gjithçka është mirë, duhet të shihni në Serial Plotter nga Arduino IDE diçka të ngjashme me imazhin. Ciklet e ngrohjes dhe matjes me gjatësi 60 dhe 90 sekonda po funksionojnë njëra pas tjetrës, me CO ppm të matur dhe përditësuar në fund të çdo cikli. Ju mund të merrni një flakë të hapur pranë sensorit kur cikli i matjes është pothuajse i përfunduar dhe shihni se si do të ndikojë në leximet (në varësi të llojit të flakës, ai mund të prodhojë deri në 2000 ppm përqendrim CO në ajër të hapur - kështu që edhe pse vetëm një pjesë e vogël e në fakt kalon në sensor, ai akoma do të ndezë alarmin dhe nuk do të fiket deri në fund të ciklit tjetër). E tregova në imazh, si dhe përgjigjen ndaj zjarrit nga çakmaku.

Hapi 7: Kalibrimi i sensorit

Kalibrimi i sensorit
Kalibrimi i sensorit
Kalibrimi i sensorit
Kalibrimi i sensorit

Sipas fletës së të dhënave të prodhuesit, sensori duhet të ketë cikle ngrohje-ftohje për 48 orë rresht para se të kalibrohet. Dhe duhet ta bëni nëse keni ndërmend ta përdorni për një kohë të gjatë: në rastin tim, leximi i sensorit në ajër të pastër ndryshoi për rreth 30% gjatë 10 orëve. Nëse nuk do ta merrni parasysh këtë, mund të merrni 0 ppm rezultat aty ku në të vërtetë ka 100 ppm CO. Nëse nuk doni të prisni për 48 orë, mund të monitoroni daljen e sensorit në fund të ciklit të matjes. Kur mbi një orë nuk do të ndryshojë për më shumë se 1-2 pikë - mund të ndaloni ngrohjen atje.

Kalibrim i ashpër:

Pasi të keni bërë skicën për të paktën 10 orë në ajër të pastër, merrni vlerën e sensorit të papërpunuar në fund të ciklit të matjes, 2-3 sekonda para fillimit të fazës së ngrohjes dhe shkruani atë në ndryshoren sensor_reading_clean_air (rreshti 100). Kjo eshte. Programi do të vlerësojë parametrat e tjerë të sensorit, ata nuk do të jenë të saktë, por duhet të jenë të mjaftueshëm për të bërë dallimin midis përqendrimit 10 dhe 100 ppm.

Kalibrimi i saktë:

Unë rekomandoj shumë që të gjeni një matës CO të kalibruar, të bëni 100 ppm mostër CO (kjo mund të bëhet duke marrë pak gaz tymi në shiringë - përqendrimi i CO mund të jetë lehtësisht në rangun e disa mijëra ppm - dhe ngadalë ta vendosni në kavanoz të mbyllur me njehsor i kalibruar dhe sensori MQ-7), merrni leximin e papërpunuar të sensorit në këtë përqendrim dhe vendoseni në ndryshoren sensor_reading_100_ppm_CO. Pa këtë hap, matja juaj e ppm mund të jetë e gabuar disa herë në secilin drejtim (akoma në rregull nëse keni nevojë për alarm për përqendrim të rrezikshëm të CO2 në shtëpi, ku normalisht nuk duhet të ketë fare CO, por jo i mirë për çdo aplikim industrial).

Meqenëse nuk kisha asnjë matës CO, unë përdor një qasje më të sofistikuar. Së pari përgatita përqendrim të lartë të CO duke përdorur djegie në vëllim të izoluar (fotografia e parë). Në këtë punim gjeta të dhënat më të dobishme, duke përfshirë rendimentin e CO për llojet e ndryshme të flakës - nuk është në foto, por eksperimenti përfundimtar përdori djegien e gazit propan, me të njëjtin konfigurim, duke rezultuar në ~ 5000 ppm përqendrim CO2. Pastaj u hollua 1:50 për të arritur 100 ppm, siç ilustrohet në foton e dytë, dhe u përdor për të përcaktuar pikën referuese të sensorit.

Hapi 8: Disa të dhëna eksperimentale

Disa të dhëna eksperimentale
Disa të dhëna eksperimentale

Në rastin tim, sensori funksionoi mjaft mirë - nuk është shumë i ndjeshëm për përqendrime vërtet të ulëta, por mjaft i mirë për zbulimin e diçkaje më të lartë se 50 faqe në minutë. Unë u përpoqa të rris përqendrimin gradualisht, duke marrë matje dhe ndërtova një grup tabelash. Ekzistojnë dy grupe linjash 0ppm - jeshile e pastër para ekspozimit ndaj CO dhe jeshile e verdhë pas. Sensori duket se ndryshon pak rezistencën e tij të ajrit të pastër pas ekspozimit, por ky efekt është i vogël. Duket se nuk është në gjendje të bëjë dallimin midis përqendrimeve 8 dhe 15, 15 dhe 26, 26 dhe 45 ppm-por tendenca është shumë e qartë, kështu që mund të tregojë nëse përqendrimi është në rangun 0-20 ose 40-60 ppm Me Për përqendrime më të larta, varësia është shumë më e veçantë - kur ekspozohet ndaj shkarkimit të një flake të hapur, kurba ngrihet nga fillimi pa u ulur fare, dhe dinamika e saj është krejtësisht e ndryshme. Pra, për përqendrime të larta nuk ka dyshim se funksionon në mënyrë të besueshme, megjithëse nuk mund ta konfirmoj saktësinë e tij pasi nuk kam ndonjë matës CO të vlerësuar. Gjithashtu, ky grup eksperimentesh u bë duke përdorur rezistencë ngarkese 20k - dhe pas kësaj vendosa për të rekomanduar 10k si vlerë të paracaktuar, duhet të jetë më e ndjeshme në këtë mënyrë. Kjo është ajo. Nëse keni një njehsor të besueshëm të CO dhe do ta keni montuar këtë tabelë, ju lutemi ndani disa komente për saktësinë e sensorit - do të ishte mirë të mblidhni statistika mbi sensorë të ndryshëm dhe të përmirësoni supozimet e paracaktuara të skicës.

Recommended: