uC Arduino menggunakan timer, interrupt dan komunikasi serial. 
 

1. Tujuan [Kembali]

1. Dapat Menggunakan Arduino menggunakan timer, interrupt dan komunikasi serial.
2. Dapat Membuat rangkaian aplikasi menggunakan timer, interrupt, dan komunikasi serial
 
2. Alat dan Bahan  [Kembali]

2.1 Alat 

         2.1.1 Instrument


         AC Voltmeter

Gambar 2.1.1 AC Voltmeter
     

   


2.2 Alat 

      2.2.1 Resistor 

Gambar 2.2.1 Generator pembangkit sinyal

       Pada Rangkaian ini digunakan resistor dengan nilai 10k dan 220 ohm.

     
         2.2.11 LED
Gambar 2.2.11 LED (Ligt Emitting Diode)

        
         2.2.17 Motor DC

Gambar 2.2.17 Motor DC





       3.1 Resistor

        Pada dasarnya Resistor adalah komponen Elektronika Pasif yang memiliki nilai resistansi atau hambatan tertentu yang berfungsi untuk membatasi dan mengatur arus listrik dalam suatu rangkaian Elektronika. Resistor atau dalam bahasa Indonesia sering disebut dengan Hambatan atau Tahanan dan biasanya disingkat dengan Huruf “R”. Satuan Hambatan atau Resistansi Resistor adalah OHM (Ω). Sebutan “OHM” ini diambil dari nama penemunya yaitu Georg Simon Ohm yang juga merupakan seorang Fisikawan Jerman.

Jenis-jenis resistor :

1. Fixed Resistor

Fixed Resistor adalah jenis Resistor yang memiliki nilai resistansinya tetap. Nilai Resistansi atau Hambatan Resistor ini biasanya ditandai dengan kode warna ataupun kode Angka. 


Simbol Fixed Resistor :

Gambar 3.1.1 Simbol Fixed Resistor

2. Variable Resistor
 
Variable Resistor adalah jenis Resistor yang nilai resistansinya dapat berubah dan diatur sesuai dengan keinginan. Pada umumnya Variable Resistor terbagi menjadi Potensiometer, Rheostat dan Trimpot.

Simbol Variabel Resistor :

Gambar 3.1.2 Simbol Variabel Resistor

Cara menentukan nilai resistor dengan kode warna :

Gambar 3.1.3 Tabel Nilai Resistor Berdasarkan Warna

Perhitungan untuk Resistor dengan 4 Gelang warna :


Gelang ke 1 : Coklat = 1
Gelang ke 2 : Hitam = 0
Gelang ke 3 : Hijau = 5 nol dibelakang angka gelang ke-2; atau kalikan 105
Gelang ke 4 : Perak = Toleransi 10%
Maka nilai Resistor tersebut adalah 10 * 105 = 1.000.000 Ohm atau 1 MOhm dengan toleransi 10%.

Perhitungan untuk Resistor dengan 5 Gelang warna :


Gelang ke 1 : Coklat = 1
Gelang ke 2 : Hitam = 0
Gelang ke 3 : Hijau = 5
Gelang ke 4 : Hijau = 5 nol dibelakang angka gelang ke-2; atau kalikan 105
Gelang ke 5 : Perak = Toleransi 10%
Maka nilai Resistor tersebut adalah 105 * 105 = 10.500.000 Ohm atau 10,5 MOhm dengan toleransi 10%.

Cara menghitung nilai Resistor berdasarkan Kode Angka :

Gambar 3.1.4 Nilai Resistor Berdasarkan Angka

Kode Angka yang tertulis di badan Komponen Chip Resistor adalah 4 7 3;

Contoh cara pembacaan dan cara menghitung nilai resistor berdasarkan kode angka adalah sebagai berikut :

Masukkan Angka ke-1 langsung = 4
Masukkan Angka ke-2 langsung = 7
Masukkan Jumlah nol dari Angka ke 3 = 000 (3 nol) atau kalikan dengan 10³
Maka nilainya adalah 47.000 Ohm atau 47 kilo Ohm (47 kOhm)

Ada juga yang memakai kode angka seperti dibawah ini :
(Tulisan R menandakan letaknya koma decimal)
4R7 = 4,7 Ohm
0R22 = 0,22 Ohm

Keterangan :

Ohm = Ω
Kilo Ohm = KΩ
Mega Ohm = MΩ
1.000 Ohm = 1 kilo Ohm (1 KΩ )
1.000.000 Ohm = 1 Mega Ohm (1 MΩ)
1.000 kilo Ohm = 1 Mega Ohm (1 MΩ)

Fungsi-fungsi Resistor di dalam Rangkaian Elektronika diantaranya adalah sebagai berikut :

  • Sebagai Pembatas Arus listrik
  • Sebagai Pengatur Arus listrik
  • Sebagai Pembagi Tegangan listrik
  • Sebagai Penurun Tegangan listrik
      
4. Percobaan  [Kembali]

Prosedur Percobaan :
1. Rangkailah seperti pada gambar 4.1. File rangkaian dapat didownload pada bagian link download.


Gambar 2.1 Gambar Rangkaian Ketika Off

Gambar 2.1 Gambar Rangkaian Ketika On

Gambar 4.1 Gambar rangkaian aplikasi 

2. Buat listing program seperti berikut :

//MASTER

#include <TimerOne.h>

#include <LiquidCrystal.h>                    //Deklarasi library LCD

#define LM35 A0                               //Deklarasi pin A0 untuk LM35

#define SOIL A1

LiquidCrystal lcd(8,9,10,11,12,13);               //Deklarasi pin 2-7 untuk LCD


int nilaiSuhu;                                //Deklarasi variabel nilaiSuhu

int nilaiSOIL;

int LED[] = {2,3,4};


void setup()     //Semua kode dalam fungsi ini dieksekusi sekali

{

pinMode(A0, INPUT);                           //Deklarasi pin A0 sebagai OUTPUT

pinMode(A1, INPUT);

lcd.begin(16,2);                              //Dimensi LCD yang digunakan

for (int i =0; i<=3;i++){

pinMode (LED[i],OUTPUT);

Timer1.initialize(10000);

Timer1.attachInterrupt(blinkKuning);


}


  Serial.begin(9600); //Set baud rate 9600

}


void loop()   //Semua kode dalam fungsi ini dieksekusi berulang

{

nilaiSuhu=((5*analogRead(LM35)*100.00)/1024); //Mencari nilai Suhu  


  if(nilaiSuhu > 0 && nilaiSuhu <25)

    { 

    nilaiSOIL = analogRead(SOIL);

       

    if( nilaiSOIL>=350 && nilaiSOIL<=700){

    digitalWrite(2,HIGH);

    digitalWrite(3,LOW);

    digitalWrite(4,LOW);

    Serial.print("2");

    

    lcd.clear();                             //Menghapus layar LCD

    lcd.setCursor(0,0);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print("Suhu : ");           //Menampilkan text pada LCD

    lcd.setCursor(8,0);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print(nilaiSuhu);                    //Menampilkan nilaiSuhu pada LCD

    lcd.setCursor(0,1);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print("Kondisi : Normal");           //Menampilkan text pada LCD

    delay(100);

    }

    

    else if(nilaiSOIL >700){

    digitalWrite(2,HIGH);

    digitalWrite(3,LOW);

    digitalWrite(4,LOW);

    Serial.print("1");

    

    lcd.clear();                             //Menghapus layar LCD

    lcd.setCursor(0,0);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print("Suhu : ");           //Menampilkan text pada LCD

    lcd.setCursor(8,0);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print(nilaiSuhu);                    //Menampilkan nilaiSuhu pada LCD

    lcd.setCursor(0,1);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print("Kondisi : Kering");           //Menampilkan text pada LCD

    delay(100);

    }


   

    else {

    digitalWrite(2,HIGH);

    digitalWrite(3,LOW);

    digitalWrite(4,LOW);

    Serial.print("3");

    

    lcd.clear();                             //Menghapus layar LCD

    lcd.setCursor(0,0);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print("Suhu : ");           //Menampilkan text pada LCD

    lcd.setCursor(8,0);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print(nilaiSuhu);                    //Menampilkan nilaiSuhu pada LCD

    lcd.setCursor(0,1);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print("Kondisi : Basah");           //Menampilkan text pada LCD

    delay(100);

    }

    }

   


      else if(nilaiSuhu>30){

    

     

      nilaiSOIL = analogRead(SOIL);

       

    if( nilaiSOIL>=350 && nilaiSOIL<=700){

    digitalWrite(2,LOW);

    digitalWrite(3,LOW);

    digitalWrite(4,HIGH);

    Serial.print("2");

    

    lcd.clear();                             //Menghapus layar LCD

    lcd.setCursor(0,0);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print("Suhu : ");           //Menampilkan text pada LCD

    lcd.setCursor(8,0);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print(nilaiSuhu);                    //Menampilkan nilaiSuhu pada LCD

    lcd.setCursor(0,1);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print("Kondisi : Normal");           //Menampilkan text pada LCD

    delay(100);

    }

    

    else if(nilaiSOIL >700){

    digitalWrite(2,LOW);

    digitalWrite(3,LOW);

    digitalWrite(4,HIGH);

    Serial.print("1");

    

    lcd.clear();                             //Menghapus layar LCD

    lcd.setCursor(0,0);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print("Suhu : ");           //Menampilkan text pada LCD

    lcd.setCursor(8,0);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print(nilaiSuhu);                    //Menampilkan nilaiSuhu pada LCD

    lcd.setCursor(0,1);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print("Kondisi : Kering");           //Menampilkan text pada LCD

    delay(100);

    }


   

    else {

    digitalWrite(2,LOW);

    digitalWrite(3,LOW);

    digitalWrite(4,HIGH);

    Serial.print("3");

    

    lcd.clear();                             //Menghapus layar LCD

    lcd.setCursor(0,0);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print("Suhu : ");           //Menampilkan text pada LCD

    lcd.setCursor(8,0);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print(nilaiSuhu);                    //Menampilkan nilaiSuhu pada LCD

    lcd.setCursor(0,1);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print("Kondisi : Basah");           //Menampilkan text pada LCD

    delay(100);

    }

      

}

}


void blinkKuning(){


 if (nilaiSuhu > 24 && nilaiSuhu <31) 

{          

  nilaiSOIL = analogRead(SOIL);

       

    if( nilaiSOIL>=350 && nilaiSOIL<=700){

    digitalWrite(2,LOW);

    digitalWrite(3,HIGH);

    digitalWrite(4,LOW);

    Serial.print("2");

    

    lcd.clear();                             //Menghapus layar LCD

    lcd.setCursor(0,0);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print("Suhu : ");           //Menampilkan text pada LCD

    lcd.setCursor(8,0);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print(nilaiSuhu);                    //Menampilkan nilaiSuhu pada LCD

    lcd.setCursor(0,1);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print("Kondisi : Normal");           //Menampilkan text pada LCD

    delay(100);

    }

    

    else if(nilaiSOIL >700){

    digitalWrite(2,LOW);

    digitalWrite(3,HIGH);

    digitalWrite(4,LOW);

    Serial.print("1");

    

    lcd.clear();                             //Menghapus layar LCD

    lcd.setCursor(0,0);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print("Suhu : ");           //Menampilkan text pada LCD

    lcd.setCursor(8,0);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print(nilaiSuhu);                    //Menampilkan nilaiSuhu pada LCD

    lcd.setCursor(0,1);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print("Kondisi : Kering");           //Menampilkan text pada LCD

    delay(100);

    }


   

    else {

    digitalWrite(2,LOW);

    digitalWrite(3,HIGH);

    digitalWrite(4,LOW);

    Serial.print("3");

    

    lcd.clear();                             //Menghapus layar LCD

    lcd.setCursor(0,0);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print("Suhu : ");           //Menampilkan text pada LCD

    lcd.setCursor(8,0);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print(nilaiSuhu);                    //Menampilkan nilaiSuhu pada LCD

    lcd.setCursor(0,1);                      //Menentukan posisi kursor pada awal penulisan

    lcd.print("Kondisi : Basah");           //Menampilkan text pada LCD

    delay(100);

    }


}

  

}


//SLAVE


void setup()   //Semua kode dalam fungsi ini dieksekusi sekali

{

 

  pinMode(7,OUTPUT);   //Deklarasi LED sebagai output

  Serial.begin(9600);            //Set baud rate 9600

}


void loop()                         //Semua program dalam fungsi ini dieksekusi berulang

{

  if(Serial.available()>0)

  {

    int data = Serial.read();

      if(data=='1')  //Jika data yang dikirimkan berlogika

        {

   

          digitalWrite(7,HIGH);  

          delay (2000);

 

          digitalWrite(7,LOW);  

          delay (5000);

        } 

      else

        {


          digitalWrite(7,LOW); 

        }

        

  }

}




Gambar 3.1 Flowchart Program Arduino Master



Gambar 3.2 Flowchart Program Arduino Slave

Prinsip Kerja :

Prinsip kerja rangkaian ini adalah menggunakan 2 buah sensor sebagai input yaitu sensor kelembaman dan sensor LM35. Sensor LM35 berperan untuk mendeteksi suhu sekitar tanah yang nanti nya akan di hubungkan ke LED indikator, LED indikator ini terpasang di master, ketika suhu 0-24°C yang tergolong suhu dingin maka LED yang hidup bewarna hijau, ketika suhu 25-30°C yang tergolong suhu sedang maka LED yang hidupberwarna kuning dan jika mencapai 31°C keatas maka LED yang hidup bewarna merah. Kemudian untuk nilai suhu akan ditampilkan di LCD dan untuk sensor kelembaman akan digunakan sebagai penentu motorakan menyiram atau tidak, output nya akan diarahkan ke motor DC sebagai pompa.

Jadi ada 3 keadaan saat sensor bekerja, ketika terkena air maka tidak akan mengeluarkan tegangan dan jika kering akan mengeluarkan tegangan. Itu artinya jika kondisi basah maka tegangan rendah (0-350) sehingga motor tidak akan bergerak, sementara jika 350-700 itu tergolong normal dan kelembaman nya pas akan tetapi motor tidak akan bergerak dan jika diatas 700 itu tergolong kering dan motor akan bergerak.

Kata-kata normal, basah dan kering nanti nya akan ditampilkan di LCD pada baris kedua dibawah penampilan nilai suhu, ketika kelembaman nya kering (diatas 700) motor bergerak menandakan bahwa tanaman sedang disiram nanti kita akan menentukan lama waktu menyiram (2 detik) untuk di program dan setelah 2 detik motor akan delay selama 5 detik jadi nanti kita akan melihat apakah kelembaman nya masih sama atau tidak jika kelembaman nya masih sama maka setelah 5 detik dia akan menyiram lagi selama 2 detik kemudian delay lagi selama 5 detik begitu seterusnya hingga kelembaman normal atau basah maka motor akan berhenti.

Video percobaan Aplikasi Rangkaian 


File library Arduino Proteus - Download
File libarary Soil sensor - Download
File datasheet lcd - Download
File datasheet Soil sensor - Download
File datasheet LM35 - Download
File datasheet Motor DC - Download
File Flowchart Master - Download
File Flowchart Slave - Download
File Program Master - Download
File Program Slave - Download
File HTML - Download
File rangkaian - Download
File video - Download




Tidak ada komentar:

Posting Komentar