Sisällysluettelo:

Arduino CO -monitori MQ-7-anturin avulla: 8 vaihetta (kuvien kanssa)
Arduino CO -monitori MQ-7-anturin avulla: 8 vaihetta (kuvien kanssa)

Video: Arduino CO -monitori MQ-7-anturin avulla: 8 vaihetta (kuvien kanssa)

Video: Arduino CO -monitori MQ-7-anturin avulla: 8 vaihetta (kuvien kanssa)
Video: how to make CO Detector with mq-7 and Arduino (mq-7 sensor Arduino) 2024, Heinäkuu
Anonim
Arduino CO -monitori käyttäen MQ-7-anturia
Arduino CO -monitori käyttäen MQ-7-anturia
Arduino CO -monitori MQ-7-anturin avulla
Arduino CO -monitori MQ-7-anturin avulla

Muutama sana, miksi tämä opettavainen keksittiin: eräänä päivänä tyttöystäväni äiti soitti meille keskellä yötä, koska hänestä tuntui todella pahalta - hänellä oli huimausta, takykardiaa, pahoinvointia, korkea verenpaine, hän jopa pyörtyi tuntemattomana aikana (luultavasti ~ 5 minuuttia, mutta sitä ei voi kertoa), kaikki ilman ilmeistä syytä. Hän asuu pienessä kylässä kaukana sairaaloista (60 km paikastamme, 30 km lähimpään sairaalaan, 10 km ilman normaalia tietä välissä), joten ryntäsimme hänen luokseen ja saavuimme pian ambulanssin jälkeen. Hän joutui sairaalaan ja aamulla hän tunsi olonsa melkein hyväksi, mutta lääkärit eivät kyenneet löytämään sen syytä. Seuraavana päivänä meillä oli idea: se olisi voinut olla CO-myrkytys, koska hänellä on kaasuvesi-kattila (kuvassa) ja hän istui lähellä sitä koko illan, kun se tapahtui. mutta minulla ei koskaan ollut aikaa koota kaavioita siitä, joten tämä oli täydellinen aika tehdä niin. Kun olin tunnin etsinyt ohjeita Internetistä, huomasin, että en löydä opasta, joka samalla noudattaisi anturin valmistajan ohjeita, jotka on annettu sen lomakkeessa ja selittäisi mitään (yhdessä esimerkissä näytti olevan varsin hyvä koodi, mutta ei ollut selvää, miten sitä sovellettaisiin, toiset olivat yksinkertaistettuja eivätkä toimineet hyvin). Joten käytimme noin 12 tuntia kaavioiden kehittämiseen, 3D -kotelon tekemiseen ja tulostamiseen, anturin testaamiseen ja kalibrointiin, ja seuraavana päivänä menimme epäilyttävään kattilaan. Kävi ilmi, että hiilidioksidipitoisuudet olivat erittäin korkeat ja voivat olla kohtalokkaita, jos CO -altistumisaika olisi pidempi. Joten uskon, että jokaisen, jolla on samanlainen tilanne (kuten kaasukattila tai muu asuinhuoneessa tapahtuva palaminen), pitäisi hankkia tällainen anturi estääkseen jotain pahaa tapahtuvan.

Kaikki mitä tapahtui kaksi viikkoa sitten, sen jälkeen olen parantanut kaavioita ja ohjelmaa melko paljon, ja nyt se näyttää olevan kohtuullisen hyvä ja suhteellisen yksinkertainen (ei 3-rivinen koodin yksinkertainen, mutta silti). Vaikka toivon, että joku, jolla on tarkka CO -mittari, antaa minulle palautetta luonnokseen tekemästäni oletuskalibroinnista - epäilen, että se on kaukana hyvästä. Tässä on täydellinen opas kokeellisilla tiedoilla.

Vaihe 1: Materiaaliluettelo

Materiaaliluettelo
Materiaaliluettelo

Tarvitset: 0. Arduino -levy. Pidän parempana kiinalaista Arduino Nanon kloonia sen erinomaisesta 3 dollarin hinnasta, mutta mikä tahansa 8-bittinen arduino toimii täällä. Sketch käyttää joitakin kehittyneitä ajastimia, ja sitä testattiin vain atmega328 -mikrokontrollerilla - vaikka luultavasti se toimii hyvin myös muilla. MQ-7 CO-anturi. Yleisimmin saatavana tämän Flying Fish -anturimoduulin kanssa, sen on suoritettava pieni muutos, yksityiskohdat seuraavassa vaiheessa, tai voit käyttää erillistä MQ-7-anturia.

2. NPN -kaksisuuntainen transistori. Lähes mikä tahansa NPN -transistori, joka pystyy käsittelemään 300 mA tai enemmän, toimii täällä. PNP-transistori ei toimi mainitun Flying Fish -moduulin kanssa (koska siinä on lämmittimen nasta juotettuna anturin lähtöön), mutta sitä voidaan käyttää erillisen MQ-7-anturin kanssa.

3. Vastukset: 2 x 1k (0,5k - 1,2k toimii hyvin) ja 1x10k (tämä on paras pitää tarkana - vaikka jos sinun on ehdottomasti käytettävä eri arvoa, säädä luonnos reference_resistor_kOhm muuttuja vastaavasti).

4. Kondensaattorit: 2 x 10uF tai enemmän. Tarvitaan tantaali- tai keraamisia, elektrolyytti ei toimi hyvin korkean ESR-arvon vuoksi (ne eivät pysty tarjoamaan tarpeeksi virtaa tasaamaan suurvirtaista aaltoa). Vihreät ja punaiset LEDit osoittavat nykyisen CO-tason (voit myös käyttää yhtä kaksiväristä LED-valoa, jossa on 3 liitintä, kuten käytimme keltaisen laatikon prototyyppiämme). Pietsosummeri osoittaa korkeaa CO -tasoa 7. Leipälauta ja johdot (voit myös juottaa kaiken Nano -nastoihin tai puristaa Uno -pistorasioihin, mutta virhe on helppo tehdä tällä tavalla).

Vaihe 2: Moduulin muuttaminen tai erillisen anturin johdotus

Moduulin muutos tai erillinen anturijohdotus
Moduulin muutos tai erillinen anturijohdotus

Moduulia varten sinun on irrotettava vastus ja kondensaattori kuvan osoittamalla tavalla. Voit halutessasi purkaa pohjimmiltaan kaiken - moduulielektroniikka on täysin hyödytöntä, käytämme sitä vain itse anturin pidikkeenä, mutta nämä kaksi komponenttia estävät sinua saamasta oikeita lukemia, Jos käytät erillistä anturia, kiinnitä lämmittimen tapit (H1 ja H2) 5 V: iin ja transistorin kollektoriin vastaavasti. Kiinnitä yksi tunnistinpuoli (mikä tahansa A -nastoista) 5 V: iin, toinen tunnistuspuoli (mikä tahansa B -nastoista) 10 k: n vastukseen, aivan kuten kaavion moduulin analoginen tappi.

Vaihe 3: Toimintaperiaate

Toimintaperiaate
Toimintaperiaate
Toimintaperiaate
Toimintaperiaate

Miksi tarvitsemme kaikkia näitä komplikaatioita ollenkaan, miksi emme liitä 5 V: n maadoitusta ja vain saada lukemia? Valitettavasti et saa mitään hyödyllistä tällä tavalla, valitettavasti. ja alhaiset lämmitysjaksot oikean mittauksen saamiseksi. Alhaisen lämpötilan vaiheessa hiilidioksidi absorboituu levylle ja tuottaa merkityksellistä tietoa. Korkean lämpötilan vaiheessa absorboitu CO ja muut yhdisteet haihtuvat anturilevystä puhdistamalla se seuraavaa mittausta varten.

Joten toiminta on yleensä yksinkertaista:

1. Käytä 5 V 60 sekunnin ajan, älä käytä näitä lukemia CO -mittaukseen.

2. Käytä 1,4 V jännitettä 90 sekunnin ajan, käytä näitä lukemia CO -mittaukseen.

3. Siirry vaiheeseen 1.

Mutta tässä on ongelma: Arduino ei pysty tarjoamaan tarpeeksi virtaa tämän anturin käyttämiseksi sen nastoista - anturin lämmitin vaatii 150 mA, kun taas Arduino -nasta voi tarjota enintään 40 mA, joten jos se on kiinnitetty suoraan, Arduino -nasta palaa ja anturi voittaa silti ei toimi. Joten meidän on käytettävä jonkinlaista virtavahvistinta, joka ottaa pienen tulovirran ohjaamaan suurta lähtövirtaa. Toinen ongelma on saada 1,4 V. Ainoa tapa saada tämä arvo luotettavasti ottamatta käyttöön paljon analogisia komponentteja on käyttää PWM (Pulse Width Modulation) -lähestymistapaa ja takaisinkytkentää, joka ohjaa lähtöjännitettä.

NPN-transistori ratkaisee molemmat ongelmat: kun se kytketään jatkuvasti päälle, anturin jännite on 5 V ja se lämmittää korkean lämpötilan vaiheeseen. Kun käytämme PWM: ää tuloonsa, virta sykkii, kondensaattori tasoittaa sitä ja keskimääräinen jännite pidetään vakiona. Jos käytämme korkeataajuista PWM: ää (luonnoksessa sen taajuus on 62,5 KHz) ja keskimäärin paljon analogisia lukemia (luonnoksessa keskimäärin yli ~ 1000 lukemaa), niin tulos on varsin luotettava.

On erittäin tärkeää lisätä kondensaattoreita kaavion mukaan. Tässä olevat kuvat havainnollistavat signaalin eroa C2 -kondensaattorilla ja ilman sitä: ilman sitä PWM -aaltoilu on selvästi näkyvissä ja se vääristää lukemia merkittävästi.

Vaihe 4: Kaaviot ja Breadboard

Kaaviot ja Breadboard
Kaaviot ja Breadboard
Kaaviot ja Breadboard
Kaaviot ja Breadboard
Kaaviot ja Breadboard
Kaaviot ja Breadboard

Tässä on kaaviot ja leipälautakokoonpano.

VAROITUS! Vakiomurtomoduulin muuttaminen on välttämätöntä! Ilman muutoksia moduuli on hyödytön. Muutos on kuvattu toisessa vaiheessa

On tärkeää käyttää nastoja D9 ja D10 LED -valoissa, koska meillä on laitteisto Timer1 -lähdöt, joten niiden värit voidaan vaihtaa sujuvasti. Nastaja D5 ja D6 käytetään summerissa, koska D5 ja D6 ovat laitteiston Timer0 lähtöä. Määritämme ne kääntämään toisiaan, joten ne vaihtavat (5V, 0V) ja (0V, 5V) tilojen välillä, jolloin ääni kuuluu summerissa. Varoitus: tämä vaikuttaa Arduinon tärkeimpään ajoituksen keskeytykseen, joten kaikki ajasta riippuvat toiminnot (kuten millis ()) eivät tuota oikeita tuloksia tässä luonnoksessa (lisää tästä myöhemmin). D11 - mutta langan kiinnittäminen D11: een on helpompaa kuin D3: n) - joten käytämme sitä PWM: n tarjoamiseen jännitteenohjaustransistorille. Vastusta R1 käytetään LEDien kirkkauden säätämiseen. Se voi olla missä tahansa 300-3000 ohmia, 1k on melko optimaalinen kirkkauden/virrankulutuksen suhteen. Vastusta R2 käytetään transistorin kantavirran rajoittamiseen. Sen ei pitäisi olla alle 300 ohmia (jotta Arduino -nasta ei ylikuormitu) ja enintään 1500 ohmia. 1k on turvallinen valinta.

Vastusta R3 käytetään sarjassa anturilevyn kanssa jännitteenjakajan luomiseksi. Jännite anturin lähdössä on yhtä suuri kuin R3 / (R3 + Rs) * 5V, missä Rs on anturin nykyinen vastus. Anturin vastus riippuu hiilidioksidipitoisuudesta, joten jännite muuttuu vastaavasti. Kondensaattoria C1 käytetään tasoittamaan PWM -tulojännitettä MQ -7 -anturissa, mitä suurempi sen kapasitanssi, sitä parempi, mutta myös sen on oltava alhainen ESR - joten keraaminen (tai tantaali) kondensaattori on tässä parempi, elektrolyytti ei toimi hyvin.

Kondensaattoria C2 käytetään anturin analogisen lähdön tasoittamiseen (lähtöjännite riippuu tulojännitteestä - ja meillä on täällä melko korkea PWM, joka vaikuttaa kaikkiin kaavioihin, joten tarvitsemme C2). Yksinkertaisin ratkaisu on käyttää samaa kondensaattoria kuin C1. NPN -transistori joko johtaa virtaa koko ajan korkean virran tuottamiseksi anturin lämmittimessä tai toimii PWM -tilassa, mikä vähentää lämmitysvirtaa.

Vaihe 5: Arduino -ohjelma

Arduino -ohjelma
Arduino -ohjelma

VAROITUS: ANTURI VAATII MANUAALISEN KALIBROINNIN KOSKAAN KÄYTÄNNÖLLISEEN KÄYTTÖÖN. ILMOITTAMATTA KALIBROINTIA, TIETOISEN ANTURIN PARAMETRISTÄ RIIPPUMALLA, TÄMÄ LUONNE SYYTÄÄ HÄLYTYKSEN PUHDASTA ILMAA TAI EI HAVAISTA LETAL -HIILIMONOKSIDIPITOISUUTTA

Kalibrointi kuvataan seuraavissa vaiheissa. Karkea kalibrointi on hyvin yksinkertaista, tarkka on melko monimutkaista.

Yleisellä tasolla ohjelma on melko yksinkertainen:

Ensin kalibroimme PWM -laitteemme tuottaaksemme vakaata 1,4 V: n anturia (oikea PWM -leveys riippuu monista parametreista, kuten tarkat vastusarvot, tämän anturin vastus, transistorin VA -käyrä jne. Jne. - paras tapa on kokeilla erilaisia arvoja ja käytä sitä, joka sopii parhaiten). Sitten käymme jatkuvasti läpi 60 sekunnin lämmitysjakson ja 90 sekunnin mittauksen. Meidän on käytettävä laitteistoajastimia, koska kaikki mitä meillä on täällä, tarvitsee korkeataajuista vakaata PWM: ää toimiakseen oikein. Koodi on liitetty tähän ja sen voi ladata githubistamme, sekä kaavion lähde Fritzingissä. 3 toimintoa, jotka käsittelevät ajastimia: setTimer0PWM, setTimer1PWM, setTimer2PWM Kukin asettaa ajastimen PWM -tilassa annetuilla parametreilla (kommentoi koodia) ja asettaa pulssileveyden syöttöarvojen mukaan. hoitaa kaiken sisällä. ja aseta oikeat ajastinarvot 5V: n ja 1,4V: n lämmityksen välillä vaihtamiseen.

Summerin tilaa ohjataan toiminnoilla buzz_on, buzz_off, buzz_beep. Päälle/pois -toiminnot kytkevät äänen päälle ja pois päältä, piip -toiminto tuottaa erityisen piippausjakson 1,5 sekunnin jaksolla, jos sitä kutsutaan säännöllisesti (tämä toiminto palaa välittömästi, jotta se ei keskeytä pääohjelmaa - mutta sinun on kutsuttava se uudelleen ja uudelleen piippauskuvion tuottamiseksi).

Ohjelma suorittaa ensin toiminnon pwm_adjust, joka selvittää oikean PWM -syklin leveyden, jotta mittausvaiheen aikana saavutetaan 1,4 V. Sitten se piippaa muutaman kerran ilmaistakseen, että anturi on valmis, siirtyy mittausvaiheeseen ja käynnistää pääsilmukan.

Pääsilmukassa ohjelma tarkistaa, käytimmekö tarpeeksi aikaa nykyisessä vaiheessa (90 sekuntia mittausvaiheessa, 60 sekuntia lämmitysvaiheessa) ja jos kyllä, muuttaa sitten nykyistä vaihetta. Lisäksi se päivittää jatkuvasti anturin lukemia käyttämällä eksponentiaalista tasoitusta: new_value = 0.999*old_value + 0.001*new_reading. Tällaisilla parametreilla ja mittausjaksolla se keskimäärin lähettää signaalin noin viimeisen 300 millisekunnin aikana VAROITUS: ANTURI VAATII MANUAALISEN KALIBROINNIN KOSKAAN KÄYTÄNNÖLLISEEN KÄYTTÖÖN. ILMOITTAMATTA KALIBROINTIA, TIETOISEN ANTURIN PARAMETRISTÄ RIIPPUMALLA, TÄMÄ LUONNETTAVUUS KYTKEÄ HÄLYTYKSEN PUHDASSA ILMASSA TAI EI HAVAISTA LETAL -HIILIMONOKSIDIPITOISUUTTA.

Vaihe 6: Ensimmäinen ajo: Mitä odottaa

Ensimmäinen ajo: Mitä odottaa
Ensimmäinen ajo: Mitä odottaa

Jos olet koonnut kaiken oikein, luonnoksen suorittamisen jälkeen näet Serial -näytössä jotain tällaista:

säätö PWM w = 0, V = 4,93

PWM -säätö w = 17, V = 3,57 PWM -tulos: leveys 17, jännite 3,57

ja sitten numerosarja, joka edustaa anturin nykyisiä lukemia. Tämä osa säätää PWM -leveyttä, jotta anturin lämmittimen jännite saadaan mahdollisimman lähelle 1,4 V, mitattu jännite vähennetään 5 V: sta, joten ihanteellinen mittausarvo on 3,6 V. Jos tämä prosessi ei koskaan pääty tai pääty yhden vaiheen jälkeen (jolloin leveys on 0 tai 254) - jotain on pielessä. Tarkista, onko transistorisi todella NPN ja että se on liitetty oikein (varmista, että käytit kantaa, keräintä, emitterinappeja oikein - pohja menee D3: een, keräin MQ -7: een ja lähetin maahan, älä luota Fritzing -paneelinäkymään - se on väärin joillekin transistoreille) ja varmista, että olet liittänyt anturin tulon Arduinon A1 -tuloon. Lämmitys- ja mittausjaksot, joiden pituus on 60 ja 90 sekuntia, suoritetaan peräkkäin, ja CO ppm mitataan ja päivitetään jokaisen jakson lopussa. Voit ottaa avotulen lähelle anturia, kun mittausjakso on melkein valmis, ja katso, miten se vaikuttaa lukemiin (liekin tyypistä riippuen se voi tuottaa jopa 2000 ppm CO -pitoisuutta ulkona - joten vaikka vain pieni osa se itse asiassa menee anturiin, se silti kytkee hälytyksen päälle eikä sammu vasta seuraavan syklin lopussa). Näytin sen kuvassa sekä sytyttimen tulipalon.

Vaihe 7: Anturin kalibrointi

Anturin kalibrointi
Anturin kalibrointi
Anturin kalibrointi
Anturin kalibrointi

Valmistajan tuoteselosteen mukaan anturin pitäisi käydä lämmitys-jäähdytysjaksoja 48 tuntia peräkkäin, ennen kuin se voidaan kalibroida. Ja sinun pitäisi tehdä se, jos aiot käyttää sitä pitkään: minun tapauksessani anturin lukema puhtaassa ilmassa muuttui noin 30% 10 tunnin aikana. Jos et ota tätä huomioon, voit saada 0 ppm: n tuloksen, jossa hiilidioksidia on itse asiassa 100 ppm. Jos et halua odottaa 48 tuntia, voit seurata anturin lähtöä mittausjakson lopussa. Yli tunnin kuluttua se ei muutu enempää kuin 1-2 pistettä - voit lopettaa lämmityksen siellä.

Karkea kalibrointi:

Kun olet käyttänyt luonnosta vähintään 10 tuntia puhtaassa ilmassa, ota raaka-anturin arvo mittausjakson lopussa, 2-3 sekuntia ennen lämmitysvaiheen alkua, ja kirjoita se sensor_reading_clean_air -muuttujaan (rivi 100). Se siitä. Ohjelma arvioi muut anturiparametrit, ne eivät ole tarkkoja, mutta niiden pitäisi riittää erottamaan 10 ja 100 ppm pitoisuus.

Tarkka kalibrointi:

Suosittelen lämpimästi etsimään kalibroitua hiilidioksidimittaria, ottamaan 100 ppm CO -näyte (tämä voidaan tehdä ottamalla savukaasua ruiskuun - CO -pitoisuus voi helposti olla useita tuhansia ppm) ja laittamalla se hitaasti suljettuun astiaan kalibroitu mittari ja MQ-7-anturi), ota raaka-anturin lukema tällä pitoisuudella ja aseta se sensor_reading_100_ppm_CO-muuttujaan. Ilman tätä vaihetta ppm -mittauksesi voi olla väärä useita kertoja kumpaankin suuntaan (silti ok, jos tarvitset hälytyksen vaarallisesta CO -pitoisuudesta kotona, missä normaalisti ei pitäisi olla lainkaan hiilidioksidia, mutta ei hyvä mihinkään teolliseen käyttöön).

Koska minulla ei ollut CO -mittaria, käytin kehittyneempää lähestymistapaa. Valmistin ensin suuren CO -pitoisuuden käyttämällä palamista eristetyssä tilavuudessa (ensimmäinen kuva). Tässä artikkelissa löysin hyödyllisimmät tiedot, mukaan lukien CO -saanto eri liekityypeille - se ei ole kuvassa, mutta viimeisessä kokeessa käytettiin propaanikaasun polttamista samalla kokoonpanolla, jolloin CO -pitoisuus oli ~ 5000 ppm. Sitten se laimennettiin 1:50 100 ppm: n saavuttamiseksi, kuten toisessa kuvassa on esitetty, ja sitä käytettiin anturin vertailupisteen määrittämiseen.

Vaihe 8: Jotkut kokeelliset tiedot

Jotkut kokeelliset tiedot
Jotkut kokeelliset tiedot

Minun tapauksessani anturi toimi varsin hyvin - se ei ole kovin herkkä todella pienille pitoisuuksille, mutta tarpeeksi hyvä havaitsemaan mitään yli 50 sivua minuutissa. Yritin lisätä keskittymistä vähitellen mittaamalla ja rakensin joukon kaavioita. On kaksi sarjaa 0 ppm: n viivoja - puhdas vihreä ennen CO -altistusta ja keltainen vihreä sen jälkeen. Anturi näyttää hieman muuttavan puhtaan ilman vastustaan altistuksen jälkeen, mutta tämä vaikutus on pieni. Se ei näytä pystyvän selvästi erottamaan pitoisuuksia 8 ja 15, 15 ja 26, 26 ja 45 ppm-mutta suuntaus on hyvin selvä, joten se voi kertoa, onko pitoisuus 0-20 vai 40-60 ppm. Korkeammilla pitoisuuksilla riippuvuus on paljon selkeämpi - altistettuna avotulen pakokaasulle käyrä nousee alusta alkaen ilman, että se laskee ollenkaan, ja sen dynamiikka on täysin erilainen. Joten korkeilla pitoisuuksilla ei ole epäilystäkään siitä, että se toimii luotettavasti, vaikka en voi vahvistaa sen tarkkuutta, koska minulla ei ole mitoitettua CO -mittaria. suositellaksesi 10k oletusarvoksi, sen pitäisi olla herkempi tällä tavalla. Jos sinulla on luotettava CO -mittari ja olet koonnut tämän levyn, jaa palautetta anturin tarkkuudesta - olisi hienoa kerätä tilastoja eri antureista ja parantaa luonnosoletuksia.

Suositeltava: