Tartalomjegyzék:

Arduino CO monitor az MQ-7 érzékelő használatával: 8 lépés (képekkel)
Arduino CO monitor az MQ-7 érzékelő használatával: 8 lépés (képekkel)

Videó: Arduino CO monitor az MQ-7 érzékelő használatával: 8 lépés (képekkel)

Videó: Arduino CO monitor az MQ-7 érzékelő használatával: 8 lépés (képekkel)
Videó: how to make mq-7 sensor Detector with Arduino 2024, Július
Anonim
Arduino CO monitor az MQ-7 érzékelő használatával
Arduino CO monitor az MQ-7 érzékelő használatával
Arduino CO monitor az MQ-7 érzékelő használatával
Arduino CO monitor az MQ-7 érzékelő használatával

Néhány szó, hogy miért jött létre ez az oktatható: egy nap a barátnőm édesanyja felhívott minket az éjszaka közepén, mert nagyon rosszul érezte magát - szédült, tachycardia, hányinger, magas vérnyomása volt, sőt elájult ismeretlen ideig (valószínűleg ~ 5 perc, de nem lehet megmondani), mindezt nyilvánvaló ok nélkül. Egy kis faluban él, távol a kórházaktól (60 km -re a helyünktől, 30 km -re a legközelebbi kórháztól, 10 km -ig minden normális út között), ezért rohantunk hozzá, és hamarosan odaértünk a mentő után. Kórházba került, és reggel majdnem jól érezte magát, de az orvosok nem találták meg az okát. Másnap ötletünk támadt: CO mérgezés lehetett, mivel gázvizes kazánja van (a képen), és egész este közel ült hozzá, amikor ez történt. Nemrég vettünk MQ-7 CO érzékelőt, de soha nem volt ideje összeállítani hozzá egy vázlatot, így ez volt a tökéletes alkalom erre. Egy óra keresés után az interneten rájöttem, hogy nem találok olyan útmutatót, amely egyben követné az érzékelő gyártójának adatlapján megadott utasításait, és egyáltalán elmagyarázna bármit (egy példa elég jó kóddal rendelkezett, de nem volt világos, hogyan kell alkalmazni, mások túl egyszerűsítettek, és nem működtek jól). Így körülbelül 12 órát töltöttünk a vázlatok kidolgozásával, a 3D tok készítésével és nyomtatásával, az érzékelő tesztelésével és kalibrálásával, és másnap a gyanús kazánhoz mentünk. Kiderült, hogy a CO -szintek rendkívül magasak, és halálosak lehetnek, ha a CO -expozíciós idő hosszabb lesz. Tehát úgy gondolom, hogy akinek hasonló helyzete van (például gázkazán vagy más égetés a lakótérben), szerezzen be ilyen érzékelőt, hogy megakadályozza, hogy valami rossz történjen.

Mindez két héttel ezelőtt történt, azóta elég sokat javítottam a sémákon és a programokon, és most ésszerűnek és viszonylag egyszerűnek tűnik (nem egyszerű 3 soros kód, de mégis). Bár remélem, hogy valaki, aki pontos CO -mérővel rendelkezik, visszajelzést ad a vázlatba beírt alapértelmezett kalibrálásról - gyanítom, hogy ez messze nem jó. Itt van egy teljes útmutató néhány kísérleti adatgal.

1. lépés: Anyagjegyzék

Darabjegyzékben
Darabjegyzékben

Szükséged lesz: 0. Arduino tábla. Jobban szeretem az Arduino Nano kínai klónját a kiemelkedő 3 dolláros áráért, de minden 8 bites arduino itt fog működni. A Sketch néhány fejlett időzítő műveletet használ, és csak az atmega328 mikrokontrolleren tesztelték - bár valószínűleg másokon is jól fog működni. MQ-7 CO érzékelő. Leggyakrabban ezzel a Flying Fish érzékelő modullal érhető el, kis módosításon kell átesnie, a részleteket a következő lépésben, vagy használhat egy különálló MQ-7 érzékelőt.

2. NPN bipoláris tranzisztor. Gyakorlatilag minden olyan NPN tranzisztor, amely 300 mA vagy annál nagyobb kapacitást képes kezelni, itt fog működni. A PNP tranzisztor nem fog működni az említett Flying Fish modullal (mivel fűtőcsapja az érzékelő kimenetéhez van forrasztva), de diszkrét MQ-7 érzékelővel használható.

3. Ellenállások: 2 x 1 k (0,5 k -tól 1,2 k -ig jól fog működni) és 1 x 10 k (ez a legjobb, ha pontosan meg kell őrizni - bár ha feltétlenül más értéket kell használnia, ennek megfelelően állítsa be a reference_resistor_kOhm változót a vázlatban).

4. Kondenzátorok: 2 x 10uF vagy több. Tantálra vagy kerámiára van szükség, az elektrolit nem fog jól működni a magas ESR miatt (nem képesek elegendő áramot biztosítani a nagyáramú hullámzás kiegyenlítésére). Zöld és piros LED-ek az aktuális CO-szintet jelzik (használhat egy dupla színű LED-et is, 3 terminállal, mint a sárga doboz prototípusunknál). Piezo hangjelző a magas CO szint jelzésére.7. Kenyeretábla és vezetékek (mindent forraszthat a Nano csapokhoz vagy Uno aljzatokba is préselheti, de így könnyű hibázni).

2. lépés: Modulmódosítás vagy diszkrét érzékelő huzalozás

Modulmódosítás vagy diszkrét érzékelő huzalozás
Modulmódosítás vagy diszkrét érzékelő huzalozás

A modulhoz ki kell forrasztani az ellenállást és a kondenzátort, amint az a képen látható. Ha akarja, lényegében mindent ki lehet forrasztani - a modul elektronika teljesen haszontalan, csak magának az érzékelőnek a tartójához használjuk, de ez a két összetevő megakadályozza a helyes leolvasást, Ha diszkrét érzékelőt használ, csatlakoztassa a fűtőtüskéket (H1 és H2) az 5V -hoz és a tranzisztor kollektorához. Csatlakoztassa az egyik érzékelő oldalt (az A érintkezők bármelyikét) az 5V -hoz, a másik érzékelő oldalt (a B érintkezők bármelyikét) a 10k -os ellenálláshoz, ugyanúgy, mint a vázlatokban a modul analóg csapját.

3. lépés: Működési elv

Működési elv
Működési elv
Működési elv
Működési elv

Miért van szükségünk ezekre a bonyodalmakra, miért nem kell 5V-os földet csatlakoztatni, és csak leolvasni? Nos, sajnos semmi hasznosat nem kap. Az MQ-7 adatlapja szerint az érzékelőnek magas és alacsony fűtési ciklusok a megfelelő mérések érdekében. Alacsony hőmérsékletű fázisban a CO felszívódik a lemezre, és érdemi adatokat szolgáltat. A magas hőmérsékletű fázisban az elnyelt CO és más vegyületek elpárolognak az érzékelőlemezről, megtisztítva azt a következő méréshez.

Tehát a működés általában egyszerű:

1. Alkalmazza az 5 V -ot 60 másodpercig, ne használja ezeket az értékeket a CO mérésére.

2. Alkalmazza az 1,4 V feszültséget 90 másodpercig, használja ezeket az értékeket a CO méréshez.

3. Folytassa az 1. lépéssel.

De itt van a probléma: az Arduino nem tud elegendő energiát biztosítani ahhoz, hogy ezt az érzékelőt a csapjaiból futtassa - az érzékelő fűtője 150 mA -t igényel, míg az Arduino csap legfeljebb 40 mA -t, így ha közvetlenül csatlakoztatják, az Arduino tű ég és az érzékelő továbbra is nyert ne dolgozz. Tehát valamilyen áramerősítőt kell használnunk, amely kis bemeneti áramot vesz igénybe a nagy kimeneti áram vezérléséhez. Egy másik probléma az 1,4 V feszültség megszerzése. Az egyetlen módja annak, hogy megbízhatóan megkapjuk ezt az értéket sok analóg komponens bevezetése nélkül, ha a PWM (impulzusszélesség -moduláció) módszert használjuk a visszacsatolással, amely szabályozza a kimeneti feszültséget.

Az NPN tranzisztor mindkét problémát megoldja: amikor folyamatosan be van kapcsolva, az érzékelő feszültsége 5 V, és fűt a magas hőmérsékletű fázishoz. Amikor PWM -et alkalmazunk a bemenetére, az áram lüktet, majd a kondenzátor elsimítja, és az átlagos feszültséget állandó értéken tartja. Ha nagyfrekvenciás PWM -et használunk (a vázlatban 62,5KHz -es frekvenciájú) és sok analóg leolvasást átlagolunk (a vázlatban ~ 1000 leolvasás felett), akkor az eredmény meglehetősen megbízható.

Rendkívül fontos a kondenzátorok hozzáadása a vázlatok szerint. Az itt látható képek illusztrálják a jelek közötti különbséget C2 kondenzátorral és anélkül: nélküle a PWM hullámzás jól látható, és jelentősen torzítja az értékeket.

4. lépés: Vázlatok és Breadboard

Vázlatok és kenyértábla
Vázlatok és kenyértábla
Vázlatok és kenyértábla
Vázlatok és kenyértábla
Vázlatok és kenyértábla
Vázlatok és kenyértábla

Itt található a vázlatrajz és a kenyérlap összeállítása.

FIGYELEM! Szükséges a szabványos megszakító modul módosítása! Módosítás nélkül a modul használhatatlan. A módosítást a második lépés írja le

Fontos, hogy a D9 és D10 csapokat használja a LED -ekhez, mivel ott vannak a Timer1 hardver kimenetei, amelyek lehetővé teszik a színük zökkenőmentes megváltoztatását. A D5 és D6 csapokat a hangjelzéshez használják, mivel a D5 és D6 a hardver Timer0 kimenetei. Úgy konfiguráljuk őket, hogy egymással inverzek legyenek, így váltani fognak az (5V, 0V) és a (0V, 5V) állapotok között, így hangot adva a csengőn. Figyelmeztetés: ez befolyásolja az Arduino fő időzítési megszakítását, így minden időfüggő funkció (például millis ()) nem ad megfelelő eredményeket ebben a vázlatban (erről majd később). A Pin D3 hardver Timer2 kimenetet csatlakoztatott (valamint D11 - de kevésbé kényelmes a vezetéket a D11 -re kötni, mint a D3 -ra) - ezért ezt használjuk a PWM biztosítására a feszültségszabályozó tranzisztorhoz. Az R1 ellenállást a LED -ek fényerejének szabályozására használják. Ez 300 és 3000 Ohm között lehet, az 1k fényerő/energiafogyasztás meglehetősen optimális. Az R2 ellenállást a tranzisztor alapáramának korlátozására használják. Nem lehet alacsonyabb, mint 300 Ohm (hogy ne terhelje túl az Arduino tűt), és nem lehet magasabb, mint 1500 Ohm. 1k van egy biztonságos választás.

Az R3 ellenállást az érzékelő lemezzel sorozatban használják feszültségosztó létrehozásához. Az érzékelő kimenetén lévő feszültség megegyezik az R3 / (R3 + Rs) * 5V értékkel, ahol Rs az aktuális érzékelő ellenállása. Az érzékelő ellenállása a CO koncentrációjától függ, ezért a feszültség ennek megfelelően változik. A C1 kondenzátort a bemeneti PWM feszültség kiegyenlítésére használják az MQ -7 érzékelőn, minél nagyobb a kapacitása, annál jobb, de alacsony ESR -rel is kell rendelkeznie - tehát kerámia (vagy tantál) itt a kondenzátor az előnyben részesített, az elektrolitikus nem működik jól.

A C2 kondenzátort az érzékelő analóg kimenetének simítására használják (a kimeneti feszültség a bemeneti feszültségtől függ - és itt meglehetősen nagy áramerősségű PWM van, ami minden vázlatot befolyásol, ezért szükségünk van C2 -re). A legegyszerűbb megoldás az, ha ugyanazt a kondenzátort használja, mint a C1. NPN tranzisztor, vagy folyamatosan vezeti az áramot, hogy nagy áramot biztosítson az érzékelő fűtőelemén, vagy PWM módban működik, ezáltal csökkenti a fűtési áramot.

5. lépés: Arduino program

Arduino program
Arduino program

FIGYELMEZTETÉS: AZ ÉRZÉKELŐ MINDEN GYAKORLATI HASZNÁLATRA KÉZI KALIBRÁLÁST igényel. KALIBRÁLÁS NÉLKÜL, KÜLÖNLEGES ÉRZÉKELŐJÉNEK PARAMÉTEREITŐL FÜGGŐBEN, EZ A VÁZLAT TISZTA LEVEGŐBEN RIASZTÁSRA FIGYELHETŐ, VAGY NEM FOGADJA FEL a szénhidrogén -monoxid -koncentrációt

A kalibrálást a következő lépések ismertetik. A durva kalibrálás nagyon egyszerű, a pontos meglehetősen bonyolult.

Általánosságban elmondható, hogy a program meglehetősen egyszerű:

Először kalibráljuk a PWM -et annak érdekében, hogy az érzékelő által megkövetelt stabil 1,4 V -ot állítsunk elő (a megfelelő PWM -szélesség sok paramétertől függ, például a pontos ellenállásértékektől, az adott érzékelő ellenállásától, a tranzisztor VA görbéjétől stb. - így a legjobb módszer a különböző értékek kipróbálása és használjon egyet, amelyik a legjobban illik). Ezután folyamatosan 60 másodperces fűtési és 90 másodperces mérési cikluson megyünk keresztül. A megvalósítás némileg bonyolulttá válik. Hardver időzítőt kell használnunk, mert minden, ami itt van, nagyfrekvenciás, stabil PWM-re van szüksége a megfelelő működéshez. A kód itt található, és letölthető a github-ból, valamint a Fritzing sematikus forrása. A programban vannak 3 funkció, amelyek kezelik az időzítőket: setTimer0PWM, setTimer1PWM, setTimer2PWM. Mindegyik beállítja az időzítőt PWM módban a megadott paraméterekkel (megjegyzés a kódban), és beállítja az impulzus szélességét a bemeneti értékeknek megfelelően. mindent kezelni belül. és állítsa be a megfelelő időzítő értékeket az 5V és 1,4V fűtés közötti váltáshoz. A LED-ek állapotát a setLED funkciók állítják be, amelyek elfogadják a zöld és piros fényerőt a bemenetén (lineáris 1-100 skálán), és átalakítják a megfelelő időzítő beállításra.

A zümmögés állapotát a buzz_on, buzz_off, buzz_beep függvények vezérlik. A be- és kikapcsolási funkciók be- és kikapcsolják a hangot, a sípoló funkció 1,5 másodperces hangjelzést ad, ha rendszeresen hívják (ez a funkció azonnal visszatér, így nem állítja le a főprogramot - de újra és újra meg kell hívnia) sípoló minta előállításához).

A program először futtatja a pwm_adjust függvényt, amely megtudja a megfelelő PWM ciklusszélességet annak érdekében, hogy a mérési szakaszban 1,4 V -ot érjen el. Ezután néhány pittyegés jelzi, hogy az érzékelő készen áll, mérési fázisba kapcsol, és elindítja a főhurkot.

A fő ciklusban a program ellenőrzi, hogy elegendő időt töltöttünk -e az aktuális fázisban (90 másodperc a mérési szakaszban, 60 másodperc a fűtési fázisban), és ha igen, akkor megváltoztatja az aktuális fázist. Továbbá folyamatosan frissíti az érzékelő leolvasásait exponenciális simítással: new_value = 0.999*old_value + 0.001*new_reading. Ilyen paraméterekkel és mérési ciklusokkal átlagolja a jelet körülbelül az utolsó 300 ezredmásodperc alatt. KALIBRÁLÁS NÉLKÜL, KÜLÖNLEGES ÉRZÉKELŐJÉNEK PARAMÉTEREITŐL FÜGGŐBEN, EZ A VÁZLAT TISZTA LEVEGŐBEN RIASZTÁSRA VÁLASZTHATJA, VAGY NEM FOGADJA FEL a szénhidrogén -monoxid -koncentrációt.

6. lépés: Első futás: mire számíthat

Első futás: Mire számíthatsz
Első futás: Mire számíthatsz

Ha mindent megfelelően összeállított, akkor a vázlat futtatása után valami ilyesmit fog látni a Soros monitorban:

PWM beállítása w = 0, V = 4,93

PWM beállítása w = 17, V = 3,57 PWM eredmény: szélesség 17, feszültség 3,57

majd az aktuális érzékelő leolvasását ábrázoló számsorozat. Ez a rész a PWM szélességét állítja be annak érdekében, hogy az érzékelő fűtőfeszültségét a lehető legközelebb hozza az 1,4 V -hoz, a mért feszültséget levonják az 5 V -ból, így az ideális mért értékünk 3,6 V. Ha ez a folyamat soha nem ér véget, vagy véget ér egyetlen lépés után (ami 0 vagy 254 szélességet eredményez) - akkor valami nincs rendben. Ellenőrizze, hogy a tranzisztor valóban NPN -e és megfelelően van -e csatlakoztatva (győződjön meg róla, hogy a bázist, a kollektorot, az emittercsapokat használta -e megfelelően - a bázis a D3 -hoz, a kollektor az MQ -7 -hez és az emitter a földhöz, ne számítson a Fritzing paneles nézetre - ez az hibás néhány tranzisztor esetén), és győződjön meg arról, hogy az érzékelő bemenetét az Arduino A1 bemenetéhez csatlakoztatta. Ha minden rendben van, akkor az Arduino IDE soros plotterében látnia kell valami hasonlót a képhez. A 60 és 90 másodperces fűtési és mérési ciklusok egymás után futnak, a CO ppm -et minden ciklus végén mérik és frissítik. Ha a mérési ciklus majdnem befejeződött, vegyen egy nyílt lángot az érzékelő közelébe, és nézze meg, hogyan befolyásolja ez az értékeket (a lángtípustól függően akár 2000 ppm CO -koncentrációt is képes előállítani a szabadban - tehát annak csak egy kis része valójában bemegy az érzékelőbe, akkor is bekapcsolja a riasztót, és nem kapcsol ki a következő ciklus végéig). Megmutattam a képen, valamint az öngyújtó tűzre adott válaszát.

7. lépés: Az érzékelő kalibrálása

Érzékelő kalibrálása
Érzékelő kalibrálása
Érzékelő kalibrálása
Érzékelő kalibrálása

A gyártó adatlapja szerint az érzékelő kalibrálása előtt 48 órán át kell működtetnie a fűtési-hűtési ciklusokat. És ezt akkor is meg kell tennie, ha hosszú ideig kívánja használni: az én esetemben az érzékelő leolvasása tiszta levegőben körülbelül 30% -kal változott 10 óra alatt. Ha ezt nem veszi figyelembe, 0 ppm -es eredményt kaphat, ahol valójában 100 ppm CO van. Ha nem szeretne 48 órát várni, akkor a mérési ciklus végén figyelheti az érzékelő kimenetét. Ha egy óra elteltével nem változik 1-2 pontnál többet - ott leállíthatja a fűtést.

Durva kalibrálás:

Miután a vázlatot legalább 10 órán keresztül tiszta levegőn futtatta, vegye le a nyers érzékelő értékét a mérési ciklus végén, 2-3 másodperccel a fűtési fázis megkezdése előtt, és írja be a sensor_reading_clean_air változóba (100. sor). Ez az. A program megbecsüli az érzékelő egyéb paramétereit, ezek nem lesznek pontosak, de elegendőnek kell lenniük a 10 és 100 ppm közötti koncentráció megkülönböztetéséhez.

Pontos kalibrálás:

Erősen ajánlom, hogy keressen egy kalibrált CO -mérőt, készítsen 100 ppm CO -mintát (ezt úgy teheti meg, hogy egy füstgázt vesz a fecskendőbe - a CO -koncentráció könnyen több ezer ppm tartományba eshet -, és lassan tegye azt zárt edénybe. kalibrált mérő és az MQ-7 érzékelő), vegye le a nyers érzékelő leolvasását ezen a koncentráción, és helyezze be a sensor_reading_100_ppm_CO változóba. E lépés nélkül a ppm mérése többször is hibás lehet mindkét irányban (még akkor is rendben van, ha riasztásra van szüksége a veszélyes CO -koncentráció miatt otthon, ahol általában nem lehet CO, de nem jó bármilyen ipari alkalmazáshoz).

Mivel nem volt CO -mérőm, kifinomultabb megközelítést alkalmaztam. Először nagy koncentrációjú CO -t készítettem el égetéssel izolált térfogatban (első fotó). Ebben a cikkben megtaláltam a leghasznosabb adatokat, beleértve a különböző lángtípusok CO -hozamát - ez nem szerepel a fotón, de a végső kísérlet propángáz égetését alkalmazta, ugyanazzal a beállítással, ami ~ 5000 ppm CO -koncentrációt eredményezett. Ezután 1:50 arányban hígítottuk 100 ppm elérése érdekében, amint azt a második fotó mutatja, és az érzékelő referenciapontjának meghatározására használták.

8. lépés: Néhány kísérleti adat

Néhány kísérleti adat
Néhány kísérleti adat

Esetemben az érzékelő meglehetősen jól működött - nem túl érzékeny az igazán alacsony koncentrációra, de elég jó ahhoz, hogy észleljen 50 ppm -nél magasabb értékeket. Próbáltam fokozatosan növelni a koncentrációt, méréseket végeztem, és diagramokat készítettem. Két sor 0 ppm -es vonal létezik - tiszta zöld a CO -expozíció előtt és sárga -zöld után. Úgy tűnik, hogy az érzékelő kissé megváltoztatja tiszta levegő ellenállását az expozíció után, de ez a hatás kicsi. Úgy tűnik, nem tudja egyértelműen megkülönböztetni a 8 és 15, 15 és 26, 26 és 45 ppm koncentrációkat-de a tendencia nagyon világos, így meg tudja állapítani, hogy a koncentráció 0-20 vagy 40-60 ppm tartományban van-e. Nagyobb koncentrációk esetén a függőség sokkal jellegzetesebb - nyílt láng kipufogógázának kitéve a görbe a kezdetektől felfelé megy anélkül, hogy egyáltalán lefelé menne, és a dinamikája teljesen más. Tehát nagy koncentrációk esetén kétségtelen, hogy megbízhatóan működik, bár nem tudom megerősíteni a pontosságát, mivel nincs névleges CO -mérőm. Ez a kísérletsorozat 20k terhelésellenállással történt - és ezt követően úgy döntöttem hogy 10k -t ajánljon alapértelmezett értéknek, így érzékenyebbnek kell lennie. Ennyi. Ha rendelkezik megbízható CO -mérővel, és összeszereli ezt a táblát, kérjük, ossza meg velünk a szenzorok pontosságával kapcsolatos visszajelzéseit - nagyszerű lenne statisztikákat gyűjteni a különböző érzékelőkről, és javítani a vázlat alapértelmezett feltételezésein.

Ajánlott: