Підключення датчику алкоголю MQ-3

Як використовувати та підключати детектори чадного газу, датчики алкоголю, бензину, вуглекислого газу та інші. Датчик водню та особливості калібрування параметрів
Відповісти
Аватар користувача
Arduino
Site Admin
Повідомлень: 98
З нами з: 16 травня 2017 18:18

Підключення датчику алкоголю MQ-3

Повідомлення Arduino » 30 травня 2017 10:01

Підключення датчику алкоголю MQ-3 і програма детектування наявності спирту у повітрі виглядає аналогічно як і для інших датчиків серії MQ.
gas-sensor-alk.jpg
Читати дані можна як тільки модуль прогріється, зачекайте кілька хвилин, щоб прогріти модуль і мати належні покази. У прикладі ми будемо використовувати MQ-3 (датчик спирту). Програма однакова для будь-якого модуля MQ, якщо використовується цифровий вихід, так як цей вихід діє як 1 або 0. Зауважимо, що цей вихід інвертується, 1 за відсутність спирту і 0 для присутності спирту. Схема програми підключення для Arduino виглядає наступним чином:

Код: Виділити все

int pin_mq = 2;

void setup() { 
  Serial.begin(9600);
  pinMode(pin_mq, INPUT);
}


void loop() {
  
  boolean mq_estado = digitalRead(pin_mq);//Читайте датчик
  if(mq_estado) //якщо вихідний сигнал датчика 1
  {
    Serial.println("Sin presencia de alcohol"); //нема  алкоголю
  }
  else //якщо вихідний сигнал датчика дорівнює 0
  {
    Serial.println("Alcohol detectado"); // алкоголь виявлено
  }
  delay(100); 
}
У цьому прикладі при читанні з Arduino, як і читання будь-якого цифрового входу, чутливість датчика встановлюються через змінний резистор, який містить модуль, поворот направо - стає більш чутливим і потребує меншої кількості наявності алкоголю, щоб активувати вихід , аналогічно, коли ми повертаємо ліворуч - проходить збільшення порогу і потрібно більшу присутність газу (спирту), щоб активувати вихід.
gas-sensor-porig.jpg
gas-sensor-porig.jpg (13.59 Кіб) Переглянуто 603 разів
Аналоговий вхід датчика
Відео:

Код: Виділити все

https://youtu.be/dQ01iPW8CtM
Різниця з використанням цифрового виходу, є те, що за допомогою аналогового виходу може детектувати різні рівні газу,що присутні і з масштабами відповідно до необхідності для нашого застосування. Нижче наведено скетч, щоб прочитати аналоговий вихід:

Код: Виділити все

void setup() {
  Serial.begin(9600);
}

void loop() {
  
  int adc_MQ = analogRead(A0); //Lemos la salida analógica del MQ
  float voltaje = adc_MQ * (5.0 / 1023.0); //Convertimos la lectura en un valor de voltaje

  Serial.print("adc:");
  Serial.print(adc_MQ);
  Serial.print("    voltaje:");
  Serial.println(voltaje);
  delay(100);
}
З аналоговим виходом є особливість - код є однаковим для будь-якого типу датчика MQ, з яким він працює. Оскільки модуль має нагрівальну камеру, де повинен входити або виходити газ, час відгуку повільний, датчик розпізнає перебування відпрацьованих газів в нагрівальній камері, поки вони не зникнуть.
Для зміни показів - необхідний потік газів через датчик

Тут ми покажемо значення, отримане для MQ-3 датчика, не піддаючи спирт або інший тип газу.
gas-sensor-alk2.jpg
І коли датчики піддаються впливу парів спирту з повітря, детектується в такий спосіб:
gas-sensor-alk3.jpg
Зверніть увагу, що всі модулі чутливі до більш ніж одного газу, звичайно, в різних пропорціях; але якщо ви працюєте в середовищі, де існують різні типи газів, не може диференціювати між ними і можна мати неправильне значення, якщо вам потрібно тільки вловлювати один газ

Масштабування датчиків газу MQ для нелінійних характеристик
Якщо наш додаток, який ми реалізуємо має плавно зчитувати покази, ми повинні масштабувати отримані значення. Проблема полягає в тому, що співвідношення між аналоговим відліком і фактичним значенням перестає бути лінійним. Таким чином, ми повинні оцінити криву, яка дає технічний опис.
Наступні кроки працюють для MQ-3, але застосовується аналогічно іншим MQ датчикам. Наприклад, для MQ-3 датчика відповідно технічного опису є крива залежності:
gas-sensor-kriva.jpg
Дані що дає нам крива - не лінійні, а залежністьможна знайти для рівняння в нашому випадку використанням Excel, так що ми вводимо дані кривої алкоголю в таблицю, так як багато точок, як ми можемо, і в Excel будуємо у вигляді графіка.
Regresion curva MQ-3.jpg
Рівняння, що ми отримуємо:

Код: Виділити все

Alcohol=0.4091(Rs/Ro)^(-1.497)
Значення концентрації спирту, Ро є константою, яка дорівнює значенню опору датчика, коли він піддається впливу концентрації 0,4 мг / л і Rs є опором датчика, який зчитується з Arduino. У наведеному вище прикладі ми визначемо напругу зчитану з датчика , щоб обчислити значення рівняння Rs подільника напруги, який утворює датчик з опором навантаження RL ( в більшості модулів 1K).

Код: Виділити все

V_leido=5(1000/(Rs+1000))
Rs=1000((5-V)/V)
Значення Ра розраховується в лабораторії, Ро є значення Rs, коли проба повітря складає 0,4 мг/л. Ми повинні зробити це для кожного датчика, так як Ro відрізняється в кожному датчику. Інший спосіб калібруванняч з використанням відомих концентрацій, для цього необхідно в разі використання датчика спирту алкотестер для калібрування. Для цього не потрібна крива регресії, яка дає нам технічний паспорт. Зазначену криву можна використатидля визначення константи Ро. Рівняння буде виглядати наступним чином.

Код: Виділити все

Alcohol=Pa*(Rs)^b
Для розрахунку константи Pа і б потрібно взяти тільки дві точки, наш датчик виміряє зразки Rs і алкотестер обчислить відповідне значення концентрації спирту в зразках. З цими двома точками ми виводимо рівняння і обчислюємо дві константи. Вищевказані дві форми є правильними способами для калібрування нашого датчика, знаходячи Ro з 0,4 мг / л зразка або з використанням алкотестера до зразка посилання. Але здалося б ще пояснити інший спосіб, щоб отримати приблизні значення Ro і, таким чином, вирішити рівняння.

Можна фактично виміряти дві точки і співставити напруги датчика для двох концентрацій: при насиченні спиртом повітря (всередині банки зі спиртом)і без нього (на вулиці). Враховуємо що датчик насичений при 10mg/L, Для того, щоб досягти цього ми створюємо середовище з достатньою кількістю алкоголю, і якщо ми вимірюємо покази нашого датчику то отримаємо напругу 3,02 В, що еквівалентно Rs = 655.

Код: Виділити все

(Rs/Ro)=0.12 якщо  Rs=655 тоді Ro=5463
З обчисленої Ro, ми маємо рішення рівняння і з цим можна отримати наближені значення концентрації спирту.
Незалежно від способу обчислення рівняння повинні представити і змінити рівняння в наступному скетчі:

Код: Виділити все

void setup() {
  Serial.begin(9600);
}

void loop() {
  
  int adc_MQ = analogRead(A0); //читаємо аналоговий вихід MQ
  float voltaje = adc_MQ * (5.0 / 1023.0); //конвертуємо значення що отримали
  float Rs=1000*((5-voltaje)/voltaje);  //Обчислюємо Rs з RL та 1k опору
  double alcohol=0.4091*pow(Rs/5463, -1.497); // Обчислимо концентрацію спирту з рівняння, що отримано раніше
  //-------Ми посилаємо значення через послідовний порт------------
  Serial.print("adc:");
  Serial.print(adc_MQ);
  Serial.print("    voltaje:");
  Serial.print(voltaje);
  Serial.print("    Rs:");
  Serial.print(Rs);
  Serial.print("    alcohol:");
  Serial.print(alcohol);
  Serial.println("mg/L");
  delay(100);
}
Тоді результат зондування алкоголю буде виглядати ось так:
gas-sensor-finish.jpg

Відповісти

Повернутись до “Вогонь, дим, газ”