mirror of
https://github.com/amperka/TroykaMQ.git
synced 2025-03-15 04:27:34 +03:00
initial commit
This commit is contained in:
commit
2bb7e88bec
112
BaseMQ.cpp
Normal file
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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);
|
||||
}
|
||||
|
55
examples/mq2/mq2Heater/mq2Heater.ino
Normal file
55
examples/mq2/mq2Heater/mq2Heater.ino
Normal file
@ -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
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);
|
||||
}
|
48
examples/mq3/mq3Heater/mq3Heater.ino
Normal file
48
examples/mq3/mq3Heater/mq3Heater.ino
Normal file
@ -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
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);
|
||||
}
|
47
examples/mq4/mq4Heater/mq4Heater.ino
Normal file
47
examples/mq4/mq4Heater/mq4Heater.ino
Normal file
@ -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
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);
|
||||
}
|
49
examples/mq5/mq5Heater/mq5Heater.ino
Normal file
49
examples/mq5/mq5Heater/mq5Heater.ino
Normal file
@ -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
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);
|
||||
}
|
46
examples/mq6/mq6Heater/mq6Heater.ino
Normal file
46
examples/mq6/mq6Heater/mq6Heater.ino
Normal file
@ -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);
|
||||
}
|
||||
}
|
52
examples/mq7/mq7Heater/mq7Heater.ino
Normal file
52
examples/mq7/mq7Heater/mq7Heater.ino
Normal file
@ -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
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);
|
||||
}
|
46
examples/mq8/mq8Heater/mq8Heater.ino
Normal file
46
examples/mq8/mq8Heater/mq8Heater.ino
Normal file
@ -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);
|
||||
}
|
||||
}
|
58
examples/mq9/mq9Heater/mq9Heater.ino
Normal file
58
examples/mq9/mq9Heater/mq9Heater.ino
Normal file
@ -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();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user