Bagi yang pernah mengoperasikan RT RW NET dan menggunakan BTS atau sistem pancar ulang wifi mungkin sudah tidak asing lagi dengan kendala perangkat yang kadang kala mengalami error atau hang sehingga tidak dapat bekerja dengan baik. Mengatasi kendala itu biasanya dilakukan dengan mencabut adaptor perangkat atau mencabut arus DC yang masuk ke perangkat selama beberapa detik.
Untuk wilayah pedesaan sangat dimungkinkan terjadinya error perangkat akibat listrik yang tidak stabil atau sering mengalami pemadaman listrik secara mendadak maupun error karena induksi petir. Perangkat akan normal kembali ketika sistem ini direstart.
Untuk lokasi BTS yang berada di rumah atau kantor kita sendiri yang selalu ada teknisi maka restart perangkat ini tidak menjadi masalah karena dapat dilakukan secara manual. Namun untuk lokasi yang jarang ada penghuninya ataupun berada di tengah hutan atau di atas bukit maka akan sangat merepotkan ketika teknisi harus datang ke lokasi hanya untuk mencabut arus DC beberapa saat. Untuk kasus seperti inilah maka Remote Terminal Unit diperlukan.
Remote terminal unit menggunakan sms arduino dapat dioperasikan melalui internet maupun melalui sistem seluler (SMS). Ketika backbone atau input internet di BTS yang mengalami gangguan (hang atau macet) maka internet tidak berfungsi sehingga diperlukan Remote Terminal Unit yang menggunakan sistem seluler (SMS).
Artikel ini merupakan artikel pendukung dari Alat RTU ( Remote Terminal Unit) Versi pertama dengan kemampuan hanya melakukan kontrol ( On, Off dan Restart) dari perangkat yang terpasang di remote Area ( jarak jauh ) melaui SMS.
Disclaimer :
"Pada artikel sekaligus tutorial ini program maupun diagram dari perangkat benar-benar bisa diaplikasikan dan dibuat sendiri karena sudah kami ujicoba dan sesuai kondisi aslinya. Seluruh artikel ini boleh dicopy dan dimanfaatkan untuk kepentingan pribadi maupun kepentingan usaha, untuk repost mohon dapat mencantumkan sumbernya."
![]() |
![]() |
| Gambar 1 Rangkain Sederhana RTU SMS |
Cara Kerja Perangkat (Sistem) :
Perangkat RTU dengan sms arduino ini secara garis besar adalah saklar yang bisa dikendalikan jarak jauh. Karena fungsi utamanya adalah untuk melakukan Penyalaan Ulang (Restartt/Reboot), maka default alat-alat yang terhubung ke RTU ini adalah menyala. Ketika dalam posisi menyala, maka relay-relay yang menjadi saklar akan dalam keadaan off (Supaya relay lebih awet) , dan relay akan menyala ketika reboot atau restart sedang berlangsung. Ketika restart berlangsung, relay dalam keadaan menyala selama beberapa detik yang akan memutus arus ke alat yang terhubung ke RTU sehingga alat akan menyala ulang dan error atau Hang bisa teratasi.
Dalam pembuatan RTU ini terdiri dari 2 jenis perangkat yaitu perangkat keras (Hardware) dan Software (Piranti Lunak). Peralatan yang digunakan dalam pembuatan RTU ini adalah sebagai berikut :
Tabel 1 Perangkat yang digunakan
Piranti Utama dalam Sistem RTU ini adalah Arduino Nano, berikut ini pinout dari arduino nano beserta koneksi Pin arduino ke piranti lain
| Gambar 4. Pinout Arduino Nano |
Tabel 2 Koneksi Arduino
Untuk yang menguasai elektronika dan terbiasa menyolder bisa menggunakan modem Wavecom baik tipe USB maupun RS232 dan langsung melakukan jumper dari modul GSM pada PCB di dalam modem (casing modem dibuka terlebih dahulu) sehingga akan langsung terkoneksi dengan arduino secara TTL. Titik yang dilakukan penyolderan ditunjukkan pada gambar di bawah ini
![]() |
| Gambar 5. Modem Wavecom dimodifikasi TTL |
![]() |
| Gambar 6. Modem Wavecom yang telah dimodifikasi ke TTL |
Untuk yang belum terlalu menguasai elektronika dapat menggunakan wavecom M1306B versi RS 232, supaya bisa berkomunikasi dengan arduino maka dibutuhkan Kit atau piranti RS 232 Converter.
![]() |
| Gambar 7. PengkabelanModem Wavecom RS232 |
Setelah semua piranti dirakit dan terhubung sesuai dengan skema pengkabelan, maka selanjutnya dibuat program pada sketch arduino
Piranti Lunak (Software)
Untuk piranti lunak sms arduino yang digunakan disajikan pada source code di bawah ini, source code ini diambil dari sumber yang telah dituliskan pada header program dan telah dimodifikasi sehingga berfungsi sesuai dengan kinerja alat yang diharapkan.
Library yang digunakan pada program arduino adalah SoftwareSerial.h , sengaja tidak digunakan library khusus untuk GSM karena arduino yang digunakan adalah arduino Nano dengan kapasitas memori yang tidak terlalu besar sehingga jika menggunakan library khusus GSM akan memakan space memori yang cukup besar.
Instruksi SMS arduino dari aksi dari perangkat dapat dilihat pada tabel berikut ini :
Pada RTU Versi pertama ini maka setiap nomer yang mengirim sms dengan format yang benar, maka aksi dari alat akan dilakukan, kemudian sms balasan juga akan diterima oleh nomer pengirim.
Tabel 3 Perintah SMS
Setelah semua piranti dirakit dan terhubung sesuai dengan skema pengkabelan, maka selanjutnya dibuat program pada sketch arduino dan kemudian diupload ke arduino nano
![]() |
| Gambar 8. Sketch Arduino |
Program lengkap dari Remote Terminal Unit Versi Pertama ini dapat dilihat pada source code dibawah, untuk penjelasan dari masing-masing code ada di sebelah dari tiap code. Source code ini dicopy lalu dipastekan di sketch arduino IDE.
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 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 | // Sumber program : https://www.youtube.com/watch?v=Hq1ZGWWc0e4 // Telah diedit dan disesuaikan #include <SoftwareSerial.h> //sender phone number with country code //GSM Module RX pin to Arduino 11 //GSM Module TX pin to Arduino 12 #define rxPin 11 #define txPin 12 SoftwareSerial wavecom(rxPin,txPin); #define RELAY_1 2 #define RELAY_2 3 #define RELAY_3 4 #define RELAY_4 5 String smsStatus,senderNumber,receivedDate,msg; boolean isReply = false; void setup() { digitalWrite(RELAY_1, HIGH); digitalWrite(RELAY_2, HIGH); digitalWrite(RELAY_3, HIGH); digitalWrite(RELAY_4, HIGH); delay(1000); Serial.begin(9600); Serial.println("Arduino serial initialize"); wavecom.begin(9600); Serial.println("wavecomL software serial initialize"); pinMode(RELAY_1, OUTPUT); //Relay 1 pinMode(RELAY_2, OUTPUT); //Relay 2 pinMode(RELAY_3, OUTPUT); //Relay 3 pinMode(RELAY_4, OUTPUT); //Relay 4 smsStatus = ""; senderNumber=""; receivedDate=""; msg=""; wavecom.print("AT+CMGF=1\r"); //SMS text mode delay(1000); wavecom.println("AT+CNMI=1,1,0,0,0"); // Kode indikasi sms masuk //diaktifkan dengan format //+CMTI=<memori>,<indeks> delay(2000); wavecom.println("AT+CMGD=1,4"); //delete all sms delay(3000); } void loop() { while(wavecom.available()){ parseData(wavecom.readString()); } while(Serial.available()) { wavecom.println(Serial.readString()); } } //main loop ends //*************************************************** void parseData(String buff){ Serial.println(buff); unsigned int len, index; ////////////////////////////////////////////////// //Remove sent "AT Command" from the response string. index = buff.indexOf("\r"); buff.remove(0, index+2); buff.trim(); ////////////////////////////////////////////////// if(buff != "OK"){ index = buff.indexOf(":"); String cmd = buff.substring(0, index); cmd.trim(); buff.remove(0, index+2); if(cmd == "+CMTI"){ //get newly arrived memory location and store it in temp index = buff.indexOf(","); String temp = buff.substring(index+1, buff.length()); temp = "AT+CMGR=" + temp + "\r"; //get the message stored at memory location "temp" wavecom.println(temp); } else if(cmd == "+CMGR"){ extractSms(buff); Serial.print("Pesan : "); Serial.println(msg); Serial.print("Nomer : "); Serial.println(senderNumber); doAction(); wavecom.println("AT+CMGD=1,4"); //delete all sms delay(3000); } } else{ //The result of AT Command is "OK" } } //************************************************************ void extractSms(String buff){ unsigned int index; index = buff.indexOf(","); smsStatus = buff.substring(1, index-1); buff.remove(0, index+2); senderNumber = buff.substring(0, 14); buff.remove(0,19); receivedDate = buff.substring(0, 20); buff.remove(0,buff.indexOf("\r")); buff.trim(); index =buff.indexOf("\n\r"); buff = buff.substring(0, index); buff.trim(); msg = buff; buff = ""; msg.toLowerCase(); } void doAction(){ if(msg == "alat1 off"){ digitalWrite(RELAY_1, LOW); Reply("Alat 1 dinonaktifkan"); } else if(msg == "rst1"){ digitalWrite(RELAY_1, LOW); delay(3000); digitalWrite(RELAY_1, HIGH); Reply("Alat 1 direstart"); } else if(msg == "alat1 on"){ digitalWrite(RELAY_1, HIGH); Reply("Alat 1 diaktifkan"); } else if(msg == "alat2 off"){ digitalWrite(RELAY_2, LOW); Reply("Alat 2 dinonaktifkan"); } else if(msg == "alat2 on"){ digitalWrite(RELAY_2, HIGH); Reply("Alat 2 diaktifkan"); } else if(msg == "rst2"){ digitalWrite(RELAY_2, LOW); delay(3000); digitalWrite(RELAY_2, HIGH); Reply("Alat 2 direstart"); } else if(msg == "alat3 off"){ digitalWrite(RELAY_3, LOW); Reply("Alat 3 dinonaktifkan"); } else if(msg == "alat3 on"){ digitalWrite(RELAY_3, HIGH); Reply("Alat 3 diaktifkan"); } else if(msg == "rst3"){ digitalWrite(RELAY_3, LOW); delay(3000); digitalWrite(RELAY_3, HIGH); Reply("Alat 3 direstart"); } else if(msg == "alat4 off"){ digitalWrite(RELAY_3, LOW); Reply("Alat 4 dinonaktifkan"); } else if(msg == "alat4 on"){ digitalWrite(RELAY_3, HIGH); Reply("Alat 4 diaktifkan"); } else if(msg == "rst4"){ digitalWrite(RELAY_4, LOW); delay(3000); digitalWrite(RELAY_4, HIGH); Reply("Alat 4 direstart"); } else if(msg == "all on"){ digitalWrite(RELAY_1, HIGH); digitalWrite(RELAY_2, HIGH); digitalWrite(RELAY_3, HIGH); digitalWrite(RELAY_4, HIGH); Reply("Semua Alat diaktifkan"); } else if(msg == "all off"){ digitalWrite(RELAY_1, LOW); digitalWrite(RELAY_2, LOW); digitalWrite(RELAY_3, LOW); digitalWrite(RELAY_4, LOW); Reply("Semua Alat dinonaktifkan"); } else if(msg == "rst all"){ digitalWrite(RELAY_1, LOW); digitalWrite(RELAY_2, LOW); digitalWrite(RELAY_3, LOW); digitalWrite(RELAY_4, LOW); delay(3000); digitalWrite(RELAY_1, HIGH); digitalWrite(RELAY_2, HIGH); digitalWrite(RELAY_3, HIGH); digitalWrite(RELAY_4, HIGH); Reply("Semua Alat direstart"); } smsStatus = ""; senderNumber=""; receivedDate=""; msg=""; } void Reply(String text) { wavecom.print("AT+CMGF=1\r"); delay(1000); // wavecom.print("AT+CMGS=\""+PHONE+"\"\r"); wavecom.print("AT+CMGS="); delay(10); wavecom.println(senderNumber); delay(2000); wavecom.print(text); delay(100); wavecom.write(0x1A); //ascii code for ctrl-26 //wavecom.println((char)26); //ascii code for ctrl-26 delay(5000); Serial.println("SMS Balasan Telah Terkirim"); } |







