Obsah:

Monitor Arduino CO pomocí senzoru MQ-7: 8 kroků (s obrázky)
Monitor Arduino CO pomocí senzoru MQ-7: 8 kroků (s obrázky)

Video: Monitor Arduino CO pomocí senzoru MQ-7: 8 kroků (s obrázky)

Video: Monitor Arduino CO pomocí senzoru MQ-7: 8 kroků (s obrázky)
Video: How to use Mosfet Optocoupled HW-532 to control up to 30V DC Motor Speed or load using Arduino 2024, Červenec
Anonim
Arduino CO Monitor pomocí senzoru MQ-7
Arduino CO Monitor pomocí senzoru MQ-7
Arduino CO Monitor pomocí senzoru MQ-7
Arduino CO Monitor pomocí senzoru MQ-7

Několik slov, proč byl tento instruktáž vytvořen: jednoho dne nám matka mé přítelkyně telefonovala uprostřed noci, protože se cítila opravdu špatně - měla závratě, tachykardii, nevolnost, vysoký krevní tlak, dokonce na neznámou dobu omdlela (pravděpodobně ~ 5 minut, ale nelze to říci), vše bez zjevného důvodu. Žije v malé vesnici daleko od nemocnic (60 km od nás, 30 km do nejbližší nemocnice, 10 km bez normální cesty mezi nimi), takže jsme se k ní vrhli a dostali jsme se tam brzy po záchrance. Byla hospitalizována a ráno se cítila téměř dobře, ale lékaři nebyli schopni najít její příčinu. Další den jsme dostali nápad: mohla to být otrava CO, protože má plynový kotel na vodu (na fotografii) a seděla blízko něj celý večer, když se to stalo. Nedávno jsme koupili snímač CO MQ-7, ale nikdy jsem na to neměl čas sestavit schémata, takže to byl ideální čas. Po hodině hledání jakýchkoli pokynů na internetu jsem si uvědomil, že nemohu najít žádný průvodce, který by se současně řídil pokyny výrobce senzoru uvedenými v jeho technickém listu a vysvětloval vůbec cokoli (jeden příklad vypadal, že má docela dobrý kód, ale nebylo jasné, jak to použít, ostatní byli příliš zjednodušení a nefungovali by dobře). Strávili jsme tedy asi 12 hodin vývojem schémat, výrobou a tiskem 3D pouzder, testováním a kalibrací senzoru a další den jsme šli do podezřelého kotle. Ukázalo se, že hladiny CO tam byly extrémně vysoké a mohly by být smrtelné, pokud by doba expozice CO byla delší. Věřím tedy, že každý, kdo má podobnou situaci (jako plynový kotel nebo jiné spalování probíhající uvnitř obytného prostoru), by si měl pořídit takové čidlo, aby zabránil něčemu špatnému.

To vše se stalo před dvěma týdny, od té doby jsem hodně vylepšil schémata a program a nyní se to zdá být přiměřeně dobré a relativně jednoduché (ne 3řádkové kódové jednoduché, ale přesto). I když doufám, že mi někdo s přesným měřičem CO poskytne určitou zpětnou vazbu o výchozí kalibraci, kterou jsem vložil do náčrtu - tuším, že to zdaleka není dobré. Zde je kompletní průvodce s některými experimentálními daty.

Krok 1: Kusovník

Kusovník
Kusovník

Budete potřebovat: 0. Deska Arduino. Dávám přednost čínskému klonu Arduino Nano pro jeho vynikající cenu 3 $, ale zde bude fungovat jakékoli 8bitové arduino. Sketch používá několik pokročilých časovačů a byl testován pouze na mikrokontroléru atmega328 - i když pravděpodobně bude dobře fungovat i na jiných. Senzor CO MQ-7. Nejčastěji dostupný s tímto senzorovým modulem Flying Fish musí projít malou úpravou, detaily v dalším kroku, nebo můžete použít oddělený snímač MQ-7.

2. NPN bipolární tranzistor. Zde bude fungovat prakticky jakýkoli NPN tranzistor, který zvládne 300 mA nebo více. Tranzistor PNP nebude fungovat se zmíněným modulem Flying Fish (protože má na výstupu snímače připájený ohřívací kolík), ale lze jej použít s diskrétním snímačem MQ-7.

3. Rezistory: 2 x 1k (od 0,5k do 1,2k bude fungovat dobře) a 1 x 10k (ten je nejlépe udržován přesný - ačkoli pokud absolutně musíte použít jinou hodnotu, upravte odpovídajícím způsobem proměnnou reference_resistor_kOhm v náčrtu).

4. Kondenzátory: 2 x 10uF nebo více. Jsou vyžadovány tantalové nebo keramické, elektrolytický nebude dobře fungovat kvůli vysokému ESR (nebudou schopni poskytnout dostatek proudu k vyhlazení zvlnění vysokého proudu). Zelené a červené LED diody indikují aktuální úroveň CO (můžete také použít jednu dvoubarevnou LED se 3 svorkami, jak jsme použili v našem prototypu žlutého boxu). Piezoelektrický bzučák indikující vysokou hladinu CO. 7. Breadboard a dráty (vše můžete také připájet na Nano piny nebo vmáčknout do zdířek Uno, ale takto snadno uděláte chybu).

Krok 2: Modifikace modulu nebo zapojení diskrétního senzoru

Modifikace modulu nebo zapojení diskrétního senzoru
Modifikace modulu nebo zapojení diskrétního senzoru

U modulu musíte odpájet odpor a kondenzátor, jak je znázorněno na fotografii. Pokud chcete, můžete odspájkovat v podstatě vše - elektronika modulu je úplně k ničemu, používáme ji pouze jako držák samotného senzoru, ale tyto dvě součásti vám zabrání získat správné hodnoty, Pokud používáte diskrétní snímač, připojte ohřívací kolíky (H1 a H2) k 5V a kolektoru tranzistoru odpovídajícím způsobem. Připojte jednu snímací stranu (jakýkoli z pinů A) na 5 V, další snímací stranu (jakýkoli z pinů B) na odpor 10 k, stejně jako analogový kolík modulu ve schématech.

Krok 3: Princip činnosti

Princip provozu
Princip provozu
Princip provozu
Princip provozu

Proč vůbec potřebujeme všechny tyto komplikace, proč nepřipojovat 5V, uzemnění a jen získávat hodnoty? No, tímto způsobem bohužel nic užitečného nedostanete. Podle datového listu MQ-7 musí senzor běžet přes a cykly nízkého zahřívání za účelem získání správných měření. Během nízkoteplotní fáze se CO absorbuje na desku a vytváří smysluplná data. Během vysokoteplotní fáze se absorbovaný CO a další sloučeniny odpařují ze senzorové desky a čistí ji pro další měření.

Obecně je provoz jednoduchý:

1. Připojte 5 V na 60 sekund, tyto hodnoty nepoužívejte pro měření CO.

2. Připojte 90 V na 1,4 s, použijte tyto hodnoty pro měření CO.

3. Přejděte na krok 1.

Ale tady je problém: Arduino nemůže poskytnout dostatek energie na spuštění tohoto senzoru z jeho kolíků - ohřívač senzoru vyžaduje 150 mA, zatímco pin Arduino může poskytnout ne více než 40 mA, takže pokud je připojen přímo, pin Arduino bude hořet a senzor stále vyhrál nepracuji. Takže musíme použít nějaký druh proudového zesilovače, který potřebuje malý vstupní proud k ovládání velkého výstupního proudu. Dalším problémem je získání 1,4 V. Jediným způsobem, jak spolehlivě získat tuto hodnotu bez zavedení mnoha analogových komponent, je použít přístup PWM (Pulse Width Modulation) se zpětnou vazbou, která bude řídit výstupní napětí.

NPN tranzistor řeší oba problémy: když je neustále zapnutý, napětí na senzoru je 5V a ohřívá se pro vysokoteplotní fázi. Když na jeho vstup aplikujeme PWM, proud pulzuje, pak se vyhladí kondenzátorem a průměrné napětí se udržuje konstantní. Pokud použijeme vysokofrekvenční PWM (v náčrtu má frekvenci 62,5KHz) a průměrně mnoho analogových měření (v náčrtu průměrně přes ~ 1000 naměřených hodnot), pak je výsledek celkem spolehlivý.

Je důležité přidat kondenzátory podle schémat. Obrázky zde ilustrují rozdíl v signálu s kondenzátorem C2 i bez něj: bez něj je zvlnění PWM jasně viditelné a výrazně zkresluje hodnoty.

Krok 4: Schémata a Breadboard

Schémata a Breadboard
Schémata a Breadboard
Schémata a Breadboard
Schémata a Breadboard
Schémata a Breadboard
Schémata a Breadboard

Zde je schéma a montážní deska.

VAROVÁNÍ! Je vyžadována úprava standardního breakout modulu! Bez modifikace je modul k ničemu. Modifikace je popsána ve druhém kroku

Pro LED je důležité použít piny D9 a D10, protože tam máme výstupy hardwaru Timer1, umožní to plynule měnit jejich barvy. Piny D5 a D6 se používají pro bzučák, protože D5 a D6 jsou výstupy hardwaru Timer0. Konfigurujeme je tak, aby byly navzájem inverzní, takže budou přepínat mezi stavy (5V, 0V) a (0V, 5V), čímž budou na bzučák vydávat zvuk. Varování: toto ovlivňuje hlavní časové načasování Arduina, takže všechny časově závislé funkce (jako millis ()) nebudou v této skice produkovat správné výsledky (více o tom později). Pin D3 má k sobě připojený výstup hardwaru Timer2 (stejně jako D11 - ale je méně výhodné umístit vodič na D11 než na D3) - používáme jej proto k zajištění PWM pro napěťový tranzistor. Rezistor R1 se používá k ovládání jasu LED. Může to být kdekoli od 300 do 3000 Ohm, 1k je spíše optimální z hlediska jasu/spotřeby energie. Rezistor R2 se používá k omezení základního proudu tranzistoru. Neměl by být nižší než 300 ohmů (aby nedošlo k přetížení kolíku Arduino) a ne vyšší než 1 500 ohmů. 1k existuje bezpečná volba.

Rezistor R3 se používá v sérii s deskou senzoru k vytvoření děliče napětí. Napětí na výstupu senzoru se rovná R3 / (R3 + Rs) * 5V, kde Rs je odpor aktuálního senzoru. Odpor senzoru závisí na koncentraci CO, takže napětí se odpovídajícím způsobem mění. Kondenzátor C1 slouží k vyhlazení vstupního napětí PWM na senzoru MQ -7, čím vyšší je jeho kapacita, tím lépe, ale také musí mít nízké ESR - tedy keramické (nebo tantalové) Zde je preferován kondenzátor, elektrolytický nebude fungovat dobře.

Kondenzátor C2 se používá k vyhlazení analogového výstupu snímače (výstupní napětí závisí na vstupním napětí - a zde máme poměrně vysoký proudový PWM, který ovlivňuje všechna schémata, takže potřebujeme C2). Nejjednodušším řešením je použít stejný kondenzátor jako tranzistor C1. NPN, a to buď po celou dobu vede proud k zajištění vysokého proudu na ohřívači senzoru, nebo pracuje v režimu PWM, čímž se snižuje topný proud.

Krok 5: Program Arduino

Program Arduino
Program Arduino

VAROVÁNÍ: SENZOR VYŽADUJE RUČNÍ KALIBRACI PRO JAKÉKOLI PRAKTICKÉ POUŽITÍ. BEZ KALIBRACE, V ZÁVISLOSTI NA PARAMETRECH VAŠEHO ZVLÁŠTNÍHO SNÍMAČE, MŮŽE TATO SKICA ZAPNOUT ALARM V ČISTÉM VZDUCHU NEBO NEDETEKOVAT LETHÁLNÍ KONCENTRACI MONOXIDU UHLÍKU

Kalibrace je popsána v následujících krocích. Hrubá kalibrace je velmi jednoduchá, přesná je poměrně složitá.

Na obecné úrovni je program poměrně jednoduchý:

Nejprve zkalibrujeme náš PWM, abychom dosáhli stabilních 1,4 V požadovaných snímačem (správná šířka PWM závisí na mnoha parametrech, jako jsou přesné hodnoty odporu, odpor tohoto konkrétního snímače, křivka VA tranzistoru atd. Atd. - takže nejlepší způsob je vyzkoušet různé hodnoty a použijeme ten, který nejlépe vyhovuje). Poté průběžně procházíme cyklem 60 sekund zahřívání a 90 sekund měření. V implementaci se to poněkud komplikuje. Musíme použít hardwarové časovače, protože vše, co zde máme, potřebuje ke správné funkci vysokofrekvenční stabilní PWM. Kód je připojen zde a lze jej stáhnout z našeho githubu, stejně jako ze zdroje schémat ve Fritzing. V programu jsou 3 funkce, které zpracovávají časovače: setTimer0PWM, setTimer1PWM, setTimer2PWM. Každý z nich nastavuje časovač v režimu PWM s danými parametry (komentované v kódu) a nastavuje šířku impulsu podle vstupních hodnot. Fáze měření se přepínají pomocí funkcí startMeasurementPhase a startHeatingPhase, zvládnout vše uvnitř. a nastavte správné hodnoty časovače pro přepínání mezi ohřevem 5 V a 1,4 V. Stav LED je nastaven funkcí setLED, která na svém vstupu přijímá zelený a červený jas (v lineárním měřítku 1-100) a převádí jej na odpovídající nastavení časovače.

Stav bzučáku je řízen pomocí funkcí buzz_on, buzz_off, buzz_beep. Funkce zapnutí/vypnutí zapínají a vypínají zvuk, funkce pípnutí produkuje konkrétní sekvenci pípnutí s periodou 1,5 sekundy, pokud je periodicky vyvolávána (tato funkce se okamžitě vrátí, takže nepřeruší hlavní program - ale musíte ji volat znovu a znovu k vytvoření pípnutí).

Program nejprve spustí funkci pwm_adjust, která zjistí správnou šířku cyklu PWM, aby bylo dosaženo 1,4 V během fáze měření. Poté několikrát pípnutím oznámí, že je snímač připraven, přepne se do fáze měření a spustí hlavní smyčku.

V hlavní smyčce program kontroluje, zda jsme v aktuální fázi strávili dostatek času (90 sekund pro fázi měření, 60 sekund pro fázi ohřevu) a pokud ano, pak změní aktuální fázi. Také neustále aktualizuje hodnoty senzorů pomocí exponenciálního vyhlazování: new_value = 0,999*old_value + 0,001*new_reading. S takovými parametry a měřicím cyklem průměruje signál přibližně za posledních 300 milisekund. VAROVÁNÍ: SENZOR VYŽADUJE RUČNÍ KALIBRACI PRO JAKÉKOLI PRAKTICKÉ POUŽITÍ. BEZ KALIBRACE, V ZÁVISLOSTI NA PARAMETRECH VAŠEHO ZVLÁŠTNÍHO SNÍMAČE, MŮŽE TATO SKICA ZAPNOUT ALARM V ČISTÉM VZDUCHU NEBO NEDETEKOVAT LETHÁLNÍ KONCENTRACI MONOXIDU UHLÍKU.

Krok 6: První spuštění: Co očekávat

První spuštění: Co očekávat
První spuštění: Co očekávat

Pokud jste vše sestavili správně, po spuštění skici uvidíte něco takového v Sériovém monitoru:

nastavení PWM w = 0, V = 4,93

nastavení PWM w = 17, V = 3,57 PWM výsledek: šířka 17, napětí 3,57

a pak řada čísel představujících aktuální hodnoty snímačů. Tato část upravuje šířku PWM tak, aby produkovala napětí ohřívače snímače co nejblíže 1,4 V, měřené napětí je odečteno od 5 V, takže naše ideální naměřená hodnota je 3,6 V. Pokud tento proces nikdy nekončí nebo nekončí po jediném kroku (což má za následek šířku rovnou 0 nebo 254) - pak je něco špatně. Zkontrolujte, zda je váš tranzistor skutečně NPN a je správně připojen (ujistěte se, že používáte základnu, kolektor, kolíky emitoru vpravo - základna jde do D3, kolektor do MQ -7 a emitor do země, nepočítejte s Fritzingovým zobrazením na desce - je u některých tranzistorů špatně) a ujistěte se, že jste připojili vstup senzoru ke vstupu Arduino A1. Pokud je vše v pořádku, měli byste vidět v Serial Plotter od Arduino IDE něco podobného jako na obrázku. Zahřívací a měřicí cykly o délce 60 a 90 sekund běží jeden po druhém, přičemž na konci každého cyklu jsou měřeny a aktualizovány ppm CO. Když je měřicí cyklus téměř hotový, můžete si k čidlu přiblížit otevřený plamen a zjistit, jak to ovlivní odečty (v závislosti na typu plamene může na volném vzduchu produkovat až 2 000 ppm koncentrace CO - takže i když jen malá část ve skutečnosti jde do senzoru, stále zapne alarm a nevypne se do konce dalšího cyklu). Ukázal jsem to na obrázku, stejně jako reakci na oheň ze zapalovače.

Krok 7: Kalibrace senzoru

Kalibrace senzoru
Kalibrace senzoru
Kalibrace senzoru
Kalibrace senzoru

Podle datového listu výrobce by senzor měl být kalibrován po dobu 48 hodin v řadě za sebou. A měli byste to udělat, pokud jej hodláte používat delší dobu: v mém případě se hodnota čidla na čistém vzduchu během 10 hodin změnila asi o 30%. Pokud to nebudete brát v úvahu, můžete získat výsledek 0 ppm, kde je ve skutečnosti 100 ppm CO. Pokud nechcete čekat 48 hodin, můžete na konci cyklu měření sledovat výstup senzoru. Když se přes hodinu nezmění o více než 1-2 body - můžete přestat topit.

Hrubá kalibrace:

Po spuštění skici po dobu alespoň 10 hodin na čistém vzduchu vezměte nezpracovanou hodnotu senzoru na konci cyklu měření, 2–3 sekundy před zahájením fáze ohřevu, a zapište ji do proměnné sensor_reading_clean_air (řádek 100). A je to. Program odhadne další parametry senzoru, nebudou přesné, ale měly by stačit k rozlišení koncentrace 10 až 100 ppm.

Přesná kalibrace:

Důrazně doporučuji najít kalibrovaný měřič CO, udělat vzorek 100 ppm CO (lze to provést tak, že do stříkačky odeberete trochu spalin - koncentrace CO se tam může snadno pohybovat v rozmezí několika tisíc ppm - a pomalu ho dáte do uzavřené nádoby s kalibrovaný měřič a snímač MQ-7), odeberte surový snímač odečtený při této koncentraci a vložte jej do proměnné sensor_reading_100_ppm_CO. Bez tohoto kroku může být vaše měření ppm několikrát chybné v obou směrech (stále v pořádku, pokud potřebujete alarm pro nebezpečnou koncentraci CO doma, kde by normálně neměl být žádný CO, ale není vhodný pro žádnou průmyslovou aplikaci).

Protože jsem neměl žádný měřič CO, použil jsem sofistikovanější přístup. Nejprve jsem připravil vysokou koncentraci CO pomocí spalování v izolovaném objemu (první foto). V tomto příspěvku jsem našel nejužitečnější údaje, včetně výtěžku CO pro různé typy plamenů - není na fotografii, ale v závěrečném experimentu bylo použito spalování propanového plynu se stejným nastavením, což vedlo ke koncentraci ~ 5 000 ppm CO. Poté byl zředěn 1:50, aby bylo dosaženo 100 ppm, jak je znázorněno na druhé fotografii, a byl použit ke stanovení referenčního bodu senzoru.

Krok 8: Některá experimentální data

Některá experimentální data
Některá experimentální data

V mém případě senzor fungoval docela dobře - není příliš citlivý na opravdu nízké koncentrace, ale dost dobrý na detekci čehokoli vyššího než 50 stran za minutu. Zkoušel jsem postupně zvyšovat koncentraci, provádět měření a sestavovat sadu grafů. Existují dvě sady 0ppm linek - čistě zelená před expozicí CO a žlutá zelená po. Zdá se, že senzor po expozici mírně mění odpor čistého vzduchu, ale tento efekt je malý. Nezdá se, že by dokázal jasně rozlišit mezi koncentracemi 8 a 15, 15 a 26, 26 a 45 ppm-ale trend je velmi jasný, takže dokáže zjistit, zda je koncentrace v rozmezí 0-20 nebo 40-60 ppm. U vyšších koncentrací je závislost mnohem výraznější - když je vystavena výfuku otevřeného plamene, křivka stoupá od začátku, aniž by vůbec klesala, a její dynamika je zcela odlišná. Takže pro vysoké koncentrace není pochyb, že funguje spolehlivě, i když nemohu potvrdit jeho přesnost, protože nemám žádný jmenovitý měřič CO. Také tato sada experimentů byla provedena pomocí 20k zatěžovacího odporu - a poté jsem se rozhodl doporučit 10k jako výchozí hodnotu, mělo by to být citlivější tímto způsobem. Pokud máte spolehlivý měřič CO a budete sestavovat tuto desku, podělte se prosím o zpětnou vazbu o přesnosti senzorů - bylo by skvělé shromažďovat statistiky o různých senzorech a vylepšovat výchozí předpoklady skici.

Doporučuje: