BAB III PRINSIP KERJA DAN PERANCANGAN
3.1 Diagram Blok Hardware Dalam bab ini kita akan membahas tentang perancangan alat serta prinsip kerja dari alat yang telah kita buat. Pada gambar 3.1 memperlihatkan sebuah blok diagram yang terdiri dari perangkat keras. Disini akan kita jelaskan cara koneksi serta urutan-urutannya.
Gambar 3.1 Blok Diagram Hardware Dari PC kita akan membuat program di software arduino. Kemudian program tersebut kita kompile. Apabila program sudah jalan maka kita konek ke rangkaian arduino uno. Disini PC akan sebagai sarana untuk memasukkan interupsi-interupsi yang dibutuhkan oleh arduino uno.
25
Pada diagram diatas ini ada berbagai komponen yang telah disebutkan. Seperti pembahasan sebelumnya yaitu landasan teori telah sedikit banyak di singgung tentang kegunaan dari masing-masing hardware tersebut. Tetapi di pembahasan kali ini kita akan lebih mengacu ke fungsi rangkaian dan kegunaannya, ataupun komponen-komponen tersebut yang masih berhubungan dengan judul Tugas Akhir ini. 3.2 PC Client (Processor Control) Di dalam blok diagram diatas PC adalah alat yang paling vital atau paling penting peranannya. Sebab disini PC akan memproses segala program serta akan menampilkan berjalan ataupun tidak sebuah program. Sebelum program tersebut di tanam atau di download ke rangakaian arduino uno, maka kita akan coba dahulu di dalam softwarenya. Software arduino uno dapat kita install di PC tersebut. PC Client di dalam blok diagram tersebut dapat kita artikan sebagai otaknya sebuah program yang akan kita jalankan. Di sisi lain PC juga akan kita gunakan sebagai alat untuk akses ke internet. Sebelum menghubung ke internet PC itu sendiri akan kita hubungkan dengan HTML Hub.
Gambar 3.2 PC Client. 26
3.3 Ethernet Hub Pada blok diagram diatas Ethernet hub akan kita gunakan untuk alat penghubung arduino uno dengan server. Secara sederhana hub bisa dikatakan suatu perangkat yang memiliki banyak port yang akan menghubungkan beberapa node atau titik sehingga membentuk suatu jaringan pada topologi star. Pada jaringan yang umum dan sederhana salah satu port menghubungkan hub tersebut ke
computer
server.
Sedangkan
port
yang
lainnya
digunakan
untuk
menghubungkan komputer client atau work station yang sudah memiliki NIC untuk membentuk suatu jaringan. Di dalam gambar blok diatas kita juga dapat mengembangkan sebuah Ethernet hub untuk menambah hub yang lain dengan cara up link. Disini kita tidaka akan membahas tentang penambahan hub yang lain tersebut. Untuk akses Ethernet shield tersebut kita hanya membutuhkan 1 port. Dengan 1 port Ethernet dari sebuah hub tersebut kita dapat menjalankan program yang telah kita buat/kita rancang.
Gambar 3.3 Ethernet Hub
3.4 Arduino uno Didalam blok diagram tersebut ada rangkaian arduino uno. Dimana arduino uno ini akan kita manfaatkan sebagaai alat pengolah data yang akan kita 27
aplikasikan ke Ethernet shield. Setelah program kita download ke arduino uno, kemudian Ethernet shield akan bekerja. Sebelum bekerja ataupun aktif rangkaian arduino uno tersebut harus kita beri power. Power untuk arduino uno tersebut dapat kita ambilkan dari PC, dari port USB PC client. Tegangan yang keluar dari PC client berkisar antara 5Volt, tegangan ini dapat kita manfaatkan untuk menghidupkan si arduino uno tersebut. Untuk catu daya arduino Ethernet shield tidak terlalu besar yang dibutuhkan. Maka dari itu kita hanya membutuhkan output tegangan dari USB Port dari PC. Setelah arduino uno serta Ethernet shield tersebut aktif kemudian Ethernet shield akan menerima outputan program yang diperintahkan oleh arduino uno. Program tersebut berasal dari PC Client yang telah di download.
3.5 Ethernet Shield di dalam blok Ethernet shield di dalam blok diagram tersebut akan kita pasangkan dengan arduino. Dari Ethernet shield ini kita akan dapat menghubungkan dengan jaringan Ethernet PC client. Ethernet shield disini akan mentrnasfer data dari arduino uno. Port untuk Ethernet shield itu sendiri sudah tersedia. Rangakain Ethernet shield tersebut
tidak dapat berdiri sendiri sebagai server. Ada alat
pendukung lain yang akan menyuportnya, yaitu SD card. Pada penyambungan Ethernet shield itu sendiri, caranya cukup mudah. Tinggal kita menancapkan di atas rangkaian arduino uno tersebut. Di rangkaian Ethernet shield itu sendiri sudah terdapat socket yang akan di hubungkan ke arduino uno. Selain itu di dalam Ethernet shield tersebut juga sudah dilengkapi port untuk menghubungkan ke Ethernet. 28
Gambar 3.4 Kabel Ethernet atau LAN
29
3.6 Diagram Blok Arduino
PC Client
Arduino Uno
Ethernet Shield
SD Card
Ethernet Shield
Gagal
login ke server
Berhasil
Ethernet shield transfer file ke web
Ethernet Shield gagal transfer file “File Not Found”
File di download/upload lewat browser
End Gambar 3.5 Blok Diagram Software arduino 30
Dari diagram blok ini dapat kita lihat menyimpulkan, dari perangkat lunaknya. Untuk membuat sebuah program arduino Ethernet shield software yang kita butuhkan diantaranya software arduino itu sendiri yaitu Arduino0023 yang versi terbaru. Kita akan cuplik sedikit software dari arduino yang digunakan untuk arduino Ethernet shield : Pertama kali kita cari icon untuk arduino yang telah di install ke PC Client. Sebelumnya kita mengguanakan software HP USB Tool untuk membaca SD card. Selain itu kita sekalian format dahulu SD card tersebut dengan software HP USB Tool teresebut. Untuk tampilan dari software HP USB Tool Format tersebut adalah sebagai berikut :
Gambar 3.6 Penggunaan Software USB Format Tool. 31
Setelah proses tersebut berjalan, kemudian kita akanmasuk ke tahap selanjutnya. SD card tersebut kita masukkan (insert) ke arduino Ethernet shield. Arsduino kemudian kita hubungkan ke PC Client melalui USB Port. Pembacaan SD card melalui arduino Ethernet shield. Sebelumnya itu kita telah membuka software arduino tersebut. Kita pilih yang untuk pembacaan SD card file.
Gambar 3.7 Tampilan Arduino0023 Software.
32
Program pembacaan SD Card di dalam arduino Ethernet shield.
Gambar 3.8 Tampilan Pembacaan SD Card di Arduino.
Untuk lebih lengkapnya kita lihat program pembacaan SD Card di dalam arduino Ethernet shield. Disini kita akan mengetahui SD Card tersebut dapat kita gunakan apa tidaknya sebagai penyimpan file di browser yang akan kita rencanakan.
Contoh Program untuk pembacaan SD Card : #include <SdFat.h> #include <SdFatUtil.h> #include <Ethernet.h> /************ ETHERNET STUFF ************/ byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 192, 168, 1, 177 }; Server server(80); /************ SDCARD STUFF ************/ Sd2Card card; SdVolume volume; SdFile root; // store error strings in flash to save RAM
33
#define error(s) error_P(PSTR(s)) void error_P(const char* str) { PgmPrint("error: "); SerialPrintln_P(str); if (card.errorCode()) { PgmPrint("SD error: "); Serial.print(card.errorCode(), HEX); Serial.print(','); Serial.println(card.errorData(), HEX); } while(1); } void setup() { Serial.begin(9600); PgmPrint("Free RAM: "); Serial.println(FreeRam()); // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with // breadboards. use SPI_FULL_SPEED for better performance. pinMode(10, OUTPUT); // set the SS pin as an output (necessary!) digitalWrite(10, HIGH); // but turn off the W5100 chip! if (!card.init(SPI_HALF_SPEED, 4)) error("card.init failed!"); // initialize a FAT volume if (!volume.init(&card)) error("vol.init failed!"); PgmPrint("Volume is FAT"); Serial.println(volume.fatType(),DEC); Serial.println(); if (!root.openRoot(&volume)) error("openRoot failed"); // list file in root with date and size PgmPrintln("Files found in root:"); root.ls(LS_DATE | LS_SIZE); Serial.println(); // Recursive list of all directories PgmPrintln("Files found in all dirs:"); root.ls(LS_R); Serial.println(); PgmPrintln("Done"); // Debugging complete, we start the server! Ethernet.begin(mac, ip); server.begin(); } void ListFiles(Client client, uint8_t flags) { // This code is just copied from SdFile.cpp in the SDFat library // and tweaked to print to the client output in html!
34
dir_t p; Serial.println("list!"); root.rewind(); while (root.readDir(p) > 0) { Serial.print("read file"); // done if past last used entry if (p.name[0] == DIR_NAME_FREE) break; // skip deleted entry and entries for . and .. if (p.name[0] == DIR_NAME_DELETED || p.name[0] continue;
==
'.')
// only list subdirectories and files if (!DIR_IS_FILE_OR_SUBDIR(&p)) continue; // print any indent spaces client.print(' '); // print file name with possible blank fill //root.printDirName(*p, flags & (LS_DATE | LS_SIZE) ? 14 : 0); uint8_t w = 0; for (uint8_t i = 0; i < 11; i++) { if (p.name[i] == ' ') continue; if (i == 8) { client.print('.'); } client.print(p.name[i]); } if (DIR_IS_SUBDIR(&p)) { client.print('/'); } // print modify date/time if requested if (flags & LS_DATE) { root.printFatDate(p.lastWriteDate); client.print(' '); root.printFatTime(p.lastWriteTime); } // print size if requested if (!DIR_IS_SUBDIR(&p) && (flags & LS_SIZE)) { client.print(' '); client.print(p.fileSize); } client.println("
"); } } void loop() { Client client = server.available(); if (client) { // an http request ends with a blank line boolean current_line_is_blank = true; while (client.connected()) { if (client.available()) { char c = client.read();
35
// if we've gotten to the end of the line (received a newline // character) and the line is blank, the http request has ended, // so we can send a reply if (c == '\n' && current_line_is_blank) { // send a standard http response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); // print all the files, use a helper to keep it clean //ListFiles(client, 0); client.println("
Files:
"); ListFiles(client, 0); break; } if (c == '\n') { // we're starting a new line current_line_is_blank = true; } else if (c != '\r') { // we've gotten a character on the current line current_line_is_blank = false; } } } // give the web browser time to receive the data delay(1); client.stop(); } }
Setelah pembacaan SD card di software arduino maka kita akan test apakah bisa running apa tidaknya program tersebut. Apabila sudah running kemudian kita hubungkan ke server. Disana kita akan test melalui CMD untuk mengetahui sudah terhubungnya antara arduino shield tersebut dengan server. Untuk lebih jelasnya kita lihat gambar cara test antara arduino shield tersebut dengan server.
36
Gambar 3.9 Tampilan Command Prompt Jika didalam Command Prompt tersebut sudah jalan, maka langkah selanjutnya kita akan pengetesan ke browser. Di browser akan kita panggil ip yang telah kita setting di waktu pengolahan program di software arduino. Untuk lebih jelasnya kita lihat gambar di bawah ini. Disni kita akan cek apakah file tersebut sudah masuk ke web teresebut atau belum.
Gambar 3.10 Tampilan file SD Card di Browser 37
3.7 Setting Arduino Ethernet Shield Untuk pembahasan kali ini kita akan bahas lebih detail tentang urutan pembuatan sebuah program yang kita jadikan judul di tugas akhir. Pertama kalinya kita mempersiapkan alat yang kita butuhkan seperti Rangkaian Arduino, Ethernet Shield,
SD Card serta download program ke rangkaian
tersebut.Arduino serta Ethernet akan kita temple seperti ini.
3.7.1 Rangkaian Arduino Ethernet Shield Alat ini akan kita gunakan sebagai pokok pembicaraan pada penulisan pelaporan tugas akhir ini. Kita siapakan alat sebagai berikut : •
Rangkaian Arduino Uno
•
Rangkaian Arduino Ethernet Shield
•
Kabel USB
•
Kabel Ethernet / LAN
•
SD Card
Disini kita akan bahas satu persatu dari alat tersebut berikut setting alat tersebut. Cara setting rangkaian arduino uno, arduino akan kita buka softwarenya di PC yang telah kita install. Pertama kita klik icon Arduino0023. Di layar PC akan muncul software Arduino uno dengan sketch_mar1. Kemudian apabila software arduino tersebut telah di buka, kemudian kita setting dahulu port untuk kabel USB yang masuk ke PC serta ke Arduino.
38
Gambar 3.11 Tampilan Setting Arduino dengan Port USB Pastikan arduino tersebut dapat komunikasi dengan PC client. Dengan melihat tanda centrang di bagian port serial setelah di klik menu Tool pada software arduino tersebut. Apabila kita tidak dapat mengetahui apakah port USB tersebut telah konek dengan PC, kita juga dapat melihat di Control panel PC. Kemudian dari sana kita dapat memilih menu Device Manager. Disana kita akan dapat mengetahui port berapa yang telah tersambung ke PC. Selanjutnya apabila sudah benar-benar terhubung antara PC dengan rangkaian arduino ethernet shield sekarang kita akan masuk ke awalan program untuk Ethernet dari arduino. Untuk lebih jelasnya kita lihat gambar dibawah ini. Pertama kita akan klik Menu di software arduino0023, yaitu sketch -- kemudian pilih Ethernet.
39
Gambar 3.12 Tampilan Menu Arduino Import Library Apabila kita telah memilih menu tersebut kemudian pilih Import Library akan muncul disana lembaran baru dari halaman software arduino Ethernet shield tersebut. Selanjunya di dalam lembaran itu kita dapat menuliskan program. Program tersebut sesuai dengan yang kita inginkan. Program yang akan kita masukkan sesuai dengan pembahasan kita ataupun judul tugas akhir ini yaitu Arduino Web server transfer File dari Micro SD. Setelah lembaran baru muncul kemudian dipilih menu sketch Import Library akan muncul seperti ini.
40
Gambar 3.13 Tampilan Lembaran Arduino Ethernet Shield
Apabila kita sudah setting arduino tersebut ke laman arduino Ethernet shield, kemudian kita tulis program tersebut di halaman baru. Untuk program arduino yang akan kita tulis yaitu sebagai berikut : Program Arduino Ethernet Shield yang kita tulis. #include <SPI.h> #include
#include <Ethernet.h> #include <Server.h> #include #include <SdFat.h> #include <SdFatUtil.h> /************ ETHERNET STUFF ************/ byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 192, 168, 1, 178 }; byte gateway[]= {192, 168, 1, 1 }; byte subnet[] = { 255, 255, 255, 0 }; Server server(80); /************ SDCARD STUFF ************/ Sd2Card card; SdVolume volume; 41
SdFile root; SdFile file; // store error strings in flash to save RAM #define error(s) error_P(PSTR(s)) void error_P(const char* str) { PgmPrint("error: "); SerialPrintln_P(str); if (card.errorCode()) { PgmPrint("SD error: "); Serial.print(card.errorCode(), HEX); Serial.print(','); Serial.println(card.errorData(), HEX); } while(1); } void setup() { Serial.begin(9600); PgmPrint("Free RAM: "); Serial.println(FreeRam()); // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with // breadboards. use SPI_FULL_SPEED for better performance. pinMode(10, OUTPUT); // set the SS pin as an output (necessary!) digitalWrite(10, HIGH); // but turn off the W5100 chip! if (!card.init(SPI_HALF_SPEED, 4)) error("card.init failed!"); // initialize a FAT volume if (!volume.init(&card)) error("vol.init failed!"); PgmPrint("Volume is FAT"); Serial.println(volume.fatType(),DEC); Serial.println(); if (!root.openRoot(&volume)) error("openRoot failed"); // list file in root with date and size PgmPrintln("Files found in root:"); 42
root.ls(LS_DATE | LS_SIZE); Serial.println(); // Recursive list of all directories PgmPrintln("Files found in all dirs:"); root.ls(LS_R); Serial.println(); PgmPrintln("Done"); // Debugging complete, we start the server! Ethernet.begin(mac, ip, gateway, subnet); server.begin(); } void ListFiles(Client client, uint8_t flags) { // This code is just copied from SdFile.cpp in the SDFat library // and tweaked to print to the client output in html! dir_t p; root.rewind(); client.println(""); } // How big our line buffer should be. 100 is plenty! #define BUFSIZ 100 void loop() { char clientline[BUFSIZ]; int index = 0; Client client = server.available(); if (client) { 44
// an http request ends with a blank line boolean current_line_is_blank = true; // reset the input buffer index = 0; while (client.connected()) { if (client.available()) { char c = client.read(); // If it isn't a new line, add the character to the buffer if (c != '\n' && c != '\r') { clientline[index] = c; index++; // are we too big for the buffer? start tossing out data if (index >= BUFSIZ) index = BUFSIZ -1; // continue to read more data! continue; } // got a \n or \r new line, which means the string is done clientline[index] = 0; // Print it out for debugging Serial.println(clientline); // Look for substring such as a request to get the root file if (strstr(clientline, "GET / ") != 0) { // send a standard http response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); // print all the files, use a helper to keep it clean client.println("Files:
"); ListFiles(client, LS_SIZE); } else if (strstr(clientline, "GET /") != 0) { // this time no space after the /, so a sub-file! char *filename; 45
filename = clientline + 5; // look after the "GET /" (5 chars) // a little trick, look for the " HTTP/1.1" string and // turn the first character of the substring into a 0 to clear it out. (strstr(clientline, " HTTP"))[0] = 0; // print the file we want Serial.println(filename); if (! file.open(&root, filename, O_READ)) { client.println("HTTP/1.1 404 Not Found"); client.println("Content-Type: text/html"); client.println(); client.println("File Not Found!
"); break; } Serial.println("Opened!"); client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/plain"); client.println(); int16_t c; while ((c = file.read()) > 0) { // uncomment the serial to debug (slow!) //Serial.print((char)c); client.print((char)c); } file.close(); } else { // everything else is a 404 client.println("HTTP/1.1 404 Not Found"); client.println("Content-Type: text/html"); client.println(); client.println("File Not Found!
"); } break; } } // give the web browser time to receive the data delay(1); client.stop(); 46
} }
Jika program tersebut sudah kita tulis di halaman baru tadi selanjutnya kita akan cek di software arduino tersebut, apakah program tersebut sudah bisa running atau belum apabila kita download ke rangkaian arduino tersebut. Untuk mengetahuinya kita akan coba cek melalui menu yang ada di dalam software yaitu :
Gambar 3.14 Tampilan Compilling Apabila program tersebut telah jalan dan tidak ada kesalahan lagi maka di halaman tersebut akan tertulis “Done Compilling”. Langkah selanjutnya adalah download program tersebut ke rangakain arduino. Sebelum itu kita sambungkan dahulu antara koneksi rangkaian arduino dengan PC. Kabel yang kita gunakan adalah kabel USB.
47
3.7.2
Download Program Arduino Untuk mendownload program arduino tersebut dari PC ke rangkaian
kita siapkan dahulu kabel penghubungnya, kita akan menggunakan kabel USB. Sebab di arduino sendiri sudah terpasang port untuk USB ke PC.
Gambar 3.15 Koneksi PC ke Arduino Uno Setelah antara PC dengan rangkaian arduino teresebut sudah terhubung sekarang kita cek apakah port tersebut sudah terhubung. Kita akan lihat di software arduino, apabila belum terhubung kita akan cek kembali di PC software. Coba klik di luar program arduino yaitu Control Panel - kemudian akan muncul Device Manager - disana akan muncul untuk port USB yang akan kita gunakan. Untuk mengetahuinya kita cabut/lepas dahulu koneksi port USB PC dengan arduino.
48
Gambar 3.16 Tampilan Port USB terhubung dengan Arduino. Jika antara arduino serta PC telah terhubung maka langkah selanjutnya adalah download program yang telah kita tulis di halaman arduino tersebut. Dengan cara sebagai berikut. Pilih menu di arduino UPLOAD -- kemudian klik gambar panah yang arah ke kanan .
Gambar 3.17 Tampilan Download program ke Arduino.
49
Dari download tersebut kita akan menunggu sebentar apakah download program tersebut berhasil apa tidaknya. Apabila telah berhasil di akan muncul tulisan “Done Uploading”, ini berarti program yang di download telah tertanam di rangkaian arduino.
3.7.3
Setting SD Card Untuk pembahasan kali ini masuk ke tahap penyiapan SD Car yang
akan kita sisipkan di arduino Ethernet shield. Biasanya SD card dipasaran mempunyai format FAT32. Sebab di arduino Ethernet shield ini SD Card yang FAT32 tidak dapat teridentifikasi maka kita harus merubah dahulu SD Card tersebut ke FAT, FAT16. Untuk memformat SD Card tersebut kita harus membutuhkan software tambahan yaitu HP USB Format Tool.
Gambar 3.18 HP USB Card Format dari FAT32 ke FAT Untuk mengetahui apakah SD Card tersebut sudah siap untuk digunakan atau belum kita akan lihat dengan cara, sisipkan beberapa file ke dalam memori SD 50
Card tersebut. Kemudian lepas SD Card dari port PC. Kemudian lepaskan SD Card dari adapternya. Pasang SD Card tersebut di rangkaian arduino Ethernet shield. Kita klik menu di PC Hyper Terminal, kilik 2 x, selanjutnya setting port yang digunakan ,serta jangan lupa Bit per second nya biasanya menggunakan yang 9600 maka disana akan muncul keterangan bahwa SD card tersebut sudah terbaca oleh arduino serta telah berkomuniksi dengan PC. Didalam halaman Hyper Terminal tersebut akan tampil sebagai berikut :
Gambar 3.19 Tampilan SD card telah terbaca. Maka dari tampilan tersebut dinyatakan bahwa SD Card tersebut telah siap digunakan. Selain itu SD Card tersebut juga sudah terformat menjadi format FAT16.
51