Skip to content

Instantly share code, notes, and snippets.

@khusamov
Created March 7, 2021 19:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save khusamov/8be81a6c87f3d3cdf29bd63e390ac3f9 to your computer and use it in GitHub Desktop.
Save khusamov/8be81a6c87f3d3cdf29bd63e390ac3f9 to your computer and use it in GitHub Desktop.
Датчик углекислого газа MQ-135 (Troyka-модуль)
// библиотека для работы с дисплеем
#include <TroykaTextLCD.h>
// библиотека для работы с датчиками MQ (Troyka-модуль)
#include <TroykaMQ.h>
// имя для пина, к которому подключен датчик
#define PIN_MQ135 A0
// имя для пина, к которому подключен нагреватель датчика
#define PIN_MQ135_HEATER 11
// создаём объект для работы с датчиком
// и передаём ему номер пина выходного сигнала и нагревателя
MQ135 mq135(PIN_MQ135);
// создаем объект для работы с дисплеем
TroykaTextLCD lcd;
#define CLEAR " "
void setup() {
// открываем последовательный порт
Serial.begin(9600);
// устанавливаем количество столбцов и строк экрана
lcd.begin(16, 2);
// устанавливаем контрастность в диапазоне от 0 до 63
lcd.setContrast(27);
// устанавливаем яркость в диапазоне от 0 до 255
lcd.setBrightness(255);
// устанавливаем курсор в колонку 0, строку 0
lcd.setCursor(0, 0);
lcd.print(CLEAR);
lcd.setCursor(0, 0);
lcd.print("Heated sensor...");
// включаем нагреватель
mq135.heaterPwrHigh();
}
void loop() {
// если прошёл интервал нагрева датчика
// и калибровка не была совершена
if (!mq135.isCalibrated() && mq135.heatingCompleted()) {
lcd.setCursor(0, 0);
lcd.print(CLEAR);
lcd.setCursor(0, 0);
lcd.print("Calibrate...");
lcd.setCursor(0, 1);
lcd.print(CLEAR);
// выполняем калибровку датчика на чистом воздухе
mq135.calibrate();
// если известно сопротивление датчика на чистом воздухе
// можно его указать вручную, допустим 160
// mq135.calibrate(160);
// выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт
Serial.print("Ro = ");
Serial.println(mq135.getRo());
lcd.setCursor(0, 0);
lcd.print(CLEAR);
lcd.setCursor(0, 0);
lcd.print(String("Ro = ") + String(mq135.getRo()));
}
// если прошёл интевал нагрева датчика
// и калибровка была совершена
if (mq135.isCalibrated() && mq135.heatingCompleted()) {
// выводим отношения текущего сопротивление датчика
// к сопротивлению датчика в чистом воздухе (Rs/Ro)
Serial.print("Ratio: ");
Serial.print(mq135.readRatio());
// выводим значения газов в ppm
Serial.print("\tCO2: ");
Serial.print(mq135.readCO2());
Serial.println(" ppm");
lcd.setCursor(0, 1);
lcd.print(CLEAR);
lcd.setCursor(0, 1);
lcd.print(String("CO2: ") + String(mq135.readCO2()) + String(" ppm"));
delay(100);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment