Laporan Akhir 2 - Percobaan 3





PERCOBAAN 3 - KOMUNIKASI I2C



1. Tujuan [Kembali]

    1.1 Tujuan Praktikum

  • Mampu merangkai rangkaian percobaan komunikasi I2C
  • Mampu menjelaskan prinsip kerja rangkaian percobaan komunikasi I2C
  • Mampu membuat simulasi rangkaian pada aplikasi proteus

    1.2 Kondisi

      Ganti LED dengan motor DC, sehingga ketika button di tekan maka motor DC akan berputar searah jarum jam.

 



2. Hardware [Kembali]

  • Arduino Uno



  • Drive Motor IC L293D

  • Motor DC

  • Baterai

  • Push Botton

  • Resistor



  • Power Supply


          

3. Rangkaian Percobaan [Kembali]


    3.1 Rangkaian Percobaan


    
    3.2 Prinsip Kerja

        Pada rangkaian percobaan 3 modul 3 ini menggunakan beberapa komponen, yaitu arduino uno, motor DC, driver motor IC L293D, resistor, push botton, power, ground, dan baterai. Percobaan yang dilakukan yaitu percobaan komunikasi I2C antara 2 buah arduino. Satu arduino berfungsi sebagai master dan arduino yang lain befungsi sebagai slave. Pin SDA (A4) dan SCL (A5) pada arduino Master dihubungkan dengan pin SDA (pin A4) dan pin SCL (A5) pada arduino Slave. Pin analog A0 pada Master dihubungkan dengan paralel push button dan resistor, dimana kaki lain pada push button terhubung ke power dan kaki lain pada resistor terhubung ke ground. Sedangkan pada arduino Slave, pin 11 arduino dihubungkan ke pin IN1 dan pin 10 dihubungkan dengan pin IN2 IC L293 D. Pin IN1 dan IN2 berfungsi sebagai input PWM dari driver motor L293D. Pin EN1 (berfungsi untuk mengaktifkan pin IN1 dan IN2) dihubungkan ke power. Pin VSS yang berfungsi sebagai VCC atau sumber IC L293D dihubungkan ke power, sedangkan pin VS yang berfungsi sebagai sumber motor DC dihubungkan ke baterai 12 V. Pin OUT1 dan OUT2 pada driver motor dihubungkan ke masing-masing kaki motor DC sebagai output dari IN1 dan IN2. Jika button ditekan, maka pin A0 akan berlogika 1 karena arus mengalir dari power menuju pin tersebut dan mengakibatkan motor pada Slave berputar karena ada data yang dikirimkan dari master ke slave. Namun, jika button tidak ditekan, maka pin A0 akan berlogika 0 karena arus dilewatkan ke ground dan motor tidak akan berputar.

          Pada rangkaian percobaan 3, terdiri atas 2 listing program yaitu untuk master dan slave.  

         Pada listing program master, awalnya dilakukan dekalarasi library Wire.h, mendefinisikan atau mendeklarasikan alamat device Slave, yaitu SLAVE_ADDR 9, dan pin-pin yang digunakan yaitu pin A0 digunakan untuk button. Lalu, fungsi void setup () dieksekusi. Pada fungsi ini, dilakukan inisialisasi library Wire.h dan bergabung dengan komunikasi I2C sebagai master dan dekalarasi pin button sebagai INPUT. Kemudian, fungsi void loop() dieksekusi. Pada fungsi ini, dilakukan delay selama 50ms atau 0.05 s dan pembacaan nilai input dari pin Button menggunakan kode digitalRead(Button). Lalu, hasil pembacaan tersebut disimpan dalam variabel button_status. Data lalu ditransmisikan ke I2C Slave menggunakan kode Wire.beginTransmission() dengan alamat SLAVE_ADDR dan menunggu antrian data dengan nilai button_status untuk transmisi dengan kode Wire.write(). Kemudian, data dikirimkan ke slave dengan dengan menggunakan kode Wire.endTransmission (). 

    Pada listing program slave, awalnya didefinisikan atau dideklarasikan library Wire.h, mendefinisikan atau mendeklarasikan alamat device Slave, yaitu SLAVE_ADDR 9, dan pin-pin yang digunakan, yaitu pin 11 digunakan untuk pin IN1 dan pin 10 digunakan untuk pin IN2 driver motor IC L293D. Lalu, dilakukan deklarasi variabel rd dengan tipe data int. Selanjutnya, program akan meng-eksekusi fungsi void setup () dimana pada fungsi ini dilakukan deklarasi pn IN1 dan IN2 sebagai OUTPUT. Kemudian, dilakukan inisialisasi library Wire.h dan bergabung dengan komunikasi I2C sebagai Slave. Lalu, mendaftarkan fungsi receiveEvent yang akan dipanggilkan ketika Slave menerima transmisi data dari Master. Pada fungsi void receiveEvent() pembacaan data dari Master disimpan dalam variabel rd dan nilainya akan ditampilkan dalam monitor serial. Lalu, memulai komunikasi serial dengan baud rate 9600 dan menampilkan tulisan "I2C Slave demo" pada monitor serial. Lalu, fungsi void loop () dieksekusi. Jika nilai rd 1, maka pin IN1 diberi logika 1 dan pin IN2 diberi logika 0 sehingga motor berputar searah jarum jam. Namun, jika nilai rd 0, maka pin IN1 diberi logika 0 dan pin IN2 diberi logika 0 sehingga motor tidak akan berputar.

            


4. Listing Program [Kembali]


      4.1 Listing Program


      
     4.2 Flowchart






5. Analisa [Kembali]
 

1. Apakah device master pada komunikasi I2C mempunyai alamat/ address?

Jawab:

        Pada komunikai I2C, device master tidak mempunyai address/alamat atau address pada device master bersifat optional karena hanya device slave yang memerlukan address yang berbeda atau unik untuk bisa membedakan antara slave yang satu dengan slave yang lain jika menggunakan lebih dari satu slave. 

 

2. Apa yang terjadi jika address pada slave diganti menjadi 0x70?

Jawab:

Jika address pada slave diganti menjadi 0x70, maka motor tidak akan bisa berputar karena address pada device slave diubah sehingga data yang dikirim dari master tidak bisa diterima oleh slave karena address slave di listing program slave berbeda dengan listing program master. Namun, jika kita juga mengubah address slave pada listing program device master (menjadi kode ‘Wire.beginTransmission(0x70)’), maka master dapat mengirim data ke slave dan motor dapat berputar/hidup.

 

3. Apa fungsi sintax “Wire.onReceive(receiveEvent)’ pada device slave?

Jawab:

Wire.onReceive(receiveEvent) pada slave digunakan untuk mendaftarkan fungsi yaitu fungsi ‘receiveEvent ()’yang akan dipanggil ketika device slave menerima transmisi dari device master.

 



6. Video [Kembali]




7. Link Download [Kembali]
      

Tidak ada komentar:

Posting Komentar