Jumat, 05 April 2024

LA M3P3K6

 



Percobaan 3
Komunikasi I2C Menggunakan Arduino

1. Foto Hardware dan Diagram Blok [Kembali]

Hardware   

1. Arduino Uno



        2. Keypad




      3. LCD

Diagram Blok:

2. Prosedur Percobaan  [Kembali]

Rangkai semua komponen 
+ buat program di aplikasi arduino IDE
+ setelah selesai masukkan program ke arduino 
+ jalankan program pada simulasi dan cobakan dengan modul

3. Rangkaian Simulasi dan Prinsip Kerja  [Kembali]

Rangkaian Simulasi
 

Prinsip Kerja

Dalam susunan ini, terdapat dua Arduino yang saling berkomunikasi, yaitu master dan slave. Peran utama Arduino master adalah mengirimkan pesan yang dimasukkan melalui keypad, sementara Arduino slave bertugas menerima pesan tersebut dan menampilkannya pada layar LCD. Komunikasi antara keduanya menggunakan teknologi I2C, memungkinkan pertukaran data digital. Arduino master menginisialisasi komunikasi I2C dengan memanggil fungsi 'Wire.begin()', menandakan perannya sebagai pengendali utama. Di sisi lain, Arduino slave juga menginisialisasi komunikasi I2C, namun dengan peran sebagai penerima dengan alamat I2C tertentu. Ketika Arduino slave menerima data melalui jalur I2C dari master, fungsi 'receiveEvent' secara otomatis dipanggil, mengizinkan Arduino slave untuk membaca karakter yang diterima dan menampilkannya pada layar LCD. Dengan cara ini, data dapat diantar dari Arduino master ke slave melalui jalur I2C, memungkinkan tampilan pesan yang sesuai pada layar LCD oleh Arduino slave.

4. Flowchart dan Listing Program [Kembali]

Flowchart
 
Master

http://www.plantuml.com/plantuml/png/LO-ngiCm34LtVOL6UydqfZnAitSjT7OR9H5DR6CfXFnz5LDekrp4kHpGxKH3qNMPeHxG2kcQdV-7RUAPq6bPoICBkZcbVFQ0s3wcKF19EvwEpA5lHj8BxOU6o0CwmnvreeXk9paaqsvSgBdJoF5QGfI5HJX5zsVMfzyAArN_crBiVvnQ6kG1BD-lnkH1D6NeZDca5m00
 Slave
 http://www.plantuml.com/plantuml/png/PP5DIyGm48Rl-HLpCsLbsHNni4jbGJrwqOFdR3gr0sbI9kcM8lvtyo6sAXJQcVTzvcDwya5n67iZhk0HMx88EGD-xi_EY1o8bOXX761Wfz5xSSYXh8w2Mf1lnBWzupjPULjL43gq80EFM0c0GrQTVK6DT479vVrqGHiYZxQXTjN7EBUqcJeok2hLe56ptEzs1SpoYbsN_ganA0uKoDbVigHewTpqhEnSmKSghZl5eA66F32ZQk9-INX59cMs0qV6MAbpDZvfTUqCtDUml_kxTkIILiFkM29sqsQJlWiOmmJU_EUATo7BXNBUw6RhCJoCx1sdtjSGhN6UnIM-RHDJm3nhcIJr_bnkbVpBhtQ3ECN4s9il

Listing Program:
 
// Master
#include <Keypad.h> // Library untuk keypad
#include <Wire.h>   // Library untuk I2C communication

// Deklarasi jumlah baris dan kolom keypad beserta karakternya
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
  {'A', 'B', 'C'},
  {'D', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};

// Pin yang digunakan untuk menghubungkan keypad dengan Arduino
char rowPins[ROWS] = {9, 8, 7, 6};
char colPins[COLS] = {5, 4, 3};

// Inisialisasi objek Keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

void setup() {
  Wire.begin(); // Memulai komunikasi I2C
}

void loop() {
  // Mendapatkan karakter yang ditekan pada keypad
  char key = keypad.getKey();
  if (key) {
    // Mengirim karakter melalui komunikasi I2C
    Wire.beginTransmission(4); // Mulai transmisi ke perangkat dengan alamat #4
    Wire.write(key);
    Wire.endTransmission(); // Berhenti transmisi
  }
}

// Slave Versi Biasa
#include <LiquidCrystal.h>
#include <Wire.h>

// Inisialisasi objek lcd dengan pin yang sesuai
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// Variabel untuk menyimpan posisi kolom dan baris saat ini
int col = 0; // Kolom saat ini (dimulai dari 0)
int row = 0; // Baris saat ini (dimulai dari 0)

void setup() {
  // Mulai LCD dengan ukuran 16x2
  lcd.begin(16, 2);
 
  // Mulai komunikasi dengan bus I2C dengan alamat #4
  Wire.begin(4);
 
  // Daftarkan fungsi receiveEvent() sebagai event ketika data diterima dari master
  Wire.onReceive(receiveEvent);
 
  // Mulai komunikasi serial dengan kecepatan 9600 bps
  Serial.begin(9600);
}

void loop() {
  // Tunda eksekusi program selama 100 milidetik
  delay(100);
}

// Fungsi yang dieksekusi ketika data diterima dari master
void receiveEvent(int howMany) {
  // Baca data yang diterima sebagai karakter
  char c = Wire.read();
 
  // Tampilkan karakter yang diterima melalui komunikasi serial
  Serial.println(c);
 
  // Periksa apakah posisi kolom sudah melebihi batas LCD
  if (col >= 16) {
    col = 0; // Reset ke posisi kolom awal
    row++; // Pindah ke baris berikutnya
    
    // Periksa apakah sudah mencapai batas baris LCD
    if (row >= 2) {
      row = 0; // Kembali ke baris awal
    }
    
    // Set posisi kursor LCD ke posisi baru
    lcd.setCursor(col, row);
  }

  // Tampilkan karakter yang diterima ke LCD
  lcd.write(c);
 
  // Pindah ke kolom berikutnya
  col++;
}



5. Kondisi [Kembali]

"Key A - D menampilkan huruf A - D secara berurut, huruf yang ditampilkan mengalami scroll ke kanan pada kolom pertama"


    Download HTML
    Download Rangkaian
   
Download Program
   
Download Video Simulasi
    Download Datasheet Keypad
    Download Datasheet LCD
    
Download Datasheet Arduino Uno
   
Download Datasheet Potensiometer
   

 











LA M3P1

 



Percobaan I
Komunikasi UART Menggunakan Arduino

1. Foto Hardware dan Diagram Blok [Kembali]

Hardware   

1. Arduino Uno



        2. Push Button




      3. LED

Diagram Blok:



2. Prosedur Percobaan  [Kembali]

Rangkai semua komponen 
+ buat program di aplikasi arduino IDE
+ setelah selesai masukkan program ke arduino 
+ jalankan program pada simulasi dan cobakan dengan modul

3. Rangkaian Simulasi dan Prinsip Kerja  [Kembali]

Rangkaian Simulasi
 

Prinsip Kerja

Sistem ini melibatkan dua Arduino, dengan satu berperan sebagai master dan yang lainnya sebagai slave. Master bertugas mengirimkan data yang merepresentasikan keadaan switch, di mana angka 1 menandakan switch aktif dan angka 0 menandakan switch nonaktif, melalui jalur komunikasi serial. Data ini diterima oleh slave melalui pin RX, diubah menjadi nilai digital, dan digunakan untuk mengontrol penyalanan LED. Setiap nilai 1 yang diterima oleh slave akan menyebabkan LED tertentu menyala, dengan setiap LED berikutnya memerlukan pengaktifan button sebelumnya, sehingga memberikan kontrol jarak jauh bagi master terhadap penyalanan LED pada slave.

4. Flowchart dan Listing Program [Kembali]

Flowchart
 
Master

http://www.plantuml.com/plantuml/png/TTC_JyCm40NmtP_YjgPZ_rUjAXKs1183I8p8XMjxr76Ys0VYs-DM4Mx2O_BPyVkzBDw6Q9kefJENmQpkl0InJe8DGa_Sf7bjLZTH6wh5a_XQuskjpcbDwgEUA5RbhagNlexYc8hOA0yDqUhMlbbAQjJmUuT8zbJibhJPqCFZov3YaJqLtnpEaHIwbqPA6Ym7T68ApdxoESGkS5hQz0Adh_EBRlvAQ8qvDhhAlAza9qipBFMjMTS2MkjDiVTNd08ncprrWbNaJe0Bv6oFiOtrCTAndnj6kE6_ZX7ko2rK-0e2p-eF1mKX_ovxWyx02TpdNPxpbDVs5oZm1tjxMflquVAoJ8XLRRPfcrxh3m00
 Slave
 http://www.plantuml.com/plantuml/png/XTHDJiCm40NWlKynkxRB_bUDAWg21H8W9BZ0YBYjSUf6yLYejyU92qXFTTYDHtxVyoRPUk56mh5ItQ3MZyvumvNnx0szwIREXLhVIcYeDevEGUeW59m4IqyFzuNwEfXAqr2Qe4UAQFqQCzOpSSsM3yGbKyd2v3kBpkps9BhnkZHyKyI4sT7mp6qsfk_uWwdMdjqbqDv8Tz9siw71U30YEMZtbul9bpDNRDcrhw9nYkdAwsv0OGB2DMFI6g2WCxtge3IzI6YXDijewCrQBoEYES-QgCwJcdLHNlJ8Q2-ItQkZl-priM693TYHQLbXopyzA-pvQQAXc99jndWFRhyFLxEkD3lLjyKTRl0C9vZJ16-6DwOxlolo-bCxjaMxUcOnjliyZu7JBo1Ux_u2oikfLjju3CVg6m00

Listing Program:
 
//MASTER
#define DS1 2
#define DS2 3
#define DS3 4
#define DS4 5
#define DS5 6
#define DS6 7
#define DS7 8
#define DS8 9

bool b1, b2, b3, b4, b5, b6, b7, b8;

void setup() {
  Serial.begin(9600);
  pinMode(DS1, INPUT_PULLUP);
  pinMode(DS2, INPUT_PULLUP);
  pinMode(DS3, INPUT_PULLUP);
  pinMode(DS4, INPUT_PULLUP);
  pinMode(DS5, INPUT_PULLUP);
  pinMode(DS6, INPUT_PULLUP);
  pinMode(DS7, INPUT_PULLUP);
  pinMode(DS8, INPUT_PULLUP);
}

void loop() {
  b8 = digitalRead(DS8);
  b7 = digitalRead(DS7);
  b6 = digitalRead(DS6);
  b5 = digitalRead(DS5);
  b4 = digitalRead(DS4);
  b3 = digitalRead(DS3);
  b2 = digitalRead(DS2);
  b1 = digitalRead(DS1);

  // Hidupkan LED sesuai dengan tombol yang ditekan
  if (b8 == LOW) {
    Serial.write('8');
  } else if (b7 == LOW) {
    Serial.write('7');
  } else if (b6 == LOW) {
    Serial.write('6');
  } else if (b5 == LOW) {
    Serial.write('5');
  } else if (b4 == LOW) {
    Serial.write('4');
  } else if (b3 == LOW) {
    Serial.write('3');
  } else if (b2 == LOW) {
    Serial.write('2');
  } else if (b1 == LOW) {
    Serial.write('1');
  }
  delay(20);
}

// Slave
int led[] = {2, 3, 4, 5, 6, 7, 8, 9};
char message;

void setup() {
  Serial.begin(9600);
  for (int i = 0; i < 8; i++) {
    pinMode(led[i], OUTPUT);
  }
}

void loop() {
  if (Serial.available()) {
    message = Serial.read();
    switch (message) {
      case '1':
        digitalWrite(led[0], HIGH);
        break;
      case '2':
        digitalWrite(led[1], HIGH);
        break;
      case '3':
        digitalWrite(led[2], HIGH);
        break;
      case '4':
        digitalWrite(led[3], HIGH);
        break;
      case '5':
        digitalWrite(led[4], HIGH);
        break;
      case '6':
        digitalWrite(led[5], HIGH);
        break;
      case '7':
        digitalWrite(led[6], HIGH);
        break;
      case '8':
        digitalWrite(led[7], HIGH);
        break;
    }
  }
 
  delay(20);

  for (int i = 0; i < 8; i++) {
    digitalWrite(led[i], LOW);
  }
}


5. Kondisi [Kembali]

"Semua Switch dalam kondisi Pull-down, 7 switch mengaktifkan 1 led sementara 4 switch mengaktifkan 2 led"


    Download HTML
    Download Rangkaian
   
Download Program
   
Download Video Simulasi
    Download Datasheet Push Button
    
Download Datasheet Arduino Uno
   
Download Datasheet LED
   

 











TP M3P3K6

 



Percobaan 3
Komunikasi I2C Menggunakan Arduino

1. Foto Hardware dan Diagram Blok [Kembali]

Hardware   

1. Arduino Uno


        2. Keypad




      3. LCD

        4. Potensiometer




       5. Power Supply


     6. Ground


Diagram Blok:

2. Prosedur Percobaan  [Kembali]

Rangkai semua komponen 
+ buat program di aplikasi arduino IDE
+ setelah selesai masukkan program ke arduino 
+ jalankan program pada simulasi dan cobakan dengan modul

3. Rangkaian Simulasi dan Prinsip Kerja  [Kembali]

Rangkaian Simulasi
 

Prinsip Kerja

Dalam susunan ini, terdapat dua Arduino yang saling berkomunikasi, yaitu master dan slave. Peran utama Arduino master adalah mengirimkan pesan yang dimasukkan melalui keypad, sementara Arduino slave bertugas menerima pesan tersebut dan menampilkannya pada layar LCD. Komunikasi antara keduanya menggunakan teknologi I2C, memungkinkan pertukaran data digital. Arduino master menginisialisasi komunikasi I2C dengan memanggil fungsi 'Wire.begin()', menandakan perannya sebagai pengendali utama. Di sisi lain, Arduino slave juga menginisialisasi komunikasi I2C, namun dengan peran sebagai penerima dengan alamat I2C tertentu. Ketika Arduino slave menerima data melalui jalur I2C dari master, fungsi 'receiveEvent' secara otomatis dipanggil, mengizinkan Arduino slave untuk membaca karakter yang diterima dan menampilkannya pada layar LCD. Dengan cara ini, data dapat diantar dari Arduino master ke slave melalui jalur I2C, memungkinkan tampilan pesan yang sesuai pada layar LCD oleh Arduino slave.

4. Flowchart dan Listing Program [Kembali]

Flowchart
 
Master

http://www.plantuml.com/plantuml/png/LO-ngiCm34LtVOL6UydqfZnAitSjT7OR9H5DR6CfXFnz5LDekrp4kHpGxKH3qNMPeHxG2kcQdV-7RUAPq6bPoICBkZcbVFQ0s3wcKF19EvwEpA5lHj8BxOU6o0CwmnvreeXk9paaqsvSgBdJoF5QGfI5HJX5zsVMfzyAArN_crBiVvnQ6kG1BD-lnkH1D6NeZDca5m00
 Slave
 http://www.plantuml.com/plantuml/png/PP5DIyGm48Rl-HLpCsLbsHNni4jbGJrwqOFdR3gr0sbI9kcM8lvtyo6sAXJQcVTzvcDwya5n67iZhk0HMx88EGD-xi_EY1o8bOXX761Wfz5xSSYXh8w2Mf1lnBWzupjPULjL43gq80EFM0c0GrQTVK6DT479vVrqGHiYZxQXTjN7EBUqcJeok2hLe56ptEzs1SpoYbsN_ganA0uKoDbVigHewTpqhEnSmKSghZl5eA66F32ZQk9-INX59cMs0qV6MAbpDZvfTUqCtDUml_kxTkIILiFkM29sqsQJlWiOmmJU_EUATo7BXNBUw6RhCJoCx1sdtjSGhN6UnIM-RHDJm3nhcIJr_bnkbVpBhtQ3ECN4s9il

Listing Program:
 
// Master
#include <Keypad.h> // Library untuk keypad
#include <Wire.h>   // Library untuk I2C communication

// Deklarasi jumlah baris dan kolom keypad beserta karakternya
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
  {'A', 'B', 'C'},
  {'D', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};

// Pin yang digunakan untuk menghubungkan keypad dengan Arduino
char rowPins[ROWS] = {9, 8, 7, 6};
char colPins[COLS] = {5, 4, 3};

// Inisialisasi objek Keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

void setup() {
  Wire.begin(); // Memulai komunikasi I2C
}

void loop() {
  // Mendapatkan karakter yang ditekan pada keypad
  char key = keypad.getKey();
  if (key) {
    // Mengirim karakter melalui komunikasi I2C
    Wire.beginTransmission(4); // Mulai transmisi ke perangkat dengan alamat #4
    Wire.write(key);
    Wire.endTransmission(); // Berhenti transmisi
  }
}

// Slave Versi Biasa
#include <LiquidCrystal.h>
#include <Wire.h>

// Inisialisasi objek lcd dengan pin yang sesuai
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// Variabel untuk menyimpan posisi kolom dan baris saat ini
int col = 0; // Kolom saat ini (dimulai dari 0)
int row = 0; // Baris saat ini (dimulai dari 0)

void setup() {
  // Mulai LCD dengan ukuran 16x2
  lcd.begin(16, 2);
 
  // Mulai komunikasi dengan bus I2C dengan alamat #4
  Wire.begin(4);
 
  // Daftarkan fungsi receiveEvent() sebagai event ketika data diterima dari master
  Wire.onReceive(receiveEvent);
 
  // Mulai komunikasi serial dengan kecepatan 9600 bps
  Serial.begin(9600);
}

void loop() {
  // Tunda eksekusi program selama 100 milidetik
  delay(100);
}

// Fungsi yang dieksekusi ketika data diterima dari master
void receiveEvent(int howMany) {
  // Baca data yang diterima sebagai karakter
  char c = Wire.read();
 
  // Tampilkan karakter yang diterima melalui komunikasi serial
  Serial.println(c);
 
  // Periksa apakah posisi kolom sudah melebihi batas LCD
  if (col >= 16) {
    col = 0; // Reset ke posisi kolom awal
    row++; // Pindah ke baris berikutnya
    
    // Periksa apakah sudah mencapai batas baris LCD
    if (row >= 2) {
      row = 0; // Kembali ke baris awal
    }
    
    // Set posisi kursor LCD ke posisi baru
    lcd.setCursor(col, row);
  }

  // Tampilkan karakter yang diterima ke LCD
  lcd.write(c);
 
  // Pindah ke kolom berikutnya
  col++;
}



5. Kondisi [Kembali]

"Key A - D menampilkan huruf A - D secara berurut, huruf yang ditampilkan mengalami scroll ke kanan pada kolom pertama"


    Download HTML
    Download Rangkaian
   
Download Program
   
Download Video Simulasi
    Download Datasheet Keypad
    Download Datasheet LCD
    
Download Datasheet Arduino Uno
   
Download Datasheet Potensiometer
   

 











Sistem Otomatis Lampu Belajar dan Kipas Pendingin Berbasis Kehadiran dan Suara

[menuju akhir] [KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1. Pendahuluan 2. Tujuan 3. Alat dan Bahan 4. Dasar Teori 5. Percob...