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);
}
#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();
}
}
}
#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
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.
Video untuk Project II - 7. Monitoring Suhu dan Kelembapan dengan SMS berbasis Arduino
File yang diperlukan
Sumber : Tutorial dasar Arduino
Comments
Post a Comment