Датчик газа LPG своими руками
Сжиженный нефтяной газ или сжиженный попутный газ или LPG представляет собой горючую смесь углеводородных газов, используемых в качестве топлива в отопительных приборах, кухонном оборудовании и транспортных средствах. LPG – это газ без запаха, но для придания ему запаха добавляются добавки.

Этот газ при его превышении доли в атмосфере небезопасен и может привести к возгораниям, поэтому важно иметь детектор утечки такого газа, который мы соберем в рамках данного проекта.
Наш газовый детектор на основе ESP8266 контролирует выходной сигнал датчика MQ-2, производит считывание 500 раз и берет среднее значение выборки, чтобы уменьшить шум при чтении, а если значение превышает пороговое значение, он отправляет электронное письмо получателю. Схема подключения ESP8266 и датчика газа представлена далее.

Код программы детектора газа следующий.
/*
Детектор газа контролирует выходной сигнал датчика сжиженного нефтяного газа 500 раз и берет среднее значение выборки, чтобы уменьшить шум чтения,
и если значение превышает пороговое значение, он отправляет электронное письмо получателю.
Перед загрузкой кода обязательно внесите изменения в заголовочный файл Gsender:
const int SMTP_PORT = 465;// Порт SMTP измените его, если вы используете другой SMTP
const char* SMTP_SERVER = "smtp.gmail.com";// Изменение SMTP-сервера Gmail, если вы используете другой SMTP
const char* EMAILBASE64_LOGIN = "YOUR EMAIL ID ENCODED WITH BASE64";// Ваш адрес электронной почты должен быть закодирован в base64
const char* EMAILBASE64_PASSWORD = "YOUR PASSWORD ENCODED WITH BASE64";// ваш пароль должен быть закодирован в base64
const char* FROM = "youremail@gmail.com";// ваш адрес электронной почты с кодировкой
Измените эти строки в соответствии с вашими потребностями:
const int sensorPin = A0; // подключите выход датчика A0 к этому контакту
const char *ssid = "**********"; // Название сети WIFI
const char *password = "*********"; // сетевой пароль WIFI
uint8_t connection_state = 0; // Подключен к Wi-Fi или нет
uint8_t nSampling = 500; // изменить согласно вашей потребности
uint16_t threshold = 200; // изменить согласно вашей потребности
*/
#include <ESP8266WiFi.h>
#include "Gsender.h"
const int sensorPin = A0; // подключите выход датчика A0 к этому контакту
const char *ssid = "**********"; // Название сети WIFI
const char *password = "*********"; // сетевой пароль WIFI
uint8_t connection_state = 0; // Подключен к Wi-Fi или нет
uint8_t nSampling = 500; // изменить согласно вашей потребности
uint16_t threshold = 200; // изменить согласно вашей потребности
void setup()
{
Serial.begin(115200);
pinMode(sensorPin, INPUT);
pinMode(16, OUTPUT);
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
digitalWrite(16, HIGH);
Serial.begin(115200); // изменить согласно вашей потребности
WiFi.begin(ssid, password);
Serial.print("\nConnecting to WiFi network");
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
}
Serial.println("\nConnected to the WiFi network: " + WiFi.SSID() + " and strength is: " + WiFi.RSSI());
}
void loop()
{
if ((WiFi.status() == WL_CONNECTED))
{
float total = 0;
for (int i = 1; i <= nSampling; i++)
{
int x = analogRead(A0);
total += x;
delay(10);
}
total /= nSampling;
Serial.println(total);
if (total >= threshold)
{
Gsender *gsender = Gsender::Instance(); // Получение указателя на экземпляр класса
String subject = "Gas Leakage";
if (gsender->Subject(subject)->Send("recipient@gmail.com", "Gas Leakage found!"))
{ // изменить получателя на своего получателя
Serial.println("Message send.");
}
else
{
Serial.print("Error sending message: ");
Serial.println(gsender->getError());
}
delay(300000);
}
}
else if (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
}
}
Файл Gsender.h
#ifndef G_SENDER
#define G_SENDER
#define GS_SERIAL_LOG_1
//#define GS_SERIAL_LOG_2
#include <WiFiClientSecure.h>
class Gsender
{
protected:
Gsender();
private:
const int SMTP_PORT = 465;
const char* SMTP_SERVER = "smtp.gmail.com";
const char* EMAILBASE64_LOGIN = "YOUR EMAIL ID ENCODED WITH BASE64";
const char* EMAILBASE64_PASSWORD = "YOUR PASSWORD ENCODED WITH BASE64";
const char* FROM = "youremail@gmail.com";
const char* _error = nullptr;
char* _subject = nullptr;
String _serverResponce;
static Gsender* _instance;
bool AwaitSMTPResponse(WiFiClientSecure &client, const String &resp = "", uint16_t timeOut = 10000);
public:
static Gsender* Instance();
Gsender* Subject(const char* subject);
Gsender* Subject(const String &subject);
bool Send(const String &to, const String &message);
String getLastResponce();
const char* getError();
};
#endif // G_SENDER
Файл Gsender.cpp
#include "Gsender.h"
Gsender* Gsender::_instance = 0;
Gsender::Gsender(){}
Gsender* Gsender::Instance()
{
if (_instance == 0)
_instance = new Gsender;
return _instance;
}
Gsender* Gsender::Subject(const char* subject)
{
delete [] _subject;
_subject = new char[strlen(subject)+1];
strcpy(_subject, subject);
return _instance;
}
Gsender* Gsender::Subject(const String &subject)
{
return Subject(subject.c_str());
}
© digitrode.ru