Monitoring Suhu dan Kelembapan dengan SMS




Arduino UNO digunakan untuk memproses hasil pembacaan sensor DHT11 dan kemudian akan dikirim setelah ada SMS masuk dengan format SMS : “GET” . Jika tidak ada SMS maka suhu hanya ditampilkan suhu dan kelembaban pada LCD, dan jika SMS yang masuk tidak berupa tulisan "GET", maka Aruduino akan mengirimkan pesan bertuliskan "format salah". Modem atau modul GSM yang digunakan pada project ini dengan tipe SIM900A, dapat juga menggunakan Modem Wavecom, coding untuk kedua modem tersebut telah disediakan di blog ini.


Kebutuhan Hardware
  • Sensor DHT11
  • Modem SMS Getway (SIM900A)
  • Modul Serial RS232
  • Modul LCD 2x16 atau 20x4 (dengan koneksi i2c)
  • Modul Arduino UNO
  • Power supply +5Volt


DHT11 | Source
SIM900A | Source


Diagram Blok


Schematic (Wavecom)



Jika menggunakan SIM900A, maka tidak perlu rangkaian RS232, langsung saja koneksikan ke Arduino.


Arduino - LCD 16x2



Arduino LCD 20x4



Jika menggunakan LCD 20x4 dan koneksi I2C (I Square C) maka wiringya adalah sebagai berikut 




Selengkapnya tentang koneksi I2C --> Project V - 14


Arduino - DHT11


Arduino - Wavecom GSM Module


Jika menggunakan SIM900A maka wiring nya adalah sebagai berikut



Coding --> Wavecom

#include <LiquidCrystal.h>
#include <SoftwareSerial.h>
#include "DHT.h"
#define DHTPIN 10
#define DHTTYPE DHT11

LiquidCrystal lcd(2,3, 4, 5, 6, 7);
const int rxpin = 8;
const int txpin = 9;
SoftwareSerial gsm(rxpin, txpin);

DHT dht(DHTPIN, DHTTYPE);
int h,t;

char str,f;
int i,j;

String inString="";

String inString2="";
String Stemp="";
String inbox="";
String noPengirim="";

void setup(){
  gsm.begin(9600);
  dht.begin();
  lcd.begin(16, 2);
  lcd.print("Tes Koneksi...");
  delay(1000);
  gsm.println("AT");
  getmodem();
  getmodem();
  lcd.setCursor(0, 1);
  lcd.print(inString);
  delay(2000);
  lcd.clear();
  lcd.print("Telemetri DHT11");
  lcd.setCursor(0,1);
  lcd.print("by request SMS");
  delay(3000);
}

//=========================program utama
void loop(){
  lcd.begin(16,2);
  lcd.clear();
  lcd.print("Tunggu SMS masuk");
  lcd.setCursor(0,1);
  lcd.print("kode:GET/Get/get");
  //----------------------data ENTER
  getmodem();
  lcd.clear();
  lcd.print("SMS Masuk...");
  //----------------------data CMTI:
  getmodem2();
  i=inString2.indexOf(':');
  if(i>0){
     Stemp=inString2.substring(0,i);
     if(Stemp=="+CMTI"){    
         i=inString2.indexOf(',');
         j=inString2.length ();
         i=i+1;
         inbox=inString2.substring(i,j);    
         gsm.print("AT+CMGR=");
         gsm.println(inbox);    
         getmodem();
         getmodem();
         getmodem2();
         i=inString.indexOf(',');
         i=i+2;
         j=inString.indexOf(',',i);
         j=j-1;      
         noPengirim=inString.substring(i,j);
//--------------------------------isi SMS jika Get
         if(inString2=="GET" || inString2=="Get" || inString2=="get"){
           baca_sensor();
           kirim_sms();
         }    
//---------------------------------other sms
         else {
           gsm.print("AT+CMGS=");
           gsm.println(noPengirim);
           delay(1000);
           gsm.print("Format Salah!");
           gsm.write((byte)26);
           gsm.println();      
           lcd.clear();
           lcd.print("Format Salah!");
         }
     
        delay(3000);
        lcd.clear();
        lcd.print("Hapus SMS:");
       //-------------------------hapus inbox
        getmodem();
        getmodem();  
        gsm.print("AT+CMGD=");
        gsm.println(inbox);
        do{
        getmodem();
        }
        while(inString != "OK");
        lcd.print(inbox);
        lcd.setCursor(0,1);
        lcd.print(inString);
        delay(3000);      
       }
    }
}
//===========================baca data serial
void getmodem(){
 f=1;
 inString="";
 while(f){
   if(gsm.available()){
       str=gsm.read();          
       switch (str){
           case '\r': break;
           case '\n':f=0; break;
           default:inString+=(char)str;
         }    
     }
 }
}
//====================================
void getmodem2(){
 f=1;
 inString2="";
 while(f){
   if(gsm.available()>0){
       str=gsm.read();        
       switch (str){
           case '\r': break;
           case '\n':f=0; break;
           default:inString2+=(char)str;
         }
     }
 }
}

//===================================baca sensor DHT11
void baca_sensor(){
  h = dht.readHumidity();
  t = dht.readTemperature();
  lcd.clear();  
  lcd.print("Temp:");
  lcd.print(t);
  lcd.print("C");
  lcd.setCursor(0,1);
  lcd.print("Humi:");
  lcd.print(h);
  lcd.print("%");
  delay(3000);
}

//====================================kirim SMS
void kirim_sms(){
    gsm.print("AT+CMGS=");
    gsm.println(noPengirim);
    delay(1000);
    gsm.print("Suhu:");
    gsm.print(t);
    gsm.print("C, Kelembaban:");
    gsm.print(h);
    gsm.print("%.");
    gsm.write((byte)26);
    gsm.println();
    lcd.clear();
    lcd.print("Kirim SMS....");
    delay(2000);
}


Coding --> Sim900A (Recomended)

#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#include "DHT.h"
#define DHTPIN 10
#define DHTTYPE DHT11

LiquidCrystal_I2C lcd(0x3F, 20, 4);
#include <GPRS_Shield_Arduino.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#define PIN_TX    9
#define PIN_RX    8
#define BAUDRATE  9600
#define PHONE_NUMBER "085640207374"// sesuaikan
#define MESSAGE_FALSE  "Format salah"

#define MESSAGE_LENGTH 160
char message[MESSAGE_LENGTH];
int messageIndex = 0;
char data[50];
char phone[16];
char datetime[24];
int suhu1, suhu2, suhu3, suhu4;
String suhu_all;
DHT dht(DHTPIN, DHTTYPE);
int h, t;

GPRS gprsTest(PIN_TX, PIN_RX, BAUDRATE); //RX,TX,BaudRate

void setup() {
  dht.begin();
  lcd.begin();
  lcd.setCursor(0, 0);
  lcd.print("Initialization.....");
  lcd.setCursor(0, 2);
  lcd.print("       Waiting     ");
  delay(1000);
  while (!gprsTest.init()) {
    delay(1000);
    Serial.print("init error\r\n");
  }
  Serial.println("gprs init success");
  //In order not to full SIM Memory, is better to delete it
  gprsTest.deleteSMS(messageIndex);
  delay(1000);
  lcd.clear();
}

//=========================program utama
void loop() {
  lcd.setCursor(0, 0);
  lcd.print("Monitoring DHT11-SMS");
  lcd.setCursor(0, 2);
  lcd.print("       READY      ");
  messageIndex = gprsTest.isSMSunread();
  if (messageIndex > 0) { //At least, there is one UNREAD SMS
    gprsTest.readSMS(messageIndex, message, MESSAGE_LENGTH, phone, datetime);
    if (String(message) == "GET")
    {
      Serial.print("From number: ");
      Serial.println(phone);
      Serial.print("Datetime: ");
      Serial.println(datetime);
      Serial.print("Recieved Message: ");
      Serial.println(message);
      lcd.setCursor(0, 1);
      lcd.print("    New Message   ");
      lcd.setCursor(3, 2);
      lcd.print(phone);
      lcd.setCursor(8, 3);
      lcd.print(message);
      delay(2000);
      h = dht.readHumidity();
      t = dht.readTemperature();
      lcd.setCursor(0, 2);
      lcd.print("                    ");
      delay(100);
      suhu_all = String(t) + "C  " + String(h) + "% ";
      lcd.setCursor(7, 2);
      lcd.print(suhu_all);
      delay(2000);
      lcd.setCursor(0, 3);
      lcd.print("Sending data . . .");
      Serial.println(suhu_all);
      delay(3000);
      suhu_all.toCharArray(data, 50);
      gprsTest.sendSMS(PHONE_NUMBER, data);
      lcd.clear();
    }
    else
    {
      lcd.setCursor(0, 2);
      lcd.print("      Format Salah    ");
      delay(1000);
      gprsTest.sendSMS(PHONE_NUMBER, MESSAGE_FALSE);
      lcd.clear();
    }
  }
}


Cara Kerja Alat

1. Koneksikan antara sistem Arduino dengan peripheral lain seperti pada rangkaian (skematik).
2. Pasang power supply (adaptor 5 V) dan hidupkan (colokkan ke sumber PLN 220V) sehingga
    lampu LED indikator nyala, LCD juga nyala.

3. Ketika pertama kali dihidupkan



4. Ketika modem telah siap, maka LCD akan menampilkan bahwa sistem telah ready


5. Ketika ada SMS bertuliskan karakter "GET" maka nomer dan tulisan tersebut akan ditampilkan
    pada LCD

6. Selanjutnya LCD akan menampilkan data hasil pembacaan sensor DHT11


7. Arduino akan mengirim data tersebut ke nomer tertentu yang telah ditentukan pada program.

8. Tampilan kembali ke normal lagi (beranda).



Video untuk Project II - 7. Monitoring Suhu dan Kelembapan dengan SMS berbasis Arduino




File yang diperlukan

Comments

Popular posts from this blog

Tugas Pendahuluan (L1) Fisika Dasar

Cara mengatasi sinyal hilang setelah update atau Flashing ROM xiaomi redmi 2 prime

Program sensor kelembaban tanah Soil moisture sensor