Jumat, 10 Mei 2024

Laporan Akhir 2 M3

 



Laporan Modul 3
(Percobaan 4)

1. Prosedur 
[Kembali]

1. Siapkan semua komponen yang akan di rangkai
2. Rangkai rangkaian sesuai dengan modul
3. Buat program di arduino di software Arduino IDE.
4. Compile program tersebut dan upload ke dalam hardware arduino
5. Setelah program selesai di upload, jalankan rangkaian 
6. Finish

2. Hardware dan Diagram Blok [Kembali]

Hardware :

1. Arduino Uno




2. Keypad




3. Kabel Jumper


 4. Breadboard




5. LCD




Diagram Blok  :



3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi Setelah di Running:



Prinsip Kerja : 

Pada percobaan 4, disini akan digunakan 2 buah Arduino, sebuah keypad dan juga sebuah LCD. Dan pada percobaan ini akan digunakan metode komunikasi UART (Universal Asynchronous Receiver/Transmitter) dimana merupakan komunikasi asinkron yang digunakan untuk mentransfer data serial antara dua perangkat tanpa memerlukan clock eksternal. Biasanya digunakan untuk komunikasi jarak pendek atau dalam satu papan sirkuit (on-board communication).

Disini salah satu Arduino akan digunakan sebagai perangkat Master dan Arduino lainnya sebagai perangkat Slave. Keypad akan dijadikan sebagai input dan LCD sebagai output. Pada rangkaian Keypad akan dihubungkan dengan perangkat Master, lalu perangkat master akan dihubungkan dengan perangkat slave dan terakhir LCD akan dihubungkan sebagai output tampilan.

Pada perangkat Master akan menerima input data dari keypad, setiap kali tombol keypad ditekan maka perangkat master akan membaca setiap kali ada inputan dari keypad tersebut dan akan dikirimkan data secara serial kepada perangkat Slave. Selanjutnya perangkat Slave akan menerima data dari perangkat Master dan data tersebut akan dibaca oleh perangkat Slave dan akan langsung melakukan intruksi yang ada pada program sesuai dengan data yang diterima oleh perangkat Slave dan ditampilkan pada output berupa LCD


4. Flowchart dan Listing Program [Kembali]

Flowchart :




Listing Program :

Program Master
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 3;
// Array to represent keys on keypad
char hexaKeys[ROWS][COLS] = {
 {'1', '2', '3'},
 {'4', '5', '6'},
 {'7', '8', '9'},
 {'*', '0', '#'}
};
byte rowPins[ROWS] = {7, 6, 5, 4};
byte colPins[COLS] = {8, 9 , 10};
// Create keypad object
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup()
{
Serial.begin(9600);
}
void loop()
{
 char customKey = customKeypad.getKey();
 if (customKey)
 {
 Serial.write(customKey);
 }
 delay(20);
}

Program Slave
#include <LiquidCrystal.h>
LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);
char message;
void setup()
{
 Serial.begin(9600);
 lcd.begin(16, 2);
}
void loop()
{
 lcd.setCursor(0, 0);
 lcd.print("Tombol :");
 if (Serial.available())

 {
 message = Serial.read();
 if (message)
 {
 lcd.print(message);
 }
}
}


5. Kondisi [Kembali]

Percobaan 4
Komunikasi UART menggunakan Arduino

6. Video Simulasi [Kembali]





7. Download File [Kembali]

Download HTML Klik Disini

Download Video Percobaan Klik Disini

Download Kodingan Program Klik Disini

Download Datasheet Arduino Klik Disini

Download Datasheet Keypad Klik Disini

Download Datasheet LCD Klik Disini





Laporan Akhir 1 M3

 



Laporan Modul 3
(Percobaan 2)

1. Prosedur 
[Kembali]

1. Siapkan semua komponen yang akan di rangkai
2. Rangkai rangkaian sesuai dengan modul
3. Buat program di arduino di software Arduino IDE.
4. Compile program tersebut dan upload ke dalam hardware arduino
5. Setelah program selesai di upload, jalankan rangkaian 
6. Finish

2. Hardware dan Diagram Blok [Kembali]

Hardware :

1. Arduino Uno




2. 7-Segment, 2 digit




3. Kabel Jumper


 4. Breadboard




5. Dip Switch





Diagram Blok  :



3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi Setelah di Running:



Prinsip Kerja : 

Pada percobaan praktikum kali ini, disini digunakan 2 buah arduino, sebuah Dipswitch dan sebuah 7-Segment dengan 2 digit. Untuk metode komunikasi yang digunakan pada percobaan ini adalah SPI (Serial Peripheral Interface) yang mana digunakan untuk mentransfer data serial antara satu perangkat Master dengan satu atau lebih perangkat Slave

Disini Arduino pertama digunakan sebagai perangkat Master, dan Arduino kedua digunakan sebagai perangkat Slave lalu 7-Segment sebagai output tampilan dan Dip-Switch sebagai inputan. Dipswitch dihubungkan dengan perangkat Master lalu dari peragkat master dihubungkan dengan perangkat Slave dan terakhir untuk 7-Segment dihubungkan dengan perangkat Slave. 

Arduino Master akan menerima Inputan data dari Dipswitch (dalam program data yaitu berupa berapa banyak saklar yang aktif pada Dipswitch), data tersebut akan ditransfer ke Arduino Uno yang menjadi perangkat Slave. Jika terdapat DIP switch yang aktif, maka seven segment akan menampilkan angka yang sesuai dengan data yang diterima pada 7-Segment

  

4. Flowchart dan Listing Program [Kembali]

Flowchart :






Listing Program :

Program Master
#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);
}


Program Slave
#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]);
 }
 }
}

5. Kondisi [Kembali]

Percobaan 2
Komunikasi SPI menggunakan Arduino

6. Video Simulasi [Kembali]





7. Download File [Kembali]

Download HTML Klik Disini

Download Video Percobaan Klik Disini

Download Kodingan Program Klik Disini

Download Datasheet Arduino Klik Disini

Download Datasheet Dip Switch Klik Disini

Download Datasheet 7-segment Klik Disini






Senin, 06 Mei 2024

Tugas Pendahuluan 2 M3




 Modul 3
(Percobaan 2 Kondisi 3)

1. Prosedur
[Kembali]

1. Siapkan semua komponen yang akan di rangkai pada proteus
2. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
3. Buat program di arduino di software Arduino IDE.
4. Compile program tersebut dan upload ke dalam arduino pada proteus
5. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
6. Finish

2. Hardware dan Diagram Blok [Kembali]

Hardware :

1.  Arduino Uno




2. Power Supply



3. Dip Switch




4. 7-Segment



Diagram Blok  :




3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi Sebelum dirunning:




Rangkaian Simulasi Setelah dirunning:



Prinsip Kerja : 

Dalam eksperimen ini, kami menggunakan dip switch sebagai input dan seven segment sebagai output. Terdapat dua perangkat Arduino yang digunakan, di mana Arduino pertama berperan sebagai master dan Arduino kedua sebagai slave.

MASTER:

  1. Inisialisasi: Pada bagian setup(), komunikasi serial dimulai dengan kecepatan baud rate 9600. Selain itu, setiap pin input diprogram dengan mode INPUT_PULLUP untuk mengaktifkan resistor pull-up internal, sehingga ketika saklar terhubung, nilainya adalah LOW.

  2. Pembacaan Saklar: Di dalam loop(), program membaca status saklar yang terhubung ke pin input. Ketika saklar aktif (terhubung), nilai LOW akan terdeteksi, dan nilai indeks saklar yang aktif disimpan dalam variabel x. Variabel activeSwitches digunakan untuk menghitung jumlah saklar yang aktif pada saat itu.

  3. Komunikasi SPI: Jika jumlah saklar aktif adalah 3, maka program akan mengirimkan pesan ke perangkat slave melalui komunikasi SPI. Pesan yang dikirimkan adalah angka 3, yang kemudian ditampilkan pada perangkat slave sebagai respons atas kondisi saklar yang aktif. Kemudian terdapat logika yang akan mengatur tampilan di slave berdasarkan nilai pesan yang diterima.

  4. Shift Bit: Jika jumlah saklar aktif adalah 4, program akan mengirimkan pesan berupa angka 4 ke perangkat slave melalui SPI. Namun, di sini, bit pesan akan di-shift kiri sebanyak 4 kali sebelum dikirimkan, yang artinya digit kedua akan diatur sebagai 4. Ini memungkinkan penggunaan digit pertama untuk menunjukkan jumlah saklar yang aktif dari 0 hingga 5.

Dengan cara ini, perangkat master mampu mendeteksi kondisi saklar yang aktif dan mengirimkan pesan ke perangkat slave untuk menampilkan respons yang sesuai.

SLAVE:

  1. Inisialisasi: Pada bagian setup(), komunikasi serial dimulai dengan kecepatan baud rate 9600. Selain itu, pin-pins yang terhubung ke segmen-segmen dari display tujuh segmen diatur sebagai output.

  2. Mode SPI Slave: Perangkat diatur dalam mode SPI slave. Ketika terjadi interupsi SPI (SPI_STC_vect), data yang diterima dari perangkat master disimpan dalam variabel Slavereceived.

  3. Interupsi: Fungsi ISR (Interrupt Service Routine) dipanggil ketika data diterima dari perangkat master melalui SPI. Pada fungsi ISR, nilai yang diterima dari master disimpan dan flag received diatur menjadi true.

  4. Logika Kontrol: Pada fungsi loop(), program memeriksa apakah data telah diterima dari perangkat master. Jika iya, maka nilai yang diterima diuji. Jika nilai adalah 3, maka display tujuh segmen akan menampilkan angka dari 0 hingga 5 secara berurutan, dengan digit kedua yang berubah setelah mencapai angka 5. Jika nilai adalah 4, maka display akan menampilkan angka dari 0 hingga 5 secara berurutan, tetapi dengan digit pertama yang berubah setelah mencapai angka 5. Jika nilai tidak 3 atau 4, display akan menampilkan angka dari 0 hingga 9 secara berurutan, dengan digit pertama yang berubah setelah mencapai angka 5.

  5. Tampilan Karakter: Fungsi displayCharacter() mengubah karakter numerik menjadi pola bit yang sesuai untuk menyalakan segmen-segmen pada display tujuh segmen.

Dengan demikian, perangkat ini bertindak sebagai slave SPI yang menerima instruksi dari perangkat master melalui SPI dan menampilkan informasi yang sesuai pada display tujuh segmen berdasarkan instruksi yang diterima.


4. Flowchart dan Listing Program [Kembali]

Flowchart :







Listing Program :

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;
  int activeSwitches = 0; // variabel untuk menghitung jumlah saklar yang aktif

  // Membaca status saklar dan menghitung berapa yang aktif
  for (int i = 0; i < 8; i++) {
    dipvalue[i] = digitalRead(dip[i]);
    if (dipvalue[i] == LOW) {
      x = dip[i];
      activeSwitches++;
    }
  }

  // Jika 3 saklar aktif, tampilkan counter 0-5 di digit pertama, kemudian counting 6-9 di digit kedua
  if (activeSwitches == 3) {
    // Tampilkan counter 0-5 di digit pertama
      digitalWrite(SS, LOW);
      Mastersend = 3;
      Serial.println(Mastersend);
      SPI.transfer(Mastersend);
      delay(100);
    // Lanjutkan counting dari 6-9 di digit kedua
    for (int i = 6; i <= 9; i++) {
     digitalWrite(SS, LOW);
     Mastersend = i;
      Serial.println(Mastersend);
      SPI.transfer(Mastersend);
      delay(100);
    }
  //}
 
  // Jika 4 saklar aktif, tampilkan counter 0-5 di digit kedua, kemudian counting 6-9 di digit pertama
  else if (activeSwitches == 4) {
    // Tampilkan counter 0-5 di digit kedua
      digitalWrite(SS, LOW);
      Mastersend = 4; // Shift 4 bit ke kiri untuk menetapkan digit kedua
      Serial.println(Mastersend);
      SPI.transfer(Mastersend);
      delay(100);
    // Lanjutkan counting dari 6-9 di digit pertama
    for (int i = 6; i <= 9; i++) {
      digitalWrite(SS, LOW);
      Mastersend = i << 4; // Shift 4 bit ke kiri untuk menetapkan digit kedua
      Serial.println(Mastersend);
      SPI.transfer(Mastersend);
      delay(100);
    //}
  }
}


Program Slave :

#include <SPI.h>

const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
volatile boolean received = false;
volatile byte Slavereceived;
int index;
int dg1 = A1;
int dg2 = A0;

void setup() {
  Serial.begin(9600);
  for (int i = 0; i < 8; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }
  pinMode(dg1, OUTPUT);
  pinMode(dg2, OUTPUT);
  SPCR |= _BV(SPE); // Turn on SPI in Slave Mode
  SPI.attachInterrupt(); // Interrupt ON is set for SPI communication
}

ISR (SPI_STC_vect) { // Interrupt routine function
  Slavereceived = SPDR; // Value received from master is stored in variable Slavereceived
  received = true; // Sets received as True
}

void loop() {
  if (received) { // Logic to SET LED ON OR OFF depending upon the value received from master
    Serial.println(Slavereceived);
    if (Slavereceived == 3) {
      for(int i=0;i<=9;i++){
        if(i <= 5){
          digitalWrite(dg1,HIGH);
          digitalWrite(dg2,LOW);
          displayCharacter(i);
          delay (100);
        }
        else{
          digitalWrite(dg2, HIGH);
          digitalWrite(dg1,LOW);
          displayCharacter(i);
          delay (100);
        }
      }
     
    }
    else if (Slavereceived == 4) {
      for(int i=0;i<=9;i++){
        if(i <= 5){
          digitalWrite(dg1,LOW);
          digitalWrite(dg2,HIGH);
          displayCharacter(i);
          delay (100);
        }
     
        else{
          digitalWrite(dg2, LOW);
          digitalWrite(dg1, HIGH);
          displayCharacter(i);
          delay (100);
        }
      }}

      else {
      for(int i=0;i<=9;i++){
        if(i <= 5){
          digitalWrite(dg1,LOW);
          digitalWrite(dg2,HIGH);
          displayCharacter(i);
          delay (100);
        }
     
        else{
          digitalWrite(dg2, LOW);
          digitalWrite(dg1, HIGH);
          displayCharacter(i);
          delay (100);
        }
         
      }
    }
     
    }
   
    received = false; // Reset received flag
  }

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]);
    }
  }
}



5. Kondisi [Kembali]

Percobaan 2 Kondisi 3
Jika 3 Switch aktif maka counting 0 - 5 pada digit 1 dan 6 - 9 pada digit 2, Jika 4 Switch aktif maka counting 0 - 5 pada digit 2 dan 6 - 9 pada digit 1

6. Video Simulasi [Kembali]



7. Download File [Kembali]

Download Rangkaian Simulasi Klik Disini

Download HTML Klik Disini

Download Video Percobaan Klik Disini

Download Kodingan Program Klik Disini

Download Datasheet Arduino Klik Disini

Download Datasheet  Dip Switch Klik Disini

Download Datasheet 7-segment Klik Disini









Jawaban UTS No.3 Up

     [KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1. Tujuan 2. Alat dan Bahan 3. Dasar Teori 4. Percobaan 5. File Download   Jawaban No.3 1. Tu...