Kazalo:

Arduino CO Monitor s senzorjem MQ-7: 8 korakov (s slikami)
Arduino CO Monitor s senzorjem MQ-7: 8 korakov (s slikami)

Video: Arduino CO Monitor s senzorjem MQ-7: 8 korakov (s slikami)

Video: Arduino CO Monitor s senzorjem MQ-7: 8 korakov (s slikami)
Video: how to make CO Detector with mq-7 and Arduino (mq-7 sensor Arduino) 2024, November
Anonim
Arduino CO Monitor s senzorjem MQ-7
Arduino CO Monitor s senzorjem MQ-7
Arduino CO Monitor s senzorjem MQ-7
Arduino CO Monitor s senzorjem MQ-7

Nekaj besed, zakaj je bil ustvarjen ta pouk: nekega dne nas je mama moje dekle poklicala sredi noči, ker se ji je res zdelo slabo - imela je omotico, tahikardijo, slabost, visok krvni tlak, celo neznano je omedlela (verjetno ~ 5 minut, vendar ni mogoče povedati), vse brez očitnega razloga. Živi v majhni vasici, daleč stran od bolnišnic (60 km od našega kraja, 30 km do najbližje bolnišnice, 10 km brez običajne ceste vmes), zato smo prihiteli k njej in prišli kmalu za rešilcem. Bila je hospitalizirana in zjutraj se je počutila skoraj dobro, vendar zdravniki niso mogli ugotoviti vzroka za to. Naslednji dan smo imeli idejo: to bi lahko bila zastrupitev s CO, saj ima kotel na plinsko vodo (na fotografiji) in je ves večer sedela blizu nje, ko se je to zgodilo. Nedavno smo kupili senzor CO MQ-7, vendar nikoli ni imel časa sestaviti sheme zanj, zato je bil to pravi čas za to. Po eni uri iskanja navodil po internetu sem spoznal, da ne najdem nobenega vodiča, ki bi hkrati sledil navodilom proizvajalca senzorja, ki so navedena v njegovem podatkovnem listu, in bi sploh kaj razložil (zdelo se je, da ima en primer precej dobro kodo, vendar je ni bilo jasno, kako ga uporabiti, drugi so bili preveč poenostavljeni in ne bi delovali dobro). Tako smo porabili približno 12 ur za razvoj shem, izdelavo in tiskanje 3d ohišja, testiranje in umerjanje senzorja, naslednji dan pa smo odšli v sumljiv kotel. Izkazalo se je, da so bile ravni CO tam izjemno visoke in bi bile lahko usodne, če bi bil čas izpostavljenosti CO daljši. Zato menim, da bi moral vsak, ki ima podobno situacijo (na primer plinski kotel ali drugo zgorevanje v bivalnem prostoru), dobiti tak senzor, da prepreči, da bi se kaj slabega zgodilo.

Vse to se je zgodilo pred dvema tednoma, od takrat sem precej izboljšal sheme in program, zdaj pa se zdi, da je to razmeroma dobro in razmeroma preprosto (ne preprosto v treh vrsticah kode, ampak vseeno). Čeprav upam, da mi bo nekdo z natančnim števcem CO posredoval povratne informacije o privzeti kalibraciji, ki sem jo dal na skico - sumim, da še zdaleč ni dobra. Tukaj je popoln vodnik z nekaj eksperimentalnimi podatki.

1. korak: Predmet materiala

Račun za materiale
Račun za materiale

Potrebovali boste: 0. Arduino plošča. Raje imam kitajski klon Arduino Nano za izjemno ceno 3 USD, vendar bo tukaj deloval kateri koli 8-bitni arduino. Sketch uporablja nekatere napredne časovnike in je bil preizkušen samo na mikrokrmilniku atmega328 - čeprav bo verjetno dobro deloval tudi na drugih. Senzor CO MQ-7. Najpogosteje na voljo s tem senzorskim modulom Flying Fish. V naslednjem koraku mora opraviti majhne spremembe, podrobnosti ali pa uporabiti ločevalni senzor MQ-7.

2. NPN bipolarni tranzistor. Tu bo deloval skoraj vsak tranzistor NPN, ki lahko prenese 300 mA ali več. Tranzistor PNP ne bo deloval z omenjenim modulom Flying Fish (ker ima grelni zatič, spajkan na izhod senzorja), vendar ga je mogoče uporabiti z diskretnim senzorjem MQ-7.

3. Upori: 2 x 1 k (od 0,5 k do 1,2 k bo dobro delovalo) in 1 x 10 k (ta je najbolje ohraniti natančno - čeprav morate nujno uporabiti drugo vrednost, ustrezno prilagodite spremenljivko reference_resistor_kOhm na skici).

4. Kondenzatorji: 2 x 10uF ali več. Potrebni so tantalovi ali keramični, elektrolitski ne bodo delovali dobro zaradi visokega ESR (ne bodo mogli zagotoviti dovolj toka, da bi zgladili visokotokovno valovanje). Zelena in rdeča dioda LED za prikaz trenutne ravni CO (lahko uporabite tudi enobarvno LED z 3 priključki, kot smo uporabili v prototipu rumene škatle). Piezo zvočni signal za visoko raven CO 7. Ogledna plošča in žice (vse lahko tudi spajkate na Nano zatiče ali stisnete v vtičnice Uno, vendar je na ta način enostavno narediti napako).

2. korak: Sprememba modula ali ožičenje diskretnega senzorja

Modifikacija modula ali diskretno ožičenje senzorja
Modifikacija modula ali diskretno ožičenje senzorja

Za modul morate odpojiti upor in kondenzator, kot je prikazano na fotografiji. Odlepite lahko v bistvu vse, če želite - elektronika modulov je popolnoma neuporabna, uporabljamo jo le kot držalo za sam senzor, vendar vam ti dve komponenti preprečita, da bi dobili pravilne odčitke, Če uporabljate diskretni senzor, priključite grelne zatiče (H1 in H2) na 5 V in tranzistorski zbiralnik ustrezno. Priključite eno zaznavno stran (kateri koli od A zatičev) na 5V, drugo zaznavno stran (kateri koli od zatičev B) na 10k upor, tako kot analogni zatič modula v shemah.

3. korak: Načelo delovanja

Načelo delovanja
Načelo delovanja
Načelo delovanja
Načelo delovanja

Zakaj sploh potrebujemo vse te zaplete, zakaj ne bi priklopili 5V, ozemljitve in samo dobili odčitkov? No, na ta način na žalost ne boste dobili nič koristnega. Po podatkovnem listu MQ-7 mora senzor teči skozi visoko in nizko ogrevalnih ciklov, da dobite ustrezne meritve. Med nizko temperaturno fazo se CO absorbira na plošči in ustvari pomembne podatke. Med visoko temperaturno fazo absorbirani CO in druge spojine izhlapijo iz senzorske plošče in jo očistijo za naslednjo meritev.

Na splošno je delovanje preprosto:

1. Uporabite 5V 60 sekund, teh odčitkov ne uporabljajte za merjenje CO.

2. Uporabite 1,4 V 90 sekund, uporabite te odčitke za merjenje CO.

3. Pojdite na korak 1.

Toda tu je težava: Arduino ne more zagotoviti dovolj energije za zagon tega senzorja iz njegovih nožic - grelec senzorja potrebuje 150 mA, medtem ko Arduino pin ne more zagotoviti več kot 40 mA, zato če bo priključen neposredno, bo Arduino pin zažgal in senzor še vedno zmagal ne deluje. Zato moramo uporabiti nekakšen ojačevalnik toka, ki vzame majhen vhodni tok za nadzor velikega izhodnega toka. Druga težava je pridobivanje 1,4 V. Edini način za zanesljivo pridobitev te vrednosti brez uvedbe veliko analognih komponent je uporaba pristopa PWM (Pulse Width Modulation) s povratnimi informacijami, ki bodo krmilile izhodno napetost.

NPN tranzistor reši obe težavi: ko je nenehno vklopljen, je napetost na senzorju 5V in segreva za visokotemperaturno fazo. Ko na njegov vhod uporabimo PWM, tok utripa, kondenzator ga zgladi, povprečna napetost pa ostane konstantna. Če uporabimo visokofrekvenčni PWM (na skici ima frekvenco 62,5KHz) in povprečno veliko analognih odčitkov (na skici povprečno preko ~ 1000 odčitkov), potem je rezultat precej zanesljiv.

Pomembno je dodati kondenzatorje v skladu s shemami. Slike tukaj ponazarjajo razliko v signalu s kondenzatorjem C2 in brez njega: brez njega je valovanje PWM jasno vidno in znatno popači odčitke.

4. korak: Sheme in plošča

Sheme in plošča
Sheme in plošča
Sheme in plošča
Sheme in plošča
Sheme in plošča
Sheme in plošča

Tukaj je shema in sklop plošče.

OPOZORILO! Potrebna je sprememba standardnega odklopnega modula! Brez modifikacije je modul neuporaben. Sprememba je opisana v drugem koraku

Za LED diode je pomembno uporabiti nožice D9 in D10, saj imamo na voljo izhode strojne opreme Timer1, ki omogoča gladko spreminjanje njihovih barv. Zatiči D5 in D6 se uporabljajo za zvočni signal, ker sta D5 in D6 izhodi strojne opreme Timer0. Konfigurirali jih bomo tako, da bodo medsebojno inverzni, zato bodo preklapljali med stanji (5V, 0V) in (0V, 5V) in tako proizvajali zvok na brenčalniku. Opozorilo: to vpliva na glavno časovno prekinitev Arduina, zato vse časovno odvisne funkcije (na primer millis ()) na tej skici ne bodo dali pravilnih rezultatov (več o tem kasneje). Pin D3 ima priključen strojni izhod Timer2 (kot tudi D11 - vendar je manj priročno postaviti žico na D11 kot na D3) - zato jo uporabljamo za zagotavljanje PWM za tranzistor za krmiljenje napetosti. Upor R1 se uporablja za nadzor svetlosti LED. Lahko je kjerkoli od 300 do 3000 Ohmov, 1k je precej optimalen glede svetlosti/porabe energije. Upor R2 se uporablja za omejevanje osnovnega toka tranzistorja. Ne sme biti nižji od 300 ohmov (da ne preobremenite zatiča Arduino) in ne višji od 1500 ohmov. 1k obstaja varna izbira.

Upor R3 se uporablja zaporedno s senzorsko ploščo za ustvarjanje delilnika napetosti. Napetost na izhodu senzorja je enaka R3 / (R3 + Rs) * 5V, kjer je Rs upor trenutnega tipala. Odpornost senzorja je odvisna od koncentracije CO, zato se napetost ustrezno spreminja. Kondenzator C1 se uporablja za izravnavo vhodne napetosti PWM na senzorju MQ -7, višja je njegova kapacitivnost, tem bolje, vendar mora imeti tudi nizko ESR - torej keramiko (ali tantal) tukaj je prednost kondenzator, elektrolitski ne deluje dobro.

Kondenzator C2 se uporablja za glajenje analognega izhoda senzorja (izhodna napetost je odvisna od vhodne napetosti - tukaj imamo precej visok tok PWM, kar vpliva na vse sheme, zato potrebujemo C2). Najenostavnejša rešitev je uporaba istega kondenzatorja kot tranzistor C1. NPN bodisi ves čas prevaja tok, da zagotovi velik tok na grelniku senzorja, ali pa deluje v načinu PWM in tako zmanjša grelni tok.

5. korak: Program Arduino

Arduino program
Arduino program

OPOZORILO: SENZOR ZA VSAKO PRAKTIČNO UPORABO potrebuje ročno kalibracijo. BREZ UMERJANJA, ODVISNO OD PARAMETROV VAŠEGA POSEBNEGA SENZORJA, LAHKO TA SKICA VKLJUČI ALARM V ČISTEM ZRAČU ALI NE ODKRITI LETALNE KONCENTRACIJE MONOKSIDA OGLJIKA

Umerjanje je opisano v naslednjih korakih. Groba kalibracija je zelo preprosta, natančna je precej zapletena.

Na splošno je program precej preprost:

Najprej umerimo naš PWM, da dobimo stabilnih 1,4 V, ki jih zahteva senzor (ustrezna širina PWM je odvisna od številnih parametrov, kot so natančne vrednosti upora, upor tega senzorja, krivulja VA tranzistorja itd. Itd.) - zato je najboljši način, da preizkusite različne vrednosti in uporabite tistega, ki najbolj ustreza). Nato neprestano izvajamo cikel 60 -sekundnega ogrevanja in 90 -sekundnega merjenja. Pri izvajanju se to nekoliko zaplete. Uporabiti moramo časovnike strojne opreme, ker vse, kar imamo tukaj, potrebuje visokofrekvenčni stabilen PWM, da lahko pravilno deluje. 3 funkcije, ki upravljajo časovnike: setTimer0PWM, setTimer1PWM, setTimer2PWM. Vsaka od njih nastavi časovnik v načinu PWM z danimi parametri (komentirano v kodi) in nastavi širino impulza glede na vhodne vrednosti. Faze merjenja se preklopijo s funkcijami startMeasurementPhase in startHeatingPhase ravnajte z vsem v notranjosti. in nastavite ustrezne vrednosti časovnika za preklapljanje med ogrevanjem 5V in 1.4V. Stanje LED nastavimo s funkcijo setLEDs, ki sprejme zeleno in rdečo svetlost na svojem vhodu (v linearnem merilu 1-100) in jo pretvori v ustrezno nastavitev časovnika.

Stanje zvočnikov nadzirajo funkcije buzz_on, buzz_off, buzz_beep. Funkcije vklopa/izklopa vklopijo in izklopijo zvok, funkcija piska ustvari posebno zaporedje piskov z obdobjem 1,5 sekunde, če se občasno pokliče (ta funkcija se takoj vrne, da ne zaustavi glavnega programa - vendar ga morate klicati znova in znova za pisanje vzorca piskanja).

Program najprej zažene funkcijo pwm_adjust, ki ugotovi ustrezno širino cikla PWM, da bi v fazi merjenja dosegel 1,4V. Nato nekajkrat zapiska, da je senzor pripravljen, preklopi v fazo merjenja in zažene glavno zanko.

V glavni zanki program preveri, ali smo v trenutni fazi preživeli dovolj časa (90 sekund za fazo merjenja, 60 sekund za fazo ogrevanja) in če da, potem spremeni trenutno fazo. Prav tako nenehno posodablja odčitke senzorjev z eksponentnim glajenjem: new_value = 0.999*old_value + 0.001*new_reading. S takšnimi parametri in merilnim ciklom povpreči signal v zadnjih 300 milisekundah. BREZ UMERJANJA, ODVISNO OD PARAMETROV VAŠEGA POSEBNEGA SENZORJA, LAHKO TA SKICA VKLJUČI ALARM V ČISTEM ZRAČU ALI NE ODKRITI LETALNE KONCENTRACIJE MONOKSIDA OGLJIKA.

6. korak: Prvi zagon: kaj lahko pričakujete

Prvi tek: Kaj lahko pričakujete
Prvi tek: Kaj lahko pričakujete

Če ste vse pravilno sestavili, boste po zagonu skice v serijskem monitorju videli nekaj takega:

nastavitev PWM w = 0, V = 4,93

nastavitev PWM w = 17, V = 3,57 Rezultat PWM: širina 17, napetost 3,57

in nato niz številk, ki predstavljajo trenutne odčitke senzorjev. Ta del prilagaja širino PWM, da se napetost grelca senzorja pripelje čim bližje 1,4 V, izmerjena napetost se odšteje od 5 V, zato je naša idealna izmerjena vrednost 3,6 V. Če se ta postopek nikoli ne konča ali konča po enem koraku (rezultat je širina 0 ali 254) - potem je nekaj narobe. Preverite, ali je vaš tranzistor res NPN in ali je pravilno priključen (preverite, ali ste uporabili osnovo, zbiralnik, oddajniške zatiče desno - osnova gre na D3, zbiralnik na MQ -7 in oddajnik na ozemljitev, ne računajte na pogled na mizo Fritzing - to je napaka za nekatere tranzistorje) in se prepričajte, da ste vhod senzorja priključili na vhod A1 Arduino. Če je vse v redu, bi morali v serijskem ploterju iz Arduino IDE videti nekaj podobnega sliki. Ogrevalni in merilni cikli, dolgi 60 in 90 sekund, tečejo drug za drugim, pri čemer se CO ppm izmeri in posodobi na koncu vsakega cikla. Ko je merilni cikel skoraj končan, lahko vzamete nekaj odprtega plamena blizu senzorja in si ogledate, kako bo to vplivalo na odčitke (odvisno od vrste plamena lahko proizvede do 2000 ppm koncentracije CO na prostem - tako da čeprav le majhen del dejansko gre v senzor, še vedno bo vklopil alarm in se ne bo izklopil do konca naslednjega cikla). To sem pokazal na sliki, pa tudi odziv na ogenj vžigalnika.

7. korak: Umerjanje senzorja

Kalibracija senzorja
Kalibracija senzorja
Kalibracija senzorja
Kalibracija senzorja

Po podatkih proizvajalca mora senzor teči cikel ogrevanja in hlajenja 48 ur zapored, preden ga je mogoče umeriti. To morate storiti, če ga nameravate uporabljati dlje časa: v mojem primeru se je odčitek senzorja na čistem zraku spremenil za približno 30% v 10 urah. Če tega ne upoštevate, lahko dobite rezultat 0 ppm, kjer je dejansko 100 ppm CO. Če ne želite čakati 48 ur, lahko spremljate izhod senzorja na koncu merilnega cikla. Ko se čez eno uro ne spremeni za več kot 1-2 točki - tam lahko ustavite ogrevanje.

Groba kalibracija:

Ko skico vsaj 10 ur izvajate na čistem zraku, na koncu merilnega cikla, 2-3 sekunde pred začetkom faze ogrevanja, vzemite vrednost surovega senzorja in jo zapišite v spremenljivko sensor_reading_clean_air (vrstica 100). To je to. Program bo ocenil druge parametre senzorja, ne bodo natančni, vendar bi morali biti dovolj za razlikovanje med koncentracijo 10 in 100 ppm.

Natančna kalibracija:

Zelo priporočam, da poiščete umerjen števec CO, naredite 100 ppm vzorca CO (to lahko storite tako, da v brizgo vzamete nekaj dimnih plinov - koncentracija CO je lahko zlahka v območju več tisoč ppm - in jih počasi dajte v zaprt kozarec z kalibriran merilnik in senzor MQ-7), pri tej koncentraciji vzemite surovi odčitek senzorja in ga vnesite v spremenljivko sensor_reading_100_ppm_CO. Brez tega koraka je lahko vaša ppm meritev večkrat napačna v obe smeri (še vedno v redu, če potrebujete alarm za nevarno koncentracijo CO doma, kjer običajno sploh ne bi smelo biti CO, vendar ni dobro za nobeno industrijsko uporabo).

Ker nisem imel nobenega števca CO, sem uporabil bolj izpopolnjen pristop. Najprej sem pripravil visoko koncentracijo CO z zgorevanjem v izolirani prostornini (prva fotografija). V tem prispevku sem našel najbolj uporabne podatke, vključno z izkoristkom CO za različne vrste plamena - ni na fotografiji, vendar je bil v zadnjem poskusu uporabljeno zgorevanje plina propana z enako nastavitvijo, kar je povzročilo ~ 5000 ppm koncentracije CO. Nato smo razredčili 1:50, da smo dosegli 100 ppm, kot je prikazano na drugi fotografiji, in uporabili za določanje referenčne točke senzorja.

8. korak: Nekaj eksperimentalnih podatkov

Nekaj eksperimentalnih podatkov
Nekaj eksperimentalnih podatkov

V mojem primeru je senzor deloval precej dobro - ni zelo občutljiv za res nizke koncentracije, vendar je dovolj dober, da zazna karkoli višje od 50 ppm. Koncentracijo sem poskušal postopoma povečevati, z meritvami sem sestavil niz grafikonov. Obstajata dva niza vrstic 0 ppm - čisto zelena pred izpostavljenostjo CO in rumeno zelena po. Zdi se, da senzor po izpostavljenosti nekoliko spremeni upor čistega zraka, vendar je ta učinek majhen. Zdi se, da ne more jasno razlikovati med koncentracijami 8 in 15, 15 in 26, 26 in 45 ppm-vendar je trend zelo jasen, zato lahko ugotovi, ali je koncentracija v območju 0-20 ali 40-60 ppm. Za višje koncentracije je odvisnost veliko bolj izrazita - ko je izpostavljena izpuhu odprtega ognja, se krivulja od začetka dvigne, ne da bi se sploh spustila, njena dinamika pa je popolnoma drugačna. Torej za visoke koncentracije ni dvoma, da deluje zanesljivo, čeprav ne morem potrditi njegove natančnosti, saj nimam ocenjenega števca CO. če bi priporočali 10k kot privzeto vrednost, bi moral biti na ta način bolj občutljiv. Če imate zanesljiv števec CO in boste to ploščo sestavili, delite nekaj povratnih informacij o natančnosti senzorjev - super bi bilo zbrati statistiko o različnih senzorjih in izboljšati predpostavke o privzetih skicah.

Priporočena: