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, Novembar
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 (vjerovatno ~ 5 minuta, ali nema načina da se kaže), sve bez ikakvog očiglednog 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 ambulante. Ona je hospitalizirana i ujutro se osjećala gotovo dobro, ali ljekari nisu uspjeli pronaći uzrok tome. Sutradan smo imali ideju: to je moglo biti trovanje CO, budući da ima bojler na plinsku vodu (na fotografiji), i sjedila je blizu njega cijelu večer kad se to dogodilo. Nedavno smo kupili MQ-7 CO senzor, ali nikada nisam imao vremena sastaviti sheme za to, pa je ovo bilo savršeno vrijeme za to. Nakon sat vremena pretraživanja interneta u potrazi 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 štampanje 3D kućišta, testiranje i kalibraciju 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. Tako da vjerujem da bi svako ko 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 dvije sedmice, 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 reda koda, ali ipak). Iako se nadam da će mi netko s preciznim CO mjeračem 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

Bill of Materials
Bill of Materials

Trebat će vam: 0. Arduino ploča. Više volim kineski klon Arduino Nano po izvanrednoj cijeni 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 koristiti 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 MQ-7 senzorom.

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

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 ublažavanje talasa velike struje).5. Zelene i crvene LED diode za označavanje trenutnog nivoa CO (možete koristiti i jednu dvobojnu LED sa 3 terminala, kao što smo koristili u prototipu naše žute kutije).6. Piezo zujalica za označavanje visokog nivoa CO.7. Oglasna ploča i žice (također možete sve lemiti na Nano pinove ili utisnuti u Uno utičnice, ali na ovaj način je lako pogriješiti).

Korak 2: Modifikacija modula ili diskretno ožičenje senzora

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

Za modul morate odmrznuti otpornik i kondenzator, kao što je prikazano na fotografiji. Možete otpakovati sve u osnovi ako želite - elektronika modula je potpuno 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 spojili 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. Tokom faze niske temperature, CO se apsorbuje na ploči, stvarajući značajne podatke. Tokom faze visoke temperature, apsorbovani CO i drugi spojevi isparavaju sa ploče senzora, čisteći je za sljedeće mjerenje.

Dakle, općenito, rad je 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 energije 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 priključi, Arduino pin će izgorjeti, a senzor će i dalje pobijediti ne radi. Tako da 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 pouzdano dobijete ovu vrijednost bez uvođenja mnogo 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 fazu visoke temperature. Kad na njegov ulaz primijenimo PWM, struja pulsira, zatim se izglađuje kondenzatorom, a prosječni napon ostaje konstantan. Ako koristimo visokofrekventni PWM (na skici ima frekvenciju 62,5KHz) i prosječno puno analognih očitanja (na skici imamo prosječno 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, PWM talasanje je jasno vidljivo i značajno iskrivljuje očitanja.

Korak 4: Sheme i matrica

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 modifikacije modul je beskoristan. Modifikacija je opisana u drugom koraku

Važno je koristiti pinove D9 i D10 za LED diode, jer tamo imamo izlaze hardverskog 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 tako 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 ispravne rezultate na ovoj skici (više o tome kasnije). Pin D3 ima priključen hardverski Timer2 izlaz (kao i D11 - ali je manje zgodno staviti žicu na D11 nego na D3) - pa ga 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 senzora za stvaranje razdjelnika napona. Napon na izlazu senzora 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) kondenzator je ovdje preferiran, 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 PWM struju, š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 SVAKU PRAKTIČNU UPOTREBU. BEZ KALIBRACIJE, Ovisno o parametrima vašeg posebnog senzora, 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 mnogim parametrima, poput točnih vrijednosti otpornika, otpora ovog senzora, 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 implementaciji se to pomalo komplicira. Moramo koristiti hardverske tajmere jer sve što ovdje imamo treba visokofrekventni stabilan PWM da bi pravilno funkcioniralo. Kôd je ovdje priložen i može se preuzeti s našeg github-a, kao i izvor shema u Fritzingu. U programu postoje 3 funkcije koje upravljaju tajmerima: setTimer0PWM, setTimer1PWM, setTimer2PWM. Svaka od njih postavlja tajmer 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, riješiti sve iznutra. i postaviti odgovarajuće vrijednosti tajmera za prebacivanje između grijanja 5V i 1.4V. Stanje LED dioda postavlja se pomoću funkcija setLEDs koje prihvaćaju zelenu i crvenu svjetlinu na svom ulazu (u linearnoj skali 1-100) i pretvaraju ih u odgovarajuću postavku mjerača vremena.

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

Program prvo pokreće funkciju pwm_adjust koja otkriva odgovarajuću širinu ciklusa PWM -a kako bi se postiglo 1,4V tokom faze mjerenja. Zatim se oglasi nekoliko zvučnih signala koji pokazuju 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đe konstantno ažurira očitanja senzora koristeći eksponencijalno zaglađivanje: new_value = 0.999*old_value + 0.001*new_reading. Sa takvim parametrima i mjernim ciklusom, prosjek signala je približno posljednjih 300 milisekundi. UPOZORENJE: SENZOR ZAHTJEVA RUČNU KALIBRACIJU ZA BILO KAKVU PRAKTIČNU UPOTREBU. BEZ KALIBRACIJE, Ovisno o parametrima vašeg posebnog senzora, ova skica bi mogla uključiti alarm u čistom zraku ili ne otkriti koncentraciju monohanoksida ugljika.

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

Prva vožnja: Šta očekivati
Prva vožnja: Šta 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

a zatim niz brojeva koji predstavljaju trenutna očitanja senzora. 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 zaista NPN i je li pravilno spojen (provjerite jeste li koristili bazu, kolektor, pinove emitera ispravno - baza ide na D3, kolektor na MQ -7 i odašiljač na masu, ne računajte na prikaz Fritzing -a - to je pogrešno za neke tranzistore) i provjerite jeste li priključili 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 neki 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čkom listu s podacima, 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 duže vrijeme: u mom slučaju očitanje senzora na čistom zraku promijenilo se za oko 30% tijekom 10 sati. Ako ovo ne uzmete 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 vrijednost sirovog senzora na kraju ciklusa mjerenja, 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 hiljada ppm - i polako ga staviti u zatvorenu posudu sa kalibrirani mjerač i senzor MQ-7), uzmite očitavanje neobrađenog 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 sagorevanjem u izolovanoj zapremini (prva fotografija). U ovom sam članku pronašao najkorisnije podatke, uključujući iskorištenje CO za različite tipove plamena - nije na fotografiji, ali je u posljednjem eksperimentu korišteno sagorijevanje 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 tač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 zaista niske koncentracije, ali je dovoljno dobar za otkrivanje bilo čega većeg od 50 ppm. Pokušao sam postupno povećavati koncentraciju, uzimajući mjerenja i izgradio niz grafikona. Postoje dva seta linija od 0 ppm - čisto zelena pre izlaganja CO i žuto zelena posle. Čini se da senzor nakon izlaganja malo mijenja otpor čistom zraku, ali 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 njena dinamika je 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 je izveden pomoću otpornika opterećenja od 20 k - i nakon toga sam odlučio da biste preporučili 10k kao zadanu vrijednost, na ovaj način bi trebao biti osjetljiviji. To je to. Ako imate pouzdan mjerač CO i sastavili ste 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čuje se: