From 2bb7e88bec9c06015162830f3083574a4f6c1fb8 Mon Sep 17 00:00:00 2001 From: Igor89 Date: Fri, 29 Apr 2016 17:42:44 +0300 Subject: [PATCH] initial commit --- BaseMQ.cpp | 112 +++++++++++++++++++++++++++ BaseMQ.h | 39 ++++++++++ MQ2.cpp | 30 +++++++ MQ2.h | 22 ++++++ MQ3.cpp | 22 ++++++ MQ3.h | 20 +++++ MQ4.cpp | 18 +++++ MQ4.h | 19 +++++ MQ5.cpp | 22 ++++++ MQ5.h | 20 +++++ MQ6.cpp | 18 +++++ MQ6.h | 19 +++++ MQ7.cpp | 18 +++++ MQ7.h | 19 +++++ MQ8.cpp | 18 +++++ MQ8.h | 19 +++++ MQ9.cpp | 26 +++++++ MQ9.h | 21 +++++ README.md | 20 +++++ TroykaMQ.h | 13 ++++ examples/mq2/mq2/mq2.ino | 42 ++++++++++ examples/mq2/mq2Heater/mq2Heater.ino | 55 +++++++++++++ examples/mq3/mq3/mq3.ino | 33 ++++++++ examples/mq3/mq3Heater/mq3Heater.ino | 48 ++++++++++++ examples/mq4/mq4/mq4.ino | 32 ++++++++ examples/mq4/mq4Heater/mq4Heater.ino | 47 +++++++++++ examples/mq5/mq5/mq5.ino | 35 +++++++++ examples/mq5/mq5Heater/mq5Heater.ino | 49 ++++++++++++ examples/mq6/mq6/mq6.ino | 32 ++++++++ examples/mq6/mq6Heater/mq6Heater.ino | 46 +++++++++++ examples/mq7/mq7Heater/mq7Heater.ino | 52 +++++++++++++ examples/mq8/mq8/mq8.ino | 32 ++++++++ examples/mq8/mq8Heater/mq8Heater.ino | 46 +++++++++++ examples/mq9/mq9Heater/mq9Heater.ino | 58 ++++++++++++++ 34 files changed, 1122 insertions(+) create mode 100644 BaseMQ.cpp create mode 100644 BaseMQ.h create mode 100644 MQ2.cpp create mode 100644 MQ2.h create mode 100644 MQ3.cpp create mode 100644 MQ3.h create mode 100644 MQ4.cpp create mode 100644 MQ4.h create mode 100644 MQ5.cpp create mode 100644 MQ5.h create mode 100644 MQ6.cpp create mode 100644 MQ6.h create mode 100644 MQ7.cpp create mode 100644 MQ7.h create mode 100644 MQ8.cpp create mode 100644 MQ8.h create mode 100644 MQ9.cpp create mode 100644 MQ9.h create mode 100644 README.md create mode 100644 TroykaMQ.h create mode 100644 examples/mq2/mq2/mq2.ino create mode 100644 examples/mq2/mq2Heater/mq2Heater.ino create mode 100644 examples/mq3/mq3/mq3.ino create mode 100644 examples/mq3/mq3Heater/mq3Heater.ino create mode 100644 examples/mq4/mq4/mq4.ino create mode 100644 examples/mq4/mq4Heater/mq4Heater.ino create mode 100644 examples/mq5/mq5/mq5.ino create mode 100644 examples/mq5/mq5Heater/mq5Heater.ino create mode 100644 examples/mq6/mq6/mq6.ino create mode 100644 examples/mq6/mq6Heater/mq6Heater.ino create mode 100644 examples/mq7/mq7Heater/mq7Heater.ino create mode 100644 examples/mq8/mq8/mq8.ino create mode 100644 examples/mq8/mq8Heater/mq8Heater.ino create mode 100644 examples/mq9/mq9Heater/mq9Heater.ino diff --git a/BaseMQ.cpp b/BaseMQ.cpp new file mode 100644 index 0000000..6e7b623 --- /dev/null +++ b/BaseMQ.cpp @@ -0,0 +1,112 @@ +#include "BaseMQ.h" + +BaseMQ::BaseMQ(uint8_t pin) { + _pin = pin; +} + +BaseMQ::BaseMQ(uint8_t pin, uint8_t pinHeater) { + _pin = pin; + _pinHeater = pinHeater; + pinMode(_pinHeater, OUTPUT); + _prMillis = 0; +} + +void BaseMQ::calibrate(float ro) { + _ro = ro; + _stateCalibrate = true; +} + +// калиброка датчика +void BaseMQ::calibrate() { + float ro = 0; + for (int i = 0; i < MQ_SAMPLE_TIMES; i++) { + ro += calculateResistance(analogRead(_pin)); + delay(MQ_SAMPLE_INTERVAL); + } + ro = ro/MQ_SAMPLE_TIMES; + ro = ro/getRoInCleanAir(); + _ro = ro; + _stateCalibrate = true; +} + +void BaseMQ::heaterPwrHigh() { + digitalWrite(_pinHeater, HIGH); + _heater = true; + _prMillis = millis(); +} + +void BaseMQ::heaterPwrLow() { + analogWrite(_pinHeater, 75); + _heater = true; + _cooler = true; + _prMillis = millis(); +} + +void BaseMQ::heaterPwrOff() { + digitalWrite(_pinHeater, LOW); + _heater = false; +} + +// сопративление датчика +float BaseMQ::calculateResistance(int rawAdc) { + float vrl = rawAdc*(5.0 / 1023); + float rsAir = (5.0 - vrl)/vrl*getRL(); + return rsAir; +} + +// считывание датчика +float BaseMQ::readRs() { + float rs = 0; + for (int i = 0; i < MQ_SAMPLE_TIMES; i++) { + rs += calculateResistance(analogRead(_pin)); + delay(MQ_SAMPLE_INTERVAL); + } + rs = rs/MQ_SAMPLE_TIMES; + return rs; +} + +float BaseMQ::getRo() { + return _ro; +} + +bool BaseMQ::isCalibrated() { + return _stateCalibrate; +} + +float BaseMQ::readRatio() { + return readRs()/_ro; +} + +bool BaseMQ::heatingCompleted() { + if ((_heater) && (!_cooler) && (millis() - _prMillis > 3000)) + return true; + else + return false; +} + +bool BaseMQ::coolanceCompleted() { + if ((_heater) && (_cooler) && (millis() - _prMillis > 5000)) + return true; + else + return false; +} + +void BaseMQ::cycleHeat() { + _heater = false; + _cooler = false; + heaterPwrHigh(); + Serial.println("Heated sensor"); +} + +bool BaseMQ::atHeatCycleEnd() { + if (heatingCompleted()) { + heaterPwrLow(); + Serial.println("Cool sensor"); + return false; + } else if (coolanceCompleted()) { + heaterPwrOff(); + return true; + } else { + return false; + } +} diff --git a/BaseMQ.h b/BaseMQ.h new file mode 100644 index 0000000..6aaf1bc --- /dev/null +++ b/BaseMQ.h @@ -0,0 +1,39 @@ +#ifndef BaseMQ_H +#define BaseMQ_H +#include +// кол-во считываний значений в цикле +#define MQ_SAMPLE_TIMES 5 +// задержка после каждого считывания датчика +#define MQ_SAMPLE_INTERVAL 20 + +class BaseMQ { +public: + BaseMQ(uint8_t pin); + BaseMQ(uint8_t pin, uint8_t pinHeater); + void calibrate(); + void calibrate(float ro); + void heaterPwrHigh(); + void heaterPwrLow(); + void heaterPwrOff(); + void cycleHeat(); + bool heatingCompleted(); + bool coolanceCompleted(); + bool isCalibrated(); + bool atHeatCycleEnd(); + float getRo(); + float readRatio(); +protected: + bool _heater = false; + bool _cooler = false; + bool _stateCalibrate = false; + unsigned long _prMillis; + float _ro; + uint8_t _pin; + uint8_t _pinHeater; + float readRs(); + float calculateResistance(int rawAdc); + virtual float getRoInCleanAir() const = 0; + virtual int getRL() const = 0; +}; + +#endif \ No newline at end of file diff --git a/MQ2.cpp b/MQ2.cpp new file mode 100644 index 0000000..6c0a29d --- /dev/null +++ b/MQ2.cpp @@ -0,0 +1,30 @@ +#include "MQ2.h" + +MQ2::MQ2(uint8_t pin) + : BaseMQ(pin) { +} + +MQ2::MQ2(uint8_t pin, uint8_t pinHeater) + : BaseMQ(pin, pinHeater) { +} + +unsigned long MQ2::readLPG() { + return readPpm(-0.45, 2.95); +} + +unsigned long MQ2::readMethane() { + return readPpm(-0.38, 3.21); +} + +unsigned long MQ2::readSmoke() { + return readPpm(-0.42, 3.54); +} + +unsigned long MQ2::readHydrogen() { + return readPpm(-0.48, 3.32); +} + +int MQ2::readPpm(float a, float b) { + float ratio = readRs()/_ro; + return pow(M_E, (log(ratio)-b)/a); +} diff --git a/MQ2.h b/MQ2.h new file mode 100644 index 0000000..a563c10 --- /dev/null +++ b/MQ2.h @@ -0,0 +1,22 @@ +#ifndef MQ2_H_ +#define MQ2_H_ + +#include "BaseMQ.h" + +class MQ2 : public BaseMQ { +public: + MQ2(uint8_t pin); + MQ2(uint8_t pin, uint8_t pinHeater); + unsigned long readLPG(); + unsigned long readMethane(); + unsigned long readSmoke(); + unsigned long readHydrogen(); +private: + int readPpm(float a, float b); + // Резистор установленный на плату (кОм) + virtual int getRL() const { return 5; } + // коефициент чистого воздуха + virtual float getRoInCleanAir() const { return 9.83; } +}; + +#endif // MQ2_H_ \ No newline at end of file diff --git a/MQ3.cpp b/MQ3.cpp new file mode 100644 index 0000000..2d4e321 --- /dev/null +++ b/MQ3.cpp @@ -0,0 +1,22 @@ +#include "MQ3.h" + +MQ3::MQ3(uint8_t pin) + : BaseMQ(pin) { +} + +MQ3::MQ3(uint8_t pin, uint8_t pinHeater) + : BaseMQ(pin, pinHeater) { +} + +float MQ3::readAlcoholMgL() { + return readMgL(-0.66, -0.62); +} + +float MQ3::readAlcoholPpm() { + return readMgL(-0.66, -0.62)*2.2; +} + +float MQ3::readMgL(float a, float b) { + float ratio = readRs()/_ro; + return pow(M_E, (log(ratio)-b)/a); +} diff --git a/MQ3.h b/MQ3.h new file mode 100644 index 0000000..e796480 --- /dev/null +++ b/MQ3.h @@ -0,0 +1,20 @@ +#ifndef MQ3_H_ +#define MQ3_H_ + +#include "BaseMQ.h" + +class MQ3 : public BaseMQ { +public: + MQ3(uint8_t pin); + MQ3(uint8_t pin, uint8_t pinHeater); + float readAlcoholMgL(); + float readAlcoholPpm(); +private: + float readMgL(float a, float b); + // Резистор установленный на плату (кОм) + virtual int getRL() const { return 200; } + // коефициент чистого воздуха + virtual float getRoInCleanAir() const { return 60; } +}; + +#endif // MQ3_H_ \ No newline at end of file diff --git a/MQ4.cpp b/MQ4.cpp new file mode 100644 index 0000000..f377862 --- /dev/null +++ b/MQ4.cpp @@ -0,0 +1,18 @@ +#include "MQ4.h" + +MQ4::MQ4(uint8_t pin) + : BaseMQ(pin) { +} + +MQ4::MQ4(uint8_t pin, uint8_t pinHeater) + : BaseMQ(pin, pinHeater) { +} + +unsigned long MQ4::readMethane() { + return readPpm(-0.36, 2.54); +} + +int MQ4::readPpm(float a, float b) { + float ratio = readRs()/_ro; + return pow(M_E, (log(ratio)-b)/a); +} diff --git a/MQ4.h b/MQ4.h new file mode 100644 index 0000000..a8b1f38 --- /dev/null +++ b/MQ4.h @@ -0,0 +1,19 @@ +#ifndef MQ4_H_ +#define MQ4_H_ + +#include "BaseMQ.h" + +class MQ4 : public BaseMQ { +public: + MQ4(uint8_t pin); + MQ4(uint8_t pin, uint8_t pinHeater); + unsigned long readMethane(); +private: + int readPpm(float a, float b); + // Резистор установленный на плату (кОм) + virtual int getRL() const { return 20; } + // коефициент чистого воздуха + virtual float getRoInCleanAir() const { return 4.4; } +}; + +#endif // MQ4_H_ \ No newline at end of file diff --git a/MQ5.cpp b/MQ5.cpp new file mode 100644 index 0000000..a462094 --- /dev/null +++ b/MQ5.cpp @@ -0,0 +1,22 @@ +#include "MQ5.h" + +MQ5::MQ5(uint8_t pin) + : BaseMQ(pin) { +} + +MQ5::MQ5(uint8_t pin, uint8_t pinHeater) + : BaseMQ(pin, pinHeater) { +} + +unsigned long MQ5::readLPG() { + return readPpm(-0.39, 1.73); +} + +unsigned long MQ5::readMethane() { + return readPpm(-0.38, 1.97); +} + +int MQ5::readPpm(float a, float b) { + float ratio = readRs()/_ro; + return pow(M_E, (log(ratio)-b)/a); +} diff --git a/MQ5.h b/MQ5.h new file mode 100644 index 0000000..a2e3eda --- /dev/null +++ b/MQ5.h @@ -0,0 +1,20 @@ +#ifndef MQ5_H_ +#define MQ5_H_ + +#include "BaseMQ.h" + +class MQ5 : public BaseMQ { +public: + MQ5(uint8_t pin); + MQ5(uint8_t pin, uint8_t pinHeater); + unsigned long readLPG(); + unsigned long readMethane(); +private: + int readPpm(float a, float b); + // Резистор установленный на плату (кОм) + virtual int getRL() const { return 20; } + // коефициент чистого воздуха + virtual float getRoInCleanAir() const { return 6.5; } +}; + +#endif // MQ5_H_ \ No newline at end of file diff --git a/MQ6.cpp b/MQ6.cpp new file mode 100644 index 0000000..05843fc --- /dev/null +++ b/MQ6.cpp @@ -0,0 +1,18 @@ +#include "MQ6.h" + +MQ6::MQ6(uint8_t pin) + : BaseMQ(pin) { +} + +MQ6::MQ6(uint8_t pin, uint8_t pinHeater) + : BaseMQ(pin, pinHeater) { +} + +unsigned long MQ6::readLPG() { + return readPpm(-0.42, 2.91); +} + +int MQ6::readPpm(float a, float b) { + float ratio = readRs()/_ro; + return pow(M_E, (log(ratio)-b)/a); +} diff --git a/MQ6.h b/MQ6.h new file mode 100644 index 0000000..c474480 --- /dev/null +++ b/MQ6.h @@ -0,0 +1,19 @@ +#ifndef MQ6_H_ +#define MQ6_H_ + +#include "BaseMQ.h" + +class MQ6 : public BaseMQ { +public: + MQ6(uint8_t pin); + MQ6(uint8_t pin, uint8_t pinHeater); + unsigned long readLPG(); +private: + int readPpm(float a, float b); + // Резистор установленный на плату (кОм) + virtual int getRL() const { return 20; } + // коефициент чистого воздуха + virtual float getRoInCleanAir() const { return 10; } +}; + +#endif // MQ6_H_ \ No newline at end of file diff --git a/MQ7.cpp b/MQ7.cpp new file mode 100644 index 0000000..dcb8563 --- /dev/null +++ b/MQ7.cpp @@ -0,0 +1,18 @@ +#include "MQ7.h" + +MQ7::MQ7(uint8_t pin) + : BaseMQ(pin) { +} + +MQ7::MQ7(uint8_t pin, uint8_t pinHeater) + : BaseMQ(pin, pinHeater) { +} + +unsigned long MQ7::readCarbonMonoxide() { + return readPpm(-0.77, 3.38); +} + +int MQ7::readPpm(float a, float b) { + float ratio = readRs()/_ro; + return pow(M_E, (log(ratio)-b)/a); +} diff --git a/MQ7.h b/MQ7.h new file mode 100644 index 0000000..be281eb --- /dev/null +++ b/MQ7.h @@ -0,0 +1,19 @@ +#ifndef MQ7_H_ +#define MQ7_H_ + +#include "BaseMQ.h" + +class MQ7 : public BaseMQ { +public: + MQ7(uint8_t pin); + MQ7(uint8_t pin, uint8_t pinHeater); + unsigned long readCarbonMonoxide(); +private: + int readPpm(float a, float b); + // Резистор установленный на плату (кОм) + virtual int getRL() const { return 10; } + // коефициент чистого воздуха + virtual float getRoInCleanAir() const { return 27; } +}; + +#endif // MQ7_H_ \ No newline at end of file diff --git a/MQ8.cpp b/MQ8.cpp new file mode 100644 index 0000000..c2897d1 --- /dev/null +++ b/MQ8.cpp @@ -0,0 +1,18 @@ +#include "MQ8.h" + +MQ8::MQ8(uint8_t pin) + : BaseMQ(pin) { +} + +MQ8::MQ8(uint8_t pin, uint8_t pinHeater) + : BaseMQ(pin, pinHeater) { +} + +unsigned long MQ8::readHydrogen() { + return readPpm(-1.52, 10.49); +} + +int MQ8::readPpm(float a, float b) { + float ratio = readRs()/_ro; + return pow(M_E, (log(ratio)-b)/a); +} diff --git a/MQ8.h b/MQ8.h new file mode 100644 index 0000000..ceb18ea --- /dev/null +++ b/MQ8.h @@ -0,0 +1,19 @@ +#ifndef MQ8_H_ +#define MQ8_H_ + +#include "BaseMQ.h" + +class MQ8 : public BaseMQ { +public: + MQ8(uint8_t pin); + MQ8(uint8_t pin, uint8_t pinHeater); + unsigned long readHydrogen(); +private: + int readPpm(float a, float b); + // Резистор установленный на плату (кОм) + virtual int getRL() const { return 10; } + // коефициент чистого воздуха + virtual float getRoInCleanAir() const { return 70; } +}; + +#endif // MQ8_H_ \ No newline at end of file diff --git a/MQ9.cpp b/MQ9.cpp new file mode 100644 index 0000000..95dd875 --- /dev/null +++ b/MQ9.cpp @@ -0,0 +1,26 @@ +#include "MQ9.h" + +MQ9::MQ9(uint8_t pin) + : BaseMQ(pin) { +} + +MQ9::MQ9(uint8_t pin, uint8_t pinHeater) + : BaseMQ(pin, pinHeater) { +} + +unsigned long MQ9::readLPG() { + return readPpm(-0.48, 3.33); +} + +unsigned long MQ9::readMethane() { + return readPpm(-0.38, 3.21); +} + +unsigned long MQ9::readCarbonMonoxide() { + return readPpm(-0.48, 3.10); +} + +int MQ9::readPpm(float a, float b) { + float ratio = readRs()/_ro; + return pow(M_E, (log(ratio)-b)/a); +} diff --git a/MQ9.h b/MQ9.h new file mode 100644 index 0000000..4a4b28f --- /dev/null +++ b/MQ9.h @@ -0,0 +1,21 @@ +#ifndef MQ9_H_ +#define MQ9_H_ + +#include "BaseMQ.h" + +class MQ9 : public BaseMQ { +public: + MQ9(uint8_t pin); + MQ9(uint8_t pin, uint8_t pinHeater); + unsigned long readLPG(); + unsigned long readMethane(); + unsigned long readCarbonMonoxide(); +private: + int readPpm(float a, float b); + // Резистор установленный на плату (кОм) + virtual int getRL() const { return 10; } + // коефициент чистого воздуха + virtual float getRoInCleanAir() const { return 9.8; } +}; + +#endif // MQ9_H_ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..6b5f6ad --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +Датчики газа серии MQ +===================== + +Библиотека для Arduino, позволяющая считывать данные с [датчиков газа MQ](http://amperka.ru/collection/gas) в ppm от [Амперки](http://amperka.ru/). + +Установка библиотеки +==================== + +В Arduino IDE выберите пункт меню «Скетч» → «Импортировать библиотеку» → +«Добавить библиотеку…». В появившемся окне выберите скачаный архив с +библиотекой. Установка завершена. + +Подробности и примеры работы для [датчика MQ-2](http://wiki.amperka.ru/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:mq2). +Подробности и примеры работы для [датчика MQ-3](http://wiki.amperka.ru/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:mq3). +Подробности и примеры работы для [датчика MQ-4](http://wiki.amperka.ru/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:mq4). +Подробности и примеры работы для [датчика MQ-5](http://wiki.amperka.ru/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:mq5). +Подробности и примеры работы для [датчика MQ-6](http://wiki.amperka.ru/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:mq6). +Подробности и примеры работы для [датчика MQ-7](http://wiki.amperka.ru/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:mq7). +Подробности и примеры работы для [датчика MQ-8](http://wiki.amperka.ru/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:mq8). +Подробности и примеры работы для [датчика MQ-9](http://wiki.amperka.ru/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:mq9). \ No newline at end of file diff --git a/TroykaMQ.h b/TroykaMQ.h new file mode 100644 index 0000000..421ddef --- /dev/null +++ b/TroykaMQ.h @@ -0,0 +1,13 @@ +#ifndef TROYKAMQ_H_ +#define TROYKAMQ_H_ + +#include "MQ2.h" +#include "MQ3.h" +#include "MQ4.h" +#include "MQ5.h" +#include "MQ6.h" +#include "MQ7.h" +#include "MQ8.h" +#include "MQ9.h" + +#endif // TROYKAMQ_H_ \ No newline at end of file diff --git a/examples/mq2/mq2/mq2.ino b/examples/mq2/mq2/mq2.ino new file mode 100644 index 0000000..8954c3f --- /dev/null +++ b/examples/mq2/mq2/mq2.ino @@ -0,0 +1,42 @@ +// библиотека для работы с датчиками MQ (Troyka-модуль) +#include + +//имя для пина, к которому подключен датчик +#define PIN_MQ2 A0 +// создаём объект для работы с датчиком и передаём ему номер пина +MQ2 mq2(PIN_MQ2); + +void setup() +{ + // открываем последовательный порт + Serial.begin(9600); + // перед калибровкой датчика прогрейте его 60 секунд + // выполняем калибровку датчика на чистом воздухе + mq2.calibrate(); + // выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт + Serial.print("Ro = "); + Serial.println(mq2.getRo()); +} + +void loop() +{ + // выводим отношения текущего сопротивление датчика + // к сопротивлению датчика в чистом воздухе (Rs/Ro) + Serial.print("Ratio: "); + Serial.print(mq2.readRatio()); + // выводим значения газов в ppm + Serial.print("LPG: "); + Serial.print(mq2.readLPG()); + Serial.print(" ppm "); + Serial.print(" Methane: "); + Serial.print(mq2.readMethane()); + Serial.print(" ppm "); + Serial.print(" Smoke: "); + Serial.print(mq2.readSmoke()); + Serial.print(" ppm "); + Serial.print(" Hydrogen: "); + Serial.print(mq2.readHydrogen()); + Serial.println(" ppm "); + delay(100); +} + diff --git a/examples/mq2/mq2Heater/mq2Heater.ino b/examples/mq2/mq2Heater/mq2Heater.ino new file mode 100644 index 0000000..0d6f844 --- /dev/null +++ b/examples/mq2/mq2Heater/mq2Heater.ino @@ -0,0 +1,55 @@ +// библиотека для работы с датчиками MQ (Troyka-модуль) +#include + +// имя для пина, к которому подключен датчик +#define PIN_MQ2 A0 +// имя для пина, к которому подключен нагреватель датчика +#define PIN_MQ2_HEATER 11 + +// создаём объект для работы с датчиком +// и передаём ему номер пина выходного сигнала и нагревателя +MQ2 mq2(PIN_MQ2, PIN_MQ2_HEATER); + +void setup() +{ + // открываем последовательный порт + Serial.begin(9600); + // включаем нагреватель + mq2.heaterPwrHigh(); + Serial.println("Heated sensor"); +} + +void loop() +{ + // если прошёл интервал нагрева датчика + // и калибровка не была совершена + if (!mq2.isCalibrated() && mq2.heatingCompleted()) { + // выполняем калибровку датчика на чистом воздухе + mq2.calibrate(); + // выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт + Serial.print("Ro = "); + Serial.println(mq2.getRo()); + } + // если прошёл интевал нагрева датчика + // и калибровка была совершена + if (mq2.isCalibrated() && mq2.heatingCompleted()) { + // выводим отношения текущего сопротивление датчика + // к сопротивлению датчика в чистом воздухе (Rs/Ro) + Serial.print("Ratio: "); + Serial.print(mq2.readRatio()); + // выводим значения газов в ppm + Serial.print("LPG: "); + Serial.print(mq2.readLPG()); + Serial.print(" ppm "); + Serial.print(" Methane: "); + Serial.print(mq2.readMethane()); + Serial.print(" ppm "); + Serial.print(" Smoke: "); + Serial.print(mq2.readSmoke()); + Serial.print(" ppm "); + Serial.print(" Hydrogen: "); + Serial.print(mq2.readHydrogen()); + Serial.println(" ppm "); + delay(100); + } +} diff --git a/examples/mq3/mq3/mq3.ino b/examples/mq3/mq3/mq3.ino new file mode 100644 index 0000000..3ae9920 --- /dev/null +++ b/examples/mq3/mq3/mq3.ino @@ -0,0 +1,33 @@ +// библиотека для работы с датчиками MQ (Troyka-модуль) +#include + +//имя для пина, к которому подключен датчик +#define PIN_MQ3 A0 +// создаём объект для работы с датчиком и передаём ему номер пина +MQ3 mq3(PIN_MQ3); + +void setup() +{ + // открываем последовательный порт + Serial.begin(9600); + // перед калибровкой датчика прогрейте его 60 секунд + // выполняем калибровку датчика на чистом воздухе + mq3.calibrate(); + // выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт + Serial.print("Ro = "); + Serial.println(mq3.getRo()); +} +void loop() +{ + // выводим отношения текущего сопротивление датчика + // к сопротивление датчика в чистом воздухе (Rs/Ro) + Serial.print("Ratio: "); + Serial.print(mq3.readRatio()); + // выводим значения паров алкоголя + Serial.print(" Alcohol: "); + Serial.print(mq3.readAlcoholMgL()); + Serial.print(" mG/L "); + Serial.print(mq3.readAlcoholPpm()); + Serial.println(" ppm "); + delay(100); +} diff --git a/examples/mq3/mq3Heater/mq3Heater.ino b/examples/mq3/mq3Heater/mq3Heater.ino new file mode 100644 index 0000000..458f5dc --- /dev/null +++ b/examples/mq3/mq3Heater/mq3Heater.ino @@ -0,0 +1,48 @@ +// библиотека для работы с датчиками MQ (Troyka-модуль) +#include + +// имя для пина, к которому подключен датчик +#define PIN_MQ3 A0 +// имя для пина, к которому подключен нагреватель датчика +#define PIN_MQ3_HEATER 11 + +// создаём объект для работы с датчиком +// и передаём ему номер пина выходного сигнала и нагревателя +MQ3 mq3(PIN_MQ3, PIN_MQ3_HEATER); + +void setup() +{ + // открываем последовательный порт + Serial.begin(9600); + // включаем нагреватель + mq3.heaterPwrHigh(); + Serial.println("Heated sensor"); +} + +void loop() +{ + // если прошёл интервал нагрева датчика + // и калибровка не была совершена + if (!mq3.isCalibrated() && mq3.heatingCompleted()) { + // выполняем калибровку датчика на чистом воздухе + mq3.calibrate(); + // выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт + Serial.print("Ro = "); + Serial.println(mq3.getRo()); + } + // если прошёл интервал нагрева датчика + // и калибровка была совершена + if (mq3.isCalibrated() && mq3.heatingCompleted()) { + // выводим отношения текущего сопротивление датчика + // к сопротивлению датчика в чистом воздухе (Rs/Ro) + Serial.print("Ratio: "); + Serial.print(mq3.readRatio()); + // выводим значения паров алкоголя + Serial.print(" Alcohol: "); + Serial.print(mq3.readAlcoholMgL()); + Serial.print(" mG/L "); + Serial.print(mq3.readAlcoholPpm()); + Serial.println(" ppm "); + delay(100); + } +} diff --git a/examples/mq4/mq4/mq4.ino b/examples/mq4/mq4/mq4.ino new file mode 100644 index 0000000..d1de95c --- /dev/null +++ b/examples/mq4/mq4/mq4.ino @@ -0,0 +1,32 @@ +// библиотека для работы с датчиками MQ (Troyka-модуль) +#include + +//имя для пина, к которому подключен датчик +#define PIN_MQ4 A0 +// создаём объект для работы с датчиком и передаём ему номер пина +MQ4 mq4(PIN_MQ4); + +void setup() +{ + // открываем последовательный порт + Serial.begin(9600); + // перед калибровкой датчика прогрейте его 60 секунд + // выполняем калибровку датчика на чистом воздухе + mq4.calibrate(); + // выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт + Serial.print("Ro = "); + Serial.println(mq4.getRo()); +} + +void loop() +{ + // выводим отношения текущего сопротивление датчика + // к сопротивление датчика в чистом воздухе (Rs/Ro) + Serial.print("Ratio: "); + Serial.print(mq4.readRatio()); + // выводим значения метана в ppm + Serial.print(" Methane: "); + Serial.print(mq4.readMethane()); + Serial.println(" ppm "); + delay(100); +} diff --git a/examples/mq4/mq4Heater/mq4Heater.ino b/examples/mq4/mq4Heater/mq4Heater.ino new file mode 100644 index 0000000..70a777a --- /dev/null +++ b/examples/mq4/mq4Heater/mq4Heater.ino @@ -0,0 +1,47 @@ +// библиотека для работы с датчиками MQ (Troyka-модуль) +#include + +// имя для пина, к которому подключен датчик +#define PIN_MQ4 A0 +// имя для пина, к которому подключен нагреватель датчика +#define PIN_MQ4_HEATER 11 + +// создаём объект для работы с датчиком +// и передаём ему номер пина выходного сигнала и нагревателя +MQ4 mq4(PIN_MQ4, PIN_MQ4_HEATER); + +void setup() +{ + // открываем последовательный порт + Serial.begin(9600); + // включаем нагреватель + mq4.heaterPwrHigh(); + Serial.println("Heated sensor"); +} + +void loop() +{ + // если прошёл интервал нагрева датчика + // и калибровка не была совершена + if (!mq4.isCalibrated() && mq4.heatingCompleted()) { + // выполняем калибровку датчика на чистом воздухе + mq4.calibrate(); + // выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт + Serial.print("Ro = "); + Serial.println(mq4.getRo()); + } + // если прошёл интервал нагрева датчика + // и калибровка была совершена + if (mq4.isCalibrated() && mq4.heatingCompleted()) { + // выводим отношения текущего сопротивление датчика + // к сопротивлению датчика в чистом воздухе (Rs/Ro) + Serial.print("Ratio: "); + Serial.print(mq4.readRatio()); + // выводим значения газов в ppm + // выводим значения газов в ppm + Serial.print(" Methane: "); + Serial.print(mq4.readMethane()); + Serial.println(" ppm "); + delay(100); + } +} diff --git a/examples/mq5/mq5/mq5.ino b/examples/mq5/mq5/mq5.ino new file mode 100644 index 0000000..f8be311 --- /dev/null +++ b/examples/mq5/mq5/mq5.ino @@ -0,0 +1,35 @@ +// библиотека для работы с датчиками MQ (Troyka-модуль) +#include + +//имя для пина, к которому подключен датчик +#define PIN_MQ5 A0 +// создаём объект для работы с датчиком и передаём ему номер пина +MQ5 mq5(PIN_MQ5); + +void setup() +{ + // открываем последовательный порт + Serial.begin(9600); + // перед калибровкой датчика прогрейте его 60 секунд + // выполняем калибровку датчика на чистом воздухе + mq5.calibrate(); + // выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт + Serial.print("Ro = "); + Serial.println(mq5.getRo()); +} + +void loop() +{ + // выводим отношения текущего сопротивление датчика + // к сопротивление датчика в чистом воздухе (Rs/Ro) + Serial.print("Ratio: "); + Serial.print(mq5.readRatio()); + // выводим значения газов в ppm + Serial.print(" LPG: "); + Serial.print(mq5.readLPG()); + Serial.print(" ppm "); + Serial.print(" Methane: "); + Serial.print(mq5.readMethane()); + Serial.println(" ppm "); + delay(100); +} diff --git a/examples/mq5/mq5Heater/mq5Heater.ino b/examples/mq5/mq5Heater/mq5Heater.ino new file mode 100644 index 0000000..6e792b6 --- /dev/null +++ b/examples/mq5/mq5Heater/mq5Heater.ino @@ -0,0 +1,49 @@ +// библиотека для работы с датчиками MQ (Troyka-модуль) +#include + +// имя для пина, к которому подключен датчик +#define PIN_MQ5 A0 +// имя для пина, к которому подключен нагреватель датчика +#define PIN_MQ5_HEATER 11 + +// создаём объект для работы с датчиком +// и передаём ему номер пина выходного сигнала и нагревателя +MQ5 mq5(PIN_MQ5, PIN_MQ5_HEATER); + +void setup() +{ + // открываем последовательный порт + Serial.begin(9600); + // включаем нагреватель + mq5.heaterPwrHigh(); + Serial.println("Heated sensor"); +} + +void loop() +{ + // если прошёл интервал нагрева датчика + // и калибровка не была совершена + if (!mq5.isCalibrated() && mq5.heatingCompleted()) { + // выполняем калибровку датчика на чистом воздухе + mq5.calibrate(); + // выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт + Serial.print("Ro = "); + Serial.println(mq5.getRo()); + } + // если прошёл интервал нагрева датчика + // и калибровка была совершена + if (mq5.isCalibrated() && mq5.heatingCompleted()) { + // выводим отношения текущего сопротивление датчика + // к сопротивлению датчика в чистом воздухе (Rs/Ro) + Serial.print("Ratio: "); + Serial.print(mq5.readRatio()); + // выводим значения газов в ppm + Serial.print("LPG: "); + Serial.print(mq5.readLPG()); + Serial.print(" ppm "); + Serial.print(" Methane: "); + Serial.print(mq5.readMethane()); + Serial.println(" ppm "); + delay(100); + } +} diff --git a/examples/mq6/mq6/mq6.ino b/examples/mq6/mq6/mq6.ino new file mode 100644 index 0000000..e2d622e --- /dev/null +++ b/examples/mq6/mq6/mq6.ino @@ -0,0 +1,32 @@ +// библиотека для работы с датчиками MQ (Troyka-модуль) +#include + +//имя для пина, к которому подключен датчик +#define PIN_MQ6 A0 +// создаём объект для работы с датчиком и передаём ему номер пина +MQ6 mq6(PIN_MQ6); + +void setup() +{ + // открываем последовательный порт + Serial.begin(9600); + // перед калибровкой датчика прогрейте его 60 секунд + // выполняем калибровку датчика на чистом воздухе + mq6.calibrate(); + // выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт + Serial.print("Ro = "); + Serial.println(mq6.getRo()); +} + +void loop() +{ + // выводим отношения текущего сопротивление датчика + // к сопротивление датчика в чистом воздухе (Rs/Ro) + Serial.print("Ratio: "); + Serial.print(mq6.readRatio()); + // выводим значения газов в ppm + Serial.print(" LPG: "); + Serial.print(mq6.readLPG()); + Serial.println(" ppm "); + delay(100); +} diff --git a/examples/mq6/mq6Heater/mq6Heater.ino b/examples/mq6/mq6Heater/mq6Heater.ino new file mode 100644 index 0000000..a952428 --- /dev/null +++ b/examples/mq6/mq6Heater/mq6Heater.ino @@ -0,0 +1,46 @@ +// библиотека для работы с датчиками MQ (Troyka-модуль) +#include + +// имя для пина, к которому подключен датчик +#define PIN_MQ6 A0 +// имя для пина, к которому подключен нагреватель датчика +#define PIN_MQ6_HEATER 11 + +// создаём объект для работы с датчиком +// и передаём ему номер пина выходного сигнала и нагревателя +MQ6 mq6(PIN_MQ6, PIN_MQ6_HEATER); + +void setup() +{ + // открываем последовательный порт + Serial.begin(9600); + // включаем нагреватель + mq6.heaterPwrHigh(); + Serial.println("Heated sensor"); +} + +void loop() +{ + // если прошёл интервал нагрева датчика + // и калибровка не была совершена + if (!mq6.isCalibrated() && mq6.heatingCompleted()) { + // выполняем калибровку датчика на чистом воздухе + mq6.calibrate(); + // выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт + Serial.print("Ro = "); + Serial.println(mq6.getRo()); + } + // если прошёл интервал нагрева датчика + // и калибровка была совершена + if (mq6.isCalibrated() && mq6.heatingCompleted()) { + // выводим отношения текущего сопротивление датчика + // к сопротивлению датчика в чистом воздухе (Rs/Ro) + Serial.print("Ratio: "); + Serial.print(mq6.readRatio()); + // выводим значения газов в ppm + Serial.print("LPG: "); + Serial.print(mq6.readLPG()); + Serial.println(" ppm "); + delay(100); + } +} diff --git a/examples/mq7/mq7Heater/mq7Heater.ino b/examples/mq7/mq7Heater/mq7Heater.ino new file mode 100644 index 0000000..7031d6f --- /dev/null +++ b/examples/mq7/mq7Heater/mq7Heater.ino @@ -0,0 +1,52 @@ +// библиотека для работы с датчиками MQ (Troyka-модуль) +#include + +// имя для пина, к которому подключен датчик +#define PIN_MQ7 A0 +// имя для пина, к которому подключен нагреватель датчика +#define PIN_MQ7_HEATER 11 + +// создаём объект для работы с датчиком +// и передаём ему номер пина выходного сигнала и нагревателя +MQ7 mq7(PIN_MQ7, PIN_MQ7_HEATER); + +void setup() +{ + // открываем последовательный порт + Serial.begin(9600); + // запускаем термоцикл + // в течении 60 секунд на нагревательный элемент подаётся 5 вольт + // в течении 90 секунд — 1,5 вольта + mq7.cycleHeat(); +} + +void loop() +{ + // если прошёл интервал нагрева датчика + // и калибровка не была совершена + if (!mq7.isCalibrated() && mq7.atHeatCycleEnd()) { + // выполняем калибровку датчика на чистом воздухе + mq7.calibrate(); + // выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт + Serial.print("Ro = "); + Serial.println(mq7.getRo()); + // запускаем термоцикл + mq7.cycleHeat(); + } + // если прошёл интевал нагрева датчика + // и калибровка была совершена + if (!mq7.isCalibrated() && mq7.atHeatCycleEnd()) { + // выводим отношения текущего сопротивление датчика + // к сопротивлению датчика в чистом воздухе (Rs/Ro) + Serial.print("Ratio: "); + Serial.print(mq7.readRatio()); + // выводим значения газов в ppm + Serial.print(" CarbonMonoxide: "); + Serial.print(mq7.readCarbonMonoxide()); + Serial.println(" ppm "); + delay(100); + // запускаем термоцикл + mq7.cycleHeat(); + } +} + diff --git a/examples/mq8/mq8/mq8.ino b/examples/mq8/mq8/mq8.ino new file mode 100644 index 0000000..75b5106 --- /dev/null +++ b/examples/mq8/mq8/mq8.ino @@ -0,0 +1,32 @@ +// библиотека для работы с датчиками MQ (Troyka-модуль) +#include + +//имя для пина, к которому подключен датчик +#define PIN_MQ8 A0 +// создаём объект для работы с датчиком и передаём ему номер пина +MQ8 mq8(PIN_MQ8); + +void setup() +{ + // открываем последовательный порт + Serial.begin(9600); + // перед калибровкой датчика прогрейте его 60 секунд + // выполняем калибровку датчика на чистом воздухе + mq8.calibrate(); + // выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт + Serial.print("Ro = "); + Serial.println(mq8.getRo()); +} + +void loop() +{ + // выводим отношения текущего сопротивление датчика + // к сопротивление датчика в чистом воздухе (Rs/Ro) + Serial.print("Ratio: "); + Serial.print(mq8.readRatio()); + // выводим значения газов в ppm + Serial.print(" LPG: "); + Serial.print(mq8.readHydrogen()); + Serial.println(" ppm "); + delay(100); +} diff --git a/examples/mq8/mq8Heater/mq8Heater.ino b/examples/mq8/mq8Heater/mq8Heater.ino new file mode 100644 index 0000000..d8f967e --- /dev/null +++ b/examples/mq8/mq8Heater/mq8Heater.ino @@ -0,0 +1,46 @@ +// библиотека для работы с датчиками MQ (Troyka-модуль) +#include + +// имя для пина, к которому подключен датчик +#define PIN_MQ8 A0 +// имя для пина, к которому подключен нагреватель датчика +#define PIN_MQ8_HEATER 11 + +// создаём объект для работы с датчиком +// и передаём ему номер пина выходного сигнала и нагревателя +MQ8 mq8(PIN_MQ8, PIN_MQ8_HEATER); + +void setup() +{ + // открываем последовательный порт + Serial.begin(9600); + // включаем нагреватель + mq8.heaterPwrHigh(); + Serial.println("Heated sensor"); +} + +void loop() +{ + // если прошёл интервал нагрева датчика + // и калибровка не была совершена + if (!mq8.isCalibrated() && mq8.heatingCompleted()) { + // выполняем калибровку датчика на чистом воздухе + mq8.calibrate(); + // выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт + Serial.print("Ro = "); + Serial.println(mq8.getRo()); + } + // если прошёл интервал нагрева датчика + // и калибровка была совершена + if (mq8.isCalibrated() && mq8.heatingCompleted()) { + // выводим отношения текущего сопротивление датчика + // к сопротивлению датчика в чистом воздухе (Rs/Ro) + Serial.print("Ratio: "); + Serial.print(mq8.readRatio()); + // выводим значения газов в ppm + Serial.print("LPG: "); + Serial.print(mq8.readHydrogen()); + Serial.println(" ppm "); + delay(100); + } +} diff --git a/examples/mq9/mq9Heater/mq9Heater.ino b/examples/mq9/mq9Heater/mq9Heater.ino new file mode 100644 index 0000000..124c2fe --- /dev/null +++ b/examples/mq9/mq9Heater/mq9Heater.ino @@ -0,0 +1,58 @@ +// библиотека для работы с датчиками MQ (Troyka-модуль) +#include + +// имя для пина, к которому подключен датчик +#define PIN_MQ9 A0 +// имя для пина, к которому подключен нагреватель датчика +#define PIN_MQ9_HEATER 11 + +// создаём объект для работы с датчиком +// и передаём ему номер пина выходного сигнала и нагревателя +MQ9 mq9(PIN_MQ9, PIN_MQ9_HEATER); + +void setup() +{ + // открываем последовательный порт + Serial.begin(9600); + // запускаем термоцикл + // в течении 60 секунд на нагревательный элемент подаётся 5 вольт + // в течении 90 секунд — 1,5 вольта + mq9.cycleHeat(); +} + +void loop() +{ + // если прошёл интервал нагрева датчика + // и калибровка не была совершена + if (!mq9.isCalibrated() && mq9.atHeatCycleEnd()) { + // выполняем калибровку датчика на чистом воздухе + mq9.calibrate(); + // выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт + Serial.print("Ro = "); + Serial.println(mq9.getRo()); + // запускаем термоцикл + mq9.cycleHeat(); + } + // если прошёл интевал нагрева датчика + // и калибровка была совершена + if (mq9.isCalibrated() && mq9.atHeatCycleEnd()) { + // выводим отношения текущего сопротивление датчика + // к сопротивлению датчика в чистом воздухе (Rs/Ro) + Serial.print("Ratio: "); + Serial.print(mq9.readRatio()); + // выводим значения газов в ppm + Serial.print(" LPG: "); + Serial.print(mq9.readLPG()); + Serial.print(" ppm "); + Serial.print(" Methane: "); + Serial.print(mq9.readMethane()); + Serial.print(" ppm "); + Serial.print(" CarbonMonoxide: "); + Serial.print(mq9.readCarbonMonoxide()); + Serial.println(" ppm "); + delay(100); + // запускаем термоцикл + mq9.cycleHeat(); + } +} +