Laporan Akhir M3

 


            Percobaan 3

                 Komunikasi I2C Menggunakan Arduino


1. Foto Hardware dan Diagram Blok [Kembali]

       
  1. Arduino Uno



        2. Keypad




      3. LCD

     

Diagram Blok:




2. Prosedur Percobaan  [Kembali]

Rangkai semua komponen 
+ Buka Arduino IDE dan masukan listing Program
+ Upload program ke arduino
+ jalankan program pada simulasi dan cobakan dengan modul



Prinsip Kerja

    Pada percobaan ini masih tetap menggunakan 2 tipe arduino yang bertindak sebagai Master (pengirim data) dan Slave (penerima data) dan untuk arduino master terhubung dengan keypad sebagai input dan arduino slave terhubung dengan LCD 16 x 2 sebagai output dan jenis komunikasi yang digunakan pada percobaan 3 ini adalah I2C

    Pin yang digunakan untuk percobaan ini adalah SDA dan SCL, keypad yang diketahui sebagai input dapat berguna untuk memasukkan karakter yang kita inginkan sesuai kondisi yang diminta dan karakter tersebut akan dimunculkan/ ditampilkan pada LCD yang bertindak sebagai output pada percobaan ini

    Dan karena tipe LCD yang digunakan adalah 16 x 2 maka hanya dapat menampilkan maksimal 16 karakter dan jika karakter 17 ditambahkan atau dimasukkan maka karakter ke-1 atau pertama akan terhapus dan tergantikan oleh karakter 17 diakhir.

4. Flowchart dan Listing Program [Kembali]

Master Arduino:


Slave Arduino: 

Listing Program:

Master
// 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

// 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]

Sama seperti pada kondisi TP, LCD akan menampilkan karakter yang ditekan pada keypad sebagai input. 


᭒ HTML↠ klik disini

᭒ Rangkaian ↠ klik disini

᭒ Video Percobaan↠ klik disini

᭒ Program Master↠ klik disini

᭒ Program Slave↠ klik disini

᭒ Datasheet Arduino↠ klik disini

᭒ Datasheet LCD↠ klik disini

᭒ Datasheet Keypad↠ klik disini



Laporan Akhir M3

 [KEMBALI KE MENU SEBELUMNYA]


Percobaan 1

 Komunikasi UART Menggunakan Arduino


1. Foto Hardware dan Diagram Blok [Kembali]

       
  1. Arduino Uno



        2. Push Button




      3. LED



     

Diagram Blok:



2. Prosedur Percobaan  [Kembali]

Rangkai semua komponen 
+ Buka Arduino IDE dan masukan listing Program
+ Upload program ke arduino
+ jalankan program pada simulasi dan cobakan dengan modul




Prinsip Kerja

    Pada percobaan ini, terdapat 2 tipe arduino yang dipakai yakni, sebagai master (pengirim data) dan slave sebagai (penerima data). Jenis komunikasi yang digunakan pada percobaan ini adalah UART (Universal Asynchronous Receiver Transmitter).

    Pada arduino master pin Tx yang berguna untuk mengirimkan data dan nantinya pin Rx pada arduino slave akan menerima datanya dengan komunikasi UART yang digunakan. Pada proses pengiriman/ penguploadan data pada rangkaian percobaan wire antara Tx ( pin 1 ) dan Rx ( pin 0 ) harus diputus terlebih dahulu dan akan dihubungkan kembali wire tersebut setelah penguploadan berhasil atau selesai. 

    Dengan demikian, rangkaian ini memungkinkan master untuk mengontrol LED pada slave dari jarak jauh.  Master mengirimkan instruksi digital melalui UART, dan slave menerjemahkan instruksi tersebut untuk menyalakan LED sesuai dengan pola yang telah ditentukan.

    Data dikirimkan secara serial dan data yang dikirimkan berbentuk biner dikirim dengan penambahan start bit, parity bit dan stop bit yang nantinya akan terbentuk menjadi satu paket data. Setelah sampai pada Rx akan terjadi pengkonversian, kesalahan data dan penghapusan bit tambahan. Lalu, output/ LED akan bisa menyala sesuai kondisi yang diinginkan.

4. Flowchart dan Listing Program [Kembali]


Master

Slave

Listing Program:

Master 

// Definisikan koneksi pin untuk tombol-tombol
#define DS1 2
#define DS2 3
#define DS3 4
#define DS4 5
#define DS5 6
#define DS6 7
#define DS7 8
#define DS8 9

// Inisialisasi variabel boolean untuk status tombol
bool b1,b2,b3,b4,b5,b6,b7,b8;

void setup() 
 // Mulai komunikasi serial dengan kecepatan 9600 bit per detik
 Serial.begin(9600);
 
 // Setel pin-pin digital sebagai input
 pinMode(DS1, INPUT);
 pinMode(DS2, INPUT);
 pinMode(DS3, INPUT);
 pinMode(DS4, INPUT);
 pinMode(DS5, INPUT);
 pinMode(DS6, INPUT);
 pinMode(DS7, INPUT);
 pinMode(DS8, INPUT);
}

void loop()
{
 // Baca status dari setiap tombol
 int b8 = digitalRead(DS8);
 int b7 = digitalRead(DS7);
 int b6 = digitalRead(DS6);
 int b5 = digitalRead(DS5);
 int b4 = digitalRead(DS4);
 int b3 = digitalRead(DS3);
 int b2 = digitalRead(DS2);
 int b1 = digitalRead(DS1);
 
 // Periksa status dari setiap tombol dan kirim nomor yang sesuai melalui Serial
 // LOW berarti tombol ditekan untuk DS8 karena konfigurasi resistor pull-up
 if (b8 == HIGH) 
 {
  Serial.write('8'); // Kirim '8' melalui Serial jika tombol 8 ditekan
 }
 else if (b7 == HIGH) // Untuk tombol lain, HIGH berarti tombol ditekan
 {
  Serial.write('7'); // Kirim '7' melalui Serial jika tombol 7 ditekan
 }
 else if (b6 == HIGH)
 {
  Serial.write('6'); // Kirim '6' melalui Serial jika tombol 6 ditekan
 }
 else if (b5 == HIGH)
 {
  Serial.write('5'); // Kirim '5' melalui Serial jika tombol 5 ditekan
 }
 else if (b4 == HIGH)
 {
  Serial.write('4'); // Kirim '4' melalui Serial jika tombol 4 ditekan
 }
 else if (b3 == HIGH)
 {
  Serial.write('3'); // Kirim '3' melalui Serial jika tombol 3 ditekan
 }
 else if (b2 == HIGH)
 {
  Serial.write('2'); // Kirim '2' melalui Serial jika tombol 2 ditekan
 }
 else if (b1 == HIGH)
 {
  Serial.write('1'); // Kirim '1' melalui Serial jika tombol 1 ditekan
 }
 
 delay(20); // Tunda sebentar untuk debouncing dan mencegah pembacaan berulang
}

Slave

// Definisi array untuk menyimpan nomor pin LED
int led[] = {2, 3, 4, 5, 6, 7, 8, 9};
char message; // Variabel untuk menyimpan pesan yang diterima

void setup() 
 Serial.begin(9600); // Memulai komunikasi serial dengan kecepatan 9600 bits per detik
 
 // Melakukan iterasi untuk setiap LED dan mengatur sebagai OUTPUT
 for (int i = 0; i < 8; i++)
 {
  pinMode(led[i], OUTPUT);
 }
}

void loop()
{
 if (Serial.available()) // Periksa apakah ada data yang tersedia untuk dibaca dari serial
{
 message = Serial.read(); // Membaca karakter yang diterima dari serial
 
 // Mengecek pesan yang diterima dan menyalakan LED yang sesuai
 if (message == '1')
 {
  digitalWrite(led[0], 1); // Menyalakan LED 1
 }
 else if (message == '2')
 {
  digitalWrite(led[1], 1); // Menyalakan LED 2
 }
 else if (message == '3')
 {
  digitalWrite(led[2], 1); // Menyalakan LED 3
 }
 else if (message == '4')
 {
  digitalWrite(led[3], 1); // Menyalakan LED 4
 }
 else if (message == '5')
 {
  digitalWrite(led[4], 1); // Menyalakan LED 5
 }
 else if (message == '6')
 {
  digitalWrite(led[5], 1); // Menyalakan LED 6
 }
 else if (message == '7')
 {
  digitalWrite(led[6], 1); // Menyalakan LED 7
 }
 else if (message == '8')
 {
  digitalWrite(led[7], 1); // Menyalakan LED 8
 }
}
delay(20); // Tunda sebentar

 // Mematikan semua LED setelah tunda
 digitalWrite(led[0], LOW);
 digitalWrite(led[1], LOW);
 digitalWrite(led[2], LOW);
 digitalWrite(led[3], LOW);
 digitalWrite(led[4], LOW);
 digitalWrite(led[5], LOW);
 digitalWrite(led[6], LOW);
 digitalWrite(led[7], LOW);
}


5. Kondisi [Kembali]

Ketika botton 1 ditekan maka led 1 akan mati sedangkan led lainnya hidup, begitu juga dengan led 2 dan seterusnya.

᭒ HTML↠ klik disini

᭒ Rangkaian ↠ klik disini

᭒ Video Percobaan↠ klik disini

᭒ Program Master↠ klik disini

᭒ Program Slave↠ klik disini

᭒ Datasheet Arduino↠ klik disini

᭒ Datasheet LED↠ klik disini

᭒ Datasheet Push Button ↠ klik disini

    

Ujian Tengah Semester - Soal 3