#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