initial commit

This commit is contained in:
Igor89 2016-04-29 17:42:44 +03:00
commit 2bb7e88bec
34 changed files with 1122 additions and 0 deletions

112
BaseMQ.cpp Normal file

@ -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;
}
}

39
BaseMQ.h Normal file

@ -0,0 +1,39 @@
#ifndef BaseMQ_H
#define BaseMQ_H
#include <Arduino.h>
// кол-во считываний значений в цикле
#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

30
MQ2.cpp Normal file

@ -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);
}

22
MQ2.h Normal file

@ -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_

22
MQ3.cpp Normal file

@ -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);
}

20
MQ3.h Normal file

@ -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_

18
MQ4.cpp Normal file

@ -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);
}

19
MQ4.h Normal file

@ -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_

22
MQ5.cpp Normal file

@ -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);
}

20
MQ5.h Normal file

@ -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_

18
MQ6.cpp Normal file

@ -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);
}

19
MQ6.h Normal file

@ -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_

18
MQ7.cpp Normal file

@ -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);
}

19
MQ7.h Normal file

@ -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_

18
MQ8.cpp Normal file

@ -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);
}

19
MQ8.h Normal file

@ -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_

26
MQ9.cpp Normal file

@ -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);
}

21
MQ9.h Normal file

@ -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_

20
README.md Normal file

@ -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).

13
TroykaMQ.h Normal file

@ -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_

42
examples/mq2/mq2/mq2.ino Normal file

@ -0,0 +1,42 @@
// библиотека для работы с датчиками MQ (Troyka-модуль)
#include <TroykaMQ.h>
//имя для пина, к которому подключен датчик
#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);
}

@ -0,0 +1,55 @@
// библиотека для работы с датчиками MQ (Troyka-модуль)
#include <TroykaMQ.h>
// имя для пина, к которому подключен датчик
#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);
}
}

33
examples/mq3/mq3/mq3.ino Normal file

@ -0,0 +1,33 @@
// библиотека для работы с датчиками MQ (Troyka-модуль)
#include <TroykaMQ.h>
//имя для пина, к которому подключен датчик
#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);
}

@ -0,0 +1,48 @@
// библиотека для работы с датчиками MQ (Troyka-модуль)
#include <TroykaMQ.h>
// имя для пина, к которому подключен датчик
#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);
}
}

32
examples/mq4/mq4/mq4.ino Normal file

@ -0,0 +1,32 @@
// библиотека для работы с датчиками MQ (Troyka-модуль)
#include <TroykaMQ.h>
//имя для пина, к которому подключен датчик
#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);
}

@ -0,0 +1,47 @@
// библиотека для работы с датчиками MQ (Troyka-модуль)
#include <TroykaMQ.h>
// имя для пина, к которому подключен датчик
#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);
}
}

35
examples/mq5/mq5/mq5.ino Normal file

@ -0,0 +1,35 @@
// библиотека для работы с датчиками MQ (Troyka-модуль)
#include <TroykaMQ.h>
//имя для пина, к которому подключен датчик
#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);
}

@ -0,0 +1,49 @@
// библиотека для работы с датчиками MQ (Troyka-модуль)
#include <TroykaMQ.h>
// имя для пина, к которому подключен датчик
#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);
}
}

32
examples/mq6/mq6/mq6.ino Normal file

@ -0,0 +1,32 @@
// библиотека для работы с датчиками MQ (Troyka-модуль)
#include <TroykaMQ.h>
//имя для пина, к которому подключен датчик
#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);
}

@ -0,0 +1,46 @@
// библиотека для работы с датчиками MQ (Troyka-модуль)
#include <TroykaMQ.h>
// имя для пина, к которому подключен датчик
#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);
}
}

@ -0,0 +1,52 @@
// библиотека для работы с датчиками MQ (Troyka-модуль)
#include <TroykaMQ.h>
// имя для пина, к которому подключен датчик
#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();
}
}

32
examples/mq8/mq8/mq8.ino Normal file

@ -0,0 +1,32 @@
// библиотека для работы с датчиками MQ (Troyka-модуль)
#include <TroykaMQ.h>
//имя для пина, к которому подключен датчик
#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);
}

@ -0,0 +1,46 @@
// библиотека для работы с датчиками MQ (Troyka-модуль)
#include <TroykaMQ.h>
// имя для пина, к которому подключен датчик
#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);
}
}

@ -0,0 +1,58 @@
// библиотека для работы с датчиками MQ (Troyka-модуль)
#include <TroykaMQ.h>
// имя для пина, к которому подключен датчик
#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();
}
}