panduan sms controller v2.pdf

25
SMS Controller V2 www.inkubator-teknologi.com 1 Panduan SMS Controller V2 TEORI SINGKAT : 1. Komunikasi Modem – Mikrokontroler. Mikrokontroler sebagai komponen utama berfungsi untuk member perintah berupa ‘kirim’ SMS maupun ‘baca’ SMS. Perintah tersebut dikerjakan melalui komunikasi antara mikrokontroler dengan modem. Sistem komunikasinya memakai serial RS232, jalurnya melalui port DB15 pada modem : Modem Microcontroller Peripheral I/O Serial Converter HP

Upload: minarto-asmaratmo

Post on 02-Jan-2016

191 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

1

Panduan SMS Controller V2

TEORI SINGKAT :

1. Komunikasi Modem – Mikrokontroler.

Mikrokontroler sebagai komponen utama berfungsi untuk member perintah berupa ‘kirim’

SMS maupun ‘baca’ SMS. Perintah tersebut dikerjakan melalui komunikasi antara

mikrokontroler dengan modem.

Sistem komunikasinya memakai serial RS232, jalurnya melalui port DB15 pada modem :

Modem

Microcontroller

Peripheral I/O

Serial

Converter HP

Page 2: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

2

Dari ke-15 pin tersebut yang dipakai koneksi serial dengan mikrokotroler hanya 3 pin :

• Pin 2 (CTXD)

• Pin 6 (CRXD)

• Pin 9 (GND)

Pada mikrokontroler cukup 3 pin yaitu :

• PORTD.0 (RXD)

• PORTD.1 (TXD)

• Ground

Page 3: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

3

Koneksi serial antara modem dengan mikrokontroller sebagai berikut :

Yang perlu diperhatikan dalam komunikasi ini adalah kecepatannya yang biasa disebut baud

rate, secara default baud rate berbeda- beda untuk setiap modem, misalnya 115200 bps, 9600

bps.

2. AT Command

Agar modem dapat berfungsi maka perlu ada sebuah perintah, dalam hal ini dari

mikrokontroler. Perintah yang dipakai menggunakan ‘AT Command’, disebut demikian

karena setiap perintah (command) diawali dengan ‘AT’ misalnya : AT+CMGR, AT+IPR dll.

Beberpa AT Command yang penting adalah :

AT Command Respon

dari

modem

Keterangan

AT [ENTER] OK Cek koneksi

ATE0 [ENTER] OK Menon-aktifkan echo

ATE1 [ENTER] OK Mengaktifkan echo

U3

MAX232

138

1110

1

34

5

2

6

129147

1615

R1INR2INT1INT2IN

C+

C1-C2+

C2-

V+

V-

R1OUTR2OUTT1OUTT2OUT

VC

CG

ND

MODEM

C6CAP

ke pin TXD (PD.1) C5

CAP

C7CAP

VCC P1

CONNECTOR DB15 (MALE)

815

714

613

512

411

310

291

ke pin RXD (PD.0)

C4

CAP

Page 4: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

4

AT+IPR=[baud rate] [ENTER] OK Seting baud rate

AT+CMGS=[nomor tujuan] [ascii (26)] [is isms]

[ENTER]

OK Kirim sms

AT+CMGD=[inbox] [ENTER] OK Menghapus sms pada

inbox

AT+CMGR=[inbox] [ENTER] OK Membaca sms pada

inbox

PRAKTEK SMS CONTROLLER

Dalam praktek ini kita gunakan SMS Controller V2. Perhatikan modul sms controller :

Persiapan :

Pada paket pembelian SMS Controller V2, sudah tersedia :

• Modul hardware SMS Controller, lengkap dengan modem GSM + SIM Card

• Kabel serial (DB9 to DB15)

• Power Supply untuk modem

Modem

GSM ATmega8535

Sensor suhu LM35

Relay

(NC/NO)

DB 9

LCD 2x16

Reset

Acrilyc

Board Saklar Power

DC in : 12 VDC

Konektor ISP

Konektor

Relay

DB 15

Power

Modem

Slot SIM Card J1

Page 5: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

5

• CD berisi panduan, source code dan file pendukung.

Yang harus disiapkan :

• Power supply 12 Vdc

• USB Downloader

Persiapan Hardware :

o Pasang power supply 12 Vdc ke DC in (jack DC)

o Pasang USB Downloader ke konektor ISP (MOSI, MISO, SCK, RST, GND)

o Pasang kabel serial, DB9 ke port serial modul sms controller dan DB15 ke port serial

modem.

o Pasang power supply modem. Pastikan lampu indicator nyala (merah)

o Aktifkan power, hingga LCD nyala.

o J1 posisi jumper pada “B”

o Pastikan SIM Card (kartu GMS) telah terpasang, jika ingin mengganti, tekan tombol

warna hitam untuk mengeluarkan slot kartu SIM. Isi dengan SIM Card GSM kemudian

pasang lagi dengan benar.

Persiapan software :

o CodeVisionAVR (yang dipakai disini versi 1.24.5)

o Program untuk download seperti ExtremeBurnerAVR, progISP atau yang lain sesuai

downloader yang anda gunakan.

o Copy source code dari CD ke folder yang anda inginkan.

o PERHATIKAN TIPE MIKROKONTROLER ! JIKA MEMAKAI ATMEGA8535 MAKA

SEMUA PROGRAM HARUS MEMAKAI PROGRAMNYA ATMEGA8535, DEMIKIAN

JUGA UNTUK ATMEGA16/16A. PADA SETIAP PROGRAM YANG MEMAKAI

ATMEGA8535 DISERTAKAN $regfile=”m8535.dat”, SEDANGKAN PADA

ATMEGA16/16A memakai $regfile=”m16def.dat”

Page 6: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

6

PERCOBAAN I : Tes AT Command pada modem

Langkah kerja :

1. Buat program Tes ATCommand.c, compile kemudian download ke mikrokontroler.

Atau langsung download file Tes ATCommand.hex.

2. Pada LCD akan tampil “TES AT Command”. Jika koneksi berhasil maka pada baris ke-

2 akan muncul tampilan “OK”. Jika belum muncul coba tekan tombol reset, jika masih

belum mau coba cek mungkin ada kabel yang putus. Terakhir jika belum mau juga

reset modem dengan cara cabut adaptor punya modem, sekitar 15 detik kemudian

pasang lagi.

3. Pastikan Baudrate modem : 9600 bps

Program Tes AT Command:

/*------------------------------------------------- ---- PERCOBAAN I Tes AT Command Hasilnya tampilkan ke LCD www.inkubator-teknologi.com --------------------------------------------------- --*/ #include <mega8535.h> #asm .equ __lcd_port=0x15 ;PORTC #endasm #include <lcd.h> #include <stdio.h> #include <delay.h> #include <stdlib.h> unsigned char data,flag_ser,r; char buffer[70],buf_enter[5] ; //------------------------------------- void get_serial(char *str1) { r=0; flag_ser=0; data=''; do { while(!UCSRA.7); data=UDR; if(data=='\r'){} else if (data=='\n'){ flag_ser=1;} else {

Page 7: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

7

str1[r]=data; r++; } } while(!flag_ser); } void main(void) { // USART Baud rate: 9600 UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x67; lcd_init(16); lcd_clear(); lcd_putsf("Tes AT Command"); delay_ms(1000); printf("AT\r\n"); get_serial(buf_enter); get_serial(buffer); lcd_gotoxy(0,1); lcd_puts(buffer); delay_ms(1000); while (1); }

Penjelasan :

#include <mega8535.h> � Tipe mikrokontroler ATmega8535

#asm .equ __lcd_port=0x15 ;PORTC #endasm

3 baris perintah tersebut berkaitan dengan koneksi LCD, yaitu terhubung ke PORTC. Perhatikan

schematic.

#include <lcd.h> � library LCD #include <stdio.h> � library standar input – output #include <delay.h> � library penundaan waktu #include <stdlib.h> � library standar untuk pengolahan string unsigned char data,flag_ser,r; char buffer[70],buf_enter[5] ;

2 baris untuk deklarasi variabel. Baris kedua merupakan variabel array, nantinya dipakai untuk

menangani kiriman data serial dari modem.

Page 8: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

8

Langsung saja menuju program utama, void main().

Pertama seting register untuk keperluan komunikasi serial :

UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x67;

Hasilnya : baudrate 9600 bps, 1 stop bit, no parity. Setingan ini disesuaikan dengan modem. Harus sama.

lcd_init(16); � inisialisasi LCD yang dipakai berukuran 16 kolom. lcd_clear(); � hapus tampilan LCD, supaya kalau sebelumnya pernah dipakai untuk menampikan sesuatu akan terhapus. lcd_putsf("Tes AT Command"); � menampilkan ke baris 1 tulisan “Tes AT Command”) printf("AT\r\n"); nah ini perintah dari mikrokontroler berupa pengiri man AT Command : “AT” ditambah karakter enter. Dalam bahasa C, perintah e nter cukup dengan mengirim karakter “\r\n”. selanjutnya menunggu balasan dari modem. Awalnya mo dem akan mengirim karakter enter. get_serial(buf_enter); perintah tersebut akan memanggil sub rutin get_seri al kemudian hasilnya disimpan ke dalam variabel array buf_enter. Kita lihat dulu sub rutin get_serial : void get_serial(char *str1) { r=0; flag_ser=0; data=''; do { while(!UCSRA.7); data=UDR; if(data=='\r'){} else if (data=='\n'){ flag_ser=1;} else { str1[r]=data; r++; } } while(!flag_ser); } Register UCSRA.7 dipakai untuk ‘tanda’, apakah suda h selesai (complete) atau belum data yang diterima. Jika masih bernilai ‘0’ ( LOW) maka data belum diterima semua, sehingga masih menunggu di : while(!UCSRA.7); begitu selesai satu karakter diterima (UCSRA.7=1) m aka program melanjutkan ke perintah dibawahnya : data=UDR;

karakter yang diterima (ada di register UDR) disimp an ke variabel ‘data’.

Selanjutnya diuji, apakah data berupa karakter ‘ent er’ atau bukan.

Page 9: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

9

if(data=='\r'){} else if (data=='\n'){ flag_ser=1;} else { str1[r]=data; r++; } Jika bukan karakter ‘enter’ maka disimpan ke variabel array str1. Jika berupa karakter ‘enter’ maka

program harus keluar dari looping do-while dengan cara memberi logika 1 pada variabel flag_ser .

Selanjutnya mikro harus mengambil karakter lagi dari modem :

get_serial(buffer); hasilnya disimpan di variabel array ‘buffer’. Jika respon modem benar maka modem akan mengirim

karakter “OK” + [enter]. Yang diterima oleh mikrokontroler juga sama, yaitu karakter “OK” + [enter]. Nah

hasilnya ditam[pilkan kle LCD baris ke-2 :

lcd_gotoxy(0,1); lcd_puts(buffer);

Yes

No

Yes

No

Kosongkan variabel

penampung

Ambil data serial

Data=’\r’ ?

Data=’\n’ ?

Data dimasukkan

variabel penampung

Selesai

UCSRA.7=0 ? Yes

No

Page 10: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

10

PERCOBAAN II : Tes kirim sms dengan modem

Langkah kerja :

1. Buat program Tes Kirim SMS.c Sebelum didownload buka program Tes Kirim SMS.c

dengan CodeVisionAVR, kemudian gantilah nomor HP tujuan.

//----nomor HP tujuan : 08157949678, bisa ganti yan g lain

printf("08157949678\r\n");

Misal nomor tujuan sms : 081802318752, maka pada program diganti dengan :

Printf(“081802318752\r\n”);

2. Untuk mengulangi pengiriman, tekan tombol RESET pada mikrokontroler

3. AWAS !!! ketika program masih berisi ‘Tes Kirim SMS.hex’ maka ketika system restart

(dinyalakan) akan langsung mengirimkan sms, walaupun sebenarnya tidak mengapa,

paling – paling hanya pulsanya menjadi berkurang. Untuk menghindarinya, sebelum

menghidupkan power supply system kabel serial dari mikrokontroler ke modem

dilepas dulu.

Program Tes Kirim SMS.c :

/*------------------------------------------------- ---- PERCOBAAN II Tes kirim SMS Hasilnya tampilkan ke LCD www.inkubator-teknologi.com --------------------------------------------------- --*/ #include <mega8535.h> #asm .equ __lcd_port=0x15 ;PORTC #endasm #include <lcd.h> #include <stdio.h> #include <delay.h> unsigned char flag,i,data,buffer[40],flag_ser; unsigned char t,buf[16],cek; void main(void) { // USART Baud rate: 9600 UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x67; // LCD module initialization lcd_init(16); // Global enable interrupts

Page 11: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

11

lcd_clear(); lcd_putsf("Kirim sms..."); printf("AT+CMGS="); //----nomor HP tujuan : 08157949678, bisa ganti yan g lain printf("08157949678\r\n"); //----- tunggu 700 ms delay_ms(700); //----- isi sms yang dikirim printf("Tes Kirim SMS"); //----- kode akhiran untuk perintah kirim sms putchar(26); printf("\r\n"); //----- tunggu 1 detik delay_ms(1000); //----- hapus tampilan LCD lcd_clear(); //----- tampilan pada LCD lcd_putsf("SMS terkirim"); //----- selesai while (1) { }; } Penjelasan :

Mekanisme perintah mengirim SMS ke modem :

Perintah kirim data serial dari mikrokontroler ke modem cukup gampang, yaitu memakai “printf

(data yang dikirim).

Sebagai contoh jika akan dikirim perintah ‘AT+CMGS=’ maka cukup printf(“AT+CMGS=”); Jika

diperlukan karakter [enter] cukup tambahkan “\r\n” saja.

Baik, untuk mengirim SMS dengan mikrokontroler, pertama kirimkan perintah ke modem :

printf("AT+CMGS="); selanjutnya nomor HP disertai dengan karakter [enter] :

printf("08157949678\r\n");

AT+CMGS=[nomor HP yg dituju] [ENTER]

Tunggu 700 ms

[is isms] [chr (26)]

Page 12: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

12

tunggu sekitar 700 ms : delay_ms(700); baru kemudian isi SMS : printf("Tes Kirim SMS"); ditambah dengan karakter (Ctrl+z) yang kalau dalam bahasa C :

putchar(26); terakhir disertakan karakter [enter] :

printf("\r\n");

Setelah reset mikro akan memerintahkan modem untuk mengirim SMS dengan isi "Tes Kirim

SMS". Jika ingin mengganti isi sms tinggal merubah isi tulisannya saja.

PERCOBAAN III : Tes terima sms

Langkah kerja :

1. Buat program Tes Terima SMS.c , compile kemudian download ke mikrokontroler.

2. Siapkan HP kemudian kirim sebuah SMS ke nomor yang terpasang pada modem.

3. Jika SMS berhasil diterima modem maka pada LCD akan tampil pada baris kedua

berupa isi SMS.

Program Tes Terima SMS.bas :

'-------------------------------------------------- --- /**************************** PERCOBAAN III Tes Terima SMS Hasilnya tampilkan ke LCD www.inkubator-teknologi.com ****************************/ #include <mega8535.h> #asm .equ __lcd_port=0x15 ;PORTC #endasm #include <lcd.h> #include <stdio.h> #include <delay.h> #include <string.h> #include <stdlib.h> unsigned char data,flag_ser,r,s,flag_on; char buffer[70],buf1[70],buf2[70],buf_OK[5] ; unsigned char t,cek,inbox_str[20]; void midstr(char *s1,char *s2,unsigned char m,unsig ned char p); char get_serial(char *str1); char kode1[10]={"+CMTI:"};

Page 13: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

13

char kode2[10]={"OK"}; signed char tanda,i; unsigned char pos_str1,long_str,inbox; //------------------------------------- char get_serial(char *str1) { r=0; flag_ser=0; data=''; do { while(!UCSRA.7); data=UDR; if(data=='\r'){} else if (data=='\n'){ flag_ser=1;} else { str1[r]=data; r++; } } while(!flag_ser); } //======================= ambil tengah string ===== ========== void midstr(char *s1,char *s2,unsigned char m,unsig ned char p) { unsigned char I,J,N; for(N=0;s2[N];N++); if (m>=0 && m<=N-1) { for(I=m,J=0;(J<p&&s2[I]);I++,J++) s1[J]=s2[I]; s1[p]='\0'; } else s1[0]='\0'; } //---- void show_sms() { pos_str1=strpos(buffer,','); long_str=strlen(buffer); long_str = long_str - pos_str1; midstr(inbox_str,buffer,pos_str1+1,long_str); inbox=atoi(inbox_str); delay_ms(2000); printf("AT+CMGR=%d\r\n",inbox); get_serial(buf_OK); //ENTER get_serial(buf1); // no hp dll get_serial(buf2); //isi sms //------------------------------ lcd_clear(); lcd_putsf("Isi SMS :");

Page 14: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

14

lcd_gotoxy(0,1); lcd_puts(buf2); delay_ms(2000); for(s=0;s<70;s++) { buffer[s]=''; buf1[s]=''; buf2[s]=''; } } void main(void) { // USART Baud rate: 9600 UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x67; lcd_init(16); lcd_clear(); delay_ms(1000); lcd_putsf("Terima sms..."); while (1) { get_serial(buffer); i=strpos(buffer,':');//klo ada posisi=5 if(i>0) { strncpy(buf1,buffer,i+1); tanda=strcmp(buf1,kode1); if(tanda==0) show_sms(); } }; } Prinsip Kerja Modem Ketika Menerima SMS.

Ketika ada sms masuk maka modem akan mengirim pemberitahuan ke mikrokontroler dengan

mengirim kode :

AT+CMTI:”SM”,5 [ENTER]

Angka 5 � sms yang diterima ada pada inbox ke-5 (ini hanya contoh saja).

Untuk membacanya maka mikro mengirim perintah baca :

AT+CMGR=5 [ENTER]

Setelah menerima perintah tersebut maka modem akan mengirimkan kode sms :

+CMGR:”REC UNREAD”,”+628157949678”,,”12/3/21,09:29:14+28” [ENTER]

Page 15: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

15

Isi sms [ENTER]

Baris pertama berisi data (1 baris) beberapa informasi seperti nomor pengirim SMS, tanggal

pengiriman serta waktu. Baris kedua berupa isi SMS. Nah yang dibutuhkan dalam program ini nanti

adalah isi SMS-nya sehingga cukup baris kedua saja yang ditampilkan.

Baik langsung kita perhatikan program utamanya, ada di while(1) :

while (1) { get_serial(buffer); i=strpos(buffer,':');//klo ada posisi=5 if(i>0) { strncpy(buf1,buffer,i+1); tanda=strcmp(buf1,kode1); if(tanda==0) show_sms(); } };

Program utama berupa menunggu data yang masuk dari modem :

get_serial(buffer);

Berikutnya melihat apakah pada data tersebut terdapat karakter “ : ”

i=strpos(buffer,':');

strpos() merupakan perintah untuk melihat posisi ka rakter. Jika ada karakter

yanmg dicari posisinya maka nilai strpos()>0

Jika terdapat karakter “:” artinya data yang dikirim dari modem kemungkinannya adalah “+CMTI:”

(ada SMS masuk), nah untuk memastikannya kita bandingkan dengan variabel kode1 yang sudah

diisi dengan data “+CMTI:”:

strncpy(buf1,buffer,i+1); tanda=strcmp(buf1,kode1); Jika sama, maka nilai tanda=0, artinya data dari modem adalah benar “+CMTI:”.

if(tanda==0) show_sms();

Selanjutnya memanggil sub rutin show_sms() :

void show_sms() { pos_str1=strpos(buffer,','); long_str=strlen(buffer); long_str = long_str - pos_str1; midstr(inbox_str,buffer,pos_str1+1,long_str); inbox=atoi(inbox_str); delay_ms(2000); printf("AT+CMGR=%d\r\n",inbox); get_serial(buf_OK); //ENTER

Page 16: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

16

get_serial(buf1); // no hp dll get_serial(buf2); //isi sms //------------------------------ lcd_clear(); lcd_putsf("Isi SMS :"); lcd_gotoxy(0,1); lcd_puts(buf2); delay_ms(2000); for(s=0;s<70;s++) { buffer[s]=''; buf1[s]=''; buf2[s]=''; } } Pertama cek nomor inbox :

pos_str1=strpos(buffer,','); long_str=strlen(buffer); long_str = long_str - pos_str1; midstr(inbox_str,buffer,pos_str1+1,long_str); inbox=atoi(inbox_str); selanjutnya kirim perintah untuk membaca SMS (AT+CMGR) :

printf("AT+CMGR=%d\r\n",inbox);

setelah mendapat perintah tersebut maka modem akan mengirim data berupa :

karakter [enter]

data sms : status,nomor HP pengirim, tanggal, jam dll + [enter]

is isms + [enter]

tugas kita hanya mengambil isi SMS saja :

get_serial(buf_OK); //ENTER get_serial(buf1); // no hp dll get_serial(buf2); //isi sms

hasilnya ditampilkan ke LCD :

lcd_clear(); lcd_putsf("Isi SMS :"); lcd_gotoxy(0,1); lcd_puts(buf2);

PERCOBAAN IV : Mengontrol Relay

Langkah kerja :

1. Buat program Kontrol Relay.c , compile kemudian download ke mikrokontroler. Bisa

juga langsung download Kontrol Relay.hex.

2. Siapkan HP kemudian kirim sebuah sms berupa perintah untuk

menghidupkan/mematikan relay ke nomor yang terpasang pada modem. Format SMS

Page 17: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

17

untuk menghidupkan relay : “On” (tanpa tanda petik) sedangkan untuk mematikan :

“Of”. Perhatikan huruf besar kecilnya !

3. Jika berhasil maka relay akan on – off sesuai perintah SMS.

Program Kontrol Relay.bas:

'-------------------------------------------------- --- /**************************** PERCOBAAN IV Kontrol ON-OFF Relay Relay di PORTD.7 Hasilnya tampilkan ke LCD ****************************/ #include <mega8535.h> #asm .equ __lcd_port=0x15 ;PORTC #endasm #include <lcd.h> #include <stdio.h> #include <delay.h> #include <string.h> #include <stdlib.h> unsigned char data,flag_ser,r,s,flag_on; char buffer[70],buf1[70],buf2[70],buf_OK[5] ; unsigned char t,cek,inbox_str[20]; void midstr(char *s1,char *s2,unsigned char m,unsig ned char p); char get_serial(char *str1); char kode1[10]={"+CMTI:"}; char kode2[10]={"OK"}; char kode_ON[10]={"On"}; char kode_OFF[10]={"Of"}; signed char tanda,i; unsigned char pos_str1,long_str,inbox; //------------------------------------- char get_serial(char *str1) { r=0; flag_ser=0; data=''; do { while(!UCSRA.7); data=UDR; if(data=='\r'){} else if (data=='\n'){ flag_ser=1;} else { str1[r]=data;

Page 18: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

18

r++; } } while(!flag_ser); } //======================= ambil tengah string ===== ========== void midstr(char *s1,char *s2,unsigned char m,unsig ned char p) { unsigned char I,J,N; for(N=0;s2[N];N++); if (m>=0 && m<=N-1) { for(I=m,J=0;(J<p&&s2[I]);I++,J++) s1[J]=s2[I]; s1[p]='\0'; } else s1[0]='\0'; } //---- void show_sms() { pos_str1=strpos(buffer,','); long_str=strlen(buffer); long_str = long_str - pos_str1; midstr(inbox_str,buffer,pos_str1+1,long_str); inbox=atoi(inbox_str); delay_ms(2000); printf("AT+CMGR=%d\r\n",inbox); get_serial(buf_OK); //ENTER get_serial(buf1); // no hp dll get_serial(buf2); //isi sms //------------------------------ lcd_clear(); lcd_putsf("Isi SMS :"); lcd_gotoxy(0,1); lcd_puts(buf2); delay_ms(2000); tanda=strcmp(buf2,kode_ON); if(tanda==0) { PORTD.7=1; lcd_gotoxy(0,1); lcd_putsf("Relay ON "); } else { tanda=strcmp(buf2,kode_OFF); if(tanda==0) { PORTD.7=0; lcd_gotoxy(0,1); lcd_putsf("Relay OFF"); } }

Page 19: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

19

delay_ms(2000); printf("AT+CMGD=%d\r\n",inbox); delay_ms(2000); for(s=0;s<70;s++) { buffer[s]=''; buf1[s]=''; buf2[s]=''; } } void main(void) { DDRD.7 = 1; PORTD.7 = 0; UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x67; lcd_init(16); lcd_clear(); lcd_putsf("Kontrol Relay"); lcd_gotoxy(0,1); lcd_putsf(" ON - OFF"); delay_ms(2000); lcd_clear(); lcd_putsf("Format SMS :"); lcd_gotoxy(0,1); lcd_putsf("'On'=ON,'Of'=OFF"); while (1) { get_serial(buffer); i=strpos(buffer,':');//klo ada posisi=5 if(i>0) { strncpy(buf1,buffer,i+1); tanda=strcmp(buf1,kode1); if(tanda==0) show_sms(); } }; } Penjelasan :

Secara prinsip sama dengan percobaan 3, menerima SMS. Tambahan ada pada mengenali isi SMS.

Jika isi SMS “On” maka Relay akan aktif.

tanda=strcmp(buf2,kode_ON); if(tanda==0) { PORTD.7=1;

Page 20: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

20

lcd_gotoxy(0,1); lcd_putsf("Relay ON "); } Jika isi SMS “Of” maka Relay akan mati else { tanda=strcmp(buf2,kode_OFF); if(tanda==0) { PORTD.7=0; lcd_gotoxy(0,1); lcd_putsf("Relay OFF"); } }

PERCOBAAN V : Telemetri 1 : mengirim nilai suhu secara kontinyu

Pada percobaan ini sensor suhu LM35 dipakai untuk membaca suhu. Mikrokontroler

kemudian akan mengirimkan via SMS nilai suhu tersebut ke nomor HP yang dituju secara

kontinyu.

Langkah kerja :

1. Pasang modul sensor suhu LM35.

Modul LM35 Mikrokontroler

Out PA.0

+5V +5V/Vcc

Gnd Gnd

2. Buat program Telemetri 1 Kirim Kontinyu.bas , compile kemudian download ke

mikrokontroler. Bisa juga langsung download Telemetri 1 Kirim Kontinyu.hex.

3. Jangan lupa nomor HP tujuan diganti ya. Pada baris perintah ini :

'----nomor HP tujuan : 08157949678, bisa ganti yang lain

Print "08157949678"

4. Pada program ini delay time pengiriman adalah 30 detik. Setiap 30 detik akan

mengirim SMS berupa informasi suhu. Untuk merubahnya ganti perintah ini :

'----- tunggu 30 detik

Wait 30

Misal akan dibuat setiap 10 detik :

Wait 10.

5. Jika berhasil maka nomor HP yang ditulis di program akan menerima SMS berupa nilai

suhu setiap 30 detik.

Page 21: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

21

Program Telemetri 1 Kirim Kontinyu.bas:

'-------------------------------------------------- --- ' PERCOBAAN V ' Telemetri 1 : Kirim Data Secara Continue ' Hasilnya tampilkan ke LCD ' www.inkubator-teknologi.com '-------------------------------------------------- --- $regfile = "m8535.dat" $crystal = 16000000 $baud = 9600 $hwstack = 20 $swstack = 8 $framesize = 8 Declare Sub Getline(s As String) Dim I As Byte , B As Byte Dim Sret As String * 70 , Stemp As String * 70 Dim D As Word , V As Word , T As Word Config Serialin = Buffered , Size = 72 Config Adc = Single , Prescaler = Auto , Reference = Avcc Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.2 , Db4 = Portc.4 , Config Lcdpin = Pin , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 Config Lcd = 16 * 2 Cursor Off Cls Lcd "TELEMETRI 1" Lowerline Lcd "Tes koneksi..." Enable Interrupts Waitms 500 Do Print "AT" Getline Sret Loop Until Sret = "OK" Wait 1 Cls Lcd "Koneksi OK" Wait 1 Cls Lcd "Temp=" '----------------------- Start Adc Do D = Getadc(0) V = D * 5 T = V / 10 Locate 1 , 6 Lcd T ; " C " Print "AT+CMGS="; Print "08157949678" Waitms 700 Print "Temperature="; Print T; Print "Celcius";

Page 22: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

22

Print Chr(26) '----- tunggu 30 detik Wait 30 Loop End Sub Getline(s As String) S = "" Do B = Inkey() Select Case B Case 0 : Case 13 : Case 10 : If S <> "" Then Exit Do Case Else S = S + Chr(b) End Select Loop End Sub Penjelasan :

Sensor LM35 mempunyai keluaran berupa tegangan. Nilai tegangan tergantung suhu yang diukur

dengan persamaan = 10 mV/10C. Jadi jika terukur 270 mV berarti suhu=270/10 = 27 0C.

Program membaca sensor ada pada baris :

D = Getadc(0)

LM35 berada pada PA.0 atau ADC0, sehingga perintahnya Getadc(0) . Hasilnya kita rubah ke

tegangan. ADC 10 bit, sehingga 1 bit bernilai 4,88 mV kita bulatkan menjadi 5 mV sehingga :

V = D * 5

Selanjutnya kita konversi ke suhu. Tinggal dibagi dengan 10 :

T = V / 10

Setelah ketemu nilai suhu, mikrokontroler memerintahkan ke modem untuk mengirimkannya ke

nomor HP yang sudah ditentukan.

Print "AT+CMGS="; Print "08157949678" Waitms 700 Print "Temperature="; Print T; Print "Celcius"; Print Chr(26) Terakhir diberi delay – time, pada contoh program ini 30 detik :

Wait 30

PERCOBAAN VI : Telemetri 2 : mengirim nilai suhu dari perintah

Hampir sama dengan percobaan V,hanya saja perlu Command/perintah untuk meminta data

suhu yang diukur sensor LM35.

Langkah kerja :

Page 23: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

23

1. Pasang modul sensor suhu LM35.

Modul LM35 Mikrokontroler

Out PA.0

+5V +5V/Vcc

Gnd Gnd

2. Buat program Telemetri 2 Kirim dari Command.bas , compile kemudian download

ke mikrokontroler. Bisa juga langsung download Telemetri 1 Kirim Kontinyu.hex.

3. Siapkan HP (ada pulsa SMS nya ya, hehe..) kemudian ketik SMS dengan format “Get”

(tanpa tanda petik). Kirim ke nomor modem. Tunggu balasan dari modem.

4. Jika berhasil maka HP akan mendapat SMS dari modem berupa informasi nilai suhu

yang diukur.

Program Telemetri 2 Kirim dari Command.bas:

'-------------------------------------------------- --- ' PERCOBAAN VI ' Telemetri 2 Kirim dari Command ' Hasilnya tampilkan ke LCD ' www.inkubator-teknologi.com '-------------------------------------------------- --- $regfile = "m8535.dat" $crystal = 16000000 $baud = 9600 $hwstack = 20 $swstack = 8 $framesize = 8 Declare Sub Getline(s As String) Declare Sub Showsms(s As String ) Dim I As Byte , B As Byte Dim Sret As String * 70 , Stemp As String * 70 Dim Pos_str1 As Byte , Pos_str2 As Byte , Long_str As Byte Dim Inbox As String * 2 Dim No_sender As String * 15 Dim D As Word , V As Word , T As Word Config Serialin = Buffered , Size = 72 Config Adc = Single , Prescaler = Auto , Reference = Avcc Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.2 , Db4 = Portc.4 , Config Lcdpin = Pin , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 Config Lcd = 16 * 2 Cursor Off Cls Lcd "TELEMETRI 2" Lowerline Lcd "Tes koneksi..."

Page 24: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

24

Enable Interrupts Waitms 500 Do Print "AT" : Getline Sret Loop Until Sret = "OK" Wait 1 Cls Lcd "Koneksi OK" Wait 1 Start Adc Do Cls Lcd "Kirim sms" Lowerline Lcd "Format : 'Get'" Waitms 500 Getline Sret I = Instr(sret , ":") If I > 0 Then Stemp = Left(sret , I) Select Case Stemp Case "+CMTI:" : Showsms Sret End Select End If Loop End '*********************************************** Sub Getline(s As String) S = "" Do B = Inkey() Select Case B Case 0 : Case 13 Case 10 : If S <> "" Then Exit Do Case Else S = S + Chr(b) End Select Loop End Sub '********************************************** Sub Showsms(s As String ) Pos_str1 = Instr(s , ",") Long_str = Len(s) Long_str = Long_str - Pos_str1 Inbox = Right(s , Long_str) Print "AT+CMGR=" ; Inbox Getline Stemp Getline Sret Pos_str1 = Instr(stemp , ",") Incr Pos_str1

Page 25: Panduan SMS Controller V2.pdf

SMS Controller V2 www.inkubator-teknologi.com

25

Pos_str2 = Instr(pos_str1 , Stemp , ",") Incr Pos_str1 Decr Pos_str2 Long_str = Pos_str2 - Pos_str1 No_sender = Mid(stemp , Pos_str1 , Long_str) Print "AT+CMGD=" ; Inbox Waitms 700 Cls Lcd "Isi SMS=" ; Sret If Sret = "Get" Then Lowerline Lcd "Baca Suhu..." D = Getadc(0) V = D * 5 T = V / 10 Wait 2 Cls Lcd "Temp=" ; T ; " C " Lowerline Lcd "Kirim data suhu" Wait 1 Print "AT+CMGS="; Print "08157949678" Waitms 700 Print "Temperature="; Print T; Print "Celcius"; Print Chr(26) Else Lowerline Lcd "Format Salah !" End If Sret = "" Wait 2 End Sub Penjelasan :

Program secara garis besar hampir sama dengan Kontrol Relay.bas. Mikrokontroler akan mengenali

isi SMS yang masuk. Jika isinya “Get” maka mikro akan mengirimkan SMS berisi nilai suhu yang

diukur.

If Sret = "Get" Then Jika akan diganti format isi SMS cukup diganti aja kondisi If-nya. Misal format SMS nya : “Suhu?”

maka program menjadi :

If Sret = "Suhu?" Then Perhatikan penulisan huruf besar – kecil akan sangat berpengaruh.