INHOUDSOPGAWE:

Arduino CO-monitor met behulp van MQ-7-sensor: 8 stappe (met foto's)
Arduino CO-monitor met behulp van MQ-7-sensor: 8 stappe (met foto's)

Video: Arduino CO-monitor met behulp van MQ-7-sensor: 8 stappe (met foto's)

Video: Arduino CO-monitor met behulp van MQ-7-sensor: 8 stappe (met foto's)
Video: Как использовать оптопару Mosfet HW-532 для управления скоростью двигателя постоянного тока до 30 В или нагрузкой с помощью Arduino 2024, Julie
Anonim
Arduino CO-monitor met behulp van MQ-7-sensor
Arduino CO-monitor met behulp van MQ-7-sensor
Arduino CO-monitor met behulp van MQ-7-sensor
Arduino CO-monitor met behulp van MQ-7-sensor

'N Paar woorde waarom hierdie instruksies geskep is: eendag bel die ma van my vriendin ons in die middel van die nag omdat sy regtig siek was - sy het duiseligheid, tagikardie, naarheid, hoë bloeddruk gehad, sy het selfs flou geval vir onbekende tyd (waarskynlik ~ 5 minute, maar daar is geen manier om dit te vertel nie), alles sonder 'n duidelike rede. Sy woon in 'n klein dorpie ver van die hospitale af (60 km van ons af, 30 km van die naaste hospitaal, 10 km sonder 'n normale pad tussenin), so ons het na haar gehaas en kort ná die ambulans daar aangekom. Sy is in die hospitaal opgeneem en die oggend het sy amper goed gevoel, maar dokters kon nie die oorsaak daarvan vind nie. Die volgende dag het ons 'n idee gehad: dit kon CO-vergiftiging gewees het, aangesien sy 'n gas-waterkoker het (op die foto) en die hele aand daar naby gesit het toe dit gebeur het. Ons het onlangs 'n MQ-7 CO-sensor gekoop, maar ek het nooit tyd gehad om 'n skema daarvoor op te stel nie, so dit was die perfekte tyd om dit te doen. Na 'n uur se soek na instruksies op die internet, het ek besef dat ek geen gids kan vind wat terselfdertyd die instruksies van die sensorvervaardiger in die datablad volg nie en enigiets verduidelik (een voorbeeld het blykbaar 'n goeie kode, maar was nie duidelik hoe om dit toe te pas nie, ander was te eenvoudig en werk nie goed nie). Ons het dus ongeveer 12 uur bestee aan die ontwikkeling van skemas, die maak en druk van 3D -kaste, die toetsing en kalibrering van die sensor, en die volgende dag is ons na die verdagte ketel. Dit blyk dat die CO -vlakke baie hoog is en dodelik kan wees as die blootstellingstyd langer is. Ek glo dus dat almal wat 'n soortgelyke situasie het (soos 'n gasketel of 'n ander verbranding in 'n leefruimte) so 'n sensor moet kry om te voorkom dat iets erg gebeur.

Dit alles het twee weke gelede gebeur, sedertdien het ek die skemas en programme baie verbeter, en dit lyk nou redelik goed en relatief eenvoudig (nie eenvoudig met 3 reëls nie, maar tog). Alhoewel ek hoop dat iemand met 'n presiese CO -meter my terugvoer sal gee oor die standaardkalibrasie wat ek in die skets geplaas het - vermoed ek dat dit ver van goed is. Hier is 'n volledige gids met 'n paar eksperimentele data.

Stap 1: Staatsbrief

Staatsbrief
Staatsbrief

U benodig: 0. Arduino bord. Ek verkies die Chinese kloon van Arduino Nano vir die uitstekende prys van $ 3, maar enige 8-bis arduino werk hier. Sketch gebruik 'n paar gevorderde tydtellers, en is slegs op atmega328 mikrobeheerder getoets - alhoewel dit waarskynlik ook op ander sal werk. MQ-7 CO sensor. Dit is die algemeenste beskikbaar met hierdie Flying Fish-sensormodule, maar dit moet in die volgende stap deur 'n klein aanpassing gegaan word, of u kan 'n aparte MQ-7-sensor gebruik.

2. NPN bipolêre transistor. Feitlik enige NPN -transistor wat 300 mA of meer kan hanteer, sal hier werk. PNP-transistor werk nie met 'n genoemde Flying Fish-module nie (omdat dit 'n verwarmerpen aan die sensor se uitset gesoldeer het), maar kan gebruik word met 'n diskrete MQ-7-sensor.

3. Weerstande: 2 x 1k (van 0,5k tot 1,2k sal goed werk) en 1 x 10k (die een word die beste presies gehou - alhoewel u die veranderlike reference_resistor_kOhm in die skets dienooreenkomstig moet aanpas).

4. Kondensators: 2 x 10uF of meer. Tantaal of keramiek word benodig, elektrolities werk nie goed nie as gevolg van hoë ESR (dit sal nie genoeg stroom kan verskaf om hoë stroom rimpel glad te maak nie).5. Groen en rooi LED's om die huidige CO-vlak aan te dui (u kan ook 'n enkele dubbelkleurige LED met 3 terminale gebruik, soos ons in ons geel boks-prototipe gebruik het).6. Piezo -zoemer om 'n hoë CO -vlak aan te dui. Broodbord en drade (u kan ook alles aan Nano -penne soldeer of in Uno -voetstukke druk, maar dit is maklik om 'n fout te maak).

Stap 2: Moduleverandering of diskrete sensorbedrading

Modulverandering of diskrete sensorbedrading
Modulverandering of diskrete sensorbedrading

Vir die module moet u die weerstand en die kondensator losmaak, soos op die foto getoon. U kan alles basies desolder as u wil - module -elektronika is heeltemal nutteloos; ons gebruik dit slegs as houer vir die sensor self, maar hierdie twee komponente sal u verhinder om die korrekte metings te kry, As u 'n diskrete sensor gebruik, heg die verwarmerpenne (H1 en H2) aan die 5V en die transistor se kollektor dienooreenkomstig. Heg een aanvoerkant (enige van die A -penne) aan 5V, 'n ander aanvoerkant (enige van B -penne) aan die weerstand van 10k, net soos die analoog pen van die module in skemas.

Stap 3: Beginsel van werking

Werkingsbeginsel
Werkingsbeginsel
Werkingsbeginsel
Werkingsbeginsel

Waarom het ons al hierdie komplikasies nodig, hoekom moet u nie 5V, grond aanheg en net lesings kry nie? Ongelukkig kry u niks nuttigs op hierdie manier nie. Volgens MQ-7-datablad moet sensor deur hoë- en lae-verhitting siklusse om behoorlike metings te kry. Tydens lae temperatuurfase word CO op die plaat geabsorbeer, wat betekenisvolle data oplewer. Tydens hoë temperatuurfase verdamp geabsorbeerde CO en ander verbindings uit die sensorplaat en maak dit skoon vir die volgende meting.

In die algemeen is die werking eenvoudig:

1. Pas 5V vir 60 sekondes toe. Moenie hierdie metings gebruik vir CO -meting nie.

2. Pas 1.4V toe vir 90 sekondes, gebruik hierdie metings vir CO meting.

3. Gaan na stap 1.

Maar hier is die probleem: Arduino kan nie genoeg krag verskaf om hierdie sensor uit sy penne te laat loop nie - die verwarmer van die sensor benodig 150 mA, terwyl die Arduino -pen nie meer as 40 mA kan lewer nie, so as dit direk aangeheg word, brand die Arduino -pen en sal die sensor steeds wen werk nie. Ons moet dus 'n soort stroomversterker gebruik wat klein insetstroom benodig om die groot uitsetstroom te beheer. 'N Ander probleem is om 1.4V te kry. Die enigste manier om hierdie waarde betroubaar te kry sonder om baie analoog komponente bekend te stel, is deur die PWM (Pulse Width Modulation) benadering te gebruik met terugvoer wat die uitsetspanning beheer.

NPN-transistor los beide probleme op: as dit voortdurend aangeskakel word, is die spanning oor die sensor 5V en word dit verhit vir 'n hoë temperatuur fase. As ons PWM op sy insette toepas, pols die stroom, dan word dit deur die kapasitor glad gemaak en word die gemiddelde spanning konstant gehou. As ons PWM met hoë frekwensie gebruik (in die skets het dit 'n frekwensie van 62,5 KHz) en gemiddeld baie analoogmetings (in die skets is ons gemiddeld meer as ~ 1000 lesings), dan is die resultaat redelik betroubaar.

Dit is van kritieke belang om kapasitors volgens skemas by te voeg. Beelde hier illustreer die verskil in sein met en sonder C2 -kondensator: daarsonder is die PWM -rimpel duidelik sigbaar en dit verdraai die lesings aansienlik.

Stap 4: Skema's en broodbord

Skema's en broodbord
Skema's en broodbord
Skema's en broodbord
Skema's en broodbord
Skema's en broodbord
Skema's en broodbord

Hier is die skema- en broodbord -samestelling.

WAARSKUWING! Verandering van 'n standaard uitbreekmodule is nodig! Sonder wysiging module is nutteloos. Wysiging word in die tweede stap beskryf

Dit is belangrik om penne D9 en D10 vir LED's te gebruik, want daar is uitsette van die hardeware -timer 1, wat dit moontlik maak om hul kleure glad te verander. Spelde D5 en D6 word vir 'n zoemer gebruik, want D5 en D6 is uitsette van hardeware -timer 0. Ons sal hulle so instel dat hulle onderstebo omgekeerd is, sodat hulle sal wissel tussen (5V, 0V) en (0V, 5V) toestande en sodoende klank op die gonser produseer. Waarskuwing: dit beïnvloed die belangrikste tydsonderbreking van Arduino, sodat alle tydsafhanklike funksies (soos millis ()) nie die korrekte resultate in hierdie skets sal lewer nie (meer hieroor later). Pin D3 het hardeware Timer2-uitset daaraan gekoppel (sowel as D11 - maar dit is minder gerieflik om draad op D11 te sit as op D3) - daarom gebruik ons dit om PWM te voorsien vir die beheer van die transistor. Weerstand R1 word gebruik om die helderheid van LED's te beheer. Dit kan van 300 tot 3000 ohm wees, 1k is redelik optimaal in helderheid/kragverbruik. Weerstand R2 word gebruik om die transistor se basisstroom te beperk. Dit moet nie laer as 300 ohm wees nie (om die Arduino -pen nie te oorlaai nie) en nie hoër as 1500 ohm nie. 1k is daar 'n veilige keuse.

Weerstand R3 word in serie met sensorplaat gebruik om 'n spanningsverdeler te skep. Spanning op sensor se uitset is gelyk aan R3 / (R3 + Rs) * 5V, waar Rs die weerstand van die huidige sensor is. Sensorweerstand hang af van die CO -konsentrasie, dus verander die spanning dienooreenkomstig. Kondensator C1 word gebruik om die PWM -spanning op die MQ -7 -sensor glad te maak, hoe hoër die kapasitansie, hoe beter, maar dit moet ook 'n lae ESR hê - dus keramiek (of tantaal) kondensator word hier verkies, elektrolitiese werk nie goed nie.

Kondensator C2 word gebruik om die analoog uitset van die sensor glad te maak (uitgangsspanning hang af van die ingangsspanning - en ons het 'n redelik hoë PWM hier, wat alle skemas beïnvloed, dus ons benodig C2). Die eenvoudigste oplossing is om dieselfde kondensator as C1. NPN -transistor te gebruik, óf die hele tyd gelei om 'n hoë stroom op die sensor se verwarmer te lewer, óf werk in die PWM -modus om sodoende die verwarmingsstroom te verminder.

Stap 5: Arduino -program

Arduino -program
Arduino -program

WAARSKUWING: SENSOR VEREIST HANDLEIDING KALIBRASIE VIR ENIGE PRAKTIESE GEBRUIK. SONDER KALIBRASIE, AFHANKLIK VAN PARAMETERS VAN U BESONDERE SENSOR, KAN HIERDIE SKETS ALARM IN SKOON LUG AAN SKAKEL OF NIE LETHAL -Koolstofmonoksied -konsentrasie opspoor nie

Kalibrasie word in die volgende stappe beskryf. Die ruwe kalibrasie is baie eenvoudig, presies is redelik kompleks.

Op die algemene vlak is die program redelik eenvoudig:

Eerstens kalibreer ons ons PWM om 'n stabiele 1.4V te produseer wat deur die sensor benodig word (die regte PWM -breedte hang af van baie parameters, soos presiese weerstandswaardes, die weerstand van hierdie spesifieke sensor, die transistor se VA -kromme, ens.). Die beste manier is om verskillende waardes te probeer en gebruik een wat die beste pas). Daarna loop ons voortdurend deur 'n siklus van 60 sekondes verhitting en meting van 90 sekondes. Ons moet hardeware-tydtellers gebruik, want alles wat ons hier het, benodig 'n hoëfrekwensie stabiele PWM om behoorlik te funksioneer. 3 funksies wat timers hanteer: setTimer0PWM, setTimer1PWM, setTimer2PWM. Elke van hulle stel die timer in die PWM -modus met gegewe parameters (word in die kode opgemerk), en stel die pulswydte volgens die ingangswaardes in. hanteer alles binne. en stel die regte timerwaardes in vir die omskakeling tussen 5V en 1.4V verwarming. LED se toestand word bepaal deur funksie setLEDs wat groen en rooi helderheid op sy insette aanvaar (in lineêre 1-100 skaal) en dit omskakel in die ooreenstemmende timer instelling.

Gonserstoestand word beheer met behulp van funksies buzz_on, buzz_off, buzz_beep. Aan/af funksies skakel klank aan en uit, piepfunksie produseer 'n spesifieke piepvolgorde met 'n tydperk van 1,5 sekondes as dit gereeld gebel word (hierdie funksie keer onmiddellik terug sodat dit nie die hoofprogram onderbreek nie - maar u moet dit telkens bel om 'n pieppatroon te produseer).

Program werk eers funksie pwm_adjust, wat die regte PWM -sikluswydte vind om 1.4V tydens die metingsfase te bereik. Dan piep dit 'n paar keer om aan te dui dat die sensor gereed is, oorskakel na die meetfase en die hooflus begin.

In die hooflus kyk die program of ons genoeg tyd in die huidige fase deurgebring het (90 sekondes vir die metingsfase, 60 sekondes vir die verhittingsfase), en indien wel, verander die huidige fase. Dit werk ook voortdurend sensorlesings by met behulp van eksponensiële gladstryking: new_value = 0.999*old_value + 0.001*new_reading. Met sulke parameters en metingsiklus gee dit 'n gemiddelde sein oor ongeveer 300 millisekondes. SONDER KALIBRASIE, AFHANKLIK VAN PARAMETERS VAN U BESONDERE SENSOR, KAN HIERDIE SKETS ALARM IN SKOON LUG AAN SKAKEL OF NIE LETHAL -Koolstofmonoksied -konsentrasie opspoor nie.

Stap 6: Eerste lopie: wat om te verwag

Eerste lopie: wat om te verwag
Eerste lopie: wat om te verwag

As u alles behoorlik bymekaargemaak het, sal u na die skets iets soos hierdie in die seriële monitor sien:

verstelling van PWM w = 0, V = 4,93

verstelling van PWM w = 17, V = 3.57PWM resultaat: breedte 17, spanning 3.57

en dan 'n reeks getalle wat huidige sensorlesings voorstel. Hierdie deel is die aanpassing van die PWM -breedte om die verwarmingspanning van die sensor so na as 1,4V as moontlik te produseer, die gemete spanning word afgetrek van 5V, dus ons ideale meetwaarde is 3,6V. As hierdie proses nooit eindig of eindig na 'n enkele stap nie (wat lei tot 'n breedte gelyk aan 0 of 254) - dan is iets verkeerd. Kontroleer of u transistor regtig NPN is en korrek gekoppel is (maak seker dat u die basis, versamelaar, emitterpenne regs gebruik het - basis gaan na D3, kollektor na MQ -7 en emitter na grond, moenie reken op Fritzing -broodbordaansig nie - dit is verkeerd vir sommige transistors) en maak seker dat u die ingang van die sensor aan die Arduino se A1 -ingang gekoppel het. As alles in orde is, moet u in die Serial Plotter van Arduino IDE iets soortgelyk aan die prent sien. Verwarmings- en metingsiklusse van 60 en 90 sekondes lank loop een na die ander, met CO ppm gemeet en bygewerk aan die einde van elke siklus. U kan 'n oop vuur naby die sensor neem as die metingsiklus amper voltooi is en kyk hoe dit die metings sal beïnvloed (afhangende van die vlamtipe kan dit tot 2000 ppm CO -konsentrasie in die oop lug produseer - alhoewel slegs 'n klein gedeelte van die dit gaan eintlik in die sensor, dit sal steeds die alarm aanskakel, en dit sal eers aan die einde van die volgende siklus afgaan). Ek het dit op die beeld getoon, sowel as die reaksie op vuur van die aansteker.

Stap 7: Sensorkalibrasie

Sensor kalibrasie
Sensor kalibrasie
Sensor kalibrasie
Sensor kalibrasie

Volgens die datablad van die vervaardiger, moet die sensor 48 uur agtereenvolgens 'n verwarmings-afkoelsiklus uitvoer, voordat dit gekalibreer kan word. En u moet dit doen as u dit lank wil gebruik: in my geval het sensorlesing in skoon lug ongeveer 30% verander gedurende 10 uur. As u dit nie in ag neem nie, kan u 'n resultaat van 0 dpm kry, waar daar eintlik 100 dpm CO is. As u nie 48 uur wil wag nie, kan u die sensoruitset aan die einde van die metingsiklus monitor. As dit meer as 'n uur lank nie meer as 1-2 punte verander nie, kan u ophou verhit.

Ruwe kalibrasie:

Nadat u die skets vir ten minste 10 uur in skoon lug uitgevoer het, neem die rou sensorwaarde aan die einde van die metingsiklus, 2-3 sekondes voordat die verhittingsfase begin, en skryf dit in die veranderlike sensor_reading_clean_air (reël 100). Dis dit. Die program sal ander sensorparameters skat, maar dit sal nie presies wees nie, maar dit behoort genoeg te wees om tussen 10 en 100 ppm konsentrasie te onderskei.

Presiese kalibrasie:

Ek beveel sterk aan dat u 'n gekalibreerde CO -meter soek, 'n 100 ppm CO -monster maak (dit kan gedoen word deur 'n bietjie rookgas in die spuit te neem - die CO -konsentrasie kan maklik tussen 'n paar duisende ppm wees en dit stadig in 'n geslote pot gooi. gekalibreerde meter en MQ-7-sensor), neem rou sensorlesing by hierdie konsentrasie en plaas dit in sensor_reading_100_ppm_CO veranderlike. Sonder hierdie stap kan u ppm -meting verskeie kere in beide rigtings verkeerd wees (nog steeds goed as u 'n alarm benodig vir 'n gevaarlike CO -konsentrasie tuis, waar gewoonlik geen CO mag wees nie, maar nie goed is vir industriële toepassings nie).

Aangesien ek geen CO -meter gehad het nie, het ek 'n meer gesofistikeerde benadering gebruik. Eerstens berei ek 'n hoë konsentrasie CO voor met verbranding in geïsoleerde volume (eerste foto). In hierdie artikel het ek die nuttigste gegewens gevind, insluitend CO -opbrengs vir verskillende vlamtipes - dit is nie op die foto nie, maar die laaste eksperiment het propaangasverbranding gebruik, met dieselfde opstelling, wat lei tot ~ 5000 ppm CO -konsentrasie. Daarna is dit 1:50 verdun om 100 dpm te bereik, soos geïllustreer op die tweede foto, en word gebruik om die sensor se verwysingspunt te bepaal.

Stap 8: 'n Paar eksperimentele data

Enkele eksperimentele data
Enkele eksperimentele data

In my geval het die sensor redelik goed gewerk - dit is nie baie sensitief vir baie lae konsentrasies nie, maar goed genoeg om iets hoër as 50 ppm op te spoor. Ek het geleidelik probeer om die konsentrasie te verhoog, metings te doen en 'n stel grafieke opgestel. Daar is twee stelle 0ppm lyne - suiwer groen voor blootstelling aan CO en geelgroen daarna. Dit lyk asof die sensor sy weerstand teen skoon lug effens verander na blootstelling, maar hierdie effek is klein. Dit lyk nie asof dit duidelik kan onderskei tussen 8 en 15, 15 en 26, 26 en 45 ppm konsentrasies nie-maar die neiging is baie duidelik, sodat dit kan bepaal of die konsentrasie tussen 0-20 of 40-60 ppm is. Vir hoër konsentrasies is afhanklikheid baie meer kenmerkend - as die blootstelling aan 'n oop vlam blootgestel word, styg die kromme van die begin af sonder om af te neem, en die dinamika daarvan is heeltemal anders. Vir hoë konsentrasies bestaan daar dus geen twyfel dat dit betroubaar werk nie, alhoewel ek nie die presisie daarvan kan bevestig nie, aangesien ek nie 'n gegradeerde CO -meter het nie. Hierdie eksperimente is ook uitgevoer met behulp van 'n lasweerstand van 20k - en daarna het ek besluit om 10k as standaardwaarde aan te beveel, moet dit meer sensitief wees. As u 'n betroubare CO -meter het en hierdie bord saamgestel het, deel asseblief 'n paar terugvoer oor die presisie van die sensor - dit sal wonderlik wees om statistieke oor verskillende sensors te versamel en die standaard skets -aannames te verbeter.

Aanbeveel: