Panduan SMS Controller V2.pdf
-
Upload
minarto-asmaratmo -
Category
Documents
-
view
191 -
download
0
Transcript of 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
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
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
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
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”
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 {
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.
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.
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
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
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)]
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:"};
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 :");
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]
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
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
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;
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"); } }
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;
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.
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";
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 :
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..."
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
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.