Obsah:

Monitor Arduino CO pomocou senzora MQ-7: 8 krokov (s obrázkami)
Monitor Arduino CO pomocou senzora MQ-7: 8 krokov (s obrázkami)

Video: Monitor Arduino CO pomocou senzora MQ-7: 8 krokov (s obrázkami)

Video: Monitor Arduino CO pomocou senzora MQ-7: 8 krokov (s obrázkami)
Video: DIY Radar With Ultrasonic Sensor And Chat-GPT Generated Arduino Code | Coders Cafe 2024, Júl
Anonim
Monitor Arduino CO pomocou senzora MQ-7
Monitor Arduino CO pomocou senzora MQ-7
Monitor Arduino CO pomocou senzora MQ-7
Monitor Arduino CO pomocou senzora MQ-7

Niekoľko slov, prečo bol tento návod vytvorený: jedného dňa nám mama mojej priateľky telefonovala uprostred noci, pretože sa cítila naozaj zle - mala závraty, tachykardiu, nevoľnosť, vysoký krvný tlak, dokonca na neznámy čas omdlela (pravdepodobne ~ 5 minút, ale nedá sa to povedať), všetko bez akéhokoľvek zjavného dôvodu. Žije v malej dedine ďaleko od nemocníc (60 km od nás, 30 km do najbližšej nemocnice, 10 km bez normálnej cesty medzi nimi), preto sme sa ponáhľali k nej a dostali sme sa tam čoskoro po záchranke. Bola hospitalizovaná a ráno sa cítila takmer dobre, ale lekári nedokázali nájsť príčinu. Nasledujúci deň sme dostali nápad: mohla to byť otrava CO, pretože má plynový kotol na vodu (na fotografii) a sedela blízko neho celý večer, keď sa to stalo. Nedávno sme kúpili snímač CO MQ-7, ale nikdy som nemal čas na to, aby som na to zostavil schému, takže to bol ideálny čas na to. Po hodine hľadania akýchkoľvek pokynov na internete som zistil, že nemôžem nájsť žiadneho sprievodcu, ktorý by sa súčasne riadil pokynmi výrobcu senzorov uvedenými v jeho technickom liste a vysvetľoval vôbec čokoľvek (jeden príklad vyzeral, že má celkom dobrý kód, ale nebolo jasné, ako ho použiť, iní boli príliš zjednodušení a nefungovali by dobre). Strávili sme teda asi 12 hodín vývojom schém, výrobou a tlačou 3D puzdra, testovaním a kalibráciou snímača a nasledujúci deň sme išli k podozrivému kotlu. Ukázalo sa, že hladiny CO tam boli extrémne vysoké a mohli by byť smrteľné, ak by bol čas expozície CO dlhší. Verím preto, že každý, kto má podobnú situáciu (ako plynový kotol alebo iné spaľovanie prebiehajúce v obytnom priestore), by mal dostať taký snímač, aby sa nestalo niečo zlé.

Všetko sa to stalo pred dvoma týždňami, odvtedy som dosť vylepšil schémy a program a teraz sa to zdá byť primerane dobré a relatívne jednoduché (nie tri riadky kódu jednoduché, ale predsa). Aj keď dúfam, že mi niekto s presným meračom CO poskytne nejakú spätnú väzbu o predvolenej kalibrácii, ktorú som vložil do náčrtu - mám podozrenie, že to nie je ani zďaleka dobré. Tu je kompletný sprievodca s niektorými experimentálnymi údajmi.

Krok 1: Kusovník

Kusovník
Kusovník

Budete potrebovať: 0. Doska Arduino. Uprednostňujem čínsky klon Arduino Nano pre jeho vynikajúcu cenu 3 doláre, ale bude tu fungovať akékoľvek 8-bitové arduino. Sketch používa niektoré pokročilé časovače a bol testovaný iba na mikrokontroléri atmega328 - aj keď pravdepodobne bude dobre fungovať aj na iných. Senzor CO MQ-7. Najčastejšie dostupný s týmto senzorovým modulom Flying Fish musí prejsť malou úpravou, podrobnosťami v nasledujúcom kroku, alebo môžete použiť oddelený snímač MQ-7.

2. NPN bipolárny tranzistor. Bude tu fungovať prakticky akýkoľvek tranzistor NPN, ktorý zvládne 300 mA alebo viac. Tranzistor PNP nebude fungovať so spomenutým modulom Flying Fish (pretože má na výstupe senzora spájkovaný ohrievací kolík), ale je možné ho použiť s diskrétnym snímačom MQ-7.

3. Rezistory: 2 x 1k (od 0,5k do 1,2k bude fungovať dobre) a 1 x 10k (ten je najlepšie udržiavať presný - aj keď ak absolútne musíte použiť inú hodnotu, podľa toho upravte premennú reference_resistor_kOhm v náčrte).

4. Kondenzátory: 2 x 10uF alebo viac. Vyžadujú sa tantalové alebo keramické, elektrolytický nebude fungovať dobre kvôli vysokému ESR (nebudú schopné poskytnúť dostatok prúdu na vyhladenie zvlnenia vysokého prúdu).5. 6. Zelená. Piezoelektrický bzučiak indikujúci vysokú hladinu CO.7. Breadboard a drôty (všetko môžete tiež spájkovať na nano piny alebo vtesnať do zásuviek Uno, ale je ľahké urobiť chybu týmto spôsobom).

Krok 2: Modifikácia modulu alebo zapojenie diskrétnych snímačov

Modifikácia modulu alebo zapojenie diskrétnych snímačov
Modifikácia modulu alebo zapojenie diskrétnych snímačov

Pre modul musíte odpájať odpor a kondenzátor, ako je to znázornené na fotografii. Ak chcete, môžete odspájkovať v podstate všetko - elektronika modulu je úplne zbytočná, používame ho iba ako držiak pre samotný snímač, ale tieto dve súčasti vám zabránia získať správne hodnoty, Ak používate diskrétny snímač, pripojte zodpovedajúcim spôsobom kolíky ohrievača (H1 a H2) k 5V a kolektoru tranzistora. Pripojte jednu snímaciu stranu (ľubovoľný z pinov A) na 5 V, inú snímaciu stranu (ktorýkoľvek z pinov B) na odpor 10 k, rovnako ako analógový kolík modulu v schémach.

Krok 3: Princíp činnosti

Princíp činnosti
Princíp činnosti
Princíp činnosti
Princíp činnosti

Prečo vôbec potrebujeme všetky tieto komplikácie, prečo nepripojiť 5 V, uzemnenie a iba získať namerané hodnoty? Nuž, bohužiaľ týmto spôsobom nič užitočné nedostanete. Podľa technického listu MQ-7 musí senzor bežať cez a cykly nízkeho zahrievania, aby sa získali správne merania. Vo fáze nízkych teplôt sa CO absorbuje na platni a vytvára zmysluplné údaje. Počas vysokoteplotnej fázy sa absorbovaný CO a ďalšie zlúčeniny odparia zo snímacej dosky a vyčistia ju pre ďalšie meranie.

Všeobecne je prevádzka jednoduchá:

1. Pripojte 5 V na 60 sekúnd, tieto hodnoty nepoužívajte na meranie CO.

2. Pripojte 1,4 V na 90 sekúnd, tieto hodnoty použite na meranie CO.

3. Prejdite na krok 1.

Ale tu je problém: Arduino nemôže poskytnúť dostatok energie na spustenie tohto senzora z jeho kolíkov - ohrievač senzora vyžaduje 150 mA, zatiaľ čo pin Arduino môže poskytnúť nie viac ako 40 mA, takže ak je pripojený priamo, pin Arduino bude horieť a senzor stále vyhráva nefunguje. Takže musíme použiť nejaký druh prúdového zosilňovača, ktorý potrebuje malý vstupný prúd na ovládanie veľkého výstupného prúdu. Ďalším problémom je získanie 1,4 V. Jediným spôsobom, ako spoľahlivo získať túto hodnotu bez zavedenia mnohých analógových komponentov, je použiť prístup PWM (Pulse Width Modulation) so spätnou väzbou, ktorá bude ovládať výstupné napätie.

NPN tranzistor rieši oba problémy: keď je neustále zapnuté, napätie na senzore je 5 V a ohrieva sa vo vysokoteplotnej fáze. Keď na jeho vstup aplikujeme PWM, prúd pulzuje, potom sa vyhladí kondenzátorom a priemerné napätie sa udržiava na konštantnej hodnote. Ak použijeme vysokofrekvenčný PWM (v náčrte má frekvenciu 62,5 kHz) a priemerné množstvo analógových meraní (v náčrte je priemer viac ako ~ 1000 nameraných hodnôt), potom je výsledok celkom spoľahlivý.

Je dôležité pridať kondenzátory podľa schém. Obrázky tu ilustrujú rozdiel v signáli s kondenzátorom C2 a bez neho: bez neho je zvlnenie PWM jasne viditeľné a výrazne skresľuje hodnoty.

Krok 4: Schémy a Breadboard

Schémy a Breadboard
Schémy a Breadboard
Schémy a Breadboard
Schémy a Breadboard
Schémy a Breadboard
Schémy a Breadboard

Tu nájdete schémy a montážnu dosku.

VÝSTRAHA! Je potrebná úprava štandardného oddeľovacieho modulu! Bez úpravy je modul zbytočný. Úprava je opísaná v druhom kroku

Pre LED diódy je dôležité použiť piny D9 a D10, pretože tam máme výstupy hardvérového časovača 1, ktorý umožní plynulo meniť ich farby. Piny D5 a D6 sa používajú pre bzučiak, pretože D5 a D6 sú výstupy hardvérového časovača0. Nakonfigurujeme ich tak, aby boli navzájom inverzné, takže sa budú prepínať medzi stavmi (5V, 0V) a (0V, 5V), čím budú na bzučiak vydávať zvuk. Upozornenie: Toto má vplyv na hlavné časové prerušenie Arduina, takže všetky funkcie závislé od času (ako millis ()) nebudú v tejto skici produkovať správne výsledky (o tom neskôr). Pin D3 má k nemu pripojený výstup hardvérového Timer2 (rovnako ako D11 - je však menej vhodné položiť vodič na D11 ako na D3) - preto ho používame na zabezpečenie PWM na tranzistor riadiaci napätie. Rezistor R1 sa používa na ovládanie jasu diód LED. Môže to byť kdekoľvek od 300 do 3 000 ohmov, 1k je optimálny z hľadiska jasu/spotreby energie. Rezistor R2 sa používa na obmedzenie základného prúdu tranzistora. Nemal by byť nižší ako 300 ohmov (aby sa nepreťažil pin Arduino) a nemal by byť vyšší ako 1 500 ohmov. 1k existuje bezpečná voľba.

Rezistor R3 sa používa v sérii s doskou snímača na vytvorenie deliča napätia. Napätie na výstupe snímača sa rovná R3 / (R3 + Rs) * 5V, kde Rs je odpor snímača prúdu. Odpor snímača závisí od koncentrácie CO, takže napätie sa podľa toho mení. Kondenzátor C1 slúži na vyhladenie vstupného napätia PWM na snímači MQ -7, čím vyššia je jeho kapacita, tým lepšie, ale musí mať aj nízky ESR - takže keramický (alebo tantalový) Tu je preferovaný kondenzátor, elektrolytický nebude dobre fungovať.

Kondenzátor C2 sa používa na vyhladenie analógového výstupu snímača (výstupné napätie závisí od vstupného napätia - a tu máme pomerne vysoký prúdový PWM, ktorý ovplyvňuje všetky schémy, takže potrebujeme C2). Najjednoduchším riešením je použiť rovnaký kondenzátor ako tranzistor C1. NPN buď neustále vedie prúd, aby na ohrievači snímača poskytoval vysoký prúd, alebo pracuje v režime PWM, čím sa znižuje vykurovací prúd.

Krok 5: Program Arduino

Program Arduino
Program Arduino

UPOZORNENIE: SENZOR VYŽADUJE RUČNÚ KALIBRÁCIU NA AKÉKOĽVEK PRAKTICKÉ POUŽITIE. BEZ KALIBRÁCIE, V ZÁVISLOSTI NA PARAMETROCH VAŠEHO KONKRÉTNEHO SENZORA, MÔŽE TENTO NÁVRH ZAPNÚŤ ALARM V ČISTOM VZDUCHE ALEBO NEDETEKOVAŤ LETHÁLNU KONCENTRÁCIU MONOXIDU

Kalibrácia je popísaná v nasledujúcich krokoch. Hrubá kalibrácia je veľmi jednoduchá, presná je pomerne zložitá.

Na všeobecnej úrovni je program dosť jednoduchý:

Najprv kalibrujeme PWM, aby sme vytvorili stabilný 1,4 V požadovaný snímačom (správna šírka PWM závisí od mnohých parametrov, ako sú presné hodnoty odporu, odpor tohto konkrétneho snímača, krivka VA tranzistora atď. Atď. - takže najlepším spôsobom je vyskúšať rôzne hodnoty. a použite ten, ktorý najlepšie vyhovuje). Potom nepretržite prechádzame cyklom 60 sekúnd zahrievania a 90 sekúnd merania. V implementácii sa to trochu komplikuje. Musíme použiť hardvérové časovače, pretože všetko, čo tu máme, potrebuje na správnu funkciu vysokofrekvenčný stabilný PWM. Kód je priložený tu a je možné ho stiahnuť z nášho githubu, ako aj zo zdroja schémy vo Fritzingu. V programe sú 3 funkcie, ktoré zvládajú časovače: setTimer0PWM, setTimer1PWM, setTimer2PWM. Každý z nich nastaví časovač v režime PWM s danými parametrami (komentované v kóde) a nastaví šírku impulzu podľa vstupných hodnôt. Fázy merania sa prepínajú pomocou funkcií startMeasurementPhase a startHeatingPhase, zvládnuť všetko vo vnútri. a nastavte správne hodnoty časovača na prepínanie medzi vykurovaním 5 V a 1,4 V. Stav LED diód je nastavený funkciou setLED, ktorá na svojom vstupe akceptuje zelený a červený jas (v lineárnej stupnici 1-100) a prevádza ho na zodpovedajúce nastavenie časovača.

Stav bzučiaka sa ovláda pomocou funkcií buzz_on, buzz_off, buzz_beep. Funkcie zapnutia/vypnutia zapínajú a vypínajú zvuk, funkcia pípania produkuje konkrétnu sekvenciu pípnutí s periodou 1,5 sekundy, ak sa periodicky volá (táto funkcia sa okamžite vráti, aby neprerušila hlavný program - musíte ho však vyvolávať znova a znova vytvoriť pípací vzor).

Program najskôr spustí funkciu pwm_adjust, ktorá zistí správnu šírku cyklu PWM, aby sa počas fázy merania dosiahlo 1,4 V. Potom niekoľkokrát pípnutím oznámi, že snímač je pripravený, prepne sa do fázy merania a spustí hlavnú slučku.

V hlavnej slučke program skontroluje, či sme v aktuálnej fáze strávili dostatok času (90 sekúnd pre fázu merania, 60 sekúnd pre fázu zahrievania) a ak áno, potom zmení aktuálnu fázu. Tiež neustále aktualizuje hodnoty senzorov pomocou exponenciálneho vyhladzovania: new_value = 0,999*old_value + 0,001*new_reading. Pri takýchto parametroch a meracom cykle priemeruje signál približne posledných 300 milisekúnd. VAROVANIE: SENZOR VYŽADUJE RUČNÚ KALIBRÁCIU NA AKÉKOĽVEK PRAKTICKÉ POUŽITIE. BEZ KALIBRÁCIE, V ZÁVISLOSTI NA PARAMETROCH VAŠEHO KONKRÉTNEHO SENZORA, MÔŽE TENTO NÁVRH ZAPNÚŤ ALARM V ČISTOM VZDUCHE ALEBO NEDETEKOVAŤ LETHÁLNU KONCENTRÁCIU MONOXIDU.

Krok 6: Prvé spustenie: Čo môžete očakávať

Prvý beh: Čo očakávať
Prvý beh: Čo očakávať

Ak ste všetko zostavili správne, po spustení náčrtu uvidíte v sériovom monitore niečo také:

úprava PWM w = 0, V = 4,93

nastavenie PWM w = 17, V = 3,57PWM výsledok: šírka 17, napätie 3,57

a potom séria čísel predstavujúcich hodnoty aktuálneho snímača. Táto časť upravuje šírku PWM tak, aby napätie ohrievača senzora bolo čo najbližšie k 1,4 V, namerané napätie sa odpočíta od 5 V, takže naša ideálna nameraná hodnota je 3,6 V. Ak sa tento proces nikdy nekončí alebo nekončí po jednom kroku (výsledkom je šírka rovná 0 alebo 254) - potom je niečo v poriadku. Skontrolujte, či je váš tranzistor skutočne NPN a je správne zapojený (uistite sa, že ste použili základňu, kolektor, kolíky emitora vpravo - základňa smeruje k D3, kolektor k MQ -7 a emitor k zemi, nepočítajte s pohľadom Fritzingovho breadboardu - je nesprávne pre niektoré tranzistory) a uistite sa, že ste vstup senzora pripojili k vstupu Arduino A1. Ak je všetko v poriadku, v sériovom plotri od Arduino IDE by ste mali vidieť niečo podobné obrázku. Cykly zahrievania a merania v dĺžke 60 a 90 sekúnd prebiehajú jeden po druhom, pričom na konci každého cyklu sa meria a aktualizuje ppm CO. Keď je merací cyklus takmer hotový, môžete si k senzoru vziať otvorený plameň a zistiť, ako to ovplyvní namerané hodnoty (v závislosti od typu plameňa môže na otvorenom vzduchu vytvárať koncentráciu CO až 2 000 ppm - teda aj keď len malá časť skutočne ide do snímača, stále zapne alarm a nevypne sa do konca nasledujúceho cyklu). Ukázal som to na obrázku, ako aj reakciu na oheň zo zapaľovača.

Krok 7: Kalibrácia senzora

Kalibrácia senzora
Kalibrácia senzora
Kalibrácia senzora
Kalibrácia senzora

Podľa údajového listu výrobcu by mal snímač pred kalibráciou nechať bežať 48 hodín v rade za sebou. A mali by ste to urobiť, ak ho plánujete používať dlhší čas: v mojom prípade sa čítanie senzora na čistom vzduchu v priebehu 10 hodín zmenilo asi o 30%. Ak to nebudete brať do úvahy, môžete získať výsledok 0 ppm, kde je v skutočnosti 100 ppm CO. Ak nechcete čakať 48 hodín, môžete na konci cyklu merania monitorovať výstup senzora. Keď sa viac ako hodinu nezmení na viac ako 1-2 body - môžete prestať kúriť.

Hrubá kalibrácia:

Po spustení náčrtu najmenej 10 hodín na čistom vzduchu odčítajte surovú hodnotu senzora na konci cyklu merania, 2-3 sekundy pred začiatkom fázy zahrievania, a zapíšte ho do premennej sensor_reading_clean_air (riadok 100). To je všetko. Program odhadne ostatné parametre senzora, nebudú presné, ale mali by stačiť na rozlíšenie koncentrácie 10 až 100 ppm.

Presná kalibrácia:

Dôrazne odporúčam nájsť kalibrovaný merač CO, urobiť 100 ppm vzorky CO (to sa dá dosiahnuť tak, že do sprejovej striekačky odoberiete trochu spalín - koncentrácia CO sa môže ľahko pohybovať v rozmedzí niekoľkých tisíc ppm - a pomaly ju vložíte do uzavretej nádoby s kalibrovaný merač a snímač MQ-7), odčítajte surové údaje zo senzora pri tejto koncentrácii a vložte ich do premennej sensor_reading_100_ppm_CO. Bez tohto kroku môže byť vaše meranie ppm niekoľkokrát nesprávne v oboch smeroch (stále je to v poriadku, ak potrebujete alarm pre nebezpečnú koncentráciu CO doma, kde by normálne žiadny CO nemal byť, ale nie je vhodný pre žiadnu priemyselnú aplikáciu).

Keďže som nemal žiadny merač CO, použil som sofistikovanejší prístup. Najprv som pripravil vysokú koncentráciu CO pomocou spaľovania v izolovanom objeme (prvá fotografia). V tomto dokumente som našiel najužitočnejšie údaje vrátane výťažku CO pre rôzne typy plameňov - nie je to na fotografii, ale konečný experiment použil spaľovanie propánového plynu s rovnakým nastavením, čo viedlo k koncentrácii ~ 5 000 ppm CO. Potom sa zriedil 1:50, aby sa dosiahlo 100 ppm, ako je znázornené na druhej fotografii, a použil sa na určenie referenčného bodu senzora.

Krok 8: Niektoré experimentálne údaje

Niektoré experimentálne údaje
Niektoré experimentálne údaje

V mojom prípade senzor fungoval celkom dobre - nie je príliš citlivý na skutočne nízke koncentrácie, ale dostatočne dobrý na detekciu čokoľvek vyššieho ako 50 str./min. Snažil som sa postupne zvyšovať koncentráciu, merať a zostavoval som súbor grafov. Existujú dve sady 0 ppm liniek - čisto zelená pred expozíciou CO a žltozelená po. Zdá sa, že senzor po expozícii mierne mení odpor čistého vzduchu, ale tento efekt je malý. Nezdá sa, že by dokázal jasne rozlíšiť koncentrácie 8 a 15, 15 a 26, 26 a 45 ppm-ale trend je veľmi jasný, takže dokáže zistiť, či je koncentrácia v rozsahu 0-20 alebo 40-60 ppm.. Pri vyšších koncentráciách je závislosť oveľa výraznejšia - keď je krivka vystavená výfukovým plynom otvoreného plameňa, od začiatku stúpa bez toho, aby vôbec klesala, a jej dynamika je úplne odlišná. Takže pri vysokých koncentráciách nie je pochýb o tom, že funguje spoľahlivo, aj keď nemôžem potvrdiť jeho presnosť, pretože nemám žiadny hodnotený merač CO. Táto sada experimentov bola vykonaná aj s 20k záťažovým odporom - a potom som sa rozhodol odporučiť 10k ako predvolenú hodnotu, malo by to byť takto citlivejšie. To je všetko. Ak máte spoľahlivý merač CO a budete montovať túto dosku, podeľte sa o spätnú väzbu o presnosti senzorov - bolo by skvelé zbierať štatistiky o rôznych senzoroch a vylepšovať predvolené predpoklady náčrtu.

Odporúča: