LAMPIRAN 13
Lampiran 1 Blok diagram arsitektur AVR 14
Lampiran 2 Gambar sensor float switch Switch Lampiran 3 Koneksi SD Modul dengan Arduino 15
Lampiran 4 Dokumentasi rancang bangun menggunakan sensor float switch Lampiran 5 Dokumentasi rancang bangun menggunakan sensor thermocouple 16
Lampiran 6 Tampilan serial monitor dari rancang bangun menggunakan sensor float switch Lampiran 7 Tampilan serial monitor saat gagal koneksi antara SD Modul dengan mikrokontroler 17
Lampiran 8 Tampilan serial monitor ketika akan melakukan pengaturan penggunaan sistem Lampiran 9 Tampilan serial monitor ketika telah melakukan pengaturan penggunaan sistem 18
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 Lampiran 12 Kode program rancang bangun menggunakan sensor float switch // 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: "); 19
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); Lampiran 13 Kode program rancang bangun menggunakan sensor thermocouple /* 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); 20
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; 21
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"); 22
//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; // Menulis keadaan valve 23
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(); 24
Penguji: Hendra Rahmawan, S.Kom, M.T 25