• Tidak ada hasil yang ditemukan

SMART HOME ARDUINO EMBEDDED WEB SERVER BERBASIS MIKROKONTROLLER ARDUINO MEGA 2560 DAN ETHERNET SHIELD

N/A
N/A
Protected

Academic year: 2021

Membagikan "SMART HOME ARDUINO EMBEDDED WEB SERVER BERBASIS MIKROKONTROLLER ARDUINO MEGA 2560 DAN ETHERNET SHIELD"

Copied!
39
0
0

Teks penuh

(1)

SMART HOME ARDUINO EMBEDDED WEB SERVER BERBASIS MIKROKONTROLLER ARDUINO MEGA 2560 DAN ETHERNET

SHIELD

MAKALAH

Diajukan Untuk Memenuhi Persyaratan Menyelesaikan Mata Kuliah PROJECT AKHIR

Oleh:

AHMAD JATI WIDODO (0220120049) ARDHINATA BAYU KURNIAWAN (0220120051)

DAMAR ARDYANSYAH (0220120053)

PROGRAM STUDI

TEKNIK PRODUKSI DAN PROSES MANUFAKTUR KONSENTRASI MEKATRONIKA

POLITEKNIK MANUFAKTUR ASTRA JAKARTA

(2)

BAB I PENDAHULUAN 1.1 Latar belakang

Semakin berkembangnya teknologi yang pesat saat ini menuntut mahasiswa untuk membuat inovasi-inovasi yang berguna bagi masyarakat. Semua inovasi dilakukan guna mempermudah masyarakat dalam menjalankan aktivitasnya. Aktivitas sehari-hari masyarakat di dalam rumah seperti halnya menyalakan lampu dan perangkat lainnya masih menggunakan tombol / saklar fisik. Dimana masih perlu sentuhan atau penekanan secara fisik dari manusia ke tombol. Jarak antara letak tombol dan letak manusia pada saat akan menyalakan perangkat tersebut tidak jarang terlampau jauh. Sehingga membuat manusia mengeluarkan tenaga lebih untuk menjangkau letak tombol tersebut.

Smart Home Arduino Embedded Web Server adalah sebuah inovasi di mana dapat meringankan manusia dalam hal mengontrol perangkat rumah tangga. Masyarakat dapat mengontrol perangkat rumah tangga meskipun tidak berada di dalam rumah. Hanya perlu gadget atau perangkat handphone yang mendukung koneksi wifi (wireless) dan mempunyai aplikasi web browser, manusia dapat mengontrol perangkat rumah tangga secara fleksibel.

Pada proyek ini, penulis akan membahas bagaimana web server dijalankan hingga dapat di akses oleh client/user yang kemudian dapat mengontrol perangkat yang dikontrol oleh Arduino Mega 2560 dengan bantuan Ethernet Shield.

1.2 Tujuan penelitian

Tujuan dari pembuatan Smart Home Arduino Embedded Web Server ini adalah:

(3)

1. Membuat prototype Smart Home menggunakan Arduino Mega 2560 yang dapat diakses oleh web client.

2. Membuat sistem kontrol Smart Home agar dapat berfungsi sebagaimana fungsinya.

1.3 Manfaat

Manfaat dari pembuatan Smart Home Arduino Embedded Web Server ini adalah:

1. Mahasiswa dapat mengerti teknologi informasi dan

komunikasi yang dikombinasikan dengan sistem otomasi berbasis web.

(4)

2 BAB II

2.1 Pengertian Mikronkontroller

Mikrokontroler disebut juga MCU atau μC adalah salah satu komponen elektronik atau IC yang memiliki beberapa sifat seperti komputer, yaitu: CPU (Central Processing Unit) atau unit pemprosesan terpusat, kode memori, data memori, I/O (port untuk input dan output), bentuknya yang kecil dan harganya murah sehingga dapat dicangkokkan (embedded) di dalam berbagai peralatan rumah tangga, kantor, industri atau robot. Mikrokontroller dapat diprogrammelalui program software yang dapat menulis, membaca dan dihapus isi mikrokontroler tersebut. Mikrokontroler sering digunakan dalam beberapaperalatan otomatik seperti pengontrol mesin di mobil, pengontrol jarak jauh, mesin cuci otomatis, pengkondisian udara (AC) peralatan perkantoran dll. Keuntungan dari penggunaan mikrokontroler yaitu memperkecil ukuran peralatan, mengurangi biaya dan konsumsi listrik.

(5)

2.1.1 Bagian-bagian mikrokontroller

Secara umum mikro kontroller terbagia atas beberapa bagian yang memiliki fungsinya masing masing. komponen-komponen dari suatu mikrokontroler yang mempunyai fasilitas lengkap beserta peranti eksternal yang biasanya dihubungkan ke/dari mikrokontroler. Tidak semua mikrokontroler mempunyai semua komponen tersebut, misalnya konverter A/D dan D/A hanya terdapat pada beberapa jenis mikrokontroler tertentu. Dalam suatu mikrokontroler biasanya terdapat tiga buah memori, yaitu RAM, ROM dan EEPROM. RAM dan ROM hampir selalu ada pada setiap mikrokontroler, sedangkan EEPROM hanya terdapat pada beberapa jenis mikrokontroler tertentu. Bagian-bagian dari mikro kontroller dapat ditunjukan pada gambar

(6)

a. CPU (Central Processing Unit) pada mikrokontroler berupa mikroprosesor yang berfungsi sebagai otak dari mikrokontroler. Mikroprocessor adalah peranti yang berfungsi untuk memproses data, yaitu berupa fungsi logika dan aritmatika.

b. RAM digunakan sebagai penyimpan data sementara yang berupa register-register. Register adalah tempat penyimpanan data yang berkaitan dengan banyak hal, misalnya variabel dalam program, keadaan input/output, serta pengaturan timer/counter dan komunikasi serial. Telah disebutkan sebelumnya data pada RAM akan hilang saat catu daya dicabut.

c. ROM digunakan sebagai tempat penyimpanan program. ROM yang banyak dipakai pada mikrokontroler saat ini adalah flash PEROM (Programmable Erasable ROM), yang mirip seperti memori pada flash disk, namun bedanya adalah flash PEROM hanya dapat dihapus dan ditulis secara sekaligus. EEPROM biasanya digunakan untuk menyimpan data yang tidak boleh hilang meski catu daya dihapus. Meski fungsinya mirip EEPROM biasanya lebih sedikit digunakan dibanding RAM karena kecepatan akses EEPROM yang lebih lambat. Contoh penggunaannya adalah penyimpanan data password. atau setting suatu sistem.

d. Timer/counter adalah peranti untuk mencacah sinyal dari clock ataupun sinyal dari suatu kejadian. Jika sinyal yang dicacah berasal dari clock maka peranti ini berfungsi

(7)

sebagai pewaktu, sedangkan jika berasal dari clock maka peranti ini berfungsi sebagai pencacah. Pewaktu bisa digunakan untuk bermacam-macam kegunaan, misalnya untuk menghasilkan tundaan waktu dan untuk mengukur selang waktu suatu proses.

e. Peranti antarmuka ke input/output pada mikrokontroler disebut sebagai port. Pada satu port I/O digital terdiri beberapa pin, biasanya berjumlah 8 atau satu byte, dengan masing-masing pin dapat mentransfer satu bit data biner (logika 0 dan 1) dari/ke mikrokontroler. Selain port I/O digital, pada suatu mikrokontroler juga dapat berkomunikasi dengan peranti lain menggunakan komunikasi serial. Terdapat berbagai standar atau protokol untuk komunikasi serial seperti SPI (Serial Peripherial Interface), I2C (Inter-Integrated Circuit), 1-wire, 2-1-wire, UART (Universal Asynchronous Receiver Transmitter) dan USART (Universal Synchronous-Asynchronous Receiver Transmitter).

2.2 Konsep dan Perancangan

Sebelum dilakukan pembuatan Smart Home Arduino Embedded Web Server, maka perlu adanya konsep dan perancangan. Konsep dan perancangan yang dilakukan meliputi konsep jaringan yang digunakan, kemudian menentukan perangkat input dan output yang digunakan, sampai dengan perancangan wiring yang akan digunakam. Berikut adalah tahapan – tahapan yang dilakukan pada konsep dan perancangan Smart Home Arduino Embedded Web Server.

(8)

2.2.1 Perangkat yang digunakan

Pada pembuatan Smart Home Arduino Embedded Web Server ini, membutuhkan beberapa komponen penyusun agar dapat bekerja sesuai dengan apa yang diinginkan. Berikut merupakan daftar komponen yang digunakan:

1. Arduino Mega 2560

2. Arduino Ethernet Shield + Micro SD Card (Max 2 Gb) 3. 5VDC Relay 4 Channel

4. LinkSys Wifi Router 5. Kabel LAN

6. USB Printer

7. Laptop (Untuk pemrograman)

Ke tujuh komponen tersebut merupakan komponen utama yang digunakan dalam pembuatan Smart Home Arduino Embedded Web Server.

2.2.2 Software yang digunakan

Pada proses pembuatan Smart Home Arduino Embedded Web Server ini

membutuhkan beberapa software untuk mendukung dalam proses pembuatan sistem kontronya. Diantaranya:

1. Notepad ++

Notepad++ digunakan untuk membuat script program halaman web yang akan di embedd pada MicroSD Card yang di pasang pada Arduino Ethernet Shield. Berikut merupakan tampilan pada aplikasi Notepad ++

(9)

Notepad++ mendukung banyak bahasa pemrograman website. Diantaranya adalah bahasa html, php, java, Assembly, asp, C, C#, dan masih banyak lainnya. Pada pembuatan proyek ini, penulis menggunakan bahasa html.

2. Arduino IDE

Arduino IDE merupakan software yang digunakan untuk membuat program mikrokontroller arduino mega 2560. Bahasa yang digunakan adalah bahasa pemrograman C yang telah dimodifikasi oleh developer arduino menjadi bahasa C Arduino yang mempunyai ciri khas tersendiri dan berbeda dengan bahasa C pada umunya. Arduino IDE dilengkapi dengan library yang sangat membantu Programmer pada proses pembuatan program. Berikut adalah tampilan dari software Arduino IDE.

(10)

3. Linksys Basic Setup

Linksys Basic Setup merupakan software tertanam pada wifi router yang dapat diakses dengan IP default yang dapat digunakan untuk mengatur konfigurasi dari wifi router itu sendiri. IP default yang digunakan adalah “192.168.1.1” (hilangkan tanda petik). Cara mengakses adalah dengan menyambungkan komputer / laptop dengan wifi router menggunakan kabel LAN atau dengan cara menyambungkan komputer / laptop tersebut dengan jaringan yang telah dibuat pada wifi router itu sendiri. Kemudian buka aplikasi browser dan masukkan IP default tersebut dan enter. Berikut merupakan tampilan dari Linksys Basic Setup.

4. Browser

Browser di sini digunakan untuk melihat hasil pembuatan halaman web serta digunakan untuk akses Linksys basi setup. Terdapat banyak aplikasi browser diantaranya adalah Google Chrome, Mozilla Firefox, UC Browser, Internet Explorer dan masih banyak lagi lainnya. Berikut adalah contoh dari tampilan web browser Mozilla Firefox.

(11)

2.2.3 Topologi jaringan

Berikut adalah ilustrasi jaringan yang digunakan oleh Smart Home Arduino Embedded Web Server.

Berdasarkan topologi jaringan diatas, sistem kontrol Smart Home dibagi menjadi beberapa bagian, yaitu:

(12)

1. Perangkat Input: a. Push Button

b. Client / User (Komputer / Laptop) 2. Perangkat Proses:

a. Arduino Mega 2560 b. Arduino Ethernet Shield c. Linksys Wifi Router 3. Perangkat Output:

a. 5VDC Relay 4 channel b. Lampu

c. Stop kontak (terminal)

2.2.4 Pembuatan Wiring Sistem Kontrol

(13)
(14)

Dan berikut merupakan tabel I/O yang digunakan pada Arduino Mega 2560:

2.2.5 Konfigurasi IP Smart Home

Dalam melakukan konfigurasi IP smart home terdapat 2 langkah, yaitu konfigurasi set-up wi-fi router dan konfigurasi Arduino.

Berikut ini adalah langkah langkah dalam melakukan konfigurasi router Wi-fi . Buka browser lalu masukan address 192.168.1.1 maka akan muncul basic set-up Linksys Wi-fi router seperti pada gambar . Set-up ini digunakan untuk mengkonfigurasi alamat IP public Router Wi-fi dengan cara diisikan pada kolom Internet Ip address .

(15)

Setelah melakukan konfigurasi pada Internet Ip address kemudian pilih pada tab application & gaming untuk melakukan konfigurasi Ip yang di-forward oleh router wi-fi yang juga sebagai Ip address pada ethernet shield arduino. Berikut merupakan gambar konfigurasi Ip yang di-forward wi-fi router.

(16)

2.2.6 Pembuatan Program HTML (Terlampir)

Setelah melakukan konfigurasi pada router wifi , kemudian melakukan pembuatan program html untuk membuat tampilan pada Ip address yang telah ditentukan, berikut adalah program html pada smart home berbasis arduino. Pembuatan program html menggukanan software notepad++ kemudian di atur pada tap language dipilih bahasa html.

Berikut adalah gambar setelah membuat program html maka tampilan web server pada ip 192.168.1.101

(17)

2.2.7 Pembuatan Program Arduino (Terlampir)

Setelah membuat program html yang digunakan untuk tampilan web server selanjutnya adalah membuat program arduino sebagai sistem kontrol dari Smart Home. Program arduino di tulis pada software Arduino IDE. Berikut merupakan tampilan program pada Arduino.

(18)

2.3 Pengujian

Berikut ini adalah pengujian yang dilakukan pada smart home setelah dilakukan program dan konfigurasi IP . Pengujian ini dikendalikan melalui aplikasi browser untuk mengakses IP yang telah dikonfigurasi.

(19)

1. Tampilan ketika dalam keadaan semua lampu mati.

2.

3.

(20)

5. Tampilan ketika dalam keadaan Lampu 1 nyala. 6.

(21)
(22)
(23)
(24)
(25)
(26)
(27)
(28)
(29)
(30)

3

BAB III

14. PENUTUP

3.1 kesimpulan

15. Pembuatan Smart Home Arduino Embedded Web Server

menggunakan perangkat kontrol Arduino Mega 2560 dan Ethernet Shield. Web server yang disimpan pada media penyimpana SD Card dapat diakses melalui web browser yang kemudian dapat mengontrol perangkat rumah tangga.

3.2 saran

16. Kedepannya, Smart Home dapat diakses melalui

jaringan internet dari seluruh tempat. Sehingga tidak lagi

menggunakan embedded web server melalui media penyimpanan Micro SD Card, tetapi sudah disimpan dalam web hosting sehingga dapat diakses dengan menggunakan jaringan internet.

17. 18. Refernsi 19. http://www.vedcmalang.com/pppptkboemlg/index.php/ menuutama/listrik-electro/1045-part-2 20. http://www.vedcmalang.com/pppptkboemlg/index.php/ menuutama/listrik-electro/1053-part-3

(31)

21. LAMPIRAN 1. Program HTML

22. <!DOCTYPE html> 23. <html>

24. <head>

25. <title>Smart Home Mekatronika 2015</title> 26. <script> 27. strLED1 = ""; 28. strLED2 = ""; 29. strLED3 = ""; 30. strLED4 = ""; 31. var LED1_state = 0; 32. var LED2_state = 0; 33. var LED3_state = 0; 34. var LED4_state = 0; 35. function GetArduinoIO() 36. {

37. nocache = "&nocache=" + Math.random() * 1000000; 38. var request = new XMLHttpRequest();

39. request.onreadystatechange = function() 40. {

41. if (this.readyState == 4) { 42. if (this.status == 200) {

43. if (this.responseXML != null) {

44. // XML file received - contains analog values, switch values and LED states 45. var count; 46. //LED1 47. if (this.responseXML.getElementsByTagName('LED')[0].childNodes[0].nodeValue === "on0") { 48. document.getElementById("LED1").innerHTML = "Lampu 1 ON (D22)"; 49. LED1_state = 1; 50. } 51. if (this.responseXML.getElementsByTagName('LED')[0].childNodes[0].nodeValue === "off0") { 52. document.getElementById("LED1").innerHTML = "Lampu 1 OFF (D22)";

53. LED1_state = 0; 54. } 55. //LED2 56. if (this.responseXML.getElementsByTagName('LED') [1].childNodes[0].nodeValue === "on1") { 57. document.getElementById("LED2").innerHTML = "Lampu 2 ON (D23)"; 58. LED2_state = 1; 59. } 60. if (this.responseXML.getElementsByTagName('LED')[1].childNodes[0].nodeValue === "off1") { 61. document.getElementById("LED2").innerHTML = "Lampu 2 OFF (D23)";

62. LED2_state = 0; 63. } 64. //LED3 65. if (this.responseXML.getElementsByTagName('LED') [2].childNodes[0].nodeValue === "on2") { 66. document.getElementById("LED3").innerHTML = "Lampu 3 ON (D24)"; 67. LED3_state = 1; 68. } 69. if (this.responseXML.getElementsByTagName('LED')[2].childNodes[0].nodeValue === "off2") { 70. document.getElementById("LED3").innerHTML = "Lampu 3 OFF (D24)";

71. LED3_state = 0; 72. }

73. //LED4

74. if (this.responseXML.getElementsByTagName('LED')

[3].childNodes[0].nodeValue === "on3") {

75. document.getElementById("LED4").innerHTML = "Stop Kontak ON (D25)"; 76. LED4_state = 1;

77. }

78. if (this.responseXML.getElementsByTagName('LED')[3].childNodes[0].nodeValue === "off3") { 79. document.getElementById("LED4").innerHTML = "Stop Kontak OFF (D25)";

80. LED4_state = 0; 81. }

82. } 83. } 84. }

(32)

85. }

86. // send HTTP GET request with LEDs to switch on/off if any

87. request.open("GET", "ajax_inputs" + strLED1 + strLED2 + strLED3 + strLED4 + nocache, true); 88. request.send(null); 89. setTimeout('GetArduinoIO()', 1000); 90. strLED1 = ""; 91. strLED2 = ""; 92. strLED3 = ""; 93. strLED4 = ""; 94. } 95. function GetButton1() 96. { 97. if (LED1_state === 1) { 98. LED1_state = 0; 99. strLED1 = "&LED1=0"; 100. } 101. else { 102. LED1_state = 1; 103. strLED1 = "&LED1=1"; 104. } 105. } 106. function GetButton2() 107. { 108. if (LED2_state === 1) { 109. LED2_state = 0; 110. strLED2 = "&LED2=0"; 111. } 112. else { 113. LED2_state = 1; 114. strLED2 = "&LED2=1"; 115. } 116. } 117. function GetButton3() 118. { 119. if (LED3_state === 1) { 120. LED3_state = 0; 121. strLED3 = "&LED3=0"; 122. } 123. else { 124. LED3_state = 1; 125. strLED3 = "&LED3=1"; 126. } 127. } 128. function GetButton4() 129. { 130. if (LED4_state === 1) { 131. LED4_state = 0; 132. strLED4 = "&LED4=0"; 133. } 134. else { 135. LED4_state = 1; 136. strLED4 = "&LED4=1"; 137. } 138. } 139. </script> 140. <style> 141. .IO_box { 142. float: left; 143. margin: 0 20px 20px 0; 144. border: 1px solid blue; 145. padding: 0 5px 0 5px; 146. width: 120px; 147. } 148. h1 { 149. font-size: 120%; 150. color: blue; 151. margin: 0 0 10px 0; 152. } 153. h2 { 154. font-size: 85%; 155. color: #5734E6; 156. margin: 5px 0 5px 0;

(33)

157. } 158. p, form, button { 159. font-size: 80%; 160. color: #252525; 161. } 162. .small_text { 163. font-size: 70%; 164. color: #737373; 165. } 166. marquee_text{ 167. font-size: 100%; 168. color: #252525; 169. } 170. </style> 171. </head> 172. <body onload="GetArduinoIO()">

173. <marquee direction="up" behavior="scroll" scrollamount="2" scrolldelay="100" height="40px">Selamat Datang di Smart Home Web Controller</marquee>

174. <h1>Politeknik Manufaktur Astra</h1>

175. <h1>Smart Home - Mekatronika</h1> 176. <h1>2015</h1><br>

177. <div class="IO_box"> 178. <h2>Lampu 1</h2>

179. <button type="button" id="LED1" onclick="GetButton1()">Lampu 1 OFF (D22)</button><br /><br /> 180. </div>

181. <div class="IO_box"> 182. <h2>Lampu 2</h2>

183. <button type="button" id="LED2" onclick="GetButton2()">Lampu 2 OFF (D23)</button><br /><br /> 184. </div>

185. <div class="IO_box"> 186. <h2>Lampu 3</h2>

187. <button type="button" id="LED3" onclick="GetButton3()">Lampu 3 OFF (D24)</button><br /><br /> 188. </div>

189. <div class="IO_box"> 190. <h2>Stop Kontak</h2>

191. <button type="button" id="LED4" onclick="GetButton4()">Stop Kontak OFF (D25)</button><br /><br /> 192. </div>

193. </body><br> 194.</html

(34)

195.

2. Program Arduino

196. /*

197. * Program Name : Arduino Smart Home Ethernet Controller

198. * Author : Ahmad Jati Widodo 199. * Year : 2015

200. * Focus : Mechatronics

201. * Study : Politeknik Manufaktur Astra, Jakarta

202. */

203.

204. #include <SPI.h> 205. #include <Ethernet.h> 206. #include <SD.h>

207. // size of buffer used to capture HTTP requests

208. #define REQ_BUF_SZ 60

209.

210. // MAC address from Ethernet shield sticker under board

211. byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

212. IPAddress ip(192, 168, 1, 106); // IP address, may need to change depending on network 213. EthernetServer server(80); // create a server at port 80

214. File webFile; // the web page file on the SD card

215. char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string 216. char req_index = 0; // index into HTTP_req buffer

217. boolean LED_state[4] = {0}; // stores the states of the LEDs 218.

219. void setup()

220. {

221. // disable Ethernet chip

222. pinMode(10, OUTPUT);

223. digitalWrite(10, HIGH);

224.

225. Serial.begin(9600); // for debugging

226.

227. // initialize SD card

228. Serial.println("Initializing SD card...");

229. if (!SD.begin(4)) {

230. Serial.println("ERROR - SD card initialization failed!"); 231. return; // init failed

232. }

233. Serial.println("SUCCESS - SD card initialized."); 234. // check for index.htm file

235. if (!SD.exists("index.htm")) {

236. Serial.println("ERROR - Can't find index.htm file!"); 237. return; // can't find index file

238. }

239. Serial.println("SUCCESS - Found index.htm file.");

240. // switches 241. pinMode(5, INPUT); 242. pinMode(6, INPUT); 243. pinMode(7, INPUT); 244. pinMode(8, INPUT); 245. // LEDs 246. pinMode(22, OUTPUT); 247. pinMode(23, OUTPUT); 248. pinMode(24, OUTPUT); 249. pinMode(25, OUTPUT); 250.

251. Ethernet.begin(mac, ip); // initialize Ethernet device 252. server.begin(); // start to listen for clients

253. }

254.

255. void loop()

(35)

257. EthernetClient client = server.available(); // try to get client 258.

259. if (client) { // got client?

260. boolean currentLineIsBlank = true; 261. while (client.connected()) {

262. if (client.available()) { // client data available to read

263. char c = client.read(); // read 1 byte (character) from client 264. // limit the size of the stored received HTTP request

265. // buffer first part of HTTP request in HTTP_req array (string)

266. // leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1) 267. if (req_index < (REQ_BUF_SZ - 1)) {

268. HTTP_req[req_index] = c; // save HTTP request character 269. req_index++;

270. }

271. // last line of client request is blank and ends with \n 272. // respond to client only after last line received 273. if (c == '\n' && currentLineIsBlank) {

274. // send a standard http response header 275. client.println("HTTP/1.1 200 OK");

276. // remainder of header follows below, depending on if 277. // web page or XML page is requested

278. // Ajax request - send XML file

279. if (StrContains(HTTP_req, "ajax_inputs")) { 280. // send rest of HTTP header

281. client.println("Content-Type: text/xml"); 282. client.println("Connection: keep-alive"); 283. client.println();

284. SetLEDs();

285. // send XML file containing input states 286. XML_response(client);

287. }

288. else { // web page request 289. // send rest of HTTP header

290. client.println("Content-Type: text/html"); 291. client.println("Connection: keep-alive"); 292. client.println();

293. // send web page

294. webFile = SD.open("index.htm"); // open web page file 295. if (webFile) {

296. while(webFile.available()) {

297. client.write(webFile.read()); // send web page to client 298. }

299. webFile.close(); 300. }

301. }

302. // display received HTTP request on serial port 303. Serial.print(HTTP_req);

304. // reset buffer index and all buffer elements to 0 305. req_index = 0;

306. StrClear(HTTP_req, REQ_BUF_SZ); 307. break;

308. }

309. // every line of text received from the client ends with \r\n 310. if (c == '\n') {

311. // last character on line of received text 312. // starting new line with next character read 313. currentLineIsBlank = true;

314. }

315. else if (c != '\r') {

316. // a text character was received from client 317. currentLineIsBlank = false;

318. }

319. } // end if (client.available()) 320. } // end while (client.connected())

(36)

321. delay(5); // give the web browser time to receive the data 322. client.stop(); // close the connection

323. } // end if (client)

324.

325. // read buttons and debounce

326. ButtonDebounce();

327. }

328.

329. // function reads the push button switch states, debounces and latches the LED states 330. // toggles the LED states on each push - release cycle

331. // hard coded to debounce two switches on pins 2 and 3; and two LEDs on pins 6 and 7 332. // function adapted from Arduino IDE built-in example:

333. // File --> Examples --> 02.Digital --> Debounce

334. void ButtonDebounce(void)

335. {

336. static byte buttonState[4] = {LOW, LOW, LOW, LOW}; // the current reading from the input pin 337. static byte lastButtonState[4] = {LOW, LOW, LOW, LOW}; // the previous reading from the input pin

338.

339. // the following variables are long's because the time, measured in miliseconds, 340. // will quickly become a bigger number than can be stored in an int.

341. static long lastDebounceTime[4] = {0}; // the last time the output pin was toggled 342. long debounceDelay = 50; // the debounce time; increase if the output flickers

343. 344. byte reading[4]; 345. 346. reading[0] = digitalRead(5); 347. reading[1] = digitalRead(6); 348. reading[2] = digitalRead(7); 349. reading[3] = digitalRead(8); 350.

351. for (int i = 0; i < 4; i++) {

352. if (reading[i] != lastButtonState[i]) { 353. // reset the debouncing timer 354. lastDebounceTime[i] = millis();

355. }

356.

357. if ((millis() - lastDebounceTime[i]) > debounceDelay) { 358. // whatever the reading is at, it's been there for longer

359. // than the debounce delay, so take it as the actual current state:

360.

361. // if the button state has changed: 362. if (reading[i] != buttonState[i]) { 363. buttonState[i] = reading[i];

364.

365. // only toggle the LED if the new button state is HIGH 366. if (buttonState[i] == HIGH) {

367. LED_state[i] = !LED_state[i]; 368. }

369. }

370. }

371. } // end for() loop

372.

373. // set the LEDs

374. digitalWrite(22, LED_state[0]); 375. digitalWrite(23, LED_state[1]); 376. digitalWrite(24, LED_state[2]); 377. digitalWrite(25, LED_state[3]);

378.

379. // save the reading. Next time through the loop, 380. // it'll be the lastButtonState:

381. lastButtonState[0] = reading[0]; 382. lastButtonState[1] = reading[1]; 383. lastButtonState[2] = reading[2]; 384. lastButtonState[3] = reading[3];

(37)

385. } 386.

387. // checks if received HTTP request is switching on/off LEDs

388. // also saves the state of the LEDs

389. void SetLEDs(void)

390. {

391. // LED 1 (pin 22)

392. if (StrContains(HTTP_req, "LED1=1")) { 393. LED_state[0] = 1; // save LED state 394. digitalWrite(22, HIGH);

395. }

396. else if (StrContains(HTTP_req, "LED1=0")) { 397. LED_state[0] = 0; // save LED state 398. digitalWrite(22, LOW);

399. }

400. // LED 2 (pin 23)

401. if (StrContains(HTTP_req, "LED2=1")) { 402. LED_state[1] = 1; // save LED state 403. digitalWrite(23, HIGH);

404. }

405. else if (StrContains(HTTP_req, "LED2=0")) { 406. LED_state[1] = 0; // save LED state 407. digitalWrite(23, LOW);

408. }

409. // LED 3 (pin 24)

410. if (StrContains(HTTP_req, "LED3=1")) { 411. LED_state[2] = 1; // save LED state 412. digitalWrite(24, HIGH);

413. }

414. else if (StrContains(HTTP_req, "LED3=0")) { 415. LED_state[2] = 0; // save LED state 416. digitalWrite(24, LOW);

417. }

418. // Stop Kontak (pin 25)

419. if (StrContains(HTTP_req, "LED4=1")) { 420. LED_state[3] = 1; // save LED state 421. digitalWrite(25, HIGH);

422. }

423. else if (StrContains(HTTP_req, "LED4=0")) { 424. LED_state[3] = 0; // save LED state 425. digitalWrite(25, LOW);

426. }

427. }

428.

429. // send the XML file with analog values, switch status

430. // and LED status

431. void XML_response(EthernetClient cl)

432. {

433. int analog_val; // stores value read from analog inputs 434. int count; // used by 'for' loops

435. int sw_arr[] = {5, 6, 7, 8}; // pins interfaced to switches

436.

437. cl.print("<?xml version = \"1.0\" ?>"); 438. cl.print("<inputs>");

439.

440. // button LED states

441. // LED1 442. cl.print("<LED>"); 443. if (LED_state[0]) { 444. cl.print("on0"); 445. } 446. else { 447. cl.print("off0"); 448. }

(38)

449. cl.println("</LED>");

450.

451. // button LED states

452. // LED2 453. cl.print("<LED>"); 454. if (LED_state[1]) { 455. cl.print("on1"); 456. } 457. else { 458. cl.print("off1"); 459. } 460. cl.println("</LED>"); 461.

462. // button LED states

463. // LED3 464. cl.print("<LED>"); 465. if (LED_state[2]) { 466. cl.print("on2"); 467. } 468. else { 469. cl.print("off2"); 470. } 471. cl.println("</LED>"); 472. 473. // button SK states 474. // Stop Kontak 475. cl.print("<LED>"); 476. if (LED_state[3]) { 477. cl.print("on3"); 478. } 479. else { 480. cl.print("off3"); 481. } 482. cl.println("</LED>"); 483. cl.print("</inputs>"); 484. } 485.

486. // sets every element of str to 0 (clears array) 487. void StrClear(char *str, char length)

488. {

489. for (int i = 0; i < length; i++) { 490. str[i] = 0;

491. }

492. }

493.

494. // searches for the string sfind in the string str 495. // returns 1 if string found

496. // returns 0 if string not found

497. char StrContains(char *str, char *sfind)

498. { 499. char found = 0; 500. char index = 0; 501. char len; 502. 503. len = strlen(str); 504. 505. if (strlen(sfind) > len) { 506. return 0; 507. }

508. while (index < len) {

509. if (str[index] == sfind[found]) {

510. found++;

511. if (strlen(sfind) == found) { 512. return 1;

(39)

513. } 514. } 515. else { 516. found = 0; 517. } 518. index++; 519. } 520. 521. return 0; 522. } 523. 524.

Referensi

Dokumen terkait

Bagaimana membuat aplikasi rumah pintar (smart home) yang memiliki kemampuan untuk mengendalikan peralatan elektronik rumah tangga dengan menggunakan modul

Dalam penelitian ini dibuat sistem deteksi jumlah penghuni pada ruangan berpintu untuk smart home berbasis Arduino dan sensor PIR dengan sistem deteksi yang

Bagaimana membuat aplikasi rumah pintar (smart home) yang memiliki kemampuan untuk mengendalikan peralatan elektronik rumah tangga dengan menggunakan modul

Untuk Memudahkan memonitoring Kondisi Peralatan di Gardu Induk Tambak Lorok dibuatkan Alat Monitoring Status Pemutus Tenaga 150 KV di Gardu Induk Tambak Lorok yang berbasis web

Oleh karena itu penulis membuat alat kontrol otomatis pada sistem refrigerasi miniatur hujan salju berbasis mikrokontroler Arduino Mega 2560.. Alat-alat yang digunakan selain

ABSTRAK Pengembangan Program Kontrol Alat Pemotong Kabel Otomatis Berbasis Mikro Kontroller Arduino Mega 2560 Oleh: Rizky Afrianto Putra Pembuatan Proyek Akhir ini bertujuan untuk