Jumat, 03 Mei 2024





PERCOBAAN 3
Komunikasi I2C Menggunakan Arduino


1. Prosedur
[Kembali]

  1. Rangkai semua komponen sesuai kondisi yang dipilih
  2. buat program di aplikasi arduino IDE
  3. setelah selesai masukkan program ke arduino (Verify and Upload)
  4. jalankan program pada simulasi dan cobakan sesuai dengan modul dan kondisi
  5. Selesai

2. Hardware dan diagram blok [Kembali]

 a. hardware


1. Modul Arduino Uno
Spesifikasi Arduino

2.  LCD



spesifikasi:

Tampilan 2 baris @ 16 karakter, 5 x 8 pixel
Display controller: HD44780 (standar industri LCD)
Dilengkapi lampu latar warna biru/hijau/kuning
Sudut pandang lebar dengan tingkat kontras yang dapat diatur dan terlihat jelas
Tegangan kerja: 5V DC
Dimensi modul: 80 x 36 x 12 mm
Dimensi layar tampilan: 64,5 mm x 16 mm

3. Keypad



Spesifikasi:

1.Dimensi: Sekitar 70mm x 77mm x 1mm (Panjang x Lebar x Tinggi)
2. Jumlah Tombol: 12 tombol (3 baris x 4 kolom)
3. Bahan: Membrane (Plastik tipis yang sensitif terhadap tekanan)
4. Tipe Tombol: Tegangan rendah (Low Voltage)
5. Konektor: Biasanya menggunakan pin header untuk dipasang ke breadboard atau PCB
6. Kehidupan Tombol: Dalam jutaan kali tekan (bergantung pada kualitas pembuatan)
7. Resistansi Kontak: Biasanya sekitar 100 Ohm
8. Tegangan Maksimum: Biasanya 24V DC
9. Arus Maksimum: Biasanya 10mA per jalur tombol
10. Rentang Suhu: -20°C hingga +60°C
11. Kecepatan Respons: Biasanya dalam mikrodetik (μs)
12. Interface: Matriks 3x4 (Matrix 3x4)
13. Kompatibilitas: Mendukung mikrokontroler, Arduino, Raspberry Pi, dan perangkat elektronik lainnya dengan pin I/O yang sesuai
14. Indikator LED: Beberapa keypad memiliki LED di bawah tombol untuk memberikan tanda visual saat tombol ditekan


Spesifikasi :
  • Tampilan 2 baris @ 16 karakter, 5 x 8 pixel
  • Display controller: HD44780 (standar industri LCD)
  • Dilengkapi lampu latar warna biru/hijau/kuning
  • Sudut pandang lebar dengan tingkat kontras yang dapat diatur dan terlihat jelas
  • Tegangan kerja: 5V DC
  • Dimensi modul: 80 x 36 x 12 mm
  • Dimensi layar tampilan: 64,5 mm x 16 mm


  b. Digram Blok




3. Rangkaian Simulasi dan Prinsip kerja [Kembali]


                  

Prinsip Kerja 

   Dua Arduino terhubung melalui protokol I2C untuk komunikasi. Berikut adalah penjelasan kerja sistem ini:

Pada Arduino master, program diawali dengan mengatur keypad dan I2C. Keypad mendeteksi tekanan tombol dan mengirim nilai yang berkaitan ke Arduino slave melalui I2C, memungkinkan master memberi instruksi ke slave berdasarkan input pengguna.

Dalam loop, master menanti input dari keypad. Saat tombol ditekan, nilai yang berkaitan dikirim ke slave melalui I2C dengan fungsi Wire.beginTransmission(), Wire.write(), dan Wire.endTransmission().

Arduino slave memulai dengan mengatur LCD dan I2C. LCD menampilkan informasi kepada pengguna. Slave menerima data dari master melalui I2C dengan menggunakan library Wire.

Selama setup, slave menginisialisasi LCD dan menetapkan alamat I2C-nya. Fungsi Wire.onReceive() diatur untuk menangani data yang diterima dari master. Saat data tiba, fungsi receiveEvent() dipanggil untuk memprosesnya.

Dalam loop, slave menunggu data dari I2C. Data yang diterima diproses dan ditampilkan pada LCD sesuai program yang ditetapkan.

Ketika slave menerima angka 1 hingga 9, angka itu ditampilkan pada LCD. Jika angka ganjil, ditampilkan di kolom kedua; jika genap, di kolom pertama. Ini memastikan komunikasi efektif antara kedua Arduino dan output yang akurat pada LCD sesuai kondisi yang diprogram.



4. FlowChart [Kembali]

A. Listing Program 

Master

//Master Arduino
#include <Keypad.h>
#include <Wire.h>
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
 {'1', '2', '3'},
 {'4', '5', '6'},
 {'7', '8', '9'},
 {'*', '0', '#'},
};
char rowPins[ROWS] = {13, 12, 11, 10};
char colPins[COLS] = {9, 8, 7};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup()
{
 Wire.begin(); // join i2c bus (address optional for master)
}
//byte x = 0;
void loop(){
 
 char key = keypad.getKey();
 
 if (key) {
 Wire.beginTransmission(4); // transmit to device #4
 Wire.write(key);
 Wire.endTransmission(); // stop transmitting
 }
}

Slave

#include <LiquidCrystal.h>
#include <Wire.h>
LiquidCrystal lcd(13, 12, 6, 5, 4, 3); // Sesuaikan pin sesuai dengan koneksi LCD

int receivedData = 0;

void setup()
{
  lcd.begin(16, 2);
  Wire.begin(4); // join i2c bus with address #4
  Wire.onReceive(receiveEvent); // register event
  Serial.begin(9600); // start serial for output

  lcd.print("Silahkan Tekan");
}

void loop()
{
  delay(100);
}

void receiveEvent(int howMany)
{
  receivedData = Wire.read(); // menerima byte sebagai karakter
  Serial.println(receivedData); // mencetak karakter ke Serial Monitor untuk debug

  if (receivedData >= '1' && receivedData <= '9') {
    int number = receivedData - '0';
    lcd.clear();
    if (number % 2 == 0) {
      lcd.setCursor(0, 0); // angka genap di kolom pertama, baris pertama
    } else {
      lcd.setCursor(0, 1); // angka ganjil di kolom kedua, baris kedua
    }
    lcd.print(number);
  }
}




b. Flowchart

 Master


Slave

5. Video Demo [Kembali]





6. Kondisi [Kembali]

      
Percobaan 3 Komunikasi I2C Menggunakan Arduino


7. Download File [Kembali]

Download HMTL klik disini
Download Simulasi Rangkaian klik disini
Download Video Percobaan klik disini
Download Program Master klik disini
Download  Program Slave klik disini
Download Datasheet ARDUINO UNO klik disini
Download Datasheet Keypad  klik disini
Download Datasheet LCD klik disini






-
  




PERCOBAAN 2
Komunikasi SPI Menggunakan Arduino


1. Prosedur
[Kembali]

  1. Rangkai semua komponen sesuai kondisi yang dipilih
  2. buat program di aplikasi arduino IDE
  3. setelah selesai masukkan program ke arduino (Verify and Upload)
  4. jalankan program pada simulasi dan cobakan sesuai dengan modul dan kondisi
  5. Selesai

2. Hardware dan diagram blok [Kembali]

   a. hardware
                                                                    
1. Dip-SW


Spesifikasi




2. Arduino Uno


Spesifikasi



3. 2 Digit 7-Segment








  b. Digram Blok





3. Rangkaian Simulasi dan Prinsip kerja [Kembali]


Rangkaian Percobaan 

                                       

Prinsip Kerja 

   Dua papan Arduino dihubungkan dalam sebuah rangkaian menggunakan komunikasi SPI, yang melibatkan jalur SCK, MISO, MOSI, dan SS. Arduino yang berperan sebagai master terkoneksi dengan dipswitch untuk input, sementara Arduino slave terhubung ke display seven segment untuk output. Pin I/O digital 2 hingga 9 pada slave terhubung ke seven segment, dan pin I/O digital 2 hingga 7 pada master terhubung ke dipswitch.

Komunikasi dimulai ketika master mengirimkan status dipswitch. Jika dipswitch berada di posisi LOW, master akan mengirim nilai yang berkaitan melalui MOSI ke slave setelah menurunkan sinyal SS. Slave menerima data ini melalui MISO dan menampilkan karakter yang sesuai di seven segment.

Mekanisme kerjanya adalah ketika switch dipswitch diaktifkan, seven segment akan menampilkan angka dari 0 hingga 9. Jika semua switch OFF, maka akan ditampilkan angka 0. Master mengirimkan nilai x, yang merupakan status dari dipswitch, ke slave. Slave kemudian menampilkan karakter pada seven segment berdasarkan nilai yang diterima dari master melalui SPI.


4. FlowChart [Kembali]

A. Listing Program 

//Master
//Master Arduino
#include<SPI.h> //Library for SPI
int dip[] = {2,3,4,5,6,7,8,9};
int dipvalue[] = {};
void setup (){
 Serial.begin(9600); //Starts Serial Communication at Baud Rate 115200
 for(int i = 0; i < 8; i++){
 pinMode(dip[i], INPUT_PULLUP);
 }
 SPI.begin(); //Begins the SPI commnuication
 SPI.setClockDivider(SPI_CLOCK_DIV8); //Sets clock for SPI communication at 8 (16/8=2Mhz)
 digitalWrite(SS,HIGH); // Setting SlaveSelect as HIGH (So master doesnt connnect with
slave)
}
void loop(void){
 byte Mastersend;
 int x = 1;
 for(int i = 0; i < 8; i++){
 dipvalue[i] = digitalRead(dip[i]);
 if(dipvalue[i] == LOW){
 x = dip[i];
 }
 }
 digitalWrite(SS, LOW); //Starts communication with Slave connected to master
 Mastersend = x;
 Serial.println(Mastersend);
 SPI.transfer(Mastersend); //Send the mastersend value to slave also receives value from slave
 delay(1000);
}

//Slave
//Slave Arduino:
#include<SPI.h>
const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
volatile boolean received = false;
volatile byte Slavereceived;
int index;
void setup(){
 Serial.begin(9600);
 for (int i = 0; i < 8; i++) {
 pinMode(segmentPins[i], OUTPUT);
 }
 SPCR |= _BV(SPE); //Turn on SPI in Slave Mode
 SPI.attachInterrupt(); //Interuupt ON is set for SPI commnucation
}
ISR (SPI_STC_vect){ //Inerrrput routine function
 Slavereceived = SPDR; // Value received from master if store in variable slavereceived
 received = true; //Sets received as True
}
void loop(){
 Serial.println(Slavereceived);
 if(received){//Logic to SET LED ON OR OFF depending upon the value recerived from master
 displayCharacter(Slavereceived);
 delay(1000);
 }
}
void displayCharacter(int ch) {
 byte patterns[10][7] = {
 {0, 0, 0, 0, 0, 0, 1}, // 0
 {1, 0, 0, 1, 1, 1, 1}, // 1
 {0, 0, 1, 0, 0, 1, 0}, // 2
 {0, 0, 0, 0, 1, 1, 0}, // 3
 {1, 0, 0, 1, 1, 0, 0}, // 4
 {0, 1, 0, 0, 1, 0, 0}, // 5
 {0, 1, 0, 0, 0, 0, 0}, // 6
 {0, 0, 0, 1, 1, 1, 1}, // 7
 {0, 0, 0, 0, 0, 0, 0}, // 8
 {0, 0, 0, 0, 1, 0, 0} // 9
 };
if ((ch >= 0 && ch <= 9)) {
 // Get the digit index (0-9) from the character
 int index = ch;
 // Write the pattern to the segment pins
 for (int i = 0; i < 7; i++) {
 digitalWrite(segmentPins[i], patterns[index][i]);
 }
 }
}

B. Flowchart







5. Video Demo [Kembali]





6. Kondisi [Kembali]

        Percobaan  2 Komunikasi SPI Menggunakan Arduino


7. Download File [Kembali]

Download HMTL klik disini
Download Program Master klik disini
Download Program Slave klik disini
Download Video Demo klik disini
Download Datasheet ARDUINO UNO klik disini
Download Datasheet DipSwitch klik disini
Download Datasheet 2 Digit 7-Segment klik disini






-
  

Mikro 2024 Modul  4 [KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI     1. Pendahuluan     2. Tujuan     3. Alat dan Bahan     4. Dasar...