블루이노
SMART-HOME GAS-DETECT
ZEROWIN.ART
2020. 12. 31. 17:29
728x90
기본화면
부팅후 SAFE 디스플레이
비상화면
가스 감지가 되면 EMERGENCY! 표시한다.
그리고 경고음을 발생하고 빨간 LED를 깜박인다.
개스팬과 실링팬을 동작한다.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define RBG_R 23
#define RBG_G 35
#define RBG_B 36
#define PIN_GAS_FAN 4
#define PIN_FAN 32
#define PIN_GAS_FAN 4
extern void MQ135_setup();
extern void MQ135_loop();
extern int mq135_lpg;
extern int mq135_co;
extern int mq135_smoke;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void printLCD(int col, int row , char *str) {
for(int i=0 ; i < strlen(str) ; i++){
lcd.setCursor(col+i , row);
lcd.print(str[i]);
}
}
void setup()
{
Serial.begin(9600);
Serial1.begin(9600); //Bluetooth Module
pinMode(PIN_FAN, OUTPUT);
pinMode(PIN_GAS_FAN, OUTPUT);
digitalWrite(PIN_FAN, false);
digitalWrite(PIN_GAS_FAN, false);
lcd.init();
lcd.backlight();
printLCD(0, 0, "MQ135 GAS ");
printLCD(0, 1, "Calibration");
MQ135_setup();
printLCD(0, 0, "GAS-SAFE ");
printLCD(0, 1, "NORMAL ");
}
char sData[64] = { 0x00, };
#define R_MAXNUM 32 // 64
char rData[R_MAXNUM] = { 0x00, };
int rPos = 0;
int loop_count = 0;
int gas_detect_timeout = 0;
int emergency_sound[] = {880,440,880,440,880,440,880,440};
void loop()
{
loop_count += 1;
if(loop_count % 10 == 0)
{
MQ135_loop();
}
if(0 < gas_detect_timeout)
{
gas_detect_timeout -= 1;
printLCD(0, 0, "GAS-DETECT ");
sprintf(sData, "%4d %4d %4d ",
mq135_lpg, mq135_co, mq135_smoke);
printLCD(0, 1, sData);
memset(sData, 0x00, 64);
sprintf(sData, "{%04d,%04d,%04d}",
mq135_lpg, mq135_co, mq135_smoke);
Serial.println(sData);
Serial1.println(sData);
digitalWrite(PIN_FAN, true);
digitalWrite(PIN_GAS_FAN, true);
tone(11, emergency_sound[gas_detect_timeout % 8], 500);
digitalWrite(RBG_R, gas_detect_timeout % 2);
}
else {
printLCD(0, 0, "GAS-SAFE ");
sprintf(sData, "%4d %4d %4d ",
mq135_lpg, mq135_co, mq135_smoke);
printLCD(0, 1, sData);
memset(sData, 0x00, 64);
sprintf(sData, "{%04d,%04d,%04d}",
mq135_lpg, mq135_co, mq135_smoke);
Serial.println(sData);
Serial1.println(sData);
digitalWrite(PIN_FAN, false);
digitalWrite(PIN_GAS_FAN, false);
digitalWrite(RBG_R, LOW);
}
if(50 < mq135_smoke)
{
printLCD(0, 0, "GAS-DETECT ");
printLCD(0, 1, "EMERGENCY! ");
gas_detect_timeout = 40;
digitalWrite(RBG_R, HIGH);
Serial.println("GAS-DETECT");
Serial1.println("GAS-DETECT");
}
if(0 < Serial.available())
{
String str = Serial.readString();
Serial.println(str);
}
while(0 < Serial1.available()) {
char ch = Serial1.read();
rData[rPos] = ch;
rPos += 1;
// Serial.print(ch); // 문자열을 출력
if(ch == '\n')
{
Serial.println(rData); // 문자열을 출력
}
}
delay(100);
}
스마트폰앱 앱인벤터2
가스 데이터를 그래프로 표시합니다.
가스를 감지하면 GAS-DETECT 표시합니다.