Selasa, 28 Mei 2019

sensor gas sms dan lcd

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

//Pin software Serial untuk komunikasi dengan module SIM800L
SoftwareSerial SIM800L(2, 3); // RX | TX

const int     SensorPin = A0;  // Gas Sensor Here
const int     TestPin = A1;    //Tombol Test
const int     Speaker = 10;
const int     merah = 13; //Out Digital To Emergency Lamp or Sirine drive with Relay
const int     BuzzerPin = 12; //Active Buzzer
const int     hijau = 11;    //LED Indicator Sensor
//https://www.tokopedia.com/rajacell/etalase/arduino-board-module
float         ppmGas;      //Gas dalam 'ppm'->perkiraan
float         GasPercent;  //Gas dalam 'Percent'
const int     GasMax = 50;  //Persentase Maximal Gas
uint8_t       SmsCount = 0; // SMS Count Variable
const int     SmsMax = 3;  //Maksimal SMS yang akan Dikirim
const long    intervalSMS = 10;  //Interval pengiriman setiap sms dalam detik
unsigned long previousMillis = 0;
String        gasStat;
//https://www.tokopedia.com/rajacell/etalase/arduino-board-module
int ledState = LOW;
unsigned long previousMillis2 = 0;
long interval = 1000;

void setup() {
// put your setup code here, to run once:
pinMode (A1,INPUT_PULLUP);
pinMode (11,OUTPUT);
digitalWrite (11, LOW);
pinMode (12,OUTPUT);
pinMode (13,OUTPUT);

lcd.begin(16, 2);
lcd.init();                   
  lcd.init();
  lcd.backlight();


Serial.begin(9600);
SIM800L.begin(9600); 
//https://www.tokopedia.com/rajacell/etalase/arduino-board-module
lcd.setCursor (0,0);
lcd.print(F("Sensor Kebocoran"));
lcd.setCursor (0,1);
lcd.print(F("    Gas LPG    "));
delay (2000);
lcd.clear();
}
//Skecth program ini dibuat oleh Dani-Rajacell untuk www.belajarduino.com
//Silahkan pergunakan coding ini secara free dan mohon untuk tidak menghapus marking ini
//sebagai bentuk apresiasi atas free sharing program ini.
//Untuk kebutuhan Module dan Board Arduino silahkan bisa dibeli di :
//https://www.tokopedia.com/rajacell/etalase/arduino-board-module
void loop() {
// put your main code here, to run repeatedly:
GasPercent = map(analogRead(SensorPin),0,1023,0,100);
ppmGas = map(analogRead(SensorPin),0,1023,0,10000);
interval = map(analogRead(SensorPin),0,1023,1000,10);

Serial.print (GasPercent ); Serial.println (" %");
Serial.print (ppmGas,0); Serial.println (" ppm");

lcd.setCursor (0,0);
lcd.print ("P.Gas:"); lcd.print (GasPercent,1);
lcd.print ("%"); lcd.print ("      ");
lcd.setCursor (0,1);
lcd.print ("C.Gas:"); lcd.print (ppmGas,0);
lcd.print ("ppm"); lcd.print ("    ");
//https://www.tokopedia.com/rajacell/etalase/arduino-board-module
if( GasPercent>GasMax || digitalRead(TestPin) == LOW ){
 
digitalWrite(BuzzerPin,HIGH);
digitalWrite(merah,LOW);
digitalWrite(hijau, HIGH);

gasStat ="*";
if(SmsCount<SmsMax){
  //lcd.backlight();
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= (intervalSMS*1000)) {
  previousMillis = currentMillis;
  kirimSMS();
  SmsCount=SmsCount+1;
 //https://www.tokopedia.com/rajacell/etalase/arduino-board-module
     }
   }
 }
else {
digitalWrite(BuzzerPin,LOW);
digitalWrite(merah,HIGH);
digitalWrite(hijau, LOW);

gasStat ="*";
SmsCount=0; //Reset hitungan SMS
//lcd.noBacklight();
}

blinkingLed (interval);

//delay scanning sensor
delay(100);   


}
//Skecth program ini dibuat oleh Dani-Rajacell untuk www.belajarduino.com
//Silahkan pergunakan coding ini secara free dan mohon untuk tidak menghapus marking ini
//sebagai bentuk apresiasi atas free sharing program ini.
//Untuk kebutuhan Module dan Board Arduino silahkan bisa dibeli di :
//https://www.tokopedia.com/rajacell/etalase/arduino-board-module
void kirimSMS () {
  int tes = 0;
  if(digitalRead(TestPin) == LOW){tes=1;}
  String PesanSMS = ("Terjadi Kebocoran Gas LPG dengan konsentrasi Gas ")+String(GasPercent)+("% ")+String(ppmGas)+(" ppm");
  lcd.clear();
  lcd.setCursor (0,0);
  if(tes==0){lcd.print ("   WARNING!!!   ");}
   if(tes==1){lcd.print ("   TESTING!!!   ");}
  lcd.setCursor (0,1);
  lcd.print ("Send SMS.");
  Serial.println("Menyiapkan Pesan Text");
  SIM800L.write("AT+CMGF=1\r\n");
  delay(500);
  lcd.print (".");
  delay(500);
  Serial.println("Set SMS ke Nomor Tujuan");
  //Tulis nomor tujuan SMS pada perintah dibawah ini
  SIM800L.write("AT+CMGS=\"+6285384571695\"\r\n");
  delay(500);
  lcd.print (".");
  delay(500);
  lcd.print (".");
  Serial.println("Mengirim pesan SMS");
  //Tulis pesan SMS pada baris perintah dibawah ini
  SIM800L.print(PesanSMS);
  Serial.println(PesanSMS);
  //https://www.tokopedia.com/rajacell/etalase/arduino-board-module
  delay(500);
  lcd.print (".");
  delay(500);
  lcd.print (".");
  Serial.println("Mengakhiri SMS");
  SIM800L.write((char)26);
  delay(500);
  lcd.print ("..");   
  Serial.println("SMS Selesai Dikirim!");
  delay(500);
  lcd.setCursor(0,1);
  lcd.print ("   SMS SENT!!   ");
  delay(500);
  lcd.clear();
}
//Skecth program ini dibuat oleh Dani-Rajacell untuk www.belajarduino.com
//Silahkan pergunakan coding ini secara free dan mohon untuk tidak menghapus marking ini
//sebagai bentuk apresiasi atas free sharing program ini.
//Untuk kebutuhan Module dan Board Arduino silahkan bisa dibeli di :
//https://www.tokopedia.com/rajacell/etalase/arduino-board-module
void blinkingLed (long in ) {
 unsigned long currentMillis2 = millis();
  if (currentMillis2 - previousMillis2 >= in) {
    previousMillis2 = currentMillis2;
    if (ledState == LOW) {
      //https://www.tokopedia.com/rajacell/etalase/arduino-board-module
      ledState = HIGH;
    } else {
      ledState = LOW;
    }
   
    lcd.setCursor (14,0);
    lcd.print (gasStat);
  }
}

Tidak ada komentar:

Posting Komentar