Laporan Akhir 1




LAPORAN AKHIR 1 
Percobaan 5 (Komunikasi I2C)


1. Prosedur
 [Kembali]
    1. Rangkai semua komponen sesuai dengan percobaan yang dipilih
    2. Buat program di aplikasi aduino IDE
    3. Hubungkan perangkat arduino ke perangkat laptop 
    4. Jalankan program pada arduino dan uji cobakan sesuai dengan modul 

2. Hardware dan Diagram Blok [Kembali]

    A. Arduino Uno

    B. Kabel Male to Male
    C. Breadboard
    D. Dip Switch

    E. LED
    
    F. Resistor



Diagram Blok:

3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

    A. Gambar rangkaian 


    B. Prinsip Kerja
      Rangkaian pada percobaan ini terdiri dari dua Arduino yang berkomunikasi menggunakan protokol I2C, di mana satu Arduino bertindak sebagai master dan yang lainnya sebagai slave. Pada Arduino master, terdapat dua tombol push button yang digunakan untuk mengontrol operasi pada Arduino slave. Ketika salah satu tombol ditekan, sinyalnya akan dikirim melalui bus I2C ke Arduino slave.

Pertama, program pada Arduino master membaca status tombol push button. Jika tombol kedua ditekan, counter pada master akan diinkremen sebanyak satu setiap kali tombol ditekan. Jika counter tersebut bernilai genap (modulo 2), maka program akan membaca status tombol pertama. Jika tombol pertama ditekan, counter akan diinkremen lagi dan nilai tersebut akan dikirim ke Arduino slave melalui komunikasi I2C. Selain itu, jika counter melebihi nilai 3, counter akan direset kembali ke 0.

Pada Arduino slave, programnya menunggu perintah yang dikirim melalui bus I2C dari Arduino master. Ketika menerima perintah, seperti nilai 1, 2, atau 3, Arduino slave akan menjalankan aksi sesuai perintah tersebut. Misalnya, jika nilai yang diterima adalah 1, maka semua LED yang terhubung akan dinyalakan; jika nilai adalah 2, semua LED akan dimatikan; dan jika nilai adalah 3, semua LED akan berkedip selama beberapa kali dengan delay tertentu. Perintah yang diterima akan diimplementasikan dalam bentuk aksi fisik pada LED yang terhubung ke Arduino slave.   

4. Flowchart [Kembali]

    A. Listing Program
// Master
#include <Wire.h>

#define SLAVE_ADDRESS 9 // Alamat Arduino slave
#define BUTTON1 2 // Pin untuk tombol push button 1
#define BUTTON2 3 // Pin untuk tombol push button 2

int buttonState1 = 0;
int buttonState2 = 0;
int buttonPrevState1 = 0;
int buttonPrevState2 = 0;
unsigned int counter = 0;
unsigned int count = 0;

void setup() {
  Wire.begin(); // Inisialisasi komunikasi I2C
  pinMode(BUTTON1, INPUT_PULLUP); // Set pin tombol 1 sebagai input dengan resistor pull-up internal
  pinMode(BUTTON2, INPUT_PULLUP); // Set pin tombol 2 sebagai input dengan resistor pull-up internal
  Serial.begin(9600); // Inisialisasi komunikasi serial untuk debugging
}

void loop() {
  buttonState1 = digitalRead(BUTTON1);
  buttonState2 = digitalRead(BUTTON2);
  
  if (buttonState2 != buttonPrevState2) {
    if(buttonState2 == LOW) {
      count++;
    }
    delay(50);
  }
  buttonPrevState2 = buttonState2;
  
  if (count > 3) {
    count = 0;
  }

  if (count % 2 == 0) {
    if (buttonState1 != buttonPrevState1) {
      if (buttonState1 == LOW) {
        counter++;
        Wire.beginTransmission(SLAVE_ADDRESS);
        Wire.write(counter); // Kirim perintah ke Arduino slave
        Wire.endTransmission();
      }
      delay(50); // Delay untuk debouncing
    }
    buttonPrevState1 = buttonState1;
    if (counter > 3) {
      counter = 0;
    }
  } else if (count % 3 == 0) {
    Wire.endTransmission();
  }
  
  Serial.print(count);
  Serial.println(counter);
}

// Slave
#include <Wire.h>

#define LED_COUNT 8
#define LED_PIN_START 2 // Pin awal untuk LED
void setup() {
  Serial.begin(9600);
  Wire.begin(9); // Inisialisasi komunikasi I2C sebagai Slave dengan alamat 9
  Wire.onReceive(receiveEvent); // Daftarkan event untuk menerima data
  for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
    pinMode(i, OUTPUT); // Set pin LED sebagai output
  }
}

void loop() {
  // Tidak ada yang perlu dilakukan di sini, semua aksi dilakukan dalam fungsi receiveEvent
}

void receiveEvent(int numBytes) {
  unsigned int command = Wire.read(); // Baca perintah yang masuk dari master
  Serial.println(command);
  delay(500);
  
  if (command == 1) {
    // Nyalakan semua LED
    for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
      digitalWrite(i, HIGH);
    }
  } else if (command == 2) {
    // Matikan semua LED
    for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
      digitalWrite(i, LOW);
    }
  } else if (command == 3) {
    // Berkedipkan semua LED
    for (int j = 0; j < 5; j++) { // Ulangi berkedip 5 kali
      for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
        digitalWrite(i, HIGH);
        delay(1000);
      }
      delay(500); // Delay untuk keadaan ON
      for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
        digitalWrite(i, LOW);
        delay(1000);
      }
      delay(500); // Delay untuk keadaan OFF
    }
  }
}
    
    B. Flowchart


5. Kondisi [Kembali]
Percobaan 5: Komunikasi I2C

6. Video Demo [Kembali]



7. Analisa [Kembali]

    1. Bagaimana cara mengupload program arduino dengan komunikasi yang digunakan?
jawab: Cara mengunggah program pada arduino yang menggunakan komunikasi serial I2C dilakukan dengan saling tidak menghubungkan terlebih dahulu port komunikasi (pin SCL dan SDA) pada kedua arduino saat pengunggahan. Setelah program selesai diunggah, port komunikasi kedua arduino baru dihubungkan menggunakan kabel jumper.

    2. Kenapa cara pengupload program pada komunikasi percobaan 5 tidak sama dengan cara pengupload-an program dengan komunikasi UART?
Jawab: Cara pengupload program pada komunikasi serial I2C berbeda dengan cara pengupload-an program dengan komunikasi UART karena keduanya memiliki karakteristik yang berbeda sehingga mempengaruhi proses pengupload-an. Pada komunikasi serial I2C, setiap perangkat memiliki alamat unik yang digunakan untuk berkomunikasi dengan perangkat lainnya dalam bus I2C. Ketika melakukan pengupload program pada perangkat yang menggunakan komunikasi I2C, penting untuk memastikan bahwa bus I2C tidak terhubung dengan perangkat lain yang dapat mengganggu proses upload atau menghasilkan konflik alamat.

Di sisi lain, dalam komunikasi UART, tidak ada alamat perangkat yang harus dipertimbangkan saat pengupload-an program. Komunikasi UART menggunakan jalur transmit (TX) dan receive (RX) yang sederhana untuk mentransfer data antara perangkat. Proses pengupload-an program dengan komunikasi UART biasanya tidak memerlukan pertimbangan terhadap pengaturan khusus seperti yang diperlukan dalam komunikasi I2C.
 

8. Download File [Kembali]
Download Html klik disini 
Download Video Simulasi klik disini
Download Datasheet Arduino Uno klik disini
Download Datasheet Dip Switch klik disini
Download Datasheet LED klik disini












Tidak ada komentar:

Posting Komentar

Entri yang Diunggulkan

APLIKASI HPF +60DB/DEC DENGAN GENERATOR SINYAL

[MENUJU AKHIR] APLIKASI HPF +60DB/DEC DENGAN GENERATOR SINYAL DAFTAR ISI 1. Tujuan 2. Alat dan Bahan 3. Dasar Teori 4. P...