Мазмұны:

MQ-7 сенсорының көмегімен Arduino CO мониторы: 8 қадам (суреттермен)
MQ-7 сенсорының көмегімен Arduino CO мониторы: 8 қадам (суреттермен)

Бейне: MQ-7 сенсорының көмегімен Arduino CO мониторы: 8 қадам (суреттермен)

Бейне: MQ-7 сенсорының көмегімен Arduino CO мониторы: 8 қадам (суреттермен)
Бейне: Lesson 13: Using Flame Sensor module with Arduino 2024, Шілде
Anonim
MQ-7 сенсоры бар Arduino CO мониторы
MQ-7 сенсоры бар Arduino CO мониторы
MQ-7 сенсоры бар Arduino CO мониторы
MQ-7 сенсоры бар Arduino CO мониторы

Бұл нұсқаулықтың неліктен жасалғанын бірнеше сөзбен түсіндіруге болады: бір күні менің дос қызымның анасы түннің бір уағында бізге қоңырау шалды, себебі ол қатты ауырды - басы айналды, тахикардия, жүрек айнуы, қан қысымы көтерілді, тіпті белгісіз уақытқа дейін есінен танып қалды (мүмкін ~ 5) минуттар, бірақ айтуға мүмкіндік жоқ), барлығы ешқандай себепсіз. Ол ауруханалардан алыс орналасқан шағын ауылда тұрады (біздің жерден 60 км, ең жақын ауруханадан 30 км, аралықта қалыпты жол жоқ 10 км), сондықтан біз оған жүгіріп, жедел жәрдемнен кейін көп ұзамай жеттік. Ол ауруханаға жатқызылды және таңертең өзін жақсы сезінді, бірақ дәрігерлер оның себебін таба алмады. Келесі күні бізде бір ой пайда болды: бұл газбен жұмыс істейтін қазандығы бар CO-дан улану болуы мүмкін (суретте) және ол болғанша кешке жақын отырды. Біз жақында MQ-7 CO датчигін сатып алдық. бірақ оған схеманы жинауға ешқашан уақыт болған жоқ, сондықтан бұл үшін тамаша уақыт болды. Бір сағат бойы Интернеттен кез келген нұсқауларды іздегеннен кейін мен сенсор өндірушісінің деректер кестесінде берілген нұсқауларға сәйкес келетін және ешнәрсені түсіндіретін нұсқаулықты таба алмайтынымды түсіндім (бір мысалда өте жақсы код бар сияқты, бірақ ол оны қалай қолдану керектігі түсініксіз болды, басқалары тым қарапайым болды және жақсы жұмыс істемеді). Біз схеманы жасауға, 3d корпусын жасауға және басып шығаруға, сенсорды тексеруге және калибрлеуге шамамен 12 сағат жұмсадық, ал келесі күні күдікті қазандыққа бардық. СО деңгейінің өте жоғары екендігі белгілі болды және егер СО әсер ету уақыты ұзағырақ болса, өлімге әкелуі мүмкін. Менің ойымша, осындай жағдайға тап болған кез келген адам (мысалы, газ қазандығы немесе тұрғын үйдің ішінде басқа да жану) жамандықтың алдын алу үшін осындай сенсорға ие болуы керек.

Мұның бәрі екі апта бұрын болды, содан бері мен схемалар мен бағдарламаны едәуір жақсарттым, ал қазір бұл өте жақсы және салыстырмалы түрде қарапайым болып көрінеді (кодтың 3-жолы емес, бірақ бәрібір). Мен дәл CO есептегіші бар адам маған эскизге салған әдепкі калибрлеу туралы кері байланыс береді деп үміттенемін - бұл жақсы емес деп ойлаймын. Мұнда кейбір эксперименттік мәліметтер бар толық нұсқаулық бар.

1 -қадам: материалдар туралы есеп

Материалдық есеп
Материалдық есеп

Сізге қажет: 0. Arduino тақтасы. Мен қытайлық Arduino Nano клонын 3 долларға жақсы көремін, бірақ мұнда 8-биттік ардуино жұмыс істейді. Скетч таймерлердің кейбір жетілдірілген жұмысын қолданады және тек atmega328 микроконтроллерінде сыналған, бірақ ол басқаларында да жақсы жұмыс істейтін шығар. MQ-7 CO датчигі. Бұл Flying Fish сенсорлық модулімен жиі қол жетімді, ол келесі қадамда кішкене модификациядан өтуі керек, немесе сіз бөлек MQ-7 сенсорды қолдана аласыз.

2. NPN биполярлы транзисторы. Бұл жерде 300 мА немесе одан да көп жұмыс істей алатын кез келген NPN транзисторы жұмыс істейді. PNP транзисторы аталған Flying Fish модулімен жұмыс істемейді (себебі сенсордың шығуына дәнекерленген қыздырғыш түйреуіші бар), бірақ оны MQ-7 дискретті сенсорымен пайдалануға болады.

3. Резисторлар: 2 x 1k (0,5к -тен 1,2к -қа дейін жақсы жұмыс істейді) және 1х 10к (дәлірек айтқанда, егер сіз басқа мәнді пайдалануыңыз керек болса да, эскизде referans_resistor_kOhm айнымалысын сәйкесінше реттеңіз).

4. Конденсаторлар: 2 x 10uF немесе одан көп. Тантал немесе керамика қажет, электролит ESR жоғары болуына байланысты жақсы жұмыс істемейді (олар жоғары ағымды толқынды тегістеу үшін жеткілікті ток бере алмайды). Жасыл және қызыл жарықдиодты шамалар ағымдағы CO деңгейін көрсетеді (сонымен қатар, біз сары қораптың прототипінде қолданылғандай, үш терминалы бар қос түсті жарықдиодты қолдануға болады). Пиезо дыбыстық сигнал CO жоғары деңгейін көрсетеді. Нан тақтасы мен сымдар (сонымен қатар бәрін нано түйреуіштеріне дәнекерлеуге немесе Uno розеткаларына қысуға болады, бірақ осылайша қателесу оңай).

2 -қадам: модульді модификациялау немесе дискретті сенсор сымдары

Модульдің модификациясы немесе дискретті сенсордың сымы
Модульдің модификациясы немесе дискретті сенсордың сымы

Фотосуретте көрсетілгендей, модуль үшін резистор мен конденсаторды ажырату керек. Қажет болса, сіз бәрін тазалай аласыз - модульдік электроника мүлдем пайдасыз, біз оны тек сенсорға арналған ұстағыш ретінде қолданамыз, бірақ бұл екі компонент сізге дұрыс көрсеткіштерді алуға кедергі жасайды, Егер сіз дискретті сенсорды қолдансаңыз, сәйкесінше 5В қыздырғыш түйреуіштерді (H1 және H2) және транзисторлық коллекторды бекітіңіз. Схемадағы модульдің аналогтық түйреуіші сияқты бір сезгіш жағын (кез келген А түйреуішті) 5В -қа, екінші түйісетін жағын (кез келген В штыры) 10к резисторға бекітіңіз.

3 -қадам: жұмыс принципі

Жұмыс принципі
Жұмыс принципі
Жұмыс принципі
Жұмыс принципі

Неліктен біз барлық осы асқынуларға мұқтажбыз, неге 5В қосуға, жерге қосуға және жай ғана оқуға болмайды? Өкінішке орай, сіз бұл жолмен пайдалы ештеңе ала алмайсыз. және дұрыс өлшеу үшін төмен қыздыру циклдары. Төмен температура кезеңінде CO пластинада сіңіп, маңызды мәліметтер береді. Жоғары температура кезеңінде сіңірілген СО және басқа қосылыстар сенсорлық пластинадан буланып, оны келесі өлшеу үшін тазартады.

Сондықтан жалпы операция қарапайым:

1. 5 В 60 секундқа қолданыңыз, бұл көрсеткіштерді СО өлшеу үшін қолданбаңыз.

2. 1,4 В 90 секундқа қолданыңыз, СО өлшеу үшін осы көрсеткіштерді қолданыңыз.

3. 1 -қадамға өтіңіз.

Бірақ мәселе мынада: Arduino бұл сенсорды түйреуіштерден іске қосу үшін жеткілікті қуат бере алмайды - сенсордың жылытқышы 150 мА қажет, ал Arduino түйрегіші 40 мА -дан аспайды, сондықтан оны тікелей қосқанда, Arduino түйреуіші жанып кетеді және сенсор әлі де ұтады жұмыс істемейді. Сондықтан біз үлкен шығыс токын басқару үшін кіші кіріс тогын алатын ток күшейткішін қолдануымыз керек. Басқа мәселе - 1.4В. Көптеген аналогтық компоненттерді енгізбестен бұл мәнді сенімді түрде алудың жалғыз жолы - шығыс кернеуін басқаратын кері байланыспен PWM (импульстік ен модуляциясы) әдісін қолдану.

NPN транзисторы екі мәселені де шешеді: ол үнемі қосылып тұрса, датчиктің кернеуі 5В болады және ол жоғары температуралы фазаға қызады. Біз PWM -ді оның кірісіне қолданған кезде, ток импульсті болады, содан кейін оны конденсатор тегістейді, ал орташа кернеу тұрақты болып қалады. Егер біз жоғары жиілікті PWM (эскизде оның жиілігі 62,5 кГц) және аналогты көрсеткіштердің орташа көптігін қолданатын болсақ (эскизде орташа есеппен ~ 1000 оқылым), онда нәтиже өте сенімді.

Схемаға сәйкес конденсаторларды қосу өте маңызды. Мұндағы суреттер C2 конденсаторы бар және онсыз сигналдың айырмашылығын көрсетеді: онсыз PWM толқыны анық көрінеді және ол көрсеткіштерді айтарлықтай бұрмалайды.

4 -қадам: Схемалар мен тақта

Схемалар мен тақта
Схемалар мен тақта
Схемалар мен тақта
Схемалар мен тақта
Схемалар мен тақта
Схемалар мен тақта

Міне, схемалар мен тақтаны құрастыру.

ЕСКЕРТУ! Стандартты үзіліс модулін өзгерту қажет! Модуль өзгертусіз пайдасыз. Өзгерту екінші кезеңде сипатталған

Светодиодтар үшін D9 және D10 түйреуіштерін қолдану маңызды, өйткені бізде Timer1 аппараттық шығысы бар, бұл олардың түстерін біркелкі өзгертуге мүмкіндік береді. D5 және D6 түйреуіштері дыбыстық сигнал үшін қолданылады, себебі D5 және D6 - Timer0 аппараттық құралының шығысы. Біз оларды бір -біріне қарама -қарсы етіп конфигурациялаймыз, сондықтан олар (5V, 0V) және (0V, 5V) күйлерге ауысады, осылайша дыбыстық сигнал шығарылады. Ескерту: бұл Arduino негізгі уақыт үзілуіне әсер етеді, сондықтан уақытқа байланысты барлық функциялар (миллис () сияқты) бұл эскизде дұрыс нәтиже бермейді (бұл туралы толығырақ кейінірек). Pin D3 оған Timer2 аппараттық шығысы қосылған (сонымен D11 - бірақ D11 -ге қарағанда сымды D11 -ге қою ыңғайлы емес) - сондықтан біз оны кернеуді реттейтін транзисторға PWM беру үшін қолданамыз. R1 резисторы жарықдиодты жарықтылықты басқару үшін қолданылады. Ол 300 -ден 3000 Ом -ға дейін болуы мүмкін, 1k жарықтылықта/қуат тұтынуда оңтайлы. R2 резисторы транзистордың базалық тогын шектеу үшін қолданылады. Ол 300 Омнан төмен болмауы керек (Arduino түйреуішін шамадан тыс жүктемеу үшін) және 1500 Омнан жоғары болмауы керек. 1k қауіпсіз таңдау бар.

R3 резисторы кернеу бөлгішін құру үшін сенсорлық тақтайшамен қатар қолданылады. Сенсордың шығысындағы кернеу R3 / (R3 + Rs) * 5V -ке тең, мұнда Rs - ток сенсорының кедергісі. Сенсордың кедергісі CO концентрациясына тәуелді, сондықтан кернеу сәйкесінше өзгереді. C1 конденсаторы MQ -7 сенсорындағы PWM кернеуін тегістеу үшін қолданылады, оның сыйымдылығы неғұрлым жоғары болса, соғұрлым жақсы ESR болуы керек - керамикалық (немесе танталдық) Мұнда конденсаторға артықшылық беріледі, электролитті жақсы жұмыс істемейді.

C2 конденсаторы сенсордың аналогтық шығуын тегістеу үшін пайдаланылады (шығыс кернеуі кіріс кернеуіне байланысты - және бізде бұл жерде өте жоғары ток күші бар, бұл барлық схемаларға әсер етеді, сондықтан бізге С2 қажет). Ең қарапайым шешім - C1. NPN транзисторымен бірдей конденсаторды қолдану, сенсордың жылытқышына жоғары ток беру үшін үнемі ток өткізеді немесе PWM режимінде жұмыс істейді, осылайша қыздыру тогын азайтады.

5 -қадам: Arduino бағдарламасы

Arduino бағдарламасы
Arduino бағдарламасы

ЕСКЕРТУ: СЕНСОР кез келген практикалық қолдану үшін қолмен калибрлеуді талап етеді. КАЛИБРАЦИЯСЫЗ, СЕНІЗДІҢ СЕНСОРЫҢЫЗДЫҢ ПАРАМЕТРЛЕРІНЕ ТӘуелді, бұл эскиз таза ауа арқылы дабыл сигналын қосуға немесе көмірсутегінің моноксиді концентрациясын анықтамауға мүмкіндік береді

Калибрлеу келесі қадамдарда сипатталады. Дөрекі калибрлеу өте қарапайым, дәл - өте күрделі.

Жалпы, бағдарлама өте қарапайым:

Алдымен біз PWM -ді сенсор талап ететін тұрақты 1.4В өндіру үшін калибрлейміз (PWM -дің дұрыс ені резистордың дәл мәндері, сенсордың кедергісі, транзистордың VA қисығы және т. және сәйкес келетінін қолданыңыз). Содан кейін біз 60 секундтық қыздыру мен 90 секундтық өлшеу циклін үздіксіз жүргіземіз. Іске асыру кезінде ол біршама күрделі болады. Бізде аппараттық таймерлерді пайдалану керек, өйткені бізде дұрыс жұмыс істеу үшін мұнда жоғары жиілікті тұрақты PWM қажет. Код осында бекітілген, оны біздің гитубтан жүктеуге болады, сонымен қатар Fritzing-те схемалық көз. Таймерлерді басқаратын 3 функция: setTimer0PWM, setTimer1PWM, setTimer2PWM. Олардың әрқайсысы берілген параметрлермен PWM режимінде таймерді орнатады (кодта түсініктеме берілген) және импульстің енін кіріс мәндеріне сәйкес орнатады. Өлшеу фазалары startMeasurementPhase және startHeatingPhase функциялары арқылы ауысады ішіндегі барлығын реттеңіз. 5В пен 1,4В қыздыруды ауыстыру үшін таймердің тиісті мәндерін орнатыңыз. Жарық диодтарының күйі оның кірісіндегі жасыл және қызыл жарықтықты қабылдайтын LED светодиодтарымен орнатылады (сызықтық 1-100 масштабында) және оны сәйкес таймер параметріне түрлендіреді.

Дыбыстық сигнал buzz_on, buzz_off, buzz_beep функциялары арқылы басқарылады. Қосу/өшіру функциялары дыбысты қосады және сөндіреді, дыбыстық сигнал беру функциясы мезгіл -мезгіл шақырылатын болса, 1,5 секундтық белгілі бір сигнал беру ретін шығарады (бұл функция бірден қайтады, сондықтан ол негізгі бағдарламаны тоқтата алмайды - бірақ сіз оны қайта -қайта шақыруға тура келеді. дыбыстық сигнал шығарады).

Бағдарлама алдымен pwm_adjust функциясын іске қосады, ол өлшеу кезеңінде 1,4 В жету үшін PWM циклінің дұрыс енін анықтайды. Содан кейін сенсордың дайын екенін көрсету үшін бірнеше рет дыбыстық сигнал беріледі, өлшеу фазасына ауысады және негізгі циклды бастайды.

Негізгі циклде бағдарлама ағымдағы фазада жеткілікті уақыт өткізгенімізді тексереді (өлшеу фазасы үшін 90 секунд, қыздыру фазасы үшін 60 секунд), егер иә болса, онда ағымдық фазаны өзгертеді. Сондай -ақ, ол экспоненциалды тегістеу арқылы сенсор көрсеткіштерін үнемі жаңартады: new_value = 0.999*old_value + 0.001*new_reading. Мұндай параметрлермен және өлшеу циклімен ол орташа алғанда шамамен 300 миллисекундтан асатын сигналды сақтайды. КАЛИБРАЦИЯСЫЗ, СЕНІЗДІҢ СЕНСОРЫҢЫЗДЫҢ ПАРАМЕТРЛЕРІНЕ ТӘуелді, бұл эскиз таза ауа арқылы дабыл сигналын қосуға немесе көмірсутегінің моноксиді концентрациясын анықтамауға мүмкіндік береді.

6 -қадам: Бірінші жүгіру: не күтеді

Бірінші жүгіру: не күту керек
Бірінші жүгіру: не күту керек

Егер сіз бәрін дұрыс жинасаңыз, эскизді іске қосқаннан кейін сіз сериялық мониторда осындай нәрсені көресіз:

PWM реттеу w = 0, V = 4,93

реттеу PWM w = 17, V = 3.57PWM нәтижесі: ені 17, кернеуі 3,57

содан кейін ағымдағы сенсордың көрсеткіштерін білдіретін сандар сериясы. Бұл бөлік сенсордың қыздырғышының кернеуін мүмкіндігінше 1,4 В -қа дейін жеткізу үшін PWM енін реттейді, өлшенген кернеу 5 В -тан шегеріледі, сондықтан біздің идеалды өлшенген мәніміз - 3,6 В. Егер бұл процесс бір қадамнан кейін аяқталмаса немесе аяқталмаса (нәтижесінде ені 0 немесе 254 -ке тең) - онда бірдеңе дұрыс емес. Сіздің транзисторыңыз шынымен NPN екенін және дұрыс қосылғанын тексеріңіз (базаны, коллекторды, эмитентті түйреуіштерді дұрыс пайдаланғаныңызға көз жеткізіңіз - база D3 -ке, коллектор MQ -7 -ге және эмитент жерге түседі, Fritzing нан тақтасының көрінісін есептемеңіз - бұл кейбір транзисторлар үшін дұрыс емес) және сенсордың кірісін Arduino A1 кірісіне қосқаныңызға көз жеткізіңіз. Егер бәрі жақсы болса, Arduino IDE сериялық плоттерінде суретке ұқсас нәрсені көруге болады. Ұзақтығы 60 және 90 секунд болатын қыздыру мен өлшеу циклдары бірінен соң бірі жүреді, әр циклдің соңында CO ppm өлшенеді және жаңартылады. Өлшеу циклы аяқталған кезде сенсордың жанына ашық отты қоюға және оның көрсеткіштерге қалай әсер ететінін көруге болады (жалынның түріне байланысты ол ашық ауада 2000 ppm CO концентрациясын шығаруы мүмкін, бірақ шамалы ғана бөлігі) ол сенсорға түседі, ол әлі де дабылды қосады және келесі циклдің соңына дейін өшпейді). Мен оны суретте, сондай -ақ оттықтан отқа жауап ретінде көрсеттім.

7 -қадам: сенсорды калибрлеу

Сенсорды калибрлеу
Сенсорды калибрлеу
Сенсорды калибрлеу
Сенсорды калибрлеу

Өндірушінің мәліметтер кестесіне сәйкес, сенсор калибрленгенге дейін 48 сағат қатарынан жылыту-салқындату циклдарын жүргізуі керек. Егер сіз оны ұзақ уақыт бойы қолданғыңыз келсе, мұны істеуіңіз керек: менің жағдайда сенсор таза ауада 30 сағат ішінде шамамен 30% өзгерді. Егер сіз мұны ескермесеңіз, онда сіз 100 ppm CO бар 0 ppm нәтижесін ала аласыз, егер сіз 48 сағат күткіңіз келмесе, өлшеу циклінің соңында сенсордың шығуын бақылай аласыз. Бір сағаттан артық уақыт 1-2 ұпайға өзгермейді - онда жылуды тоқтатуға болады.

Дөрекі калибрлеу:

Эскизді таза ауада кем дегенде 10 сағат жүргізгеннен кейін, өлшеу циклінің соңында, қыздыру кезеңі басталардан 2-3 секунд бұрын сенсордың шикі мәнін алыңыз және оны sensor_reading_clean_air айнымалысына жазыңыз (100-жол). Міне бітті. Бағдарлама сенсордың басқа параметрлерін бағалайды, олар дәл болмайды, бірақ 10 мен 100 ppm концентрациясын ажыратуға жеткілікті болуы керек.

Нақты калибрлеу:

Мен калибрленген CO есептегішін табуды, 100 ppm CO үлгісін алуды ұсынамын (мұны шприцке түтін газын алу арқылы жасауға болады - CO концентрациясы бірнеше мың ppm диапазонында оңай болуы мүмкін) және оны баяу жабық банкаға салыңыз. калибрленген есептегіш және MQ-7 датчигі), осы концентрациядағы сенсордың көрсеткішін алыңыз және оны sensor_reading_100_ppm_CO айнымалысына қойыңыз. Бұл қадамсыз, сіздің ppm өлшеуіңіз екі бағытта да бірнеше рет қате болуы мүмкін (егер сізге үйде CO -ның қауіпті концентрациясы туралы дабыл қажет болса, онда қалыпты, әдетте СО мүлде болмауы керек, бірақ кез келген өнеркәсіптік қолдану үшін жақсы емес).

Менде CO есептегіші болмағандықтан, мен неғұрлым күрделі әдісті қолдандым. Алдымен мен оқшауланған көлемде жануды қолдана отырып, СО жоғары концентрациясын дайындадым (бірінші сурет). Бұл жұмыста мен ең пайдалы деректерді таптым, оның ішінде жалынның әр түрі үшін CO шығымы - бұл фотода жоқ, бірақ соңғы эксперимент пропан газының жануын қолданды, дәл осындай қондырғыда ~ 5000 ppm CO концентрациясы. Содан кейін ол екінші суретте көрсетілгендей 100 ppm жету үшін 1:50 сұйылтылды және сенсордың тірек нүктесін анықтау үшін пайдаланылды.

8 -қадам: Кейбір эксперименттік деректер

Кейбір тәжірибелік мәліметтер
Кейбір тәжірибелік мәліметтер

Менің жағдайда сенсор өте жақсы жұмыс істеді - бұл өте төмен концентрация үшін өте сезімтал емес, бірақ 50 ppm -ден жоғары нәрсені анықтау үшін жеткілікті жақсы. Мен концентрацияны біртіндеп арттыруға тырыстым, өлшеу жүргізіп, диаграммалар жиынтығын құрдым. 0ppm желілерінің екі жиынтығы бар - СО экспозициясына дейін таза жасыл және кейін сары жасыл. Сенсор экспозициядан кейін таза ауа кедергісін аздап өзгертетін сияқты, бірақ бұл әсер аз. Бұл 8 және 15, 15 және 26, 26 және 45 ppm концентрациясын нақты ажырата алмайтын сияқты-бірақ бұл үрдіс өте айқын, сондықтан концентрация 0-20 немесе 40-60 ppm диапазонында екенін анықтай алады.. Жоғары концентрация үшін тәуелділік әлдеқайда ерекшеленеді - ашық жалын сөнген кезде қисық басынан бастап төмен түспей жоғары көтеріледі және оның динамикасы мүлде басқа. Сондықтан жоғары концентрация үшін бұл сенімді жұмыс істейтініне күмән жоқ, бірақ менде дәл CO2 есептегіші жоқ болғандықтан дәлдігін растай алмаймын. 10k әдепкі мән ретінде ұсыну үшін, ол осылайша сезімтал болуы керек. Егер сізде сенімді CO есептегіші болса және ол осы тақтаны жинайтын болса, сенсордың дәлдігі туралы пікірлермен бөлісіңіз - әр түрлі датчиктер бойынша статистиканы жинап, әдепкі эскиздік болжамдарды жақсарту жақсы болар еді.

Ұсынылған: