Sisukord:

Arduino CO-monitor MQ-7 anduri abil: 8 sammu (piltidega)
Arduino CO-monitor MQ-7 anduri abil: 8 sammu (piltidega)

Video: Arduino CO-monitor MQ-7 anduri abil: 8 sammu (piltidega)

Video: Arduino CO-monitor MQ-7 anduri abil: 8 sammu (piltidega)
Video: how to make CO Detector with mq-7 and Arduino (mq-7 sensor Arduino) 2024, Juuli
Anonim
Arduino CO monitor, kasutades MQ-7 andurit
Arduino CO monitor, kasutades MQ-7 andurit
Arduino CO monitor, kasutades MQ-7 andurit
Arduino CO monitor, kasutades MQ-7 andurit

Paar sõna, miks see õpetlik loodi: ühel päeval helistas meile mu tüdruksõbra ema keset ööd, sest ta tundis end tõeliselt haigena - tal oli pearinglus, tahhükardia, iiveldus, kõrge vererõhk, ta isegi minestas teadmata ajaks (ilmselt ~ 5 minutit, kuid seda ei saa kuidagi öelda), kõik ilma nähtava põhjuseta. Ta elab väikeses külas, mis on haiglatest kaugel (60 km kaugusel meie kohast, 30 km lähimast haiglast, 10 km ilma vahepealse tavalise maanteeta), nii et me tormasime tema juurde ja jõudsime kohale kohe pärast kiirabi. Ta sattus haiglasse ja hommikul tundis ta end peaaegu hästi, kuid arstid ei suutnud selle põhjust leida. Järgmisel päeval oli meil idee: see võis olla süsinikdioksiidi mürgitus, kuna tal on gaasiveeboiler (fotol) ja ta istus selle lähedal terve õhtu, kui see juhtus. Ostsime hiljuti MQ-7 CO anduri, kuid mul polnud kunagi aega selle jaoks skeeme kokku panna, nii et see oli selleks ideaalne aeg. Pärast tund aega otsinud Internetist juhiseid, mõistsin, et ma ei leia ühtegi juhendit, mis samal ajal järgiks anduri tootja juhiseid, mis on esitatud tema andmelehel ja selgitaks üldse midagi (üks näide tundus olevat üsna hea koodiga, kuid ei olnud selge, kuidas seda rakendada, teised olid lihtsustatud ja ei tööta hästi). Nii kulusime umbes 12 tundi skeemide väljatöötamisele, 3D -korpuse tegemisele ja printimisele, anduri testimisele ja kalibreerimisele ning järgmisel päeval läksime kahtlase katla juurde. Selgus, et süsinikdioksiidi tase oli seal äärmiselt kõrge ja võib süsinikdioksiidi kokkupuuteaja pikendamisel lõppeda surmaga. Nii et ma usun, et igaüks, kellel on sarnane olukord (näiteks gaasikatel või muu eluruumis põlemine), peaks sellise anduri hankima, et vältida midagi halba.

Kõik see, mis juhtus kaks nädalat tagasi, sellest ajast alates täiustasin skeeme ja programmi üsna palju ning nüüd tundub see olevat mõistlikult hea ja suhteliselt lihtne (mitte 3-realine kood, aga siiski). Kuigi ma loodan, et keegi, kellel on täpne süsinikdioksiidi mõõtja, annab mulle tagasisidet visandisse lisatud vaikimisi kalibreerimise kohta - ma kahtlustan, et see pole kaugeltki hea. Siin on täielik juhend koos mõnede katseandmetega.

Samm: materjalide arve

Materjalide arve
Materjalide arve

Te vajate: 0. Arduino plaat. Ma eelistan Hiina Arduino Nano klooni selle silmapaistva 3 dollari hinna eest, kuid siin töötab iga 8-bitine arduino. Sketch kasutab mõningaid täiustatud taimerite toiminguid ja seda testiti ainult atmega328 mikrokontrolleriga - kuigi tõenäoliselt töötab see ka teistega hästi. MQ-7 CO andur. Selle Flying Fish andurimooduliga kõige sagedamini saadaval, peab see järgmises etapis läbima väikese muudatuse, üksikasjad või võite kasutada eraldiseisvat MQ-7 andurit.

2. NPN bipolaarne transistor. Siin töötab praktiliselt iga NPN -transistor, mis suudab toime tulla 300 mA või rohkem. PNP transistor ei tööta mainitud Flying Fish mooduliga (kuna sellel on anduri väljundisse joodetud kütteseade), kuid seda saab kasutada koos diskreetse MQ-7 anduriga.

3. Takistid: 2 x 1k (0,5k kuni 1,2k töötab hästi) ja 1x 10k (see on kõige täpsem - ehkki kui peate tingimata kasutama teistsugust väärtust, reguleerige visandis vastavalt muutujat reference_resistor_kOhm).

4. Kondensaatorid: 2 x 10uF või rohkem. Vajalikud on tantaal- või keraamilised, kõrge ESR-i tõttu ei tööta elektrolüüt hästi (nad ei suuda pakkuda piisavalt voolu, et tasandada suure voolu lainetus). Rohelised ja punased LED-id, mis näitavad praegust CO Piezohelisignaal, mis näitab kõrget süsinikdioksiidi taset.7. Leivaplaat ja juhtmed (saate ka joota kõik Nano tihvtide külge või pigistada Uno pistikupesadesse, kuid sel viisil on lihtne viga teha).

2. samm: mooduli muutmine või diskreetse anduri juhtmestik

Mooduli muutmine või diskreetse anduri juhtmestik
Mooduli muutmine või diskreetse anduri juhtmestik

Mooduli jaoks peate eemaldama takisti ja kondensaatori, nagu fotol näidatud. Kui soovite, saate põhimõtteliselt kõike juua - moodulielektroonika on täiesti kasutu, me kasutame seda ainult anduri enda hoidjana, kuid need kaks komponenti takistavad teil õigeid näitu, Kui kasutate diskreetset andurit, kinnitage kütteseadme tihvtid (H1 ja H2) 5 V ja transistori kollektori külge. Kinnitage üks andurikülg (ükskõik milline A -tihvtidest) 5 V -le, teine tundlik külg (ükskõik milline B -tihvtidest) 10 k takisti külge, nagu skeemi skeemi mooduli analoog -tihvt.

3. samm: tööpõhimõte

Toimimispõhimõte
Toimimispõhimõte
Toimimispõhimõte
Toimimispõhimõte

Miks me üldse neid komplikatsioone vajame, miks mitte ühendada 5 V, maandus ja saada lihtsalt näiteid? Kahjuks ei saa te sel viisil kahjuks midagi kasulikku. Vastavalt MQ-7 andmelehele peab andur läbima kõrge ja madala kuumutamise tsüklid, et saada õigeid mõõtmisi. Madala temperatuuri faasis neeldub plaadile süsinikdioksiid, andes olulisi andmeid. Kõrge temperatuuri faasis aurustuvad neeldunud süsinikdioksiid ja muud ühendid anduriplaadilt, puhastades seda järgmiseks mõõtmiseks.

Seega on toiming üldiselt lihtne:

1. Rakendage 5 V 60 sekundiks, ärge kasutage neid näitajaid CO mõõtmiseks.

2. Kohaldage 1,4 V 90 sekundiks, kasutage neid näiteid CO mõõtmiseks.

3. Minge 1. sammu juurde.

Kuid siin on probleem: Arduino ei suuda selle anduri tihvtidest käivitamiseks piisavalt energiat anda - anduri küttekeha vajab 150 mA, samas kui Arduino tihvt võib pakkuda mitte rohkem kui 40 mA, nii et kui see on otse kinnitatud, põleb Arduino tihvt ja andur võitis ikkagi ei tööta. Nii et me peame kasutama mingit vooluvõimendit, mis võtab väikese väljundvoolu juhtimiseks väikese sisendvoolu. Teine probleem on 1,4 V saamine. Ainus viis selle väärtuse usaldusväärseks saamiseks ilma palju analoogkomponente kasutamata on kasutada PWM -meetodit (impulsi laiuse modulatsioon) koos tagasisidega, mis kontrollib väljundpinget.

NPN-transistor lahendab mõlemad probleemid: kui see on pidevalt sisse lülitatud, on anduri pinge 5 V ja see soojendab kõrge temperatuuriga faasi. Kui rakendame sisendile PWM, pulseerib vool, kondensaator silub seda ja keskmine pinge hoitakse konstantsena. Kui kasutame kõrgsageduslikku PWM -i (visandil on selle sagedus 62,5KHz) ja keskmiselt palju analoognäitu (visandil on meil keskmiselt üle 1000 näidu), siis on tulemus üsna usaldusväärne.

Skeemide kohaselt on kriitilise tähtsusega kondensaatorite lisamine. Siin olevad pildid illustreerivad signaali erinevust C2 kondensaatoriga ja ilma: ilma selleta on PWM lainetus selgelt nähtav ja moonutab näitu oluliselt.

4. samm: skeemid ja paneel

Skeemid ja paneel
Skeemid ja paneel
Skeemid ja paneel
Skeemid ja paneel
Skeemid ja paneel
Skeemid ja paneel

Siin on skeemid ja leivaplaadi kokkupanek.

HOIATUS! Vajalik on standardse purunemismooduli muutmine! Ilma muutmiseta on moodul kasutu. Muudatusi kirjeldatakse teises etapis

LED -ide jaoks on oluline kasutada tihvte D9 ja D10, kuna meil on riistvara Timer1 väljundid, mis võimaldab sujuvalt muuta nende värve. Nuppe D5 ja D6 kasutatakse helisignaali jaoks, kuna D5 ja D6 on riistvara Timer0 väljundid. Seadistame need üksteisele vastupidiseks, nii et nad lülituvad olekute (5V, 0V) ja (0V, 5V) vahel, tekitades seega helisignaalil heli. Hoiatus: see mõjutab Arduino peamist ajastuskatkestust, nii et kõik ajast sõltuvad funktsioonid (nagu millis ()) ei anna selles visandis õigeid tulemusi (sellest lähemalt hiljem). Pin D3-ga on ühendatud riistvara Timer2 väljund (samuti D11 - kuid juhtme ühendamine D11 -le on vähem mugav kui D3 -le) - seega kasutame seda PWM -i pakkumiseks pinget reguleeriva transistori jaoks. Takisti R1 kasutatakse LED -ide heleduse juhtimiseks. See võib olla vahemikus 300 kuni 3000 oomi, 1k on heleduse/energiatarbimise osas üsna optimaalne. Takisti R2 kasutatakse transistori baasvoolu piiramiseks. See ei tohiks olla väiksem kui 300 oomi (et Arduino tihvti mitte üle koormata) ja mitte kõrgem kui 1500 oomi. 1k on turvaline valik.

Takisti R3 kasutatakse pingejaguri loomiseks jadaga koos anduriplaadiga. Pinge anduri väljundis on võrdne R3 / (R3 + Rs) * 5V, kus Rs on vooluanduri takistus. Anduri takistus sõltub süsinikdioksiidi kontsentratsioonist, seega muutub pinge vastavalt. Kondensaatorit C1 kasutatakse MW -7 anduri PWM sisendpinge ühtlustamiseks, seda suurem on selle mahtuvus, seda parem, aga ka sellel peab olema madal ESR - seega keraamiline (või tantaal) siin eelistatakse kondensaatorit, elektrolüütiline ei tööta hästi.

Kondensaatorit C2 kasutatakse anduri analoogväljundi silumiseks (väljundpinge sõltub sisendpingest - ja meil on siin üsna kõrge voolu PWM, mis mõjutab kõiki skeeme, seega vajame C2). Lihtsaim lahendus on kasutada sama kondensaatorit kui C1. NPN transistor juhib kogu aeg voolu, et anduri kütteseadmel kõrge vool saada, või töötab PWM -režiimis, vähendades seega küttevoolu.

Samm: Arduino programm

Arduino programm
Arduino programm

HOIATUS: SENSOR NÕUAB KÕIKI PRAKTILISEKS KASUTAMISEKS KÄSITSI KALIBREERIMIST. ILMA KALIBREERIMISENA, SÕLTES TEIE ESITUD ANDURI PARAMETRITEST, VÕIB SELLE VÄLJAKUTSE PUHASES ÕHUS ALARMILE LÜLITADA VÕI EI TULE LETAALSÜSINIKMONOKSIIDI KONTSENTRATSIOONI

Kalibreerimist kirjeldatakse järgmistes etappides. Jäme kalibreerimine on väga lihtne, täpne on üsna keeruline.

Üldiselt on programm üsna lihtne:

Kõigepealt kalibreerime oma PWM -i, et toota andurile vajalik stabiilne 1,4 V (õige PWM -laius sõltub paljudest parameetritest, nagu täpsed takisti väärtused, selle konkreetse anduri takistus, transistori VA kõver jne jne - seega on parim viis proovida erinevaid väärtusi ja kasutage seda, mis sobib kõige paremini). Seejärel läbime pidevalt 60 -sekundilise kuumutamise ja 90 -sekundilise mõõtmise tsükli. Rakendamisel muutub see mõnevõrra keeruliseks. Peame kasutama riistvara taimerit, sest kõik, mis meil siin on, vajab korrektseks toimimiseks kõrgsageduslikku stabiilset PWM-i. Kood on lisatud siia ja selle saab alla laadida meie githubist, samuti skemaatiline allikas Fritzingis. Programmis on 3 funktsiooni, mis töötavad taimeritega: setTimer0PWM, setTimer1PWM, setTimer2PWM. Igaüks neist seab PWM -režiimis taimeri etteantud parameetritega (koodis kommenteeritud) ja määrab impulsi laiuse vastavalt sisendväärtustele. Mõõtmisfaasid vahetatakse funktsioonide startMeasurementPhase ja startHeatingPhase abil käsitseda kõike sees. ja seadistage õiged taimeriväärtused 5V ja 1,4V kütte vahel lülitumiseks. LED-i oleku määravad funktsioonid setLED, mis aktsepteerivad sisendis rohelist ja punast heledust (skaalal 1-100) ja muudavad selle vastavaks taimeriseadistuseks.

Sumina olekut juhitakse funktsioonidega buzz_on, buzz_off, buzz_beep. Sisse-/väljalülitusfunktsioonid lülitavad heli sisse ja välja, piiksufunktsioon tekitab perioodilise helistamise korral konkreetse piiksujada 1,5 -sekundilise perioodiga (see funktsioon naaseb kohe, nii et see ei peata põhiprogrammi - kuid peate selle uuesti ja uuesti kutsuma piiksumustri loomiseks).

Programm käivitab esmalt funktsiooni pwm_adjust, mis selgitab välja õige PWM -tsükli laiuse, et saavutada mõõtmisfaasis 1,4 V. Seejärel annab see paar korda piiksu, näidates, et andur on valmis, lülitub mõõtmisfaasi ja käivitab põhiahela.

Põhiahelas kontrollib programm, kas me kulutasime praeguses faasis piisavalt aega (mõõtmisfaasis 90 sekundit, küttefaasis 60 sekundit) ja kui jah, siis muudab praegust faasi. Samuti uuendab see pidevalt anduri näitu, kasutades eksponentsiaalset silumist: uus_väärtus = 0,999*vana_väärtus + 0,001*uuslugemine. Selliste parameetrite ja mõõtmistsükliga annab see signaali keskmiselt umbes viimase 300 millisekundi jooksul. HOIATUS: SENSOR NÕUAB KÕIKI PRAKTILISEKS KASUTAMISEKS KÄSITSI KALIBREERIMIST. ILMA KALIBREERIMISENA, SÕLTES TEIE ESITUD ANDURI PARAMETRITEST, VÕIB SELLE VÄLJAKUTSE PUHASES ÕHUS ALARMILE LÜLITADA VÕI EI TULE LETAALSÜSINIKMONOKSIIDI KONTSENTRATSIOONI.

6. samm: esimene käivitus: mida oodata

Esimene jooks: mida oodata
Esimene jooks: mida oodata

Kui olete kõik õigesti kokku pannud, näete pärast visandi käivitamist jadamonitoris midagi sellist:

PWM reguleerimine w = 0, V = 4,93

PWM reguleerimine w = 17, V = 3,57PWM tulemus: laius 17, pinge 3,57

ja seejärel numbrite seeria, mis tähistavad praeguseid andurite näitu. See osa reguleerib PWM laiust, et toota anduri kütteseadme pinge võimalikult 1,4 V lähedale, mõõdetud pinge lahutatakse 5 V -st, seega on meie ideaalne mõõdetud väärtus 3,6 V. Kui see protsess ei lõpe kunagi ega lõpe pärast ühte sammu (mille laius on 0 või 254) - siis on midagi valesti. Kontrollige, kas teie transistor on tõesti NPN ja kas see on korralikult ühendatud (veenduge, et kasutasite alust, kollektorit, emitteri kontakte õigesti - alus läheb D3 -le, kollektor MQ -7 -le ja emitter maandusele, ärge lootke Fritzingi leivalaua vaatele - see on mõne transistori puhul vale) ja veenduge, et ühendasite anduri sisendi Arduino A1 sisendiga. Kui kõik on korras, peaksite Arduino IDE jadaplaanis nägema midagi sarnast pildile. Kuumutus- ja mõõtmistsüklid pikkusega 60 ja 90 sekundit toimuvad üksteise järel, iga tsükli lõpus mõõdetakse ja uuendatakse CO ppm. Kui mõõtmistsükkel on peaaegu lõppenud, võite võtta anduri lähedale lahtise leegi ja vaadata, kuidas see näitu mõjutab (olenevalt leegi tüübist võib see toota kuni 2000 ppm CO kontsentratsiooni vabas õhus - ehkki ainult väike osa see läheb tegelikult andurisse, lülitab ikkagi alarmi sisse ja ei hakka tööle enne järgmise tsükli lõppu). Näitasin seda pildil, samuti tulemasinast tulekahjule reageerimist.

7. samm: anduri kalibreerimine

Anduri kalibreerimine
Anduri kalibreerimine
Anduri kalibreerimine
Anduri kalibreerimine

Tootja andmelehe kohaselt peaks andur enne kuumutamist ja jahutamist töötama 48 tundi järjest, enne kui seda saab kalibreerida. Ja peaksite seda tegema, kui kavatsete seda pikka aega kasutada: minu puhul muutus andurinäit puhtas õhus 10 tunni jooksul umbes 30%. Kui te seda ei arvesta, võite saada 0 ppm tulemuse, kus CO on tegelikult 100 ppm. Kui te ei soovi 48 tundi oodata, saate mõõtmistsükli lõpus sensori väljundit jälgida. Kui üle tunni ei muutu see rohkem kui 1-2 punkti - saate seal kuumutamise lõpetada.

Jäme kalibreerimine:

Pärast eskiisi vähemalt 10-tunnist puhtas õhus töötamist võtke mõõtmistsükli lõpus, 2-3 sekundit enne küttefaasi algust, töötlemata anduri väärtus ja kirjutage see muutujale sensor_reading_clean_air (rida 100). See on kõik. Programm hindab muid anduri parameetreid, need ei ole täpsed, kuid peaksid olema piisavad, et eristada 10–100 ppm kontsentratsiooni.

Täpne kalibreerimine:

Soovitan tungivalt leida kalibreeritud süsinikdioksiidi mõõtja, teha 100 ppm süsinikdioksiidi proov (seda saab teha, võttes süstlasse suitsugaasi - CO kontsentratsioon võib kergesti jääda mitme tuhande ppm piiresse) ja panna see aeglaselt suletud anumasse. kalibreeritud arvesti ja MQ-7 andur), võtke selle kontsentratsiooni juures töötlemata anduri näit ja pange see muutujale sensor_reading_100_ppm_CO. Ilma selle sammuta võib teie ppm mõõtmine mitu korda kummaski suunas vale olla (siiski on hea, kui vajate häiresignaali CO ohtliku kontsentratsiooni kohta kodus, kus tavaliselt ei tohiks üldse süsinikdioksiidi olla, kuid ei sobi mis tahes tööstuslikuks kasutamiseks).

Kuna mul puudus süsinikdioksiidi arvesti, kasutasin keerukamat lähenemist. Esmalt valmistasin kõrge CO kontsentratsiooni, kasutades põlemist eraldatud mahus (esimene foto). Sellest artiklist leidsin kõige kasulikumad andmed, sealhulgas erinevate leegitüüpide CO Seejärel lahjendati seda 1:50, et saavutada 100 ppm, nagu on näidatud teisel fotol, ja seda kasutati anduri võrdluspunkti määramiseks.

8. samm: mõned katseandmed

Mõned eksperimentaalsed andmed
Mõned eksperimentaalsed andmed

Minu puhul töötas andur üsna hästi - see pole väga madalate kontsentratsioonide suhtes eriti tundlik, kuid piisavalt hea, et tuvastada midagi suuremat kui 50 ppm. Proovisin kontsentratsiooni järk -järgult suurendada, mõõtmisi tehes ja koostasin diagrammide komplekti. 0 ppm jooni on kaks komplekti - puhas roheline enne CO kokkupuudet ja kollane roheline pärast. Tundub, et andur muudab pärast kokkupuudet veidi oma puhta õhutakistust, kuid see mõju on väike. Tundub, et see ei suuda selgelt eristada kontsentratsioone 8 ja 15, 15 ja 26, 26 ja 45 ppm-kuid suundumus on väga selge, nii et see võib öelda, kas kontsentratsioon on vahemikus 0-20 või 40-60 ppm. Kõrgemate kontsentratsioonide korral on sõltuvus palju iseloomulikum - avatud leegi heitgaasiga kokkupuutel tõuseb kõver algusest peale ilma allapoole minemata ja selle dünaamika on täiesti erinev. Nii et suurte kontsentratsioonide korral pole kahtlust, et see töötab usaldusväärselt, kuigi ma ei saa selle täpsust kinnitada, kuna mul pole ühtegi hinnatud CO -arvestit. Samuti tehti see katsete komplekt 20k koormustakisti abil - ja pärast seda otsustasin et soovitada vaikeväärtusena 10k, peaks see sel viisil tundlikum olema. See on kõik. Kui teil on usaldusväärne süsinikdioksiidi mõõtja ja olete selle tahvli kokku pannud, palun jagage tagasisidet andurite täpsuse kohta - oleks tore koguda statistikat erinevate andurite kohta ja parandada eskiisi vaikeeeldusi.

Soovitan: