Код: Виділити все
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);
}
Відео:
Код: Виділити все
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-3 датчика, не піддаючи спирт або інший тип газу. І коли датчики піддаються впливу парів спирту з повітря, детектується в такий спосіб: Зверніть увагу, що всі модулі чутливі до більш ніж одного газу, звичайно, в різних пропорціях; але якщо ви працюєте в середовищі, де існують різні типи газів, не може диференціювати між ними і можна мати неправильне значення, якщо вам потрібно тільки вловлювати один газ
Масштабування датчиків газу MQ для нелінійних характеристик
Якщо наш додаток, який ми реалізуємо має плавно зчитувати покази, ми повинні масштабувати отримані значення. Проблема полягає в тому, що співвідношення між аналоговим відліком і фактичним значенням перестає бути лінійним. Таким чином, ми повинні оцінити криву, яка дає технічний опис.
Наступні кроки працюють для MQ-3, але застосовується аналогічно іншим MQ датчикам. Наприклад, для MQ-3 датчика відповідно технічного опису є крива залежності: Дані що дає нам крива - не лінійні, а залежністьможна знайти для рівняння в нашому випадку використанням Excel, так що ми вводимо дані кривої алкоголю в таблицю, так як багато точок, як ми можемо, і в Excel будуємо у вигляді графіка. Рівняння, що ми отримуємо:
Код: Виділити все
Alcohol=0.4091(Rs/Ro)^(-1.497)
Код: Виділити все
V_leido=5(1000/(Rs+1000))
Rs=1000((5-V)/V)
Код: Виділити все
Alcohol=Pa*(Rs)^b
Можна фактично виміряти дві точки і співставити напруги датчика для двох концентрацій: при насиченні спиртом повітря (всередині банки зі спиртом)і без нього (на вулиці). Враховуємо що датчик насичений при 10mg/L, Для того, щоб досягти цього ми створюємо середовище з достатньою кількістю алкоголю, і якщо ми вимірюємо покази нашого датчику то отримаємо напругу 3,02 В, що еквівалентно Rs = 655.
Код: Виділити все
(Rs/Ro)=0.12 якщо Rs=655 тоді Ro=5463
Незалежно від способу обчислення рівняння повинні представити і змінити рівняння в наступному скетчі:
Код: Виділити все
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);
}