- Датчик газу MQ6
- Як виміряти PPM за допомогою датчиків MQ Gas?
- Необхідні компоненти
- Схематична
- Датчик MQ з програмуванням PIC
Газові датчики серії MQ - це дуже поширені типи датчиків, що використовуються в газових детекторах для виявлення або вимірювання певних типів газів. Ці датчики широко використовуються у всіх газових пристроях, таких як прості детектори диму та промислові монітори якості повітря. Ми вже використовували ці газові датчики MQ з Arduino для вимірювання деяких шкідливих газів, таких як аміак. У цій статті ми дізнаємося, як використовувати ці газові датчики з мікроконтролерами PIC, щоб виміряти значення PPM газу та відобразити його на РК-дисплеї 16x2.
Як уже згадувалося раніше, на ринку доступні різні типи датчиків серії MQ, і кожен датчик може вимірювати різні типи газів, як показано в таблиці нижче. Для цієї статті ми будемо використовувати датчик газу MQ6 з PIC, який може бути використаний для виявлення присутності та концентрації газу на зрідженому газі. Однак, використовуючи одне і те ж апаратне та програмне забезпечення, інші датчики серії MQ також можна використовувати без значних змін у коді та апаратній частині.
Датчик | Виявляє |
MQ-2 | Метан, бутан, зріджений газ, дим |
MQ-3 | Алкоголь, етанол, дим |
MQ-4 | Метан, СПГ-газ |
MQ-5 | Природний газ, зріджений газ |
MQ-6 | ЗВГ, газ бутан |
MQ-7 | Окис вуглецю |
MQ-8 | Водневий газ |
MQ-9 | Чадний газ, легкозаймисті гази. |
MQ131 | Озон |
MQ135 | Якість повітря (бензол, алкоголь, дим) |
MQ136 | Сірководень газ |
MQ137 | Аміак |
MQ138 | Бензол, толуол, алкоголь, ацетон, пропан, газ формальдегіду, водень |
MQ214 | Метан, Природний газ |
MQ216 | Природний газ, вугільний газ |
MQ303A | Алкоголь, етанол, дим |
MQ306A | ЗВГ, газ бутан |
MQ307A | Окис вуглецю |
MQ309A | Чадний газ, легкозаймисті гази |
MG811 | Двоокис вуглецю (CO2) |
AQ-104 | Якість повітря |
Датчик газу MQ6
На зображенні нижче показано схему контактів датчика MQ6. Однак ліве зображення - це модульний датчик MQ6 для взаємодії з блоком мікроконтролера, на цьому зображенні також показана схема контактів модуля.
Контакт 1 - це VCC, контакт 2 - GND, контакт 3 - цифровий вихід (низький рівень логіки при виявленні газу), а контакт 4 - аналоговий вихід. Горщик використовується для регулювання чутливості. Це не RL. Резистор RL є правим резистором світлодіода DOUT.
Кожен датчик серії MQ має нагрівальний елемент та чутливий опір. Залежно від концентрації газу, опір зондування змінюється, і виявляючи опір, що змінюється, можна виміряти концентрацію газу. Для вимірювання концентрації газу в PPM усі датчики MQ забезпечують логарифмічний графік, що є дуже важливим. На графіку представлений огляд концентрації газу із співвідношенням RS та RO.
Як виміряти PPM за допомогою датчиків MQ Gas?
RS - це відчутна стійкість під час присутності певного газу, тоді як RO - відчутна стійкість у чистому повітрі без будь-якого конкретного газу. Наведений нижче логарифмічний графік, взятий з таблиці даних, забезпечує огляд концентрації газу з відчутним опором датчика MQ6. Датчик MQ6 використовується для виявлення концентрації газу LPG. Таким чином, датчик MQ6 буде забезпечувати особливий опір під час чистого повітря, де газ зрідженого газу недоступний. Крім того, опір змінюватиметься щоразу, коли газ LPG виявляється датчиком MQ6.
Отже, нам потрібно побудувати цей графік у нашому мікропрограмі, подібно до того, що ми робили у нашому проекті Arduino Gas detector. Формула повинна мати 3 різні точки даних. Перші дві точки даних є початком кривої зрідженого газу в координатах X та Y. Треті дані - нахил.
Отже, якщо ми виберемо криву темно-синього кольору, яка є кривою LPG, початок кривої в координатах X та Y дорівнює 200 і 2. Отже, першою точкою даних з логарифмічної шкали є (log200, log2), яка (2,3, 0,30).
Давайте зробимо це як, X1 та Y1 = (2,3, 0,30). Кінець кривої є другою точкою даних. За тим самим процесом, описаним вище, X2 та Y2 є (log 10000, log0.4). Таким чином, X2 та Y2 = (4, -0,40). Для отримання нахилу кривої формула має формулу
= (Y2-Y1) / (X2-X1) = (- 0,40 - 0,30) / (4 - 2,3) = (-0,70) / (1,7) = -0,41
Нам потрібний графік можна подати як
LPG_Curve = {починаючи X і починаючи Y, нахил} LPG_Curve = {2.3, 0.30, -0.41}
Для інших датчиків MQ отримайте вищезазначені дані з таблиці та графіку логарифмічного графіку. Значення буде відрізнятися залежно від вимірюваного датчика та газу. Для цього конкретного модуля він має цифровий штифт, який надає лише інформацію про наявний газ чи ні. Для цього проекту він також використовується.
Необхідні компоненти
Необхідні компоненти для взаємодії датчика MQ з мікроконтролером PIC наведені нижче -
- Джерело живлення 5В
- Макет
- Резистор 4.7k
- РК-дисплей 16x2
- 1k резистор
- Кристал 20 МГц
- Конденсатор 33pF - 2шт
- Мікроконтролер PIC16F877A
- Датчик серії MQ
- Berg та інші дроти підключення.
Схематична
Схема даного газового датчика з проектом PIC є досить прямою. Аналоговий штифт з'єднаний з RA0, а цифровий - з RD5 для вимірювання аналогової напруги, що забезпечується модулем датчика газу. Якщо ви зовсім не новачок у PIC, то, можливо, ви захочете ознайомитись з підручником з PIC ADC та підручником з PIC LCD, щоб краще зрозуміти цей проект.
Схема побудована в макетній дошці. Після завершення підключення моя настройка виглядає так, як показано нижче.
Датчик MQ з програмуванням PIC
Основною частиною цього коду є основна функція та інші пов'язані периферійні функції. Повну програму можна знайти внизу цієї сторінки, важливі фрагменти коду пояснюються наступним чином
Наведена нижче функція використовується для отримання значення опору датчика у вільному повітрі. Оскільки використовується аналоговий канал 0, він отримує дані з аналогового каналу 0. Це призначено для калібрування датчика MQ Gas.
float SensorCalibration () { int count; // Ця функція відкалібрує датчик у вільному повітряному поплавці val = 0; for (count = 0; count <50; count ++) {// беруть кілька зразків і обчислюють середнє значення val + = count_resistance (ADC_Read (0)); __delay_ms (500); } val = val / 50; val = val / RO_VALUE_CLEAN_AIR; // ділиться на RO_CLEAN_AIR_FACTOR, отримує зворотний клапан Ro ; }
Функція "Нижче" використовується для зчитування аналогових значень датчика MQ та середнього значення для обчислення значення Rs
float read_MQ () { int count; float rs = 0; for (count = 0; count <5; count ++) {// беруть кілька показань і усереднюють його. rs + = обчислити_опір (ADC_Read (0)); // rs змінюється залежно від концентрації газу. __delay_ms (50); } rs = rs / 5; повернення rs; }
Функція, наведена нижче, використовується для розрахунку опору резистора дільника напруги та опору навантаження.
float izračunaти_опір (int adc_channel) {// датчик і навантажувальний резистор утворюють дільник напруги. отже, використовуючи аналогове значення та повернення значення навантаження (((плаваюче) RL_VALUE * (1023-adc_channel) / adc_channel)); // ми знайдемо резистор датчика. }
Значення RL_VALUE визначається на початку коду, як показано нижче
#define RL_VALUE (10) // визначаємо опір навантаження на платі, в кілоомах
Змініть це значення після перевірки бортового опору навантаження. Він може відрізнятися в інших платах датчиків MQ. Для побудови графіку наявних даних у шкалі журналу використовується нижченаведена функція.
int gas_plot_log_scale (float rs_ro_ratio, float * curve) { return pow (10, (((log (rs_ro_ratio)-curve) / curve) + крива)); }
Крива - це крива зрідженого газу, визначена вище в коді, який раніше розраховувався в нашій статті вище.
плаваюча MQ6_крива = {2.3,0.30, -0.41}; // Побудуйте графік, змініть це для конкретного датчика
Нарешті, основна функція, всередині якої ми вимірюємо аналогове значення, обчислюємо PPM та відображаємо його на РК-дисплеї, подана нижче
void main () { system_init (); clear_screen (); lcd_com (FIRST_LINE); lcd_puts ("Калібрування…."); Ro = SensorCalibration (); // clear_screen (); lcd_com (FIRST_LINE); lcd_puts ("Готово!"); // clear_screen (); lcd_com (FIRST_LINE); lcd_print_number (Ro); lcd_puts ("К Ом"); __delay_ms (1500); виявлення газу = 0; while (1) { if (gas_detect == 0) { lcd_com (FIRST_LINE); lcd_puts ("Газ присутній"); lcd_com (SECOND_LINE); lcd_puts ("ppm ppm ="); float rs = read_MQ (); коефіцієнт плаваючості = rs / Ro; lcd_print_number (gas_plot_log_scale (співвідношення, крива MQ6_)); __delay_ms (1500); clear_screen (); } ще { lcd_com (FIRST_LINE); lcd_puts ("Газу немає"); } } }
Спочатку RO вимірюється в чистому повітрі. Потім зчитується цифровий штифт, щоб перевірити, присутній газ чи ні. Якщо газ присутній, його вимірюють за наданою кривою зрідженого газу.
Я використав запальничку, щоб перевірити, чи змінюється значення PPM при виявленні газу. У цих запальничках є газ LPG, який при випуску в повітря зчитується датчиком, а значення PPM на РК-дисплеї змінюється, як показано нижче.
Повну роботу можна знайти у відео, поданому внизу цієї сторінки. Якщо у вас виникли запитання, залиште їх у розділі коментарів або скористайтеся нашими форумами для інших технічних питань.