Sadržaj:

Arduino CO monitor pomoću senzora MQ-7: 8 koraka (sa slikama)
Arduino CO monitor pomoću senzora MQ-7: 8 koraka (sa slikama)

Video: Arduino CO monitor pomoću senzora MQ-7: 8 koraka (sa slikama)

Video: Arduino CO monitor pomoću senzora MQ-7: 8 koraka (sa slikama)
Video: SCD40 - новый "народный" датчик CO2 2024, Srpanj
Anonim
Arduino CO Monitor pomoću senzora MQ-7
Arduino CO Monitor pomoću senzora MQ-7
Arduino CO Monitor pomoću senzora MQ-7
Arduino CO Monitor pomoću senzora MQ-7

Nekoliko riječi zašto je nastala ova pouka: jednog dana majka moje djevojke nazvala nas je usred noći jer se osjećala jako bolesno - imala je vrtoglavicu, tahikardiju, mučninu, visoki krvni tlak, čak se i onesvijestila nepoznato vrijeme (vjerojatno ~ 5 minuta, ali nema načina da se kaže), sve bez ikakvog vidljivog razloga. Živi u malom selu daleko od bolnica (60 km od našeg mjesta, 30 km do najbliže bolnice, 10 km bez ikakvog normalnog puta između njih), pa smo požurili do nje i stigli ubrzo nakon vozila hitne pomoći. Bila je hospitalizirana i ujutro se osjećala gotovo dobro, ali liječnici nisu uspjeli pronaći uzrok tome. Sutradan smo imali ideju: to je moglo biti trovanje CO, budući da ima plinski bojler (na fotografiji), i sjedila je blizu njega cijelu večer kad se to dogodilo. Nedavno smo kupili MQ-7 CO senzor, ali nikad nisam imao vremena sastaviti sheme za to, pa je ovo bilo savršeno vrijeme za to. Nakon sat vremena pretraživanja Interneta za bilo kakvim uputama, shvatio sam da ne mogu pronaći vodič koji bi u isto vrijeme slijedio upute proizvođača senzora navedene u njegovoj podatkovnoj tablici i uopće išta objašnjava (čini se da je jedan primjer imao prilično dobar kod, ali nije bilo jasno kako ga primijeniti, drugi su pojednostavljeni i neće raditi dobro). Tako smo potrošili oko 12 sati na razvoj shema, izradu i ispis 3d kućišta, testiranje i kalibriranje senzora, a sljedeći dan smo otišli do sumnjivog kotla. Pokazalo se da su tamo razine CO iznimno visoke i da mogu biti smrtonosne ako je vrijeme izlaganja CO duže. Stoga vjerujem da bi svatko tko ima sličnu situaciju (poput plinskog kotla ili drugog sagorijevanja u stambenom prostoru) trebao nabaviti takav senzor kako bi spriječio da se dogodi nešto loše.

Sve se to dogodilo prije dva tjedna, od tada sam prilično poboljšao sheme i program, a sada se čini da je to relativno dobro i relativno jednostavno (nije jednostavno u 3 retka koda, ali ipak). Iako se nadam da će mi netko s preciznim mjeračem CO dati povratnu informaciju o zadanoj kalibraciji koju sam stavio na skicu - sumnjam da je to daleko od dobrog. Evo potpunog vodiča s nekim eksperimentalnim podacima.

Korak 1: Opis materijala

Predmet materijala
Predmet materijala

Trebat će vam: 0. Arduino ploča. Više volim kineski klon Arduino Nano zbog njegove izvanredne cijene od 3 USD, ali bilo koji 8-bitni arduino će ovdje raditi. Sketch koristi neke napredne tajmere i testiran je samo na mikrokontroleru atmega328 - iako će vjerojatno dobro raditi i na drugima. MQ-7 CO senzor. Najčešće dostupan s ovim senzorskim modulom Flying Fish, mora proći kroz male izmjene, detalje u sljedećem koraku ili možete upotrijebiti separacijski senzor MQ-7.

2. NPN bipolarni tranzistor. Ovdje će raditi gotovo svaki NPN tranzistor koji može podnijeti 300 mA ili više. PNP tranzistor neće raditi sa spomenutim modulom Flying Fish (jer ima pin grijača zalemljen na izlaz senzora), ali se može koristiti s diskretnim senzorom MQ-7.

3. Otpornici: 2 x 1 k (od 0,5 k do 1,2 k će dobro funkcionirati) i 1 x 10 k (taj je najbolje držati preciznim - iako ako morate koristiti drugu vrijednost, prilagodite varijablu reference_resistor_kOhm na skici u skladu s tim).

4. Kondenzatori: 2 x 10uF ili više. Potrebni su tantalovi ili keramički, elektrolitički neće raditi dobro zbog visokog ESR-a (neće moći pružiti dovoljno struje za uglađivanje visokostrujnih valova).5. Zelene i crvene LED diode za označavanje trenutne razine CO (možete koristiti i jednu dvobojnu LED sa 3 priključka, kao što smo koristili u našem prototipu žute kutije).6. Piezo zujalica za označavanje visoke razine CO.7. Oglasna ploča i žice (također možete sve lemiti na Nano igle ili utisnuti u Uno utičnice, ali na ovaj način je lako pogriješiti).

Korak 2: Izmjena modula ili ožičenje diskretnog senzora

Modifikacija modula ili diskretno ožičenje senzora
Modifikacija modula ili diskretno ožičenje senzora

Za modul morate odspojiti otpornik i kondenzator, kao što je prikazano na fotografiji. U biti možete otpakirati sve, ako želite - elektronika modula potpuno je beskorisna, koristimo je samo kao držač za sam senzor, ali ove dvije komponente spriječit će vam da dobijete ispravna očitanja, Ako koristite diskretni senzor, pričvrstite iglice grijača (H1 i H2) na 5V i tranzistorski kolektor na odgovarajući način. Priključite jednu osjetljivu stranu (bilo koji od A pinova) na 5V, drugu osjetnu stranu (bilo koju od B pinova) na 10k otpornik, baš kao i analogni pin modula u shemama.

Korak 3: Princip rada

Princip rada
Princip rada
Princip rada
Princip rada

Zašto su nam sve ove komplikacije uopće potrebne, zašto ne bismo priključili 5V, uzemljili i samo dobili očitanja? Pa, nažalost nećete dobiti ništa korisno na ovaj način. Prema podatkovnom listu MQ-7, senzor mora proći kroz visoke i ciklusi niskog zagrijavanja kako bi se dobila odgovarajuća mjerenja. Tijekom faze niske temperature CO se apsorbira na ploči stvarajući značajne podatke. Tijekom faze visoke temperature, apsorbirani CO i drugi spojevi isparavaju iz ploče senzora, čisteći je za sljedeće mjerenje.

Dakle općenito je rad jednostavan:

1. Primijenite 5V na 60 sekundi, nemojte koristiti ova očitanja za mjerenje CO.

2. Primijenite 1,4 V na 90 sekundi, koristite ova očitanja za mjerenje CO.

3. Idite na korak 1.

Ali evo problema: Arduino ne može osigurati dovoljno snage za pokretanje ovog senzora sa njegovih pinova - grijač senzora zahtijeva 150 mA, dok Arduino pin ne može dati više od 40 mA, pa ako se izravno spoji, Arduino pin će izgorjeti, a senzor će ipak pobijediti ne radi. Stoga moramo koristiti neku vrstu pojačala za struju koje uzima malu ulaznu struju za kontrolu velike izlazne struje. Drugi problem je dobivanje 1.4V. Jedini način da se pouzdano dobije ova vrijednost bez uvođenja puno analognih komponenti je korištenje PWM (Pulse Width Modulation) pristupa s povratnom spregom koja će kontrolirati izlazni napon.

NPN tranzistor rješava oba problema: kada je stalno uključen, napon na senzoru je 5V i zagrijava se za visokotemperaturnu fazu. Kad na njegov ulaz primijenimo PWM, struja pulsira, zatim se izglađuje kondenzatorom, a prosječni napon održava konstantnim. Ako koristimo visokofrekventni PWM (na skici ima frekvenciju 62,5KHz) i prosječno puno analognih očitanja (na skici prosječno iznosimo preko ~ 1000 očitanja), tada je rezultat prilično pouzdan.

Kritično je dodati kondenzatore prema shemama. Slike ovdje ilustriraju razliku u signalu sa i bez C2 kondenzatora: bez njega je PWM valovitost jasno vidljiva i značajno iskrivljuje očitanja.

Korak 4: Sheme i tlocrt

Sheme i Breadboard
Sheme i Breadboard
Sheme i Breadboard
Sheme i Breadboard
Sheme i Breadboard
Sheme i Breadboard

Ovdje su sheme i sklop matične ploče.

UPOZORENJE! Potrebna je izmjena standardnog prekidačkog modula! Bez izmjena modul je beskoristan. Modifikacija je opisana u drugom koraku

Važno je koristiti pinove D9 i D10 za LED diode, budući da imamo izlaze hardvera Timer1, što će omogućiti glatku promjenu njihovih boja. Igle D5 i D6 koriste se za zujalicu, jer su D5 i D6 izlazi hardverskog Timer0. Konfigurirat ćemo ih da budu inverzni jedan prema drugom, pa će se prebacivati između (5V, 0V) i (0V, 5V) stanja, stvarajući tako zvuk na zujalici. Upozorenje: ovo utječe na glavni vremenski prekid Arduina, pa sve funkcije ovisne o vremenu (poput millis ()) neće dati točne rezultate na ovoj skici (više o tome kasnije). Pin D3 ima priključen hardverski izlaz Timer2 (kao i D11 - ali manje je prikladno staviti žicu na D11 nego na D3) - pa je koristimo za osiguravanje PWM -a za tranzistor za kontrolu napona. Otpornik R1 koristi se za kontrolu svjetline LED dioda. Može biti bilo gdje od 300 do 3000 Ohma, 1k je prilično optimalno u svjetlini/potrošnji energije. Otpornik R2 koristi se za ograničavanje osnovne struje tranzistora. Ne smije biti niži od 300 Ohma (da ne biste preopteretili Arduino pin), niti veći od 1500 Ohma. 1k postoji siguran izbor.

Otpornik R3 koristi se serijski s pločom osjetnika za stvaranje razdjelnika napona. Napon na izlazu osjetnika jednak je R3 / (R3 + Rs) * 5V, gdje je Rs otpor trenutnog osjetnika. Otpor senzora ovisi o koncentraciji CO, pa se napon mijenja i u skladu s tim. Kondenzator C1 koristi se za uglađivanje ulaznog PWM napona na senzoru MQ -7, što je veći njegov kapacitet, to bolje, ali također mora imati nizak ESR - pa keramika (ili tantal) Ovdje se preferira kondenzator, elektrolitski neće raditi dobro.

Kondenzator C2 koristi se za izglađivanje analognog izlaza senzora (izlazni napon ovisi o ulaznom naponu - a ovdje imamo prilično veliku strujnu PWM, što utječe na sve sheme, pa nam je potreban C2). Najjednostavnije rješenje je korištenje istog kondenzatora kao i tranzistor C1. NPN ili vodi struju cijelo vrijeme kako bi osigurao visoku struju na grijaču senzora, ili radi u PWM načinu rada čime se smanjuje struja grijanja.

Korak 5: Arduino program

Arduino program
Arduino program

UPOZORENJE: SENZOR TREBA RUČNU KALIBRACIJU ZA BILO KAKVU PRAKTIČNU UPORABU. BEZ KALIBRACIJE, Ovisno o parametrima vašeg pojedinog osjetnika, ova skica bi mogla uključiti alarm u čistom zraku ili ne otkriti koncentraciju monohanoksida ugljika

Kalibracija je opisana u sljedećim koracima. Gruba kalibracija je vrlo jednostavna, precizna je prilično složena.

Općenito, program je prilično jednostavan:

Prvo kalibriramo naš PWM kako bismo proizveli stabilnih 1,4 V koje zahtijeva senzor (odgovarajuća širina PWM -a ovisi o puno parametara poput točnih vrijednosti otpornika, otpora ovog osjetnika, VA krivulje tranzistora itd. Itd.) - pa je najbolji način isprobati različite vrijednosti i upotrijebite onu koja najbolje odgovara.) Zatim neprestano prolazimo kroz ciklus od 60 sekundi zagrijavanja i 90 sekundi mjerenja. U provedbi se to pomalo komplicira. Moramo koristiti hardverske mjerače vremena jer sve što ovdje imamo treba visokofrekventni stabilan PWM kako bi pravilno funkcioniralo. Kôd je ovdje priložen i može se preuzeti s našeg githuba, kao i izvor shema u Fritzingu. U programu postoje 3 funkcije koje upravljaju mjeračima vremena: setTimer0PWM, setTimer1PWM, setTimer2PWM. Svaka od njih postavlja mjerač vremena u PWM načinu rada s zadanim parametrima (komentirano u kodu), a širinu impulsa postavlja prema ulaznim vrijednostima. Faze mjerenja se mijenjaju pomoću funkcija startMeasurementPhase i startHeatingPhase, one riješiti sve iznutra. i postaviti odgovarajuće vrijednosti timera za prebacivanje između grijanja od 5 V i 1,4 V. Stanje LED-a postavlja se pomoću funkcija setLED-ova koji prihvaćaju zelenu i crvenu svjetlinu na svom ulazu (u linearnom mjerilu 1-100) i pretvaraju ih u odgovarajuće postavke timera.

Stanjem zujalice upravlja se pomoću funkcija buzz_on, buzz_off, buzz_beep. Funkcije za uključivanje/isključivanje uključuju i isključuju zvuk, zvučna funkcija proizvodi specifičan niz zvučnih signala s razdobljem od 1,5 sekunde ako se povremeno poziva (ova funkcija se odmah vraća tako da ne pauzira glavni program - ali morate je pozivati iznova i iznova) proizvesti uzorak zvučnog signala).

Program prvo pokreće funkciju pwm_adjust koja utvrđuje odgovarajuću širinu ciklusa PWM -a kako bi se postiglo 1,4V tijekom faze mjerenja. Zatim se nekoliko puta oglasi zvučnim signalom koji označava da je senzor spreman, prelazi u fazu mjerenja i pokreće glavnu petlju.

U glavnoj petlji program provjerava jesmo li proveli dovoljno vremena u trenutnoj fazi (90 sekundi za fazu mjerenja, 60 sekundi za fazu zagrijavanja) i ako da, tada mijenja trenutnu fazu. Također stalno ažurira očitanja senzora pomoću eksponencijalnog zaglađivanja: new_value = 0.999*old_value + 0.001*new_reading. S takvim parametrima i mjernim ciklusom, prosjek signala je u posljednjih 300 milisekundi. UPOZORENJE: SENZOR TREBA RUČNU KALIBRACIJU ZA BILO KAKVU PRAKTIČNU UPOTREBU. BEZ KALIBRACIJE, Ovisno o parametrima vašeg pojedinog osjetnika, ova skica bi mogla uključiti alarm u čistom zraku ili ne otkriti koncentraciju monoksida monohidrata u metalu.

Korak 6: Prva vožnja: Što očekivati

Prva vožnja: Što očekivati
Prva vožnja: Što očekivati

Ako ste sve pravilno sastavili, nakon pokretanja skice vidjet ćete ovako nešto u serijskom monitoru:

podešavanje PWM w = 0, V = 4,93

podešavanje PWM w = 17, V = 3.57PWM rezultat: širina 17, napon 3,57

i zatim niz brojeva koji predstavljaju trenutna očitanja osjetnika. Ovaj dio prilagođava širinu PWM -a kako bi se proizveo napon grijača senzora što je moguće bliže 1,4V, izmjereni napon se oduzima od 5V, pa je naša idealna izmjerena vrijednost 3,6V. Ako ovaj proces nikada ne završi ili završi nakon jednog koraka (što rezultira širinom jednakom 0 ili 254) - onda nešto nije u redu. Provjerite je li vaš tranzistor doista NPN i je li pravilno spojen (provjerite jeste li koristili bazu, kolektor, pinove emitera ispravno - baza ide na D3, kolektor na MQ -7, a odašiljač na masu, ne računajte na prikaz Fritzing matrice - to je pogrešno za neke tranzistore) i provjerite jeste li spojili ulaz senzora na Arduino A1 ulaz. Ako je sve u redu, trebali biste vidjeti u serijskom ploteru iz Arduino IDE -a nešto slično slici. Ciklusi zagrijavanja i mjerenja u trajanju od 60 i 90 sekundi teku jedan za drugim, a CO ppm se mjeri i ažurira na kraju svakog ciklusa. Možete uzeti otvoreni plamen blizu senzora kada je mjerni ciklus gotovo završen i vidjeti kako će to utjecati na očitanja (ovisno o vrsti plamena, može proizvesti do 2000 ppm koncentracije CO na otvorenom - pa iako samo mali dio zapravo ide u senzor, i dalje će uključiti alarm i neće se isključiti do kraja sljedećeg ciklusa). Pokazao sam to na slici, kao i odgovor na vatru iz upaljača.

Korak 7: Kalibracija senzora

Kalibracija senzora
Kalibracija senzora
Kalibracija senzora
Kalibracija senzora

Prema proizvođačevom podatkovnom listu, senzor bi trebao raditi cikluse grijanja i hlađenja 48 sati zaredom prije nego što se može kalibrirati. To biste trebali učiniti ako ga namjeravate koristiti dulje vrijeme: u mom slučaju očitanje senzora na čistom zraku promijenilo se za oko 30% tijekom 10 sati. Ako to ne uzimate u obzir, možete dobiti rezultat od 0 ppm gdje zapravo postoji 100 ppm CO. Ako ne želite čekati 48 sati, možete pratiti izlaz senzora na kraju ciklusa mjerenja. Nakon više od sat vremena neće se promijeniti za više od 1-2 boda - tamo možete prestati grijati.

Gruba kalibracija:

Nakon pokretanja skice najmanje 10 sati na čistom zraku, uzmite sirovu vrijednost senzora na kraju mjernog ciklusa, 2-3 sekunde prije početka faze zagrijavanja, i upišite je u varijablu sensor_reading_clean_air (redak 100). To je to. Program će procijeniti ostale parametre senzora, oni neće biti precizni, ali bi trebali biti dovoljni za razlikovanje koncentracije od 10 do 100 ppm.

Precizna kalibracija:

Toplo preporučujem da pronađete kalibrirani mjerač CO, napravite uzorak CO od 100 ppm (to se može učiniti uzimanjem malo dimnih plinova u štrcaljku - koncentracija CO može lako biti u rasponu od nekoliko tisuća ppm - i polako ga staviti u zatvorenu posudu s kalibrirani mjerač i senzor MQ-7), uzmite sirovo očitanje senzora pri ovoj koncentraciji i stavite ga u varijablu osjetnik_čitanja_100_ppm_CO. Bez ovog koraka, vaše ppm mjerenje može biti pogrešno nekoliko puta u bilo kojem smjeru (još uvijek u redu ako vam je potreban alarm za opasnu koncentraciju CO kod kuće, gdje obično uopće ne bi trebalo biti CO, ali nije dobro za bilo koju industrijsku primjenu).

Kako nisam imao nikakav mjerač CO, upotrijebio sam sofisticiraniji pristup. Prvo sam pripremio visoku koncentraciju CO izgaranjem u izoliranom volumenu (prva fotografija). U ovom sam članku pronašao najkorisnije podatke, uključujući iskorištenje CO za različite tipove plamena - nema ih na fotografiji, ali je u posljednjem pokusu korišteno izgaranje propan plina, s istim postavkama, što je rezultiralo ~ 5000 ppm koncentracijom CO. Zatim se razrijedi 1:50 kako bi se postiglo 100 ppm, kao što je prikazano na drugoj fotografiji, i koristi se za određivanje referentne točke senzora.

Korak 8: Neki eksperimentalni podaci

Neki eksperimentalni podaci
Neki eksperimentalni podaci

U mom slučaju, senzor je radio prilično dobro - nije jako osjetljiv za stvarno niske koncentracije, ali je dovoljno dobar da detektira bilo što veće od 50 ppm. Pokušao sam postupno povećavati koncentraciju, uzimajući mjerenja i izgradio skup grafikona. Postoje dva seta linija od 0 ppm - čisto zelena prije izlaganja CO i žuto zelena nakon. Čini se da senzor nakon izlaganja malo mijenja otpor čistom zraku, no ovaj je učinak mali. Čini se da ne može jasno razlikovati koncentracije 8 i 15, 15 i 26, 26 i 45 ppm-ali trend je vrlo jasan, pa može reći je li koncentracija u rasponu 0-20 ili 40-60 ppm. Za veće koncentracije ovisnost je mnogo izraženija - kada je izložena ispuhu otvorenog plamena, krivulja se uzdiže od početka, a da se uopće ne spušta, a njezina je dinamika potpuno drugačija. Dakle, za visoke koncentracije nema sumnje da radi pouzdano, iako ne mogu potvrditi njegovu preciznost jer nemam nominalni CO mjerač. Također, ovaj skup eksperimenata proveden je pomoću otpornika opterećenja od 20 k - i nakon toga sam odlučio da bi preporučio 10k kao zadanu vrijednost, trebao bi biti osjetljiviji na ovaj način. To je to. Ako imate pouzdan mjerač CO i već ste sastavili ovu ploču, podijelite povratne informacije o preciznosti senzora - bilo bi sjajno prikupiti statistiku o različitim senzorima i poboljšati pretpostavke zadane skice.

Preporučeni: