BAB III PERANCANGAN ALAT DAN PROGRAM Pada bab ini akan dijelaskan tentang perancangan “ Alat Simulasi Water Flow meter Digital Menggunakan Aduino” secara umum alat ini terdiri dari 2 bagian. Bagian pertama yaitu perancangan perangkat keras dan bagian kedua perancangan perangkat lunak. Perangkat keras terdiri dari Arduino Duemilanove, Sensor Water Flow Meter G1/2, Lcd (lyquid crystal digital) Keypad Shield, Power Suplay dan perangkat pendukung lainya. Perangkat lunak yang digunakan adalah pemrograman menggunakan Arduino IDE(Integrated Development Environment). 3.1
Blok Diagram Rangkaian
Media (air)
Water Flow Sensor G1/2
Arduino
Lcd Keypad Shield
Gambar 3.1 Diagram Blok Simulasi Water Flow meter Digital Menggunakan Aduino
29
30
Dari diagram blok diatas dpat dijelaskan bahwa yang pertma adlah media air, air ini adalah media yang diukur oleh sensor water flow meter dan air itu masuk kedalam sensor. Setelah air masuk dan dibaca oleh sensor dan di masukan dalam arduino untuk diproses didalamnya dan akan ditampilkan pa lcd (lyquid crystal dispaly) keypad shield. Start
Pembacaan media oleh sensor
Pengolahan data oleh arduino
Ditampilkan pada LCD
End
Gambar 3.2 flow chart Simulasi Water Flow meter Digital Menggunakan Aduino
31
Dari gambar flow chart
diatas dapat dijelaskan bahwa pertama yang
dimulai adalah start, start meliputi menyalakan alat dan menancapkan power, setelah itu media akan melewati sensor dan akan dibaca oleh sensor dan akan diolah dalam arduino, setelah diolah pada arduino akan ditampilkan pada lcd (lyquid crystal dispaly) apa yang telah terbaca oleh sensor. Tampilan pada lcd (lyquid crystal dispaly) bersifat kontinyu karena pembacaan dari sensor yang akan berubah setiap satu detik. 3.2
Realisasi Rangkaian Langkah berikutnya adalah merealisasikan rangkaian setiap blok,
Rangkaian-rangkaian yang akan dibuat yaitu :
Rangkaian Sensor dengan Arduino
Aplikasi program pad Lcd (lyquid crystal digital) Keypad Shield
Aplikasi program Arduino IDE (Integrated Development Environment)
3.2.1
Rangkaian Sensor Water Flow Meter
Gambar 3.3 Wiring diagram sensor water flow meter Dari gambar wiring diatas dapat dijelaskan ada tiga jalur pada sensor water flow meter, yang pertama warna black merupakan ground pada sensor water flow meter yang dihubungkan pada ground pada arduino, kedua warna yellow merupakan jalur sinyal yang telah terbaca
32
pada sensor dan diteruskan pada arduino untuk diolah dalam arduino dan dihubungkan pada pin 2 digital pada board arduino, jalur yellow juga dicatu pada resistor 10K ohm, ketiga warna red merupakan jalur tegangan pada sensor water flow meter dan dihubunkan pada board arduino pada pin 5V , jalur red juga dicatu pada resistor 10K ohm
Gambar 3.4 sensor water flow meter terhubung dengan arduino Sensor ini mempunyai desain yang bagus dan kecil tetapi mempunyai kemampuan yang dapat diandalkan. Bekerja pada tegangan 5V-24V dan hanya mempunyai berat 43 g, sensor ini dapat bertahan pada tekanan 1,2 Mpa dan juga dapat bertahan pada suhu sampai 80 derajat
33
celcius. Pulsa frekuensi yang dihasilkan adalah 7,5 Hz Q ( satuan liter per menit) dan mempunyai akurasi yang tinggi.
Gambar 3.5 Bagiian-bagian Sensor water flow meter 1. Valve body berbahan fiber glass 2. Stainless steel bead berbahan stainless steel 304 3. Axis berbahan stainless steel 304 4. Impeller berbahan POM 5. Ring magnet berbahan Ferrite 6. Middle ring berbahan fiber glass 7.
O-seal ring berbahan Rubber
8. Electronic seal ring berbahan Rubber 9. Cover berbahan fiber glass 10. Screw berbahan stainless steel 304
34
11. Cable berbahan 1007 24AWG 3.2.1.1 Cara kerja Sensor Water flow Meter Sensor Hall-effect adalah sebuah transducer yang output teganganya bervariasi dalam menanggapi medan magnet. Sensor Hall-effect digunakan untuk switching jarak, posisi, deteksi kecepatan, dan aplikasi penginderaan. Dalam bentuk yang paling sederhana, sensor beroperasi sebagai transduser analog, langsung kembali ke tegangan. Dengan medan magnet diketahui, jarak dari pelat Aula dapat ditentukan. Menggunakan kelompok sensor, posisi relatif dari magnet dapat disimpulkan. Listrik dilakukan melalui konduktor akan menghasilkan medan magnet yang bervariasi dengan saat ini, dan sensor Hall-effect dapat digunakan untuk mengukur arus tanpa mengganggu sirkuit. Biasanya, sensor terintegrasi dengan inti luka atau magnet permanen yang mengelilingi konduktor yang akan diukur. Sensor Hall-effect pada sensor Water Flow Meter akan bekerja saat ada aliran air yang melalui rotor dan dan akan mengirimkan tegangan atau sinyal pada board Arduino dan akan dieksekusi sehingga akan ditampilkan pada layar Lcd.
35
Gambar 3.6 Cara kerja sensor Water flow meter
Dari gambar diatas dapat dijelaskan bahwa rotor akan berputar dan akan memotong gris-garis medan magnet ini yang disebut Hall effect sensor.
3.2.2 Lcd (Liquid Crystal Display) Keypad Shield 16x2 Setelah program water flow meter dibuat maka perlu ditampilakan pada lcd(lyquid crystal dispaly) keypad shield. Lcd (lyquid crystal display) keypad shield berfungsi sebagai display apa yang telah terbaca pada sensor. Lcd(lyquid crystal display) keypad shield sangat mudah digunakan karena lcd (lyquid crystal dispaly) ini sudah terdapat soket yang bisa ditancapkan langsung pada board arduino.
36
3.7 Lcd (lyquid crystal display) Keypad Shield 16x2
Pada gambar diatas dapat dilihat bahwa Lcd (Liquid Crystal Display) keypad shield dirancang untuk arduino. Kelebihan lcd (lyquid crystal dispaly) ini pengguna tidak perlu lagi melakukan perakitan terhadap papan arduino karena lcd ini bisa langsung dipasang pada arduino. Tombol Select, left, up, down dan right berfungsi untuk melihat tampilan yang lain pada Lcd (lyquid crystal
37
dispaly) sesuai dengan program yang telah tersimpan. Berikut ini contoh program dari lcd(lyquid crystal display) keypad shield lybrary.
//Sample using LiquidCrystal library #include
/*******************************************************
This program will test the LCD panel and the buttons Mark Bramwell, July 2010
********************************************************/
// select the pins used on the LCD panel LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// define some values used by the panel and buttons int lcd_key
= 0;
int adc_key_in
= 0;
#define btnRIGHT
0
#define btnUP
1
#define btnDOWN
2
#define btnLEFT
3
#define btnSELECT 4 #define btnNONE
5
// read the buttons int read_LCD_buttons() {
38
adc_key_in = analogRead(0);
// read the value from the
sensor // my buttons when read are centered at these valies: 0, 144, 329, 504, 741 // we add approx 50 to those values and check to see if we are close if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result if (adc_key_in < 50)
return btnRIGHT;
if (adc_key_in < 195)
return btnUP;
if (adc_key_in < 380)
return btnDOWN;
if (adc_key_in < 555)
return btnLEFT;
if (adc_key_in < 790)
return btnSELECT;
return btnNONE;
// when all others fail, return this...
}
void setup() { lcd.begin(16, 2);
// start the library
lcd.setCursor(0,0); lcd.print("Push the buttons"); // print a simple message }
void loop() { lcd.setCursor(9,1);
// move cursor to second line
"1" and 9 spaces over lcd.print(millis()/1000); since power-up
//
display
seconds
elapsed
39
lcd.setCursor(0,1);
// move to the begining of the
second line lcd_key = read_LCD_buttons();
switch (lcd_key)
// depending on which button
was pushed, we perform an action { case btnRIGHT: { lcd.print("RIGHT "); break; } case btnLEFT: { lcd.print("LEFT
");
break; } case btnUP: { lcd.print("UP
");
break; } case btnDOWN: { lcd.print("DOWN break; } case btnSELECT:
// read the buttons
");
40
{ lcd.print("SELECT"); break; } case btnNONE: { lcd.print("NONE
");
break; } }
}
Dari contoh program lcd (lyquid crystal display) keypad shield maka bisa dijelaskan sebagai berikut: //Sample using LiquidCrystal library #include
Dalam program lcd
(lyquid crystal display) keypad shield ini adalah
lybrary untuk sebuah display lcd (lyquid crystal display) yang telah ada dalam program untuk fungsi daripada lyquidcrystal. This program will test the LCD panel and the buttons Mark Bramwell, July 2010
Dalam program tidak didefinisikan sebagai fungsi melainkan hanya sebagai tanda pembuatan dan dicantumkan tanggal dan tahun pembuatan program.
// select the pins used on the LCD panel LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
41
Angka 8, 9, 4, 5, 6, 7 merupakan alokasi dari pin pada lcd (lyquid crystal display) yang akan digunakan sebagai in dan out pada arduino. // define some values used by the panel and buttons int lcd_key
= 0;
int adc_key_in
= 0;
#define btnRIGHT
0
#define btnUP
1
#define btnDOWN
2
#define btnLEFT
3
#define btnSELECT 4 #define btnNONE
5
Merupakan identifikasi dari keypad lcd (lyquid crystal display) agar keypad dapat berfungsi dalam sebuah program dan keypad bisa digunakan. // read the buttons int read_LCD_buttons() { adc_key_in = analogRead(0);
// read the value from the
sensor // my buttons when read are centered at these valies: 0, 144, 329, 504, 741 // we add approx 50 to those values and check to see if we are close if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result if (adc_key_in < 50)
return btnRIGHT;
if (adc_key_in < 195)
return btnUP;
if (adc_key_in < 380)
return btnDOWN;
if (adc_key_in < 555)
return btnLEFT;
42
if (adc_key_in < 790) return btnNONE;
return btnSELECT;
// when all others fail, return this...
}
Ini merupakan fungsi dari pembacaan keypad lcd (lyquid crystal display) apabila tombol ditekan maka fungsi ini akan tereksekusi dan akan ditampilkan pada display lcd (lyquid crystal display). void setup() { lcd.begin(16, 2);
// start the library
lcd.setCursor(0,0); lcd.print("Push the buttons"); // print a simple message }
Fungsi setup() hanya di panggil satu kali ketika program pertama kali di jalankan. Ini digunakan untuk pendefinisian mode pin atau memulai komunikasi serial. Fungsi setup() harus di ikut sertakan dalam program walaupun tidak ada statement yang di jalankan. void loop() { lcd.setCursor(9,1);
// move cursor to second line
"1" and 9 spaces over lcd.print(millis()/1000);
//
display
seconds
elapsed
since power-up
lcd.setCursor(0,1);
// move to the begining of the
second line lcd_key = read_LCD_buttons();
// read the buttons
43
switch (lcd_key)
// depending on which button
was pushed, we perform an action { case btnRIGHT: { lcd.print("RIGHT "); break; } case btnLEFT: { lcd.print("LEFT
");
break; } case btnUP: { lcd.print("UP
");
break; } case btnDOWN: { lcd.print("DOWN
");
break; } case btnSELECT: { lcd.print("SELECT"); break; } case btnNONE: {
44
lcd.print("NONE
");
break; } }
}
Setelah melakukan fungsi setup() maka secara langsung akan melakukan fungsi loop() secara berurutan dan melakukan instruksi-instruksi yang ada dalam fungsi loop(). 3.2.3
Aplikasi Program Arduino IDE (Integrated Development
Environment) Setelah proses rangkaian selesai dibuat langkah selanjutnya adalah membuat program pada apliaksi program arduino IDE (Integrated Development Environment). Buka program aplikasi arduino IDE kemudian bentuk tampilan kerja aplikasi arduino IDE Sketch terlihat seperti gambar.
45
Gambar 3.8 Program Arduino IDE (Integrated Development Environment)
46
Dari gambar diatas merupakan program dari sensor water flow meter yang telah ditampilkan pada lcd (lyquid crystal dispaly) keypad shield. Dari program diatas dapat dijelaskan sebagai berikut: “ #include “ Dalam program lcd(lyquid crystal dispaly) keypad shield ini adalah lybrary untuk sebuah display lcd (lyquid crystal dispaly) yang telah ada dalam program untuk fungsi daripada lyquidcrystal. “// select the pins used on the LCD panel LiquidCrystal lcd(8, 9, 4, 5, 6, 7); “ Angka 8, 9, 4, 5, 6, 7 merupakan alokasi dari pin pada lcd (lyquid crystal dispaly) yang akan digunakan sebagai in dan out pada arduino. “ volatile int NbTopsFan; “ Diatas merupakan jumlah putaran fan yang ada pada sesnsor dan disimpan dalam bentuk int dan akan dieksekusi pada void loop. “ int Calc; “ Merupakan fungsi dari perhitungan dan disimpan dalam bentuk int dan akan dieksekusi pada void loop. “ int hallsensor = 2; “ Merupakan pengalokasian pin 2 sebagai input dari sensor pada arduino dan disimpan dalam bentuk int dan akan dieksekusi pada void loop. “ void rpm () { NbTopsFan++; }“
47
Merupakan fungsi seperti pwm dan rpm digunakan dalam sensor flow meter. “ void setup() “ Fungsi setup() hanya di panggil satu kali ketika program pertama kali di jalankan. Ini digunakan untuk pendefinisian mode pin atau memulai komunikasi serial. Fungsi setup() harus di ikut sertakan dalam program walaupun tidak ada statement yang di jalankan. “{“ Merupakan pembuka dari program void setup. “ lcd.begin(16, 2); “ Fungsi dari library pada sebuah lcd. “ lcd.setCursor(0,0); “ Setingan untuk meletakan kata pada lcd untuk baris pertama dan kolom pertama pada sebuah lcd. “ lcd.print("flow rate is"); “ Merupakan kata yang akan ditampilkan pada lcd. “ pinMode(hallsensor, INPUT); “ Merupakan pembacaan dari input sensor. “ Serial.begin(9600); “ Merupakan pembacaan angka untuk sensor water flow meter. “ attachInterrupt(0, rpm, RISING); “ Merupakan pembacaan dari fungsi. “ }” Merupakan penutup dari fungsi void setup.
48
“ void loop() “ Setelah melakukan fungsi setup() maka secara langsung akan melakukan fungsi loop() secara berurutan dan melakukan instruksi-instruksi yang ada dalam fungsi loop(). “{“ Merupakan pembuka dari program void loop. “ lcd.setCursor(1,1); “ Setingan untuk meletakan hasil dari pembacaan sensor water flow meter pada lcd, pada baris kedua dan kolom kedua. “ NbTopsFan = 0; “ Setingan nbtopsfan, angka 0 siap untuk dihitung. “ sei(); “ Fungsi ini merupakan masukan bisa digunakan. “ delay (1000); “ Fungsi ini merupakan waktu tunda selama 1000 mili detik atau selama satu detik untuk setiap tampilan pada lcd yang telah dibaca dalam sensor. “ cli(); “ Fungsi ini merupakan masukan tidak bisa digunakan “ Calc = (NbTopsFan * 60 / 7.5); “ Fungi ini merupakan pulsa frequensi dari pembacaan sensor dikali dengan 60 dan dibagai dengan 7,5 ( merupakan definisi dari liter per jam, l/jam ) “ sei(); “ Fungsi ini merupakan masukan bisa digunakan.
49
“ lcd.print (Calc, DEC); “ Setingan untuk tampilan pada lcd dari hasil perhitungan fungsi diatas. “ lcd.print(" L/hour"); “ Setingan untuk menampilkan L/jam pada sebuah lcd. “ cli(); “ Fungsi ini merupakan masukan tidak bisa digunakan “ Serial.print (Calc, DEC); “ Setingan untuk tampilan pada serial monitor PC dari hasil perhitungan fungsi diatas. “ Serial.print (" L/hour\r\n"); “ Setingan untuk menampilkan L/jam pada sebuah serial monitor PC. “}“ Merupakan penutup dari fungsi void loop.
3.2.3.1 Bahasa Program Arduino IDE yang digunakan Float Float point numbers sering digunakan untuk memperkirakan nilai analog dan berkelanjutan karena nilai tersebut memiliki resolusi yang lebih besar daripada integers. float point numbers dapat menyimpan sebesar 32-bit dengan range 3.4028235E+38 sampai 3.4028235E+38. Angka tersebut disimpan dalam 32 bits (4 bytes) dari informasi. Float hanya memiliki 6-7 digit decimal. Pada arduino, Double sama nilainya dengan Float.
50
Contoh : float myfloat; float sensorCalbrate = 1.117;
Syntax : float var = val; var - your float variable name val - the value you assign to that variable
Contoh kode : int x; int y; float z; x = 1; y = x / 2; hold fractions
// y now contains 0, ints can't
z = (float)x / 2.0; to use 2.0, not 2)
// z now contains .5 (you have
Byte Tipe byte dapat menyimpan 8-bit nilai angka bilangan asli
tanapa koma. Byte memiliki range 0 – 255. Contoh : Byte
biteVariable
=
180;
//
mendeklarasikan
‘biteVariable’ sebagai type byte
Void (Setup)
Fungsi setup() hanya di panggil satu kali ketika program pertama kali di jalankan. Ini digunakan untuk pendefinisian mode pin atau memulai komunikasi serial. Fungsi setup() harus di ikut sertakan dalam program walaupun tidak ada statement yang di jalankan. Contoh :
51
void setup() { pinMode(13,OUTPUT); // mengset ‘pin’ 13 sebagai output }
Loop
Setelah melakukan fungsi setup() maka secara langsung akan melakukan fungsi loop() secara berurutan dan melakukan instruksiinstruksi yang ada dalam fungsi loop(). Contoh : void loop() { digitalWrite(13, HIGH); // nyalakan ‘pin’ 13 delay(1000); // pause selama 1 detik digitalWrite(13, LOW); // matikan ‘pin’ 13 delay(1000); /// pause selama 1 detik }
Serial begin ()
Statement ini di gunakan untuk mengaktifkan komunikasi serial dan mengset baudrate. Contoh : void setup() { Serial.begin(9600);
//open serial port and set baudrate 9600 bps
}
Analog Read () Papan Arduino memiliki 6 chanel, 10 bit analog ke digital, artinya kita dapat memasukkan tegangan antara 0 dan 5 volts pada nilai integer antara 0 sampai 1023. Kisaran input atau masukan dan resolusi dapat dirubah menggunakan analog reference. Untuk membaca analog input dibutuhkan dibutuhkan sekitar 100 microsecond (0.0001 s). Jadi rata – rata membacanya sekitar 10.000 kali dalam satu detik. Catatan : jika pin analog
52
input tidak dapat terkoneksi dengan apapun nilainya akan kembali pada analogRead. Syntax : analogRead(pin)
Contoh : Int analogPin = 3 // potentiometer wiper middle terminal connected to analog pin 3 Void setup () { Serial.begin (9600); } Void loop () { Val = analogRead(analogPin); // Read the input pin Serial.println(val); //debug value }
Delay ()
Menghentikan program untuk mengukur waktu (dalam millisecond) yang terspesifikasi pada parameter (ada 1000 milisecond dalam setiap detik). Pada saat mudahnya membuat LED berkedip dengan fungsi delay, beberapa sketch atau lembar kerja mengalami delay. Membaca sensor, perhitungan Matematika, atau memanipulasi Pin dapat berkerja pada saat fungsi delay bekerja. Beberapa program berbasis pengetahuan biasanya menghindari penggunaan delay untuk kegiatan yang membutuhkan waktu lebih dari 10 miliseconds. Delay(1000); detik
// menunggu selama satu
Selanjutnya hubungkan Arduino ke komputer dengan menggunakan kabel USB (Universal Serial Bus). Lalu kita dapat mengetikkan program pada lembar kerja Sketch kemudian compile untuk mengecek atau memeriksa
53
apakah kode sudah benar sebelum dikirim ke papan Arduino, program tersebut dapat diketik seperti dibawah ini : #include // select the pins used on the LCD panel LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
volatile int NbTopsFan; //measuring the rising edges of the signal int Calc; int hallsensor = 2;
void rpm ()
//The pin location of the sensor
//This is the function that the interupt
calls { NbTopsFan++;
//This
function
measures
the
rising
and
falling edge of the hall effect sensors signal }
void setup() { lcd.begin(16, 2);
// start the library
lcd.setCursor(0,0); lcd.print("flow rate is"); // print a simple message
pinMode(hallsensor, INPUT); //initializes digital pin 2 as an input
54
Serial.begin(9600); //This is the setup function where the serial port is initialised, attachInterrupt(0, rpm, RISING); //and the interrupt is attached
}
void loop() { lcd.setCursor(1,1);
// move cursor to second
line "1" and 9 spaces over NbTopsFan = 0; sei();
//Enables interrupts
delay (1000); cli();
//Set NbTops to 0 ready for calculations
//Wait 1 second
//Disable interrupts
Calc = (NbTopsFan * 60 / 7.5); //(Pulse frequency x 60) / 7.5Q, = flow rate in L/hour
sei();
lcd.print
(Calc,
DEC);
//Prints
the
number
calculated
above lcd.print(" L/hour");
// display seconds elapsed since
power-up
cli();
//Disable interrupts
Serial.print (Calc, DEC); //Prints the number calculated above
55
Serial.print returns a
("
L/hour\r\n");
//Prints
"L/hour"
and
new line
}
Setelah program selesai diketik lngkah selanjutnya adalah pilih icon upload, tunggu berapa detik. Setelah muncul done upload maka upload telah selesai dilakukan.