블루이노

SMART-HOME GAS-DETECT

ZEROWIN.TECH 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 표시합니다.

 

MMB_Smarthome_v01_3_gas.aia
1.66MB

'블루이노' 카테고리의 다른 글

스마트홈 도어락 응용예제  (0) 2020.12.30
AppInventor BluetoothLE 최신버전 적용  (0) 2020.12.11