RANCANG BANGUN MODUL AKUISISI DATA UNTUK
SISTEM IRIGASI OTOMATIS BERBASIS MIKROKONTROLER
ARDUINO DUEMILANOVE
AKBAR RIYAN NUGROHO
DEPARTEMEN ILMU KOMPUTER
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
INSTITUT PERTANIAN BOGOR
BOGOR
2011
ABSTRACT
Akbar Riyan Nugroho. Design Data Acquisition Module For Arduino Duemilanove Microcontroller-Based Automatic Irrigation System. Under the supervision of Sri Wahjuni and Satyanto K. Saptomo.
This research is part of activities in IMHERE B2C IPB Strengthening Agricultural Research For Food Security And Sovereignty. Implementation of the research project will assess the Development of Automated Irrigation Systems For Food Production Land with research focus on the mechanism of data acquisition. Data acquisition is performed using the Arduino Duemilanove microcontroller. Arduino Duemilanove can perform data retrieval as well as having an ADC module, so as to facilitate the conversion of data from analog data into digital data. From the datasheet, ADC module on the Arduino Duemilanove has an error range of ± 2 LSB or ± 0.0092 V with a reference voltage of 4.67 V. In this experiment measurements obtained by the difference in value between the multimeter and the microcontroller of 0.00840 V, and the scores fall in the range of values of the ADC module conversion error. SD Memory Card can be selected as a data logger for managing data storage easily.
RANCANG BANGUN MODUL AKUISISI DATA UNTUK
SISTEM IRIGASI OTOMATIS BERBASIS MIKROKONTROLER
ARDUINO DUEMILANOVE
AKBAR RIYAN NUGROHO
Skripsi
Sebagai salah satu syarat untuk memperoleh gelar
Sarjana Komputer pada
Departemen Ilmu Komputer
DEPARTEMEN ILMU KOMPUTER
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
INSTITUT PERTANIAN BOGOR
BOGOR
2011
Judul : Rancang Bangun Modul Akuisisi Data Untuk Sistem Irigasi Otomatis Berbasis Mikrokontroler Arduino Duemilanove
Nama : Akbar Riyan Nugroho NRP : G64070072
Menyetujui:
Pembimbing I, Pembimbing II,
Ir. Sri Wahjuni, M.T. Dr. Satyanto K. Saptomo, S.TP, M.Si
NIP. 19680501 200501 2 001 NIP. 19730411 200501 1 002
Mengetahui :
Ketua Departemen Ilmu Komputer
Dr. Ir. Sri Nurdiati, M.Sc. NIP. 19601126 198601 2 001
PRAKATA
Alhamdulilahirobbil’alamin, segala puji bagi Alloh yang telah memberikan kenikmatan iman
sehingga bisa mengotimalkan potensi-potensi yang telah Alloh berikan. Skripsi yang berjudul Rancang Bangun Modul Akuisisi Data Untuk Sistem Irigasi Otomatis Berbasis Mikrokontroler Arduino Duemilanove dapat diselesaikan karena nikmat Alloh berupa akal untuk berfikir, ilmu yang bermanfaat, serta hati yang tergerak untuk melakukan hal yang bermanfaat. Sholawat serta salam saya tujukan kepada Nabi Muhammad, keluarganya, sahabat-sahabatnya, hingga umatnya hingga akhir zaman, dan semoga kita bisa mengikuti sunah beliau sehingga selamat dunia akhirat. Terima kasih kepada IPB melalui hibah penelitian IMHERE B2C IPB pada kegiatan Strengthening Agricultural
Research For Food Security And Sovereignty pada sub kegiatan Advanced Infrastructure For Food Security And Sovereignty atas dukungan dana dan penyediaan alat dalam pengerjaan penelitian ini.
Penulis menyadari bahwa tugas akhir ini dapat terselesaikan karena dukungan dan doa dari berbagai pihak. Pada kesempatan ini penulis ingin mengucapkan terima kasih kepada:
1. Orang tua tercinta, bapak Sumedi dan ibu sulasmi, adik saya yang saya sayangi Diah Ayu Widowati. Semoga Alloh membalas kebaikan serta doa-doa kalian.
2. Ibu Ir. Sri Wahjuni, M.T dan bapak Dr. Satyanto K. Saptomo, S.TP, M.Si selaku dosen pembimbing tugas akhir. Terima kasih atas kesabaran serta ilmu yang diberikan, semoga Alloh mencatatnya sebagai amalan kebaikan.
3. Bapak Hendra Rahmawan, S.kom, M.T selaku dosen penguji pada ujian skripsi. Semoga saya bisa segera memperbaiki tulisan ini dari masukan yang bapak berikan.
4. Ibu Dr. Ir. Sri Nurdiati, M.Sc karena nasehat-nasehat beliau, serta saya meminta maaf yang sedalam-dalamnya karena ketidak fahaman saya serta kurang amanahnya saya ketika menjadi Ketua Umum HIMALKOM.
5. Bapak Ahmad Ridha, S.kom, M.S selaku dosen pembimbing akademik. Berkat bapak saya bisa berjalan sesuai dengan arah yang benar, terutama saat mengambil mata kuliah.
6. Sahabat-sahabat satu perjuangan. Semoga kita bisa tetap istiqomah menggapai ridho Ilahi. Tetap berjuang dan terus berkarya dalam dakwah, karena kita diciptakan untuk beribadah kepada Alloh. 7. Sahabat-sahabatku yang pernah aku pimpin atau pernah memimpinku. Saya ucapkan mohon maaf
jika banyak menyakiti kalian serta tidak amanah dalam melakukan kewajiban.
8. Seluruh staf Departemen Ilmu Komputer IPB yang telah banyak membantu baik selama penelitian maupun selama perkuliahan.
Penulis meminta maaf karena menyadari bahwa dalam penulisan tugas akhir ini masih terdapat banyak kekurangan dan kelemahan dalam berbagai hal karena keterbatasan kemampuan penulis. Penulis berharap Semoga tugas akhir ini bermanfaat.
Bogor, Agustus 2011
RIWAYAT HIDUP
Akbar Riyan Nugroho dilahirkan di Banyumas, Jawa Tengah, pada tanggal 14 Juli 1989 dan merupakan anak pertama dari pasangan bapak Sumedi dan ibu Sulasmi. Pada tahun 2007 penulis lulus dari Sekolah Menengah Atas Negeri (SMAN) 3 Malang dan pada tahun yang sama penulis diterima di Program Studi Ilmu Komputer Institut Pertanian Bogor melalui jalur Undangan Seleksi Masuk IPB (USMI).
Pada tahun 2008 penulis aktif dalam organisasi Dewan Perwakilan Mahasiswa Keluarga Mahasiswa (DPMKM) sebagai anggota Divisi Internal dan Majelis Permusyawaratan Mahasiswa Keluarga Mahasiswa (MPMKM) sebagai Koordinator Badan Pengawas Mahkamah dan Konstitusi. Mulai tahun 2009 penulis aktif dalam organisasi Himpunan Mahasiswa Ilmu Komputer (HIMALKOM) sebagai Sekretaris Umum dan di tahun 2010 sebagai Ketua Umum HIMALKOM, selanjutnya di tahun 2011 aktif menjadi anggota Badan Pengawas Himpro.
Selama kuliah di IPB, penulis pernah menjadi asisten praktikum mata kuliah Rangkaian Digital, Penerapan Komputer, Organisasi Komputer, Basis Data, dan Pendidikan Agama Islam. Pada tahun 2010 penulis meraih gelar peserta terbaik dalam acara Intensive-Student Technopreneurship Program (I-STEP). Penulis juga melakukan praktik kerja lapang di Bank Indonesia Kantor Pusat Jakarta.
DAFTAR ISI
Halaman
DAFTAR GAMBAR ... vii
DAFTAR TABEL ... vii
DAFTAR LAMPIRAN ... vii
PENDAHULUAN ... 1
Latar Belakang ... 1
Tujuan Penelitian ... 1
Ruang Lingkup Penelitian ... 1
Manfaat Penelitian ... 1
TINJAUAN PUSTAKA ... 1
Arduino ... 1
Arduino Duemilanove ATmega328P ... 1
Memori-memori ATmega328P... 2 Arduino-0022 ... 2 USART ... 3 Serial Monitor ... 3 ADC ... 3 SD Module (SKU: DFR0071) ... 4 METODE PENELITIAN ... 4 Analisis Sistem ... 4 Perancangan ... 4 Implementasi ... 6 Pengujian... 6 Analisis Kinerja ... 7
HASIL DAN PEMBAHASAN... 7
Pengambilan Data ... 7
Manajemen Memori ... 8
Simulasi Aktuator ... 9
I/O Device ... 9
Pengujian Sistem ... 9
KESIMPULAN DAN SARAN... 12
Kesimpulan ... 12
Saran ... 12
DAFTAR PUSTAKA ... 12
DAFTAR GAMBAR
Halaman
1 Skema Arduino Duemilanove... 2
2 Program memory map ATmega328P. ... 2
3 Data memory map ATmega328P... 2
4 Tampilan Arduino-002. ... 3
5 Serial monitor. ... 3
6 SD Modul (SKU: DFR0071). ... 4
7 Metode penelitian. ... 4
8 Arsitektur diagram sistem irigasi otomatis secara keseluruhan. ... 5
9 Blok diagram rancang bangun sistem menggunakan float switch. ... 5
10 Blok diagram rancang bangun sistem menggunakan thermocouple... 5
11 Flow chart rancang bangun menggunakan sensor float switch. ... 6
12 Flow chart rancang bangun menggunakan sensor thermocouple... 6
13 Blok diagram pengujian sistem menggunakan float switch. ... 6
14 Blok diagram pengujian sistem menggunakan thermocouple. ... 7
15 Ilustrasi pengaruh resolusi adc terhadap nilai kode digital. ... 7
16 Ilustrasi kode program pengambilan data. ... 8
17 Ilustrasi kode program penggunaan pin digital. ... 9
18 Grafik nilai pengambilan data menggunakan multimeter dan mikrokontroler ... 11
DAFTAR TABEL
Halaman 1 Perbedaan rancang bangun menggunakan sensor float Switch dan sensor thermocouple ... 52 Hasil identifikasi memori pada arduino duemilanove beserta karekteristiknya ... 8
3 Hasil pengujian rancangan bangun menggunakan sensor float switch ... 10
4 Hasil penghitungan data dengan tegangan referensi 5v ... 10
5 Hasil penghitungan data dengan tegangan referensi 4,76v ... 10
6 Hasil pengujian rancangan bangun menggunakan sensor thermocouple ... 11
DAFTAR LAMPIRAN
Halaman 1 Blok diagram arsitektur AVR ... 142 Gambar sensor float switch ... 15
3 Koneksi SD Modul dengan Arduino ... 15
4 Dokumentasi rancang bangun menggunakan sensor float switch ... 16
5 Dokumentasi rancang bangun menggunakan sensor thermocouple ... 16
6 Tampilan serial monitor dari rancang bangun menggunakan sensor float switch... 17
7 Tampilan serial monitor saat gagal koneksi antara SD Modul dengan mikrokontroler ... 17
8 Tampilan serial monitor ketika akan melakukan pengaturan penggunaan sistem ... 18
9 Tampilan serial monitor ketika telah melakukan pengaturan penggunaan sistem ... 18
10 Harga serta alat-alat yang digunakan dalam rancang bangun menggunakan float switch ... 19
11 Harga serta alat-alat yang digunakan dalam rancang bangun menggunakan thermocouple ... 19
12 Kode program rancang bangun menggunakan sensor float switch ... 19
PENDAHULUAN
Latar Belakang
Irigasi merupakan penambahan air secara buatan untuk mengatasi kekurangan kadar air tanah. Pada dasarnya bermacam-macam cara yang dilakukan dalam melakukan irigasi memunyai tujuan yang sama, tetapi dalam penerapannya dibutuhkan suatu kondisi yang berbeda. Kondisi tersebut menyesuaikan dengan keadaan lingkungan dan kebutuhan tanaman akan air.
Sistem irigasi otomatis diterapkan untuk menciptakan lingkungan yang sesuai dengan kebutuhan. Satyanto et al (2011) mengembangkan sistem irigasi otomatis dengan
Fuzzy Timer Control untuk mengontrol ketinggian air. Sistem irigasi otomatis yang dibangun diterapkan pada teknologi SRI untuk tanaman padi.
Penelitian ini merupakan bagian kegiatan IMHERE IPB pada kegiatan Strengthening
Agricultural Research For Food Security And Sovereignty pada sub kegiatan Advanced Infrastructure For Food Security And Sovereignty. Pelaksanaan kegiatan penelitian ini
akan mengkaji Development of automated
irrigation system for food production land
dengan fokus penelitian pada mekanisme akuisisi data. Akuisisi data yang dilakukan menggunakan mikrokontroler Arduino Duemilanove.
Tujuan Penelitian
Penelitian ini bertujuan untuk:
1. Mengetahui mekanisme pengambilan dan penyimpanan data pada mikrokontroler Arduino Duemilanove.
2. Membuat rancang bangun sistem irigasi otomatis berbasis mikrokontroler Arduino Duemilanove.
Ruang Lingkup Penelitian
Ruang lingkup dari penelitian ini adalah: 1. Modul ADC sudah terintegrasi ke dalam
minimum system.
2. Pengambilan data dilakukan pada sensor dengan nilai keluaran 0-Vcc volt.
3. Percobaan dilakukan pada lingkungan model.
4. Tidak termasuk proses pengiriman data ke
main controller.
5. Aktuator hanya berupa simulasi.
6. Komunikasi dengan perangkat lain menggunakan komunikasi serial.
Manfaat Penelitian
Adanya rancang bangun mekanisme akuisisi data pada sistem irigasi otomatis yang dapat diadaptasikan sesuai dengan kebutuhan lapang.
TINJAUAN PUSTAKA
Arduino
Arduino merupakan rangkaian elektronik yang bersifat open-source, serta memiliki perangkat keras dan lunak yang mudah untuk digunakan. Arduino dapat mengenali lingkungan sekitarnya melalui berbagai jenis sensor dan dapat mengendalikan lampu, motor, dan berbagai jenis aktuator lainnya. Arduino memunyai banyak jenis, di antaranya adalah Arduino Nano, Arduino BT, LilyPad Arduino, Arduino Duemilanove, dan lainnya.
(www.arduino.cc)
Arduino Duemilanove ATmega328P
Arduino Duemilanove dengan
ATmega328P memunyai 14 digital input/output (6 di antaranya dapat digunakan untuk PWM
outputs), 6 analog inputs, 16 MHz crystal oscillator, USB connection, power jack, ICSP header, dan reset button. Skema Arduino
Duemilanove ATmega328P dapat dilihat pada Gambar 1 dengan ciri-ciri sebagai berikut: 1. Operating voltage 5V.
2. Rekomendasi input voltage 7-12V. 3. Batas input voltage 6-20V.
4. Memiliki 14 buah digital input/output.
5. Memiliki 6 buah Analog Input.
6. DC Current setiap I/O Pin sebesar 40 mA. 7. DC Current untuk 3.3V Pin sebesar 50 mA. 8. Flash Memory 32 KB.
9. SRAM 2 KB. 10. EEPROM 1 KB. 11. Clock Speed 16 MHz. (www.arduino.cc)
Gambar 1 Skema Arduino Duemilanove. Skema Arduino Duemilanove ATmega328P didasarkan pada blog diagram dari ATmega328P. Blog diagram tersebut dapat dilihat pada Lampiran 1.
Memori-memori ATmega328P
Manajemen memori dalam mikrokontroler penting dilakukan karena memori yang dimiliki mikrokontroler sangat terbatas. Pada Atmega328P terdapat tiga jenis memori, yaitu
data memory, program memory, dan EEPROM. Bus ketiga memori tersebut terpisah, sehingga
dapat mengakses ketiga jenis memori tersebut dalam waktu yang bersamaan.
ATmega328P menggunakan Flash Memory untuk program memory. Flash Memory dibagi menjadi dua bagian, yaitu Boot Loader dan
Aplication Program. Pembagian ini bertujuan
untuk keamanan perangkat lunak. Flash
Memory memiliki ketahanan tulis atau hapus
sebanyak 10.000 kali. Program memory map dapat dilihat pada Gambar 2.
SRAM digunakan oleh ATmega328P untuk
data memory. Kapasitas SRAM dari ATmega328P adalah 2KB. SRAM terbagi menjadi empat bagian yaitu 32 GPR (General
Purphose Register), 64 I/O register, Additional
I/O register, dan Internal SRAM. Data memory
map dari SRAM dapat dilihat pada Gambar 3.
Sifat dari memori ini adalah volatile sehingga data yang ada pada SRAM akan hilang ketika sudah tidak diberikan catu daya.
EEPROM biasa digunakan untuk menyimpan data long-term karena sifatnya yang
non-volatile. Ketika tidak mendapat catu daya,
data yang tersimpan dalam EEPROM tidak akan hilang. EEPROM memiliki ketahanan tulis atau hapus sebanyak 10.000 kali (Atmel 2009).
Arduino-0022
Arduino-022 merupakan open-source Arduino environtment yang digunakan untuk
penulisan kode. Dengan menggunakan Arduino-022 penulisan kode menjadi mudah dan kode yang ditulis dapat diunggah ke Arduino. Software ini dapat digunakan di Windows, Mac OS X, dan Linux. Arduino
environtment ditulis dalam bahasa Java dengan
didasarkan pada Processing, avr-gcc, dan open
source software lainnya. Bahasa pemrograman
Arduino didasarkan pada bahasa pemrograman C/C++ serta terhubung dengan AVR Libc sehingga dapat menggunakan fungsi-fungsi yang terdapat pada AVR Libc. AVR Libc berisi fungsi-fungsi yang digunakan untuk menggunakan AVR, seperti pengaturan register. Pada Arduino-0022 penggunaan AVR Libc dipermudah karena secara default library pada Arduino-0022 sudah mencakup AVR Libc tanpa kita harus tau AVR Libc mana yang digunakan. Jika dalam penulisan kode membutuhkan AVR Libc, maka penambahan AVR Libc pada header kode program dapat dilakukan. Tampilan Ardino-0022 dapat dilihat pada Gambar 4.
0x0000
0x3FFF
Gambar 2 Program memory map ATmega328P.
32 GPR 64 I/O register 160 extended I/O register Internal SRAM 0x001F 0x0020 0x005F 0x0060 0x00FF 0x0100 0x07FF 0x0000
Gambar 4 Tampilan Arduino-002. (www.arduino.cc)
USART
USART (Universal Synchronous and
Asynchronous Serial Receiver and Transmitter)
dapat difungsikan sebagai transmisi data sinkron dan asinkron. Sinkron berarti clock yang digunakan antara transmitter dan receiver satu sumber clock. Asinkron berarti transmitter dan receiver memunyai sumber clock yang berbeda. USART terbagi dalam tiga blog yaitu
clock generator, transmitter, dan receiver (Ardi
2010).
Komunikasi serial ini penting difahami karena selain beberapa interface menggunakan mode serial, komunikasi ini bisa kita manfaatkan sebagai pemantau program saat berjalan (debugging). Misalkan kita akan menganalisis suatu kondisi suhu, ini bisa kita lihat dari monitor dengan ditransmisikan ke komputer secara serial (Ary et al 2008).
Serial Monitor
Pada Arduino-0022 terdapat serial monitor. Serial monitor berfungsi untuk menampilkan data yang terdapat pada Arduino. Selain itu, melalui Serial Monitor juga dapat mengirimkan data ke Arduino. Pengirim data ke Arduino dilakukan dengan cara memasukkan data yang ingin dikirim dan dan menekan tombol send atau menekan enter (www.arduino.cc).
Tampilan dari Serial Monitor dapat dilihat pada Gambar 5. Baud-rate pada serial monitor harus sama dengan Serial.begin pada kode program. Hal tersebut dilakukan agar terjadi kecocokan dalam komunikasi. Baud-rate
memiliki satuan bit per second.
Gambar 5 Serial monitor.
ADC
ADC atau kepanjangan dari Analog to
Digital Converter merupakan alat yang digunakan untuk mengubah data analog menjadi data digital. Pada Arduino Duemilanove sudah terdapat modul ADC, sehingga dapat langsung digunakan. Fitur ADC yang terdapat pada ATmega328P adalah sebagai berikut:
1. Resolusi mencapai 10-bit. 2. 0,5 LSB Integral Non-linearity. 3. Akurasi mencapai ± 2 LSB. 4. Waktu konversi 13-260 μs. 5. Memunyai 6 saluran ADC. 6. Optional Left Adjustment untuk
pembacaan hasil ADC.
7. 0 - vcc untuk kisaran input ADC. 8. Disediakan 1,1V tegangan referensi
ADC.
9. Mode konversi kontinyu atau konversi. 10. Interupsi ADC.
11. Sleep mode noise canceler. (Atmel 2009).
Sinyal input dari pin ADC akan dipilih oleh
multiplexer (register ADMUX) untuk diproses
oleh ADC. Karena converter ADC dalam chip hanya satu buah sedangkan saluran masukannya lebih dari satu, maka dibutuhkan multiplexer untuk memilih input pin ADC secara bergantian. ADC memunyai rangkaian untuk mengambil sampel dan hold (menahan) tegangan input ADC, sehingga tetap dalam keadaan konstan selama proses konversi. Sinyal
input ADC tidak boleh melebihi tegangan
referensi. Nilai digital sinyal input ADC untuk resolusi 10-bit (1024) ditulis dalam Persamaan 1.
Nilai digital sinyal input ADC untuk resolusi 8-bit (256) ditulis dalam Persamaan 2:
Kode digital = (Vinput / Vref)x256 (2) (Andi 2010).
Dengan demikian untuk mencari nilai digital, dapat dinyatakan dengan Persamaan 3.
Kode digital=(tegangan yang masuk / tegangan referensi)xresolusi (3)
SD Module (SKU: DFR0071)
SD Card Shield atau SD Modul merupakan
solusi untuk mengirim data ke SD card. SD Modul dapat dilihat pada Gambar 6.
Gambar 6 SD Modul (SKU: DFR0071).
Pinout dari SD Card Shield dapat
dihubungkan ke Arduino maupun mikrokontroler lainnya, sehingga bermanfaat untuk menambah kapasitas tempat penyimpanan data dan pencatatan data. SD
Card Shield ini dapat langsung dipasang pada
Arduino dan terdapat switch untuk memilih
flash card slot. Keistimewaan dari SD Module
ini adalah:
1. Terdapat modul untuk standar SD card dan Micro SD (TF) card.
2. Terdapat switch untuk memilih flash
card slot.
3. Dapat dipasang langsung pada Arduino. 4. Dapat digunakan untuk mikrokontroler
lain.
(www.dfrobot.com).
METODE PENELITIAN
Penelitian ini dibagi ke dalam beberapa tahapan, yaitu analisis sistem, perancangan, implementasi, pengujian, dan analisis kinerja. Alur metode penelitian dapat dilihat pada Gambar 7.
Analisis Sistem
Tahap ini dilakukan untuk memprediksi cara kerja sistem dalam melakukan akuisisi data hingga memprediksi mekanisme pengujian sistem. Hal-hal tersebut meliputi:
1. Cara memperoleh data.
2. Analisis memori yang digunakan beserta kegunaan, perbedaan, dan cara penyimpanan data.
3. Simulasi aktuator.
4. Menentukan I/O device untuk memantau program saat dijalankan. 5. Pengujian sistem.
Perancangan
Sistem irigasi otomatis dibangun untuk memudahkan pemantauan dan pengontrolan kebutuhan air di suatu tempat. Gambar 8 merupakan rancangan sistem irigasi secara keseluruhan yang terdiri dari dua bagian yaitu
field controller dan main controller.
Gambar 7 Metode penelitian. Analisis Sistem
Perancangan
Implementasi
Pengujian
Dalam penelitian kali ini akan dibangun rancang bangun sistem irigasi otomatis khususnya pada mekanisme akuisisi data. Secara garis besar rancangan sistem yang akan dibangun meliputi mekanisme pengambilan data, penyimpanan data, I/O device, dan aktuator.
Terdapat dua model rancang bangun sistem guna mencapai sistem irigasi pada Gambar 8, yaitu sebagai berikut:
1. Sistem konvensional berbasis dua
state. Sistem dibangun menggunakan
sensor float switch. Pemilihan sensor ini karena keluaran dari sensor float
switch hanya bernilai high atau low.
2. Sistem yang mendukung Fuzzy Timer
Control. Sistem ini dibangun menggunakan sensor thermocouple. Sensor ini dipilih karena nilai keluarannya sesuai dengan keadaan lingkungan saat pengambilan data, sehingga mendukung Fuzzy Timer
Control.
Perbedaan rancang bangun menggunakan sensor float switch dan sensor thermocouple dapat dilihat pada Tabel 1, sedangkan blok diagram rancang bangun menggunakan sensor
float switch dan sensor thermocouple dapat
dilihat pada Gambar 9 dan Gambar 10. Alur program rancang bangun menggunakan sensor
float switch dan sensor thermocouple dapat
dilihat pada Gambar 11 dan Gambar 12. Tabel 1 Perbedaan rancang bangun menggunakan sensor float switch dan sensor thermocouple No Keterangan Rancang Bangun Menggunakan
Sensor Float Switch
Rancang Bangun Menggunakan Sensor
Thermocouple
1. Sensor Float Switch Thermocouple
2. Mekanisme Penyimpanan Data
Tidak Menggunakan Menggunakan
3. Simulasi Aktuator Ada Ada
4. Tujuan Pengaturan irigasi yang hanya didasarkan pada keadaan
ON/OFF
Membangun sistem irigasi yang mendukung Fuzzy Timer Control
I/O Device Mikrokontroler Sensor
Aktuator Penyimpanan Data GSM Mikrokontroler Sensor Aktuator Penyimpanan Data GSM Komputer Field Controller Main Controller
I/O Device Mikrokontroler Sensor
Aktuator
Gambar 8 Arsitektur diagram sistem irigasi otomatis secara keseluruhan.
Gambar 9 Blok diagram rancang bangun sistem
menggunakan float switch. Gambar 10 Blok diagram rancang bangun sistem menggunakan thermocouple.
Implementasi
Rancangan dari sistem akan diterapkan pada lingkungan model. Sensor dipilih atau diatur agar memiliki nilai keluaran 0-Vcc. Nilai keluaran tersebut dibatasi karena modul ADC hanya bisa mengenali input dengan nilai tidak melebihi tegangan referensi. Tegangan referensi yang digunakan sebesar Vcc.
Pengujian
Rancang bangun dengan sensor float switch diuji dengan membangun lingkungan percobaan
sesuai dengan Gambar 13. Aktuator akan disimulasikan secara real time dengan LED. Sensor memperoleh data yang berasal dari tabung air, dimana ketinggian air pada tabung dapat diatur. Dokumentasi rancang bangun menggunakan sensor float switch dapat dilihat pada Lampiran 4. Sensor float switch terhubung dengan Arduino melalui port A0 dan A1, LED melalui port digital no 13, dan komunikasi dengan komputer melalui USB Serial Port. Pada antar muka serial monitor akan ditampilkan nilai dari kedua sensor flaot switch, sehingga kita bisa mengetahui dan memantau nilainya. Tampilan dari antar muka serial
monitor untuk rancang bangun menggunakan
sensor float switch dapat dilihat pada Lampiran 6.
Rancang bangun dengan sensor
thermocouple diuji dengan pengambilan data
dalam waktu 10 menit sebanyak sepuluh kali. Data yang diperoleh dibandingkan dengan nilai akurasi ADC pada manual book mikrokontroler. Aktuator disimulasikan secara real time dengan LED. Lingkungan percobaan sistem kedua dapat dilihat pada Gambar 14. Dokumentasi rancang bangun menggunakan sensor float
switch dapat dilihat pada Lampiran 5. Sensor thermocouple terhubung dengan Arduino melalui port A5, LED melalui port digital no 9, komunikasi dengan komputer melalui USB
Serial Port, dan untuk komunikasi Arduino
dengan SD Modul dapat dilihat pada Lampiran 3.
Pada antar muka serial monitor rancang bangun menggunakan sensor thermocouple akan ditampilkan pengaturan penggunaan sistem, meliputi:
1. Lama pengambilan data. 2. Batas atas air.
3. Batas bawah air. A1==0
A0>0 Mulai
Baca Sensor pada port A0, A1 Valve=High Valve=Low
c
A B E D A = Mikrokontroler D = LED B = Komputer E = Float Switch C = Tabung AirGambar 11 Flow chart rancang bangun menggunakan sensor float switch.
waktu==samplingTime Ya Tidak Mulai Setting Awal Create File .csv Ambil Data Tulis Data Simulasi Valve
Gambar 12 Flow chart rancang bangun menggunakan sensor thermocouple.
Gambar 13 Blok diagram pengujian sistem menggunakan float switch.
Sebelumnya juga akan dilakukan pengecekan terhadap koneksi dari SD Modul. Jika koneksi terhadap SD Modul gagal, maka tampilan serial
monitor dapat dilihat pada Lampiran 7. Setelah
koneksi antara SD Modul dan mikrokontroler berhasil, maka akan dilakukan pengaturan penggunaan sistem, yaitu memasukkan nilai dari pengambilan data, batas atas, dan batas bawah. Tampilan serial monitor saat akan dilakukan pengaturan sistem dapat dilihat pada Lampiran 8 dan pada Lampiran 9 dapat dilihat tampilan serial monitor ketika progam berjalan. Saat program berjalan pada serial monitor akan ditampilkan no pengambilan data, data dari A0, dan data dari A1.
Analisis Kinerja
Berdasarkan data yang diperoleh dan perlakuan-perlakuan yang dilakukan, maka akan dilakukan analisis. Analisis ini dilakukan agar data hasil pengujian dapat digunakan dan dijadikan rujukan untuk pembangunan sistem lebih lanjut.
HASIL DAN PEMBAHASAN
Pengambilan Data
Sensor merupakan alat yang digunakan untuk mengenali lingkungan. Sensor dapat terhubung secara langsung dengan mikrokontroler melalui port analog. Data yang diberikan sensor berupa data analog, sedangkan mikrokontroler dalam pengolahan data menggunakan data digital. Oleh sebab itu supaya data yang diterima mikrokontroler berupa data digital dibutuhkan modul ADC.
Resolusi data dari modul ADC nantinya akan mempengaruhi akurasi dari data. Semakin besar resolusinya, maka akurasinya semakin
baik. Berdasarkan Persamaan 3, sebagai ilustrasi perhatikan Gambar 15 di bawah ini.
Ilustrasi pada Gambar 15 menjelaskan pentingnya untuk melakukan analisis nilai yang akan dikeluarkan sensor. Hal tersebut dikarenakan mikrokontroler memunyai batas kemampuan membaca masukan sesuai dengan resolusi dari ADC. Jika membutuhkan akurasi yang tinggi, maka resolusinya harus diperbesar. Pada ATmega328P digunakan resolusi 10-bit atau 1024.
Modul ADC terletak pada port C dari mikrokontroler atau biasa disebut dengan pin
analog. Arduino Duemilanove memunyai 6 pin analog yang dapat digunakan untuk membaca
masukan dari sensor. Dikarenakan mikrokontroler hanya memunyai satu register untuk menyimpan hasil konversi yaitu ADLAR, maka pengambilan data dilakukan secara bergantian untuk setiap pin analog. Penulisan kode program menggunakan Arduino-0022, dimana pin analog di kodekan dengan angka 0-5 atau A0-A0-5. Pada Gambar 16 dapat dilihat ilustrasi penggunaan pin analog pada kode pemrograman. A E C B D A = Mikrokontroler D = LED B = Komputer E = Termocouple C = SD Card Diketahui: Resolusi 1=10-bit Resolusi 2 = 8-bit Vref = 5 V
Vinput = (Kode Digital x Vref)/1024 Maka nilai Vinput untuk setiap satuan Kode Digital adalah:
Pada Resolusi 1:
Vinput1 = (1x5)/1024 = 0,0048 V Pada Resolusi 2:
Vinput2 = (1x5)/256 = 0,0195 V
Jadi, terbukti resolusi 1 mampu mengenali input lebih detail dari pada resolusi 2.
Gambar 14 Blok diagram pengujian sistem menggunakan thermocouple.
Gambar 15 Ilustrasi pengaruh resolusi adc terhadap nilai kode digital.
Sensor yang digunakan dalam percobaan adalah float switch dan thermocouple. Sensor
float switch hanya memberikan nilai 0 atau 1,
sehingga nilai sensor yang tertera pada serial
monitor atau yang dikenali mikrokontroler
adalah 0 atau 1023. Jika dianalogikan, float
switch mirip dengan saklar. Float switch
berfungsi sebagai indikator ketinggian air. Berbeda halnya dengan float switch, sensor
thermocouple memberikan nilai masukan yang
bervariasi antara 0-Vcc.
Nilai dari thermocouple dipengaruhi oleh suhu. Jika suhu meningkat, maka nilai masukan ke mikrokontroler akan semakin besar. Nilai keluaran thermocouple mencerminkan keadaan lingkungan saat itu, sehingga memungkinkan untuk dikembangkan ke arah Fuzzy Timer
Control. Untuk implementasi sistem irigasi
dalam menggunakan Fuzzy Timer Control, sensor thermocouple dapat diganti dengan sensor tekanan air atau kelembapan tanah. Penggantian tersebut tidak menjadi masalah dengan syarat sensor pengganti memunyai karakteristik keluaran yang sama dengan sensor
thermocouple.
Manajemen Memori
Arduino Duemilanove memiliki tiga jenis memori yaitu SRAM, EEPROM, dan Flash
memory, selain itu bisa juga ditambah dengan SD Card. Memori-memori tersebut memiliki
fungsi dan karakteristik yang berbeda-beda. Table 2 menampilkan hasil identifikasi memori pada Arduino Duemilanove beserta karakteristiknya.
Tabel 2 Hasil identifikasi memori pada arduino duemilanove beserta karekteristiknya
No Keterangan Flash Memory SRAM EEPROM SD Card
1 Fungsi Tempat
kode-kode program Memori tempat eksekusi program yang dilakukan oleh ALU Tempat menyimpan informasi yang sifatnya long-term Data loggerMemory
2 Sifat Non-volatile Volatile Non-volatile Non-volatile
3 Kapasitas 32 KBytes 2 KBytes 1 KBytes 1 GBytes
Percoabaan kali ini membutuhkan data
memory, program memory, dan data logger memory. Data memory digunakan untuk
membantu eksekusi program yang dilakukan oleh ALU (Arithmatich Logic Unit) dan mengendalikan bermacam-macam pheripheral seperti port, USART, timer/counter, dan lain-lain. Program memory digunakan untuk menyimpan kode-kode program dari sistem yang dibangun. Data logger memory digunakan untuk mencatat serta menyimpan data hasil pembacaan sensor.
ATmega328P telah menyediakan data
memory dan program memory, sehingga kita
bisa langsung menggunakannya. Secara default,
data memory akan difasilitasi oleh ATmega328P berupa SRAM. Program memory akan menggunakan flash memory. EEPROM yang disediakan oleh ATmega328P bisa digunakan sebagai data logger memory, tetapi ada beberapa pertimbangan yang menjadikan pencarian solusi lain terkait penggunaan EEPROM untuk data logger memory yaitu:
1. Hanya mampu melakukan tulis/hapus sebanyak 100.000 kali. void setup () { … } void loop () { …
//kode program untuk membaca sensor pada pin analog 1 dan kemudian disimpan pada variabel sensorValue1
sensorValue1 = analogRead(A1);
//kode program untuk membaca sensor pada pin analog 2 dan kemudian disimpan pada variabel sensorValue1
sensorValue2 = analogRead(2); …
}
Gambar 16 Ilustrasi kode program pengambilan data.
2. Maintenance susah dilakukan karena
embedded ke board mikrokontroler.
Menjawab permasalahan tersebut, kita akan menggunakan SD Card. Walaupun SD Card juga hanya mampu melakukan tulis/hapus sebanyak 100.000 kali, tetapi mudah untuk dilakukan maintenance. Hal tersebut dikarenakan SD Card dipasang secara portable. Data yang disimpan ke dalam SD Card berupa file dengan format csv. Cara penyimpanan dalam format csv dipilih karena akan memudahkan untuk memanipulasi data hasil pembacaan dari sensor. Di setiap pengambilan data akan ditentukan sampling
time, batas atas air, batas bawah air, dan akan
dilakukan pencatatan hasil pembacaan dari sensor. SD Card terhubung dengan mikrokontroler dengan menggunakan SD Modul. Koneksi antara SD Modul dengan Arduino Duemilanove dapat dilihat pada Lampiran 3. SD Card ini hanya digunakan untuk rancang bangun sistem menggunakan sensor thermocouple. Pada rancang bangun pertama tidak digunkan SD Card karena pada rancang bangun pertama hanya ingin diketahui keberhasilan mikrokontroler dalam mengenali nilai keluaran sensor dan nilai keluaran dari sensor juga hanya bernilai high atau low, sehingga tidak perlu disimpan saat akan dilakukan analisis.
Simulasi Aktuator
Aktuator merupakan peralatan mekanis yang berfungsi untuk mengontrol suatu sistem. Pada sistem irigasi, aktuator digunakan untuk mengontrol valve. Valve berfungsi untuk mengatur aliran air, seperti membuka atau menutup pipa air untuk irigasi. Pada percobaan kali ini akan dibangun simulasi aktuator. Simulasi dibangun menggunakan LED. LED berfungsi sebagai penanda berjalannya irigasi. Jika lampu LED menyala, menandakan irigasi menyala atau pipa air terbuka. Jika lampu LED mati, menandakan tidak ada irigasi atau pipa air tertutup.
Simulasi ini dilakukan menggunakan pin
digital pada Arduino. Kode program pengaturan
penggunaan pin digital dapat dilihat pada Gambar 17.
Pada Gambar 17, nilai variabel valve adalah 9. Pendefinisian ini berguna untuk menentukan nomer pin digital yang akan digunakan. Kata HIGH menunjukkan pin digital tersebut menyala, sedangkan LOW menunjukkan pin
digital tersebut mati.
I/O Device
Pemantauan program saat program dijalankan perlu dilakukan. Pemantauan ini dilakukan agar kode yang ditulis dapat segera diperbaiki jika terjadi kesalahan. Selain itu, kita juga dapat melihat aliran data selama program berjalan. Proses tersebut dapat dilakukan pada
software Arduino-0022. Software ini akan
membantu dalam proses debugging dan upload. Selain itu terdapat fasilitas serial monitor untuk menampilkan data yang terdapat pada Arduino. Percobaan kali ini dibangun pada lingkungan model dan menggunakan software Ardunio-0022, sehingga proses-proses tersebut akan dilakukan menggunakan I/O device berupa komputer. Komunikasi yang dibangun antara komputer dan mikrokontroler menggunakan USART.
Pengujian Sistem
Hasil rancang bangun menggunakan sensor
float switch dapat dilihat pada Tabel 3. Cara
kerja dari sensor float switch adalah nilai keluaran dari sensor adalah High ketika switch berada di bawah atau menggantung dan akan bernilai low pada saat switch berada di atas. Pada saat air mencapai batas bawah, maka LED
// Pemilihan pin digital untuk simulasi valve
#define valve 9 void setup() {
//mengatur pin digital sebagai output pinMode(valve, OUTPUT); }
void loop(){ …
//pin digital di set menyala digitalWrite(valve, HIGH); …
//pin digital di set mati digitalWrite(valve, LOW); …
}
Gambar 17 Ilustrasi kode program penggunaan
akan menyala hingga batas atas. Pada saat air berada di batas atas, LED dalam keadaan mati hingga mencapai batas bawah. Dengan kata lain LED akan selalu mengikuti keadaan awal
high/low hingga nilai dari batas atas adalah low
yang menyebabkan LED mati dan nilai dari batas bawah high yang menyebabkan LED menyala. Agar lebih jelas, gambar dari float
switch dapat dilihat pada Lampiran 2.
Tabel 3 Hasil pengujian rancangan bangun menggunakan sensor float switch
No Posisi Air Keadaan LED (Awal) Keadaan LED (Saat ini) Ketera ngan 1 Di atas batas atas
Menyala Mati Sukses
2 Di bawah batas bawah
Mati Menyala Sukses
3 Di antara dua batas
Mati Mati Sukses
4 Di antara dua batas
Menyala Menyala Sukses
Pada uji coba menggunakan thermocouple, dilakukan pengambilan data selama sepuluh menit sebanyak sepuluh kali. Pengambilan dilakukan pada pukul enam pagi. Sebelum data dari thermocouple diambil, nilai keluaran dari sensor diukur terlebih dahulu menggunakan multimeter. Rata-rata data yang dihasilkan oleh ADC nantinya akan dibandingkan dengan hasil ukur multimeter. Setelah itu, akan dibandingkan dengan nilai kesalahan konversi ADC pada
manual book.
Setelah dilakukan percobaan untuk pengambilan pertama, hasil pengukuran menggunakan multimeter adalah 1,149V. Rata-rata nilai digital dari pengambilan data selama sepuluh menit adalah 244,994. Kemudian dilakukan penghitungan menggunakan Persamaan 1, maka diperoleh tegangan input sebesar 1,192V. Modul ADC memunyai rentang kesalahan sebesar ± 2 LSB atau setelah dikonversi menggunakan Persamaan 1, modul ADC memunyai rentang kesalahan sebesar ±
0.013V untuk tegangan referensi 5V. untuk lebih jelasnya dapat dilihat pada Tabel 4. Tabel 4 Hasil penghitungan data dengan tegangan referensi 5v
No Keterangan Nilai (V)
1 Multimeter 1,149
2 Mikrokontroler 1,196
Selisih 0,047
Dari penghitungan yang dilakukan, ternyata diperoleh selisih di luar rentang kesalahan dari modul ADC. Karena selisih terlalu besar, maka akan dilakukan pengujian. Salah satu konstanta yang berpengaruh adalah tegangan referensi. Pengujian dilakukan dengan mengukur tegangan referensi pada mikrokontroler. Dari hasil pengukuran, diperoleh nilai Tegangan referensi sebesar 4,76V. Jadi, terjadi penurunan tegangan pada mikrokontroler sehingga perlu dilakukan perhitungan ulang menggunakan Tegangan referensi 4,76V. Dengan demikian rentang kesalahannya menjadi ± 0,0092V. Penurunan tegangan ini bisa saja terjadi karena umur pakai alat atau hambatan alat yang bertambah karena faktor waktu dan lingkungan. Hasil dari penghitungan ulang dapat dilihat pada Tabel 5.
Tabel 5 Hasil penghitungan data dengan tegangan referensi 4,76v
No Keterangan Nilai (V)
1 Multimeter 1,149
2 Mikrokontroler 1,138
Selisih 0,011
Berdasarkan Tabel 5, dapat dilihat selisih dari dua pengukuran tersebut semakin mendekati rentang kesalahan konversi modul ADC. Supaya didapatkan pembanding hasil uji dan agar pengujian semakin baik, maka akan dilakukan uji coba lagi sebanyak 9 kali. Hasil dari sepuluh kali uji coba dapat dilihat pada Tabel 6. Gambar 18 menggambarkan grafik nilai pengambilan data menggunakan multimeter dan mikrokontroler dengan sumbu x merupakan pengambilan data percobaan sebanyak sepuluh kali dan sumbu y merupakan nilai keluaran sensor.
Tabel 6 Hasil pengujian rancangan bangun menggunakan sensor thermocouple
Uji Multimeter Mikrokontroler Selisih
1 1,149 1,13884 0,01015 2 1,139 1,13046 0,00853 3 1,134 1,12578 0,00821 4 1,130 1,12132 0,00867 5 1,127 1,11968 0,00731 6 1,127 1,11606 0,01093 7 1,121 1,11151 0,00948 8 1,117 1,10964 0,00735 9 1,118 1,11257 0,00542 10 1,120 1,11208 0,00791 Rata-rata 0.00840
Gambar 18 Grafik nilai pengambilan data menggunakan multimeter dan mikrokontroler Nilai grafik pada Gambar 18 selalu turun,
hal tersebut dikarenakan thermocouple
menggunakan tegangan tambahan berupa baterai 9V dan nilai tegangan baterai tersebut selalu turun. Pada pengambilan data lima dan enam nilai pembacaan multimeter sama. Hal tersebut dikarenakan saat dilakukan pengukuran dengan multimeter, tegangan baterai belum turun. Terbukti dengan nilai pengukuran dengan mikrokontroler yang turun. Pada pengambilan data delapan hingga sepuluh terjadi penaikan nilai, hal tersebut dikarenakan suhu ruangan telah meningkat. Peningkatan tersebut terjadi karena kenaikan suhu yang mengakibatkan beda potensial pada thermocouple meningkat.
Analisis tesebut membuktikan, rancang bangun menggunakan sensor thermocouple menghasilkan nilai pembacaan sensor dengan kesalahan di antara rentang kesalahan konversi
modul ADC. Percobaan yang dilakukan menghasilkan nilai yang sama dengan keterangan pada manual book.
Rancang bangun menggunakan sensor float
switch memungkinkan untuk diterapkan pada
sistem irigasi berbasis dua state. Harga minimum pembangunan sistem ini dapat dilihat pada Lampiran 10. Penerapan rancang bangun menggunakan sensor thermocouple perlu ada penyesuaian terkait sensor. Kita tidak mungkin menggunakan sensor thermocouple jika akan membangun sistim irigasi. Harga minimum pembangunan sistem ini dapat dilihat pada Lampiran 11. Dalam penerapannya, perlu yang diperhatikan dan disesuaikan adalah instalasi lapang alat tersebut, karena biaya yang dikeluarkan bisa lebih mahal. Hal tersebut dikarenakan memungkinkan adanya tambahan-1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1 2 3 4 5 6 7 8 9 10 K e lu ar an S e n so r (V ) Pengambilan Data Multimeter Mikrokontroler
tambahan alat seperti kabel, sumber tegangan, dan kotak pengaman.
KESIMPULAN DAN SARAN
Kesimpulan
Arduino Duemilanove dapat melakukan pengambilan data serta memunyai modul ADC, sehingga memudahkan dalam konversi data dari data analog menjadi data digital. Modul ADC pada Arduino Duemilanove memiliki rentang kesalahan sebesar ± 2 LSB dan sudah diuji, sehingga dalam pembangunan sistem yang membutuhkan data dengan akurasi tinggi perlu diperhatikan rentang kesalahan konversi data. Selain itu, pemilihan resolusi juga menjadi pertimbangan untuk data yang membutuhkan akurasi tinggi.
SD Card dapat dipilih sebagai data logger memory karena memudahkan dalam melakukan
pengelolaan penyimpanan data. Kemudahan ini dikarenakan SD Card bersifat portable terhadap sistem. Data yang disimpan ke dalam SD Card, disimpan dalam format .csv agar data mudah dimanipulasi.
Komunikasi serial dapat digunakan untuk berkomunikasi dengan perangkat lain dengan melakukan penyesuaian terhadap baud-rate. Dalam penelitian kali ini digunkana baud-rate sebesar 9600 bit per second.
Saran
Penelitian ini masih terbatas pada lingkungan model sehingga perlu untuk dilakukan uji coba lapang. Rancang Bangun sistem masih dalam tahap mekanisme akuisisi data, sehingga perlu dikembagkan rancang bangun pada mekanisme penyimpanan data, pengiriman data, pengolahan data, dan aktuator.
DAFTAR PUSTAKA
Atmel. 2009. 8-bit AVR Microcontroller with 4/8/16/32K Bytes In-System Programmable Flash ATmega48PA/ ATmega88PA/ ATmega168PA/ ATmega328P. Orchard Parkway San Jose: Atmel Corporation. Heryanto AM et al. 2008. Pemrograman Bahasa
C untuk Mikrokontroler ATMEGA8535. Andi: Yogyakarta.
Saptomo SK, Setiawan BI, Tusi A, Iskandar MA. 2011. Development of Automated
Irrigation System for Production Field : Fuzzy Timer Control.
Winoto Ardi. 2010. Mikrokontroler AVR ATmega8/32/16/8535 dan Pemrogramannya dengan Bahasa C pada WinAVR. Informatika: Bandung.
Anonim. Arduino. http://arduino.com [23 Juli 2011]
Anonim. Arduino Duemilanove.
http://arduino.cc/en/Main/ArduinoBoardDue milanove [23 Juli 2011].
Anonim. SD Modul (Arduino Compatible). http://dfrobot.com/index/.php?route=product /product&product_id=163 [23 Juli 2011].
Lampiran 2 Gambar sensor float switch
Lampiran 3 Koneksi SD Modul dengan Arduino
Lampiran 4 Dokumentasi rancang bangun menggunakan sensor float switch
Lampiran 6 Tampilan serial monitor dari rancang bangun menggunakan sensor float switch
Lampiran 8 Tampilan serial monitor ketika akan melakukan pengaturan penggunaan sistem
Lampiran 10 Harga serta alat-alat yang digunakan dalam rancang bangun menggunakan float switch
No Alat Jumlah Harga Satuan (Rp) Total Harga (Rp)
1 Arduino Duemilanove 1 235.000 235.000
2 Sensor float switch 2 65.000 130.000
3 LED 1 8.000 8.000
Total 373.000
Lampiran 11 Harga serta alat-alat yang digunakan dalam rancang bangun menggunakan thermocouple
No Alat Jumlah Harga Satuan (Rp) Total Harga (Rp)
1 Arduino Duemilanove 1 235.000 235.000 2 Sensor Thermocouple 1 20.000 20.000 3 Baterai 9 V 1 7.500 7.500 4 SD Card 1 38.000 38.000 5 SD Modul 1 100.000 100.000 6 LED 1 8.000 8.000 Total 408.500
// program untuk menjaga ketinggian air dengan simulasi valve menggunakan LED
#define sensor 2 //jumlah sensor yang digunakan
#define valve 13 //port digital yang digunakan untuk simulasi valve int valueA0;
int valueA1; void setup() {
Serial.begin(9600); //boud-rate untuk komunikasi dengan serial monitor pinMode(valve, OUTPUT); //mengeset pin digital sebagai output
pinMode(2,OUTPUT); digitalWrite(2, HIGH); }
void loop(){
//fungsi untuk membaca nilai dari sensor dan
//menyimpannya ke dalam suatu variabel
valueA0=analogRead(A0); delay(3000);
valueA1=analogRead(A1);
//simulasi valve menggunakan LED
//lampu akan menyala jika air berada di batas bawah
if (valueA0>0){
digitalWrite(valve, HIGH); }
//Menampilkan hasil pembacaan sensor pada Serial Monitor Serial.print ("nilai dari batas bawah: ");
Serial.println(valueA0); delay(3000);
//lampu akan mati jika air berada dibatas atas if (valueA1==0){
digitalWrite(valve, LOW); }
//Menampilkan hasil pembacaan sensor pada Serial Monitor
Serial.print("nilai dari batas atas:"); Serial.println(valueA1);
delay(3000);
}
/* program datalogger menggunakan SD Card sebagai memori Setting program meliputi :
-sampling time -penentuan batas atas -penentuan batas bawah
-interupt (setting ulang pengoperasian) dengan cara memasukkan sembarang nilai ke serial monitor
*/ #include <Time.h> #include <SdFat.h> #include <SdFatUtil.h> #define LOG_INTERVAL 1000 #define SENSOR_COUNT 3 #define ECHO_TO_SERIAL 1 #define WAIT_TO_START 1 #define SYNC_INTERVAL 1000
#define valve 9 //port digital untuk simulasi valve yaitu lampu Led #define sensor 5 //port analog yang digunakan untuk sensor uint32_t syncTime = 0; // time of last sync()
char settingPoint[8]="0";
int count=0; //sebagai penanda array penyimpanan hasil Serial.read ke settingPoint int batasAtas; int batasBawah; int nilaiSensor; int samplingTime; int hit=0; time_t t; time_t n;
int selisih; //sebagai indikator sampling time
int ket = 0; //sebagai indikator keterangan penulisan sampling time, batas atas, dan batas bawah pada file
SdFat sd; SdFile file;
ArduinoOutStream cout(Serial); char buf[50];
#define error(s) sd.errorHalt_P(PSTR(s)) void setup() {
Serial.begin(9600);
pinMode(valve, OUTPUT); //mengeset pin digital sebagai output }
void loop() { start();
//Perintah untuk mengeset nilai sampling time
Serial.println("Masukkan Nilai Seberapa Lama Data Akan Diambil (dalam menit)"); while(!Serial.available()); samplingTime: dataSerial(); if (count==8){ count=0; samplingTime=atoi(settingPoint); } else{ goto samplingTime; } ulangBatasAtas:
//Perintah untuk mengeset nilai batas atas
Serial.println("Memasukkan nilai settingPoint batas atas (0-1023): "); while(!Serial.available()); batasAtas: dataSerial(); if (count==8){ count=0; batasAtas=atoi(settingPoint); } else{ goto batasAtas; } if (batasAtas>1023 || batasAtas<0) { goto ulangBatasAtas; } ulangBatasBawah:
//Perintah untuk mengeset nilai batas bawah
Serial.println("Memasukkan nilai settingPoint batas bawah (0-1023): "); while(!Serial.available()); batasBawah: dataSerial(); if (count==8){ count=0; batasBawah=atoi(settingPoint); } else{ goto batasBawah;
} if (batasBawah>1023 || batasBawah<0) { goto ulangBatasBawah; }
Serial.print("nilai sampling time:" ); Serial.println(samplingTime); Serial.print("nilai batas atas:" ); Serial.println(batasAtas);
Serial.print("nilai batas bawah:" ); Serial.println(batasBawah); ambilData(); software_reset(); }
//fungsi untuk memulai & membuat file .CSV void start() { Serial.println("Initializing SD card..."); if (!sd.init(SPI_HALF_SPEED)) sd.initErrorHalt(); Serial.println("card initialized.");
char name[] = "LOGGER00.CSV"; for (uint8_t i=0; i < 100; i++) { name[6] = i/10 + '0';
name[7] = i%10 + '0';
if (file.open(name, O_CREAT | O_EXCL | O_WRITE)) break; }
if (!file.isOpen()) error("file.open");
cout << pstr("Logging to: ") << name << endl;
obufstream bout(buf, sizeof(buf));
//Untuk memberikan nama header table data bout << pstr("No"); bout << pstr(",Nilai"); bout << pstr(",Valve"); #if ECHO_TO_SERIAL cout << buf << endl; #endif bout << "\r\n"; file.write(buf); file.sync();
if (file.writeError) error("gagal menulis header tabel");
}
//Fungsi untuk mengambil data dari serial monitor void dataSerial() {
settingPoint[count]=Serial.read(); count=count+1;
int merge = atoi(settingPoint); Serial.println(merge);
}
//Fungsi untuk mengambil data dari sensor void ambilData(){ t=now(); while(selisih<samplingTime) { interupt();
n=now(); //memasukkan waktu saat ini ke variable t
selisih=minute(n)-minute(t); //mencari selisih waktu untuk memberhentikan loopoing nilaiSensor=analogRead(sensor); Serial.println(nilaiSensor); ledSwitch(); hit++; sdCard(hit,nilaiSensor); } }
//Fungsi simulasi valve pada LED void ledSwitch() {
//led menyala jika nilai sensor kurang dari batas bawah if (nilaiSensor<batasBawah){
digitalWrite(valve, HIGH); }
//led menyala jika nilai sensor kurang dari batas bawah if (nilaiSensor>batasAtas){
digitalWrite(valve, LOW); }
}
//Fungsi untuk menulis pada sdCard void sdCard(int n, int nilai) { uint32_t m; do { m = millis(); } while(m % LOG_INTERVAL);
obufstream bout(buf, sizeof(buf));
// Menulis urutan data yang diambil bout << n;
// Menulis data yang diambil bout << ',' << nilai;
if (digitalRead(valve)>0) { bout << pstr(",Menyala"); } else { bout << pstr(",Mati"); } #if ECHO_TO_SERIAL cout << buf << endl; #endif
bout << "\r\n"; file.write(buf);
if ((millis() - syncTime) >= SYNC_INTERVAL) { file.sync();
syncTime = millis(); }
if (file.writeError) error("gagal menulis data");
if (m == millis()) delay(1); }
// fungsi untuk mereset void software_reset(){ asm volatile ("jmp 0"); }
// fungsi untuk mensetting ulang kembali ketika arduino sedang beroperasi void interupt() { if(Serial.available()) { asm volatile ("jmp 0"); start(); } }
Penguji: