Sabtu, 11 Juni 2016

SIM800L : Control Relay 4 Channel with SMS via SIM800L GSM Module

Control Relay 4 Channel Menggunakan SMS

Yang dimaksud disini adalah mengontrol 4 buah beban (misal lampu atau motor ata Home electric device) melalui Relay dan dikendalikan melalui SMS yang sudah ter-Otentikasi Nomor Pengirimnya,
artinya Relay hanya mau mengikuti instruksi dari SMS dengan Nomor yang sudah terdaftar di sistem dan mengabaikan Instruksi SMS dari Nomor yang tidak terdaftar pada sistem program.





Module yang dibutuhkan :
1pc Arduino UNO Rev.3
1pc Relay Module 4 Channel Low Active
1pc SIM800L GSM Module
1pc DC StepDown Buck Converter
+Beberapa pcs kabel dupon/jumper untuk wiring

 
Wiring SIM800L <--> Arduino Uno
RXD <--> D8
TXD <--> D7
VCC <--> 3.7V melalui stepdown dari 5V Arduino
GND <--> GND

Wiring Relay 4 Channel <--> Arduino Uno
GND <--> GND
CH1 <--> D2

CH2 <--> D3
CH3 <--> D4
CH4 <--> D5  
VCC <--> 5V


Wiring DC StepDown Buck Converter 
(-) IN <--> GND Arduino 
(+) IN <--> 5V Arduino  
(-) OUT <--> GND SIM800L
(+) OUT <--> VCC SIM800L

Atur VR/Trimpot pada Stepdown sampai mendapatkan tegangan 3,7VDC dan Ukur dengan Voltmeter
Sebelum disambungkan dengan Vcc pada Module SIM800L
Warning: Jangan Memberi tegangan di atas 4,2VDC pada Vcc Module SIM800L karena dapat menyebabkan kerusakan pada Module

Library GSM Seeeduino silahkan download disini

Berikut Sketch Coding yang Harus dimasukan pada Arduino Uno :



  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <gprs.h>
#include <softwareserial.h>
 
#define TIMEOUT    5000
#define LED_PIN    13
#define ON LOW
#define OFF HIGH

const int Relay1 = 2;
const int Relay2 = 3;
const int Relay3 = 4;
const int Relay4 = 5;
 
int StatRelay1;
int StatRelay2;
int StatRelay3;
int StatRelay4;

GPRS gprs;
 
void setup() {
  pinMode (Relay1 , OUTPUT); digitalWrite (Relay1, HIGH);
  pinMode (Relay2 , OUTPUT); digitalWrite (Relay2, HIGH);
  pinMode (Relay3 , OUTPUT); digitalWrite (Relay3, HIGH);
  pinMode (Relay4 , OUTPUT); digitalWrite (Relay4, HIGH);
  Serial.begin(9600);
  while(!Serial);
 
  Serial.println("Starting SIM800 Auto Read SMS");
  gprs.preInit();
  delay(1000);
 
  while(0 != gprs.init()) {
      delay(1000);
      Serial.print("init error\r\n");
  } 
 
  //Set SMS mode to ASCII
  if(0 != gprs.sendCmdAndWaitForResp("AT+CMGF=1\r\n", "OK", TIMEOUT)) {
    ERROR("ERROR:CNMI");
    return;
  }
   
  //Start listening to New SMS Message Indications
  if(0 != gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0\r\n", "OK", TIMEOUT)) {
    ERROR("ERROR:CNMI");
    return;
  }
 
  Serial.println("Init success");
}
 
//Variable to hold last line of serial output from SIM800
char currentLine[500] = "";
int currentLineIndex = 0;
 
//Boolean to be set to true if message notificaion was found and next
//line of serial output is the actual SMS message content
bool nextLineIsMessage = false;
 
void loop() {
  //Write current status to LED pin
  digitalWrite(Relay1, StatRelay1);
  digitalWrite(Relay2, StatRelay2);
  digitalWrite(Relay3, StatRelay3);
  digitalWrite(Relay4, StatRelay4);
   
  //If there is serial output from SIM800
  if(gprs.serialSIM800.available()){
    char lastCharRead = gprs.serialSIM800.read();
    //Read each character from serial output until \r or \n is reached (which denotes end of line)
    if(lastCharRead == '\r' || lastCharRead == '\n'){
        String lastLine = String(currentLine);
         
        //If last line read +CMT, New SMS Message Indications was received.
        //Hence, next line is the message content.
        if(lastLine.startsWith("+CMT:")){
           
          Serial.println(lastLine);
          nextLineIsMessage = true;
           
        } else if (lastLine.length() > 0) {
           
          if(nextLineIsMessage) {
            Serial.println(lastLine);
             

// ########## MEMBACA KONTEN SMS DAN MENCARI+MENGARTIKAN KONTEN SMS KE PROGRAM #########
            //Kendali Relay
              if(lastLine.indexOf("Relay1 ON") >= 0){
              StatRelay1 = ON;
              Serial.println("Relay1 DINYALAKAN");
              gprs.sendSMS ("08xxxxxxxxxx","Relay1 DINYALAKAN");} 
              else if(lastLine.indexOf("Relay1 OFF") >= 0) {
              StatRelay1 = OFF;
              Serial.println("Relay1 DIMATIKAN");
              gprs.sendSMS ("08xxxxxxxxxx","Relay1 DIMATIKAN");}
              
              if(lastLine.indexOf("Relay2 ON") >= 0){
              StatRelay2 = ON;
              Serial.println("Relay2 DINYALAKAN");
              gprs.sendSMS ("08xxxxxxxxxx","Relay2 DINYALAKAN");} 
              else if(lastLine.indexOf("Relay2 OFF") >= 0) {
              StatRelay2 = OFF;
              Serial.println("Relay2 DIMATIKAN");
              gprs.sendSMS ("08xxxxxxxxxx","Relay2 DIMATIKAN");}

              if(lastLine.indexOf("Relay3 ON") >= 0){
              StatRelay3 = ON;
              Serial.println("Relay3 DINYALAKAN");
              gprs.sendSMS ("08xxxxxxxxxx","Relay3 DINYALAKAN");} 
              else if(lastLine.indexOf("Relay3 OFF") >= 0) {
              StatRelay3 = OFF;
              Serial.println("Relay3 DIMATIKAN");
              gprs.sendSMS ("08xxxxxxxxxx","Relay3 DIMATIKAN");}

              if(lastLine.indexOf("Relay4 ON") >= 0){
              StatRelay4 = ON;
              Serial.println("Relay4 DINYALAKAN");
              gprs.sendSMS ("08xxxxxxxxxx","Relay4 DINYALAKAN");} 
              else if(lastLine.indexOf("Relay4 OFF") >= 0) {
              StatRelay4 = OFF;
              Serial.println("Relay4 DIMATIKAN");
              gprs.sendSMS ("08xxxxxxxxxx","Relay4 DIMATIKAN");}
            
             
            nextLineIsMessage = false;
          }
           
        }
         
        //Clear char array for next line of read
        for( int i = 0; i < sizeof(currentLine);  ++i ) {
         currentLine[i] = (char)0;
        }
        currentLineIndex = 0;
    } else {
      currentLine[currentLineIndex++] = lastCharRead;
    }
  }
}

47 komentar:

  1. Terima kasih banyak pak atas suportnya . dan terima kasih banyak pak atas perhatian bapak dalam dunia pendidikan . insya allah ilmu yg bapak sharing bermanfaat bagi orang banyak . terkhusus buat saya pribadi . salam dari kami .. Semoga sehat dan lancar selalu rejekinya ..aminn

    BalasHapus
  2. klo untuk arduino nano pin tx rx nya di pin yg sama kah?

    BalasHapus
  3. Request y pak, untuk mengetahui status lampu nyala atau gk kodenya apa ya pak? Trims

    BalasHapus
  4. Tinggal tambahkan coding sent sms pada saat awal alat dihidupkan . dan ada balasan konfirm via sms begitu selesai alat diperintah

    BalasHapus
  5. Semoga dapat pahala atas posting share ilmunya......
    saya senang dapat ilmu di web/blog ini, yg baru melek belajar arduino....

    BalasHapus
  6. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  7. gan, kemaren dah beli relay + SIM800L GSM Module di lapak agan, saya pakai relay ch 2, jadi scribnya di masukkan 2 aja ya?

    BalasHapus
  8. mas kalau Library GSM Seeeduino itu untuk apa ya?
    maaf saya masih newbie

    BalasHapus
  9. Makasih banget mas, tapi mau tanya, bagaimana codingnya supaya semua nomor hp bisa meng on-off kan relay dengan patokan kode sms tanpa nomor hp yg terdaftar? terima kasih

    BalasHapus
  10. This report would have more information with
    "Show verbose output during compilation"
    enabled in File > Preferences.
    Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
    sketch_nov17a:19: error: 'GPRS' does not name a type
    sketch_nov17a.ino: In function 'void setup()':
    sketch_nov17a:30: error: 'gprs' was not declared in this scope
    sketch_nov17a:40: error: 'ERROR' was not declared in this scope
    sketch_nov17a:46: error: 'ERROR' was not declared in this scope
    sketch_nov17a.ino: In function 'void loop()':
    sketch_nov17a:69: error: 'gprs' was not declared in this scope
    mas iji kok ada spt ini??
    error mas....

    BalasHapus
  11. Siang gan,,Kok data void lood nya banyak yg ga ada di dalam scope ya?,,
    Sampai void setup ok,,tapi skectch yg di area void loop nya byak yg ga ada di dalam scope,,saya download see arduino,,dan saya lanjut kan dari see arduino,,error 'currentLine,startWith,nextLineMessage,,bisa di bantu gan?

    BalasHapus
    Balasan
    1. just share .... arduino ide nya pake yang versi 1.6 ke atas gan .... jangan yang 1.0

      Hapus
  12. Siang gan,,Kok data void lood nya banyak yg ga ada di dalam scope ya?,,
    Sampai void setup ok,,tapi skectch yg di area void loop nya byak yg ga ada di dalam scope,,saya download see arduino,,dan saya lanjut kan dari see arduino,,error 'currentLine,startWith,nextLineMessage,,bisa di bantu gan?

    BalasHapus
  13. Gan kok saat compile ada kata" low memory available, *stability problems may occur* itu kenapa ya

    BalasHapus
  14. Mau tanya gan,
    sbnr nya sh dh sukses bisa krm&terima sms,
    namun kendala nya ketika Sim800 hilang signal, dan setelah dapat signal kembali,
    arduino seperti tdk terkoneksi dgn sim800 nya,
    sehingga harus di reset dulu, baru bisa normal lagi,
    mohon pencerahan,
    kali aja ada yg ngalamin juga.

    BalasHapus
    Balasan
    1. agan bisa gan..?? koq punya saya tidak yaa,padahal semua sudah benar tidak ada yang salah,dari mulai program sampai dengan perancangan tetapi kenapa sms sya tetap tidak di respon untuk menyalakan relay..mohon bantuan nya gan.

      Hapus
  15. gan, saya mau tanya mengenai inbox sms sama laporan terkirim, itu otomatis sudah terhapus sendiri atau musti nambahin sketch nya?

    BalasHapus
  16. sangat bermanfaat gan, terima kasih banyak. ditunggu tulisan selanjutnya.

    BalasHapus
  17. pendefinisian RX dan TX di pin 7 dan 8, kalau mau diubah itu dari bagian mana gan?

    BalasHapus
  18. apakah program ini dapat di running di modul SIM900A mini V4 ?

    BalasHapus
    Balasan
    1. Mas Edy, apakah sudah bisa jika coding diatas dipakai untuk sim900A mini?? Kebetulan saya juga mau buat coding untuk SIM900A, tapi masih belum bisa. DB No respon terus.

      Hapus
  19. bisa di tambahkan video nya gan..

    BalasHapus
  20. Gan, thanks sebelumnya..
    saya dapat msalah pas lihat di serial monitor ada pesan "Power check failed!" & Init error,,
    mungkin bisa dibantu? lira-kira maslahnya dimana?

    BalasHapus
  21. mas.. klo dibuat utk ngontrol motor servo gimana ?
    apakah perlu tambahan void utk servo dan StatRelayx diganti dengan void servo ?

    BalasHapus
  22. minta coding yang tampa library dong mas

    BalasHapus
  23. mas ko pada saat saya coba sms pesanya selalu tidak terkirim mohon pencerahanya mas

    BalasHapus
  24. kalo buat stater motor kodenya gimana om, udah saya tambahin delay koq ga respon ya ?
    ini code saya om
    if (lastLine.indexOf("Relay1 ON") >= 0) {
    StatRelay1 = ON;
    Serial.println("Relay1 DINYALAKAN");
    gprs.sendSMS ("0811111111111", "Relay1 DINYALAKAN");
    delay(5000);
    StatRelay1 = OFF;
    Serial.println("Relay1 otomatis MATI 5detik");
    }

    BalasHapus
    Balasan
    1. Itu no hpnya nomer yg buat ngirim sms atau yg nerima sms om?

      Hapus
  25. INIT ERROR MULUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU

    BalasHapus
  26. gan.. emang saat dinyalakan relay pada on semua ya.. ane pengen saat on dan init sukses relay off semua.. baru nanti ON nya diperintah pakai SMS

    BalasHapus
  27. entahlah kenapa.. SIM800L saya pinnya malah dibalik Tx->8 RX->7 baru bisa init sukses kalau nggak ya init error mulu.. pertama saya kira librarynya gprs.h dan softwareserial.h yang corupt atau bemasalah sebab software serial.h di library tertulis SoftwareSerial.h dengan S capital tapi nggak.. akhirnya berselancar cobain cuma pakai serial mengkontrol Relay dengan TX->9 RX-> lancar jaya.. satu lagi di void setup yg tujuannya mengoffkan relay sebagai default awal saya tambahakan initrelay1=off; seperti ini jadinya
    void setup() {
    pinMode (Relay1 , OUTPUT);
    pinMode (Relay2 , OUTPUT);
    pinMode (Relay3 , OUTPUT);
    pinMode (Relay4 , OUTPUT);
    digitalWrite (Relay1, HIGH);
    digitalWrite (Relay2, HIGH);
    digitalWrite (Relay3, HIGH);
    digitalWrite (Relay4, HIGH);
    StatRelay1=OFF;
    StatRelay2=OFF;
    StatRelay3=OFF;
    StatRelay4=OFF;
    Serial.begin(9600);
    while(!Serial);
    kalau tidak maka setelah konfirmasi init success pasti semua relay jadi on..
    terus kalau on of pakai delay juga sudah sukses dengan sketch seperti ini
    if(lastLine.indexOf("Starter") >= 0){
    digitalWrite(Relay1, LOW);
    delay(2000);
    digitalWrite(Relay1, HIGH);
    Serial.println("Menstarter");
    gprs.sendSMS ("08xxxxxxxxx","MOTOR DISTARTER BOS");
    }
    dan lancar meskipun dicampur dengan yg on off biasa
    demikian hasil oprek yg saya juga nggak habis pikir kenapa gitu mungkin module SIM800L saya yg versi lain.. untuk kawan kawan catatlah setiap bereksperiment biar gak terus kebingungan lagi seperti saya pas mau mem PCB kan Trim's just share :-D

    BalasHapus
    Balasan
    1. mas itu saya udah ikuti tx=8 dan rx=7 emang si init sukses lalu lampu relay on semua. tp ketika saya kirim sms untuk matiin kok gk ngerespon apa apa ya...

      Hapus
    2. Om sabirun yaqin, boleh minta kodingnya?
      Hehehe

      Hapus
  28. di compil kok eror, minta solusinya dengan sangat

    BalasHapus
    Balasan
    1. maaf ane juga NEWBIE gan..
      sebelum compile atau upload ke arduino periksa setingan board arduino apa? pakai atmeganya apa kalau arduino nano,Port COM berapa? terus pakai programer apa? drivernya dah cocok? kalau pakai USBASB lebih josh pakai Libusbk jangan libusb atau pakai aja software zadig langsung instal online.. lanjut periksa librarynya untuk sketch di atas.. apa sudah ada di C:\Program Files \Arduino\libraries\GSMseeduino\gprs.h terus C:\Program Files \Arduino\libraries\SoftwareSerial\SoftwareSerial.h folder library jangan dikasih nama dengan spasi _ contooh GSM_seeduino biasanya nggak kebaca.. atau kadang aneh rx tx nya module di lepas dulu dari pin arduino.. terus cek report error compilenya di situ kan dijelaskan penyebabnya apa.. biasanya masalahnya ya di atas tadi jika sketchnya sudah jelas (lancar) no error.. Just share

      Hapus
  29. gagal terus, udah di ikutin ...tx rx di bolak balik

    BalasHapus
  30. mohon bantuannya, jika programnya udah berhasil, tapi sewaktu saya kirim sms ko sim800L nya tidak membalas, dan saya sudah pakai sim800l yang merah dan yang sim800l v2 tetap tidak ada balasan sms

    BalasHapus
  31. Mau tanya mas , kalau untuk mengetahui status relay mana yg aktif dan gak aktif lewat sms apa coding nya ya ..terimakasih

    BalasHapus
  32. kalo power check failed kenapa yah

    BalasHapus
  33. terima kasih atas ilmu nya bang, kalo mau lebih dri 4ch gmna caranya ya, mohon bimbingan nya

    BalasHapus
  34. Saya pake sim800l v2 dserial monitor init error itu gmana ya?

    BalasHapus
  35. Gan mau tanya ni. Kalau pin vcc dengan pin GND sot kenapa gan? Saat di ukur menggunakan multimeter nyatanya pin GND dengan pin VCC itu terhubung.

    BalasHapus
  36. Gan arduino saya tidak menerima arus dari melalui power jack itu kenapa gan?

    BalasHapus

Copyright © 2014 Belajar Arduino | Designed With By Blogger Templates | Distributed By Gooyaabi Templates
Scroll To Top