Satura rādītājs:

Arduino CO monitors, izmantojot MQ-7 sensoru: 8 soļi (ar attēliem)
Arduino CO monitors, izmantojot MQ-7 sensoru: 8 soļi (ar attēliem)

Video: Arduino CO monitors, izmantojot MQ-7 sensoru: 8 soļi (ar attēliem)

Video: Arduino CO monitors, izmantojot MQ-7 sensoru: 8 soļi (ar attēliem)
Video: Как использовать оптопару Mosfet HW-532 для управления скоростью двигателя постоянного тока до 30 В или нагрузкой с помощью Arduino 2024, Jūlijs
Anonim
Arduino CO monitors, izmantojot sensoru MQ-7
Arduino CO monitors, izmantojot sensoru MQ-7
Arduino CO monitors, izmantojot sensoru MQ-7
Arduino CO monitors, izmantojot sensoru MQ-7

Daži vārdi, kāpēc tika radīts šis pamācošais: kādu dienu manas draudzenes māte piezvanīja mums nakts vidū, jo jutās ļoti slikti - viņai bija reibonis, tahikardija, slikta dūša, paaugstināts asinsspiediens, viņa pat noģība nezināmu laiku (iespējams, ~ 5) minūtes, bet to nevar pateikt), turklāt bez redzama iemesla. Viņa dzīvo nelielā ciematiņā, tālu no slimnīcām (60 km no mūsu vietas, 30 km līdz tuvākajai slimnīcai, 10 km bez parastā ceļa pa vidu), tāpēc mēs steidzāmies pie viņas un drīz pēc ātrās palīdzības nokļuvām tur. Viņa tika hospitalizēta, un no rīta viņa jutās gandrīz labi, taču ārstiem neizdevās atrast cēloni. Nākamajā dienā mums bija ideja: tā varēja būt saindēšanās ar CO, jo viņai ir gāzes ūdens katls (fotoattēlā) un visu vakaru sēdēja tuvu tam, kad tas notika. Mēs nesen nopirkām MQ-7 CO sensoru, bet nekad nebija laika apkopot shēmas, tāpēc šis bija īstais laiks to darīt. Pēc stundas, meklējot instrukcijas internetā, es sapratu, ka nevaru atrast nevienu ceļvedi, kas vienlaikus ievērotu sensora ražotāja norādījumus, kas sniegti tā datu lapā, un vispār kaut ko izskaidrotu (vienā piemērā šķita diezgan labs kods, bet nebija skaidrs, kā to piemērot, citi bija pārāk vienkāršoti un nedarbosies labi). Tātad mēs pavadījām apmēram 12 stundas, lai izstrādātu shēmas, izgatavotu un izdrukātu 3D korpusu, pārbaudītu un kalibrētu sensoru, un nākamajā dienā devāmies uz aizdomīgo katlu. Izrādījās, ka CO līmenis tur bija ārkārtīgi augsts un var būt letāls, ja CO iedarbības laiks būtu garāks. Tāpēc es uzskatu, ka ikvienam, kam ir līdzīga situācija (piemēram, gāzes katls vai cita sadedzināšana dzīvojamās telpās), vajadzētu iegūt šādu sensoru, lai novērstu kaut ko sliktu.

Viss, kas notika pirms divām nedēļām, kopš tā laika es diezgan daudz uzlaboju shēmas un programmu, un tagad tas šķiet samērā labs un salīdzinoši vienkāršs (nevis vienkāršs 3 rindu kods, bet tomēr). Lai gan es ceru, ka kāds, kuram ir precīzs CO mērītājs, sniegs man dažas atsauksmes par noklusējuma kalibrēšanu, ko es ievietoju skicē - man ir aizdomas, ka tas ir tālu no labiem. Šeit ir pilnīgs ceļvedis ar dažiem eksperimentāliem datiem.

1. darbība: materiālu saraksts

Materiālu rēķins
Materiālu rēķins

Jums būs nepieciešams: 0. Arduino dēlis. Es dodu priekšroku ķīniešu Arduino Nano klonam par izcilo cenu USD 3, taču šeit darbosies jebkurš 8 bitu arduino. Sketch izmanto dažas uzlabotas taimeru darbības, un tā tika pārbaudīta tikai ar mikrokontrolleri atmega328 - lai gan, iespējams, tas labi darbosies arī ar citiem. MQ-7 CO sensors. Visbiežāk pieejams ar šo lidojošo zivju sensora moduli, tam ir jāveic neliela modifikācija, sīkāka informācija nākamajā darbībā, vai arī varat izmantot atsevišķu MQ-7 sensoru.

2. NPN bipolārais tranzistors. Šeit darbosies praktiski jebkurš NPN tranzistors, kas spēj apstrādāt 300 mA vai vairāk. PNP tranzistors nedarbosies ar minēto lidojošo zivju moduli (jo tam ir sildītāja tapa pielodēta pie sensora izejas), bet to var izmantot ar diskrētu MQ-7 sensoru.

3. Rezistori: 2 x 1k (no 0,5k līdz 1,2k derēs labi) un 1x 10k (tas ir vislabāk saglabāts precīzs - lai gan, ja jums noteikti ir jāizmanto cita vērtība, attiecīgi pielāgojiet skices mainīgo reference_resistor_kOhm).

4. Kondensatori: 2 x 10uF vai vairāk. Ir nepieciešami tantala vai keramikas izstrādājumi, elektrolītiskie līdzekļi nedarbosies labi augsta ESR dēļ (tie nespēs nodrošināt pietiekami daudz strāvas, lai izlīdzinātu lielas strāvas viļņošanos). Zaļas un sarkanas gaismas diodes, kas norāda pašreizējo CO līmeni (varat izmantot arī vienu divkrāsu gaismas diodi ar 3 spailēm, kā mēs izmantojām mūsu dzeltenās kastes prototipā). Pjezo skaņas signāls, kas norāda uz augstu CO līmeni. Maizes dēlis un vadi (jūs varat arī visu pielodēt līdz Nano tapām vai iespiest Uno kontaktligzdās, taču šādā veidā ir viegli kļūdīties).

2. darbība: moduļa modificēšana vai diskrētā sensora vadu savienošana

Moduļa modifikācija vai diskrēta sensora elektroinstalācija
Moduļa modifikācija vai diskrēta sensora elektroinstalācija

Lai iegūtu moduli, jums ir jāatkausē rezistors un kondensators, kā parādīts fotoattēlā. Jūs varat atkausēt būtībā visu, ja vēlaties - moduļa elektronika ir pilnīgi bezjēdzīga, mēs to izmantojam tikai kā sensora turētāju, taču šie divi komponenti neļaus jums iegūt pareizus rādījumus, Ja izmantojat diskrētu sensoru, pievienojiet sildītāja tapas (H1 un H2) pie 5 V un attiecīgi tranzistora kolektora. Pievienojiet vienu uztverošo pusi (jebkuru no A tapām) pie 5 V, otru sensoru pusi (jebkuru no B tapām) pie 10 k rezistora, tāpat kā shēmas shēmas moduļa analogo tapu.

3. darbība: darbības princips

Darbības princips
Darbības princips
Darbības princips
Darbības princips

Kāpēc mums ir vajadzīgas visas šīs komplikācijas, kāpēc nepievienot 5V, zemi un vienkārši iegūt rādījumus? Diemžēl šādā veidā jūs neko nedosit. Saskaņā ar MQ-7 datu lapu, sensoram ir jāizmanto augstas un zemas apkures ciklus, lai iegūtu pareizus mērījumus. Zemas temperatūras fāzē CO tiek absorbēts uz plāksnes, iegūstot nozīmīgus datus. Augstas temperatūras fāzē absorbētais CO un citi savienojumi iztvaiko no sensora plāksnes, notīrot to nākamajam mērījumam.

Tātad kopumā darbība ir vienkārša:

1. Piestipriniet 5V 60 sekundes, neizmantojiet šos rādījumus CO mērīšanai.

2. Uzlieciet 1,4 V uz 90 sekundēm, izmantojiet šos rādījumus CO mērīšanai.

3. Pārejiet uz 1. darbību.

Bet šeit ir problēma: Arduino nevar nodrošināt pietiekamu jaudu, lai palaistu šo sensoru no tapām - sensora sildītājam ir nepieciešami 150 mA, savukārt Arduino tapai var nodrošināt ne vairāk kā 40 mA, tādēļ, ja tā ir piestiprināta tieši, Arduino tapa sadedzinās un sensors joprojām uzvarēja nestrādā. Tātad, lai kontrolētu lielu izejas strāvu, mums ir jāizmanto kāda veida strāvas pastiprinātājs, kas aizņem nelielu ieejas strāvu. Vēl viena problēma ir iegūt 1,4 V. Vienīgais veids, kā droši iegūt šo vērtību, neieviešot daudz analogo komponentu, ir izmantot PWM (impulsa platuma modulācijas) pieeju ar atgriezenisko saiti, kas kontrolēs izejas spriegumu.

NPN tranzistors atrisina abas problēmas: kad tas tiek pastāvīgi ieslēgts, sensora spriegums ir 5 V un tas silda augstas temperatūras fāzei. Kad mēs pievadam PWM tās ieejai, strāva pulsē, pēc tam kondensators to izlīdzina, un vidējais spriegums tiek uzturēts nemainīgs. Ja mēs izmantojam augstfrekvences PWM (skicē tā frekvence ir 62,5 KHz) un vidēji daudz analogo rādījumu (skicē mēs vidēji pārsniedzam ~ 1000 rādījumus), tad rezultāts ir diezgan ticams.

Ir ļoti svarīgi pievienot kondensatorus saskaņā ar shēmām. Šeit redzamie attēli ilustrē signāla atšķirību ar un bez C2 kondensatora: bez tā PWM pulsācija ir skaidri redzama, un tas ievērojami kropļo rādījumus.

4. solis: shēmas un panelis

Shēmas un maize
Shēmas un maize
Shēmas un maize
Shēmas un maize
Shēmas un maize
Shēmas un maize

Šeit ir shēmas un maizes dēļa montāža.

BRĪDINĀJUMS! Nepieciešama standarta izlaušanās moduļa modifikācija! Bez izmaiņām modulis ir bezjēdzīgs. Modifikācija ir aprakstīta otrajā solī

Gaismas diodēm ir svarīgi izmantot tapas D9 un D10, jo tur mums ir aparatūras taimera1 izejas, kas ļaus vienmērīgi mainīt to krāsas. Signāli D5 un D6 tiek izmantoti skaņas signālam, jo D5 un D6 ir aparatūras Timer0 izejas. Mēs konfigurēsim tos, lai tie būtu apgriezti viens pret otru, tāpēc tie pārslēgsies starp (5V, 0V) un (0V, 5V) stāvokļiem, tādējādi radot skaņu skaņas signālā. Brīdinājums: tas ietekmē Arduino galveno laika pārtraukumu, tāpēc visas no laika atkarīgās funkcijas (piemēram, mili ()) šajā skicē neradīs pareizus rezultātus (vairāk par to vēlāk). Pin D3 ir pievienota aparatūras Timer2 izeja (kā arī D11 - bet uz D11 ir mazāk ērti ievietot vadu nekā uz D3) - tāpēc mēs to izmantojam, lai nodrošinātu PWM sprieguma regulēšanas tranzistoram. Rezistors R1 tiek izmantots, lai kontrolētu gaismas diodes spilgtumu. Tas var būt no 300 līdz 3000 omiem, 1k ir diezgan optimāls spilgtuma/enerģijas patēriņa ziņā. Rezistors R2 tiek izmantots, lai ierobežotu tranzistora bāzes strāvu. Tam nevajadzētu būt zemākam par 300 omiem (lai nepārslogotu Arduino tapu) un ne augstākam par 1500 omiem. 1k ir droša izvēle.

Rezistors R3 tiek izmantots sērijveidā ar sensora plāksni, lai izveidotu sprieguma dalītāju. Spriegums sensora izejā ir vienāds ar R3 / (R3 + Rs) * 5V, kur Rs ir strāvas sensora pretestība. Sensora pretestība ir atkarīga no CO koncentrācijas, tāpēc attiecīgi mainās spriegums. Kondensatoru C1 izmanto, lai izlīdzinātu MW -7 sensora ieejas PWM spriegumu, jo augstāka ir tā kapacitāte, jo labāk, bet arī tam jābūt ar zemu ESR - tātad keramikas (vai tantala) Šeit priekšroka tiek dota kondensatoram, elektrolītiskais nedarbosies labi.

Kondensators C2 tiek izmantots, lai izlīdzinātu sensora analogo izeju (izejas spriegums ir atkarīgs no ieejas sprieguma - un šeit mums ir diezgan liela strāvas PWM, kas ietekmē visas shēmas, tāpēc mums ir nepieciešams C2). Vienkāršākais risinājums ir izmantot to pašu kondensatoru kā C1. NPN tranzistors vai nu visu laiku vada strāvu, lai nodrošinātu augstu strāvu sensora sildītājā, vai darbojas PWM režīmā, tādējādi samazinot apkures strāvu.

5. darbība: Arduino programma

Arduino programma
Arduino programma

BRĪDINĀJUMS: SENSORAM NEPIECIEŠAMA MANUĀLA KALIBRĒŠANA JEBKURAI PRAKTISKAI LIETOŠANAI. BEZ KALIBRĒŠANAS, ATKARĪBĀ UZ JŪSU ĪPAŠĀ JŪTĀJA PARAMETRU, ŠĪ SKETE VAR BŪT ATSLĒGTA TĪRĀ GAIDĀ VAI NETIKS LETĀLĀ OGLEKĻA MONOKSĪDA KONCENTRĀCIJU

Kalibrēšana ir aprakstīta šādās darbībās. Aptuvenā kalibrēšana ir ļoti vienkārša, precīza ir diezgan sarežģīta.

Kopumā programma ir diezgan vienkārša:

Vispirms mēs kalibrējam savu PWM, lai radītu stabilu 1,4 V, kas vajadzīgs sensoram (pareizs PWM platums ir atkarīgs no daudziem parametriem, piemēram, precīzām rezistoru vērtībām, šī konkrētā sensora pretestības, tranzistora VA līknes utt. - tāpēc labākais veids ir izmēģināt dažādas vērtības un izmantojiet to, kas vislabāk atbilst). Tad mēs nepārtraukti veicam 60 sekunžu sildīšanas un 90 sekunžu mērīšanas ciklu. Īstenojot, tas kļūst nedaudz sarežģīts. Mums ir jāizmanto aparatūras taimeri, jo visam, kas mums šeit ir, ir nepieciešama augstas frekvences stabila PWM, lai tā darbotos pareizi. Kods ir pievienots šeit, un to var lejupielādēt no mūsu github, kā arī shēmas avotu Fritzing. Programmā ir 3 funkcijas, kas apstrādā taimerus: setTimer0PWM, setTimer1PWM, setTimer2PWM. Katrs no tiem iestata taimeri PWM režīmā ar dotajiem parametriem (komentēts kodā) un nosaka impulsa platumu atbilstoši ievades vērtībām. Mērījumu fāzes tiek pārslēgtas, izmantojot funkcijas startMeasurementPhase un startHeatingPhase, tās rīkoties ar visu iekšā. un iestatiet pareizas taimera vērtības, lai pārslēgtos starp 5V un 1,4V apkuri. LED stāvokli nosaka funkciju kopa LED, kas pieņem zaļo un sarkano spilgtumu savā ievadē (lineārajā skalā 1-100) un pārveido to par atbilstošu taimera iestatījumu.

Signāla stāvokli kontrolē, izmantojot funkcijas buzz_on, buzz_off, buzz_beep. Ieslēgšanas/izslēgšanas funkcijas ieslēdz un izslēdz skaņu, pīkstiena funkcija rada īpašu pīkstienu secību ar 1,5 sekunžu periodu, ja tā tiek periodiski izsaukta (šī funkcija nekavējoties atgriežas, lai neapturētu galveno programmu, bet tā ir jāzvana atkal un atkal lai radītu skaņas signālu).

Programma vispirms palaiž funkciju pwm_adjust, kas nosaka pareizu PWM cikla platumu, lai mērīšanas fāzē sasniegtu 1,4 V. Pēc tam tas pīkst vairākas reizes, norādot, ka sensors ir gatavs, pārslēdzas mērīšanas fāzē un sāk galveno cilpu.

Galvenajā ciklā programma pārbauda, vai pašreizējā fāzē esam pavadījuši pietiekami daudz laika (90 sekundes mērīšanas fāzei, 60 sekundes sildīšanas fāzei) un, ja jā, tad maina pašreizējo fāzi. Tas arī pastāvīgi atjaunina sensora rādījumus, izmantojot eksponenciālu izlīdzināšanu: new_value = 0.999*old_value + 0.001*new_reading. Izmantojot šādus parametrus un mērīšanas ciklu, tas vidēji uztver signālu aptuveni pēdējo 300 milisekundžu laikā. BRĪDINĀJUMS: SENSORAM NEPIECIEŠAMA MANUĀLA KALIBRĀCIJA Jebkurai praktiskai lietošanai. BEZ KALIBRĒŠANAS, ATKARĪBĀ UZ JŪSU ĪPAŠĀ JŪTĀJA PARAMETRU, ŠĪ SKETE VAR BŪT ATSLĒGTA TĪRĀ GAIDĀ VAI NETIKS LETĀLĀ OGLEKĻA MONOKSĪDA KONCENTRĀCIJU.

6. darbība. Pirmais skrējiens: ko gaidīt

Pirmais skrējiens: ko gaidīt
Pirmais skrējiens: ko gaidīt

Ja visu pareizi salikāt, pēc skices izpildīšanas sērijas monitorā redzēsit kaut ko līdzīgu:

PWM pielāgošana w = 0, V = 4,93

PWM pielāgošana w = 17, V = 3,57 PWM rezultāts: platums 17, spriegums 3,57

un pēc tam skaitļu sērija, kas attēlo pašreizējos sensora rādījumus. Šī daļa pielāgo PWM platumu, lai radītu sensora sildītāja spriegumu pēc iespējas tuvāk 1,4 V, izmērītais spriegums tiek atņemts no 5 V, tāpēc mūsu ideālā izmērītā vērtība ir 3,6 V. Ja šis process nekad nebeidzas un nebeidzas pēc viena soļa (kā rezultātā platums ir vienāds ar 0 vai 254) - tad kaut kas nav kārtībā. Pārbaudiet, vai jūsu tranzistors patiešām ir NPN un vai tas ir pareizi pievienots (pārliecinieties, vai pareizi izmantojāt pamatni, kolektoru, emitētāja tapas - bāze iet uz D3, kolektors uz MQ -7 un emitētājs uz zemes, neņemiet vērā Fritzing maizes dēļa skatu - tas ir nepareizi dažiem tranzistoriem) un pārliecinieties, vai esat pievienojis sensora ievadi Arduino A1 ieejai. Ja viss ir kārtībā, Arduino IDE sērijas ploterī vajadzētu redzēt kaut ko līdzīgu attēlam. Apkures un mērīšanas cikli, kuru garums ir 60 un 90 sekundes, notiek viens pēc otra, katra cikla beigās izmērot un atjauninot CO ppm. Kad mērīšanas cikls ir gandrīz pabeigts, varat paņemt atklātu liesmu sensora tuvumā un redzēt, kā tas ietekmēs rādījumus (atkarībā no liesmas veida tas var radīt līdz 2000 ppm CO koncentrāciju brīvā dabā - tātad, lai gan tikai neliela daļa tas faktiski nonāk sensorā, tas joprojām ieslēgs modinātāju un neizslēgsies līdz nākamā cikla beigām). Es to parādīju attēlā, kā arī reakciju uz uguni no šķiltavas.

7. solis: Sensora kalibrēšana

Sensora kalibrēšana
Sensora kalibrēšana
Sensora kalibrēšana
Sensora kalibrēšana

Saskaņā ar ražotāja datu lapu, lai sensoru varētu kalibrēt, tam vajadzētu veikt sildīšanas un dzesēšanas ciklus 48 stundas pēc kārtas. Un jums tas jādara, ja plānojat to lietot ilgu laiku: manā gadījumā sensora rādījumi tīrā gaisā mainījās par aptuveni 30% 10 stundu laikā. Ja jūs to neņemsiet vērā, jūs varat iegūt 0 ppm rezultātu, kur patiesībā ir 100 ppm CO. Ja nevēlaties gaidīt 48 stundas, mērīšanas cikla beigās varat kontrolēt sensora izeju. Kad vairāk nekā stundu tas nemainīsies vairāk par 1-2 punktiem - tur jūs varat pārtraukt sildīšanu.

Rupja kalibrēšana:

Pēc tam, kad skice ir darbojusies vismaz 10 stundas tīrā gaisā, mērīšanas cikla beigās, 2-3 sekundes pirms sildīšanas fāzes sākuma, iegūstiet neapstrādātu sensora vērtību un ierakstiet to mainīgajā sensor_reading_clean_air (100. rinda). Tieši tā. Programma novērtēs citus sensora parametrus, tie nebūs precīzi, bet ar to vajadzētu pietikt, lai atšķirtu 10 un 100 ppm koncentrāciju.

Precīza kalibrēšana:

Es ļoti iesaku atrast kalibrētu CO mērītāju, paņemt 100 ppm CO paraugu (to var izdarīt, ieņemot šļircē dūmgāzes - CO koncentrācija var viegli būt vairāku tūkstošu ppm robežās) un lēnām ievietot to slēgtā burkā kalibrēts skaitītājs un MQ-7 sensors), iegūstiet neapstrādātu sensora rādījumu šajā koncentrācijā un ievietojiet to mainīgajā sensor_reading_100_ppm_CO. Bez šī soļa jūsu ppm mērījumi var būt nepareizi vairākas reizes abos virzienos (joprojām ir labi, ja jums nepieciešama trauksme par bīstamu CO koncentrāciju mājās, kur parasti CO vispār nevajadzētu būt, bet nav piemērota rūpnieciskai lietošanai).

Tā kā man nebija neviena CO skaitītāja, es izmantoju sarežģītāku pieeju. Vispirms es sagatavoju augstu CO koncentrāciju, izmantojot sadegšanu izolētā tilpumā (pirmā fotogrāfija). Šajā rakstā es atradu visnoderīgākos datus, tostarp CO iznākumu dažādiem liesmu veidiem - tas nav redzams fotoattēlā, bet pēdējā eksperimentā tika izmantota propāna gāzes sadegšana ar tādu pašu iestatījumu, kā rezultātā CO koncentrācija bija ~ 5000 ppm. Tad tas tika atšķaidīts 1:50, lai sasniegtu 100 ppm, kā parādīts otrajā fotoattēlā, un tika izmantots sensora atskaites punkta noteikšanai.

8. darbība. Daži eksperimentālie dati

Daži eksperimentālie dati
Daži eksperimentālie dati

Manā gadījumā sensors strādāja diezgan labi - tas nav ļoti jutīgs pret patiešām zemām koncentrācijām, bet pietiekami labs, lai noteiktu kaut ko lielāku par 50 ppm. Es centos pakāpeniski palielināt koncentrāciju, veicot mērījumus, un izveidoju diagrammu komplektu. Ir divi 0ppm līniju komplekti - tīri zaļa pirms CO iedarbības un dzelteni zaļa pēc. Šķiet, ka sensors pēc iedarbības nedaudz maina tīra gaisa pretestību, taču šis efekts ir neliels. Šķiet, ka tā nevar skaidri nošķirt 8 un 15, 15 un 26, 26 un 45 ppm koncentrācijas, taču tendence ir ļoti skaidra, tāpēc tā var noteikt, vai koncentrācija ir 0-20 vai 40-60 ppm. Augstākām koncentrācijām atkarība ir daudz izteiktāka - pakļaujoties atklātas liesmas izplūdes gāzei, līkne no sākuma paceļas, nemaz nenolaižoties, un tās dinamika ir pilnīgi atšķirīga. Tātad augstām koncentrācijām nav šaubu, ka tas darbojas droši, lai gan es nevaru apstiprināt tā precizitāti, jo man nav neviena nominālā CO skaitītāja. Arī šis eksperimentu kopums tika veikts, izmantojot 20k slodzes rezistoru - un pēc tam es nolēmu lai ieteiktu 10k kā noklusējuma vērtību, tam vajadzētu būt jutīgākam. Tieši tā. Ja jums ir uzticams CO mērītājs un jūs būsiet salicis šo tāfeli, lūdzu, dalieties ar atsauksmēm par sensoru precizitāti - būtu lieliski apkopot statistiku par dažādiem sensoriem un uzlabot skices noklusējuma pieņēmumus.

Ieteicams: