Rabu, 01 Mei 2024

LAPORAN AKHIR 2 MODUL 3




Laporan Akhir 2 Modul 3
(Percobaan 2)

1. Prosedur
[Kembali]

1. Rangkai semua komponen
2. buat program di aplikasi arduino IDE
3. setelah selesai masukkan program ke arduino 
4. jalankan program pada simulasi dan cobakan dengan modul

2. Hardware dan Diagram Blok [Kembali]

Hardware :

1. Arduino Uno


2. Seven Segment 

   
3. Dipswitch


Diagram Blok:


3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi :

Prinsip Kerja :
 
Rangkaian ini terdiri dari dua Arduino yaitu master dan slave yang berkomunikasi satu sama lain melalui SPI. Master Arduino bertindak sebagai pemancar data yang terhubung ke saklar celup, sedangkan budak bertindak sebagai penerima data dan mengontrol tujuh segmen. Komunikasi antara keduanya memungkinkan data digital dikirim dari, misalnya, pin 7 master. Ketika pin 7 aktif, master mengirimkan data "7" ke slave, yang kemudian menunjukkan angka "7" di segmen tujuh. . . Jika tidak ada sakelar celup yang aktif, angka yang ditampilkan adalah 1 atau disesuaikan dengan kontak yang aktif. Dengan demikian, rangkaian ini memungkinkan kendali jarak jauh tujuh segmen pada slave, dimana master mengirimkan instruksi digital melalui SPI dan slave menerjemahkan instruksi tersebut untuk menampilkan nomor tujuh segmen sesuai kondisi yang ditentukan..

4. Flowchart dan Listing Program [Kembali]

Flowchart :

Master






 Slave


Listing Program

Master
#include <SPI.h>

int dip[] = {2, 3, 4, 5, 6, 7, 8, 9};
int dipvalue[] = {};
int dipCount = 0;

void setup() {
  Serial.begin(9600);
  for (int i = 0; i < 8; i++) {
    pinMode(dip[i], INPUT_PULLUP);
  }
  SPI.begin();
  SPI.setClockDivider(SPI_CLOCK_DIV8);
  digitalWrite(SS, HIGH);
}

void loop() {
  byte Mastersend = 0;
  for (int i = 0; i < 8; i++) {
    dipvalue[i] = digitalRead(dip[i]);
    if (dipvalue[i] == LOW) {
      dipCount++;
    }
  }

  if (dipCount % 2 == 0) {
    Mastersend = dipCount / 2; // Membagi jumlah dip switch yang aktif menjadi 2
  } else if (dipCount % 3 == 0) {
    Mastersend = dipCount / 3; // Membagi jumlah dip switch yang aktif menjadi 3
  }

  dipCount = 0;

  digitalWrite(SS, LOW);
  SPI.transfer(Mastersend);
  delay(100);
}

Slave
#include <SPI.h>

#define a 9
#define b 8
#define c 7
#define d 6
#define e 5
#define f 4
#define g 3
#define dp 2
#define D1 A1
#define D2 A3

const int segmentPins[] = {a, b, c, d, e, f, g};

volatile boolean received = false;
volatile byte Slavereceived;

void setup() {
  pinMode(D1, OUTPUT);
  pinMode(D2, OUTPUT);
  Serial.begin(9600);
  for (int i = 0; i < 7; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }
  SPCR |= _BV(SPE);
  SPI.attachInterrupt();
}

ISR(SPI_STC_vect) {
  Slavereceived = SPDR;
  received = true;
}

void displayCharacter(int digit, int digitPosition) {
  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

    // patterns untuk angka 2, 3, ..., 9
  };

  for (int i = 0; i < 7; i++) {
    digitalWrite(segmentPins[i], patterns[digit][i]);
  }

  if (digitPosition == D1) {
    digitalWrite(D1, HIGH);
    digitalWrite(D2, LOW);
  } else if (digitPosition == D2) {
    digitalWrite(D1, LOW);
    digitalWrite(D2, HIGH);
  }

  delay(50);
}

void loop() {
  if (received) {
    if (Slavereceived == 1) {
      displayCharacter(8, D1);
      displayCharacter(0, D2);
    } else if (Slavereceived == 2) { // Menampilkan angka 2 jika diterima dari master
      displayCharacter(2, D1);
      displayCharacter(0, D2);
    } else if (Slavereceived == 3) { // Menampilkan angka 3 jika diterima dari master
      displayCharacter(0, D1);
      displayCharacter(3, D2);
    } else if (Slavereceived == 4) {
      displayCharacter(4, D1);
      displayCharacter(4, D2);
    }
    delay(100);
    received = false;
  }
}

5. Kondisi [Kembali]

Percobaan 2 

6. Video Simulasi [Kembali]


7. Download File [Kembali]

File Rangkaian klik disini
Video Percobaan klik disini
Listing Program klik disini
Datasheet Arduino klik disini
Datasheet Dipswitch klik disini
Datasheet 7 Segment klik disini

LAPORAN AKHIR 1 MODUL 3




Laporan Akhir 1 Modul 3
(Percobaan 1)

1. Prosedur
[Kembali]

1. Rangkai komponen sesuai percobaan dan kondisi yang dipilih.
2. Buat program menggunakan Arduino IDE.
3. Compile program yang telah dibuat lalu Upload ke dalam Arduino Uno.
4. Saat Proses Penguploadan porgram, lepas pin rx tx pada arduino master dengan arduino slave
5. Uji coba program pada rangkaian percobaan sesuai dengan kondisi yang diinginkan.
6. Selesai

2. Hardware dan Diagram Blok [Kembali]
Hardware :
1. Arduino Uno



2. Push Button



3. LED



Diagram Blok :


3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi :
Prinsip Kerja :
 
Eksperimen 1 adalah rangkaian komunikasi UART dengan Arduino. Percobaan ini menggunakan 2 Arduino. Arduino pertama berfungsi sebagai pengirim perintah (misalnya disebut master) dan Arduino kedua berfungsi sebagai penerima/pelaksana perintah (misalnya disebut slave). Master Arduino terhubung dengan input berupa 8 tombol. Sedangkan output dari slave Arduino berupa 8 buah LED. Untuk komunikasi Arduino UART, pin RX dari master Arduino dihubungkan ke pin Tx dari Arduino slave, dan pin Tx dari master Arduino dihubungkan ke pin Rx dari Arduino a slave. Pada keadaan awal, semua LED menyala. Ketika satu tombol ditekan maka output berupa satu LED akan mati, begitu seterusnya untuk setiap tombol. Arduino diberi daya dengan menghubungkan setiap Arduino ke kabel USB portabel..

4. Flowchart dan Listing Program [Kembali]

Flowchart :
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]

Percobaan 1 (Komunikasi UART Menggunakan Arduino - sesuai rangkaian modul)

6. Video Simulasi [Kembali]



7. Download File [Kembali]

File Rangkaian klik disini
Video Percobaan klik disini
Listing Program klik disini
Datasheet Arduino klik disini
Datasheet Dipswitch klik disini
Datasheet 7 Segment klik disini

Minggu, 28 April 2024

TUGAS PENDAHULUAN 2 MODUL 3




Tugas Pendahuluan 2 Modul 3
(Percobaan 3 Kondisi 1)

1. Prosedur
[Kembali]

1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.

2. Hardware dan Diagram Blok [Kembali]

1. Arduino Uno

        2. Keypad



        4. LCD


        5. Potensiometer




        6. Power Supply



        8. Ground


Diagram Blok:


3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi :


Prinsip Kerja :
Pada percobaan 3 kondisi 1 disini digunakan komunikasi I2C, dimana komunikasi ini bersifat half-duplex yaitu data dikirim dan diterima pada waktu yang berbeda dan bergantian. Kami menggunakan dua buah Arduino Unos yang dihubungkan dengan keyboard 4x4 dan layar LCD. Unit master menggunakan keyboard sebagai pemancar data, dan unit slave menggunakan layar LCD sebagai penerima data. Cara kerjanya kita klik salah satu", lalu keluar inputan sesuai dengan angka yang tertera di LCD, jika bersamaan kita klik keyboard maka akan terjadi benturan data..

4. Flowchart dan Listing Program [Kembali]

  • Flowchart



  • Listing Program
MASTER
#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] = {5, 4, 3, 2};
char colPins[COLS] = {6, 7, 8};

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(7, 6, 5, 4, 3, 2); // Sesuaikan pin sesuai dengan koneksi LCD

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
}

void loop()
{
  delay(100);
  
}

// function that executes whenever data is received from master
// this function is registered as an event, see setup()
void receiveEvent(int howMany)
{
  char c = Wire.read(); // receive byte as a character
    Serial.println(c);         // print the character
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print(c);
    delay(100);
}

5. Kondisi [Kembali]

Percobaan 3 Kondisi 1
Key 1 - 9 menampilkan karaktaer nomor 1 - 9 secara berurut di kolom pertama LCD

6. Video Simulasi [Kembali]

7. Download File [Kembali]

Simulasi  klik disini
Gambar Simulasi  klik disini
Video Simulasi  klik disini
Listing Program Master  klik disini
Listing Program Slave  klik disini

Sabtu, 27 April 2024

TUGAS PENDAHULUAN 1 MODUL 3




Tugas Pendahuluan 1 Modul 3
(Percobaan 2 Kondisi 1)

1. Prosedur
[Kembali]

1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.

2. Hardware dan Diagram Blok [Kembali]

Hardware :
1.Arduino Uno



2.Dipswitch


3.Seven Segment 2 Digit




4.Resistor



Diagram Blok :



3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi :

Prinsip Kerja :
 
Pada percobaan 2 kondisi 1 digunakan dua Unit Arduino, satu Arduino bertindak sebagai master dan satu lagi sebagai slave. Master arduino dihubungkan dengan bagian input yaitu dip switch. Pada saat yang sama, budak Arduino dihubungkan ke bagian keluaran dengan 7-segmen 2 digit. Arduino Master bertindak sebagai Arduino yang memberikan perintah dari inputnya ke Arduino Slave. sedangkan slave Arduino berperan sebagai penerima / yang mengeksekusi perintah dalam bentuk output. Pada rangkaian ini, Arduino berkomunikasi satu sama lain menggunakan sistem SPI, dimana pin 10-13 master Arduino dihubungkan ke pin 10-13 dari slave Arduino.Saat kedua dip switch aktif maka output yang dihasilkan adalah 1 dari 7 Nomor 2 digit dalam segmen bernomor (hanya 1 nomor yang aktif). Sedangkan jika saklar celup memiliki 3 saklar yang aktif maka ketujuh segmen tersebut akan menunjukkan angka yang berbeda pada digit kedua..

4. Flowchart dan Listing Program [Kembali]

Flowchart :

Master






 Slave


Listing Program

Master
#include <SPI.h>

int dip[] = {2, 3, 4, 5, 6, 7, 8, 9};
int dipvalue[] = {};
int dipCount = 0;

void setup() {
  Serial.begin(9600);
  for (int i = 0; i < 8; i++) {
    pinMode(dip[i], INPUT_PULLUP);
  }
  SPI.begin();
  SPI.setClockDivider(SPI_CLOCK_DIV8);
  digitalWrite(SS, HIGH);
}

void loop() {
  byte Mastersend = 0;
  for (int i = 0; i < 8; i++) {
    dipvalue[i] = digitalRead(dip[i]);
    if (dipvalue[i] == LOW) {
      dipCount++;
    }
  }

  if (dipCount % 2 == 0) {
    Mastersend = dipCount / 2; // Membagi jumlah dip switch yang aktif menjadi 2
  } else if (dipCount % 3 == 0) {
    Mastersend = dipCount / 3; // Membagi jumlah dip switch yang aktif menjadi 3
  }

  dipCount = 0;

  digitalWrite(SS, LOW);
  SPI.transfer(Mastersend);
  delay(100);
}

Slave
#include <SPI.h>

#define a 9
#define b 8
#define c 7
#define d 6
#define e 5
#define f 4
#define g 3
#define dp 2
#define D1 A1
#define D2 A3

const int segmentPins[] = {a, b, c, d, e, f, g};

volatile boolean received = false;
volatile byte Slavereceived;

void setup() {
  pinMode(D1, OUTPUT);
  pinMode(D2, OUTPUT);
  Serial.begin(9600);
  for (int i = 0; i < 7; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }
  SPCR |= _BV(SPE);
  SPI.attachInterrupt();
}

ISR(SPI_STC_vect) {
  Slavereceived = SPDR;
  received = true;
}

void displayCharacter(int digit, int digitPosition) {
  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

    // patterns untuk angka 2, 3, ..., 9
  };

  for (int i = 0; i < 7; i++) {
    digitalWrite(segmentPins[i], patterns[digit][i]);
  }

  if (digitPosition == D1) {
    digitalWrite(D1, HIGH);
    digitalWrite(D2, LOW);
  } else if (digitPosition == D2) {
    digitalWrite(D1, LOW);
    digitalWrite(D2, HIGH);
  }

  delay(50);
}

void loop() {
  if (received) {
    if (Slavereceived == 1) {
      displayCharacter(8, D1);
      displayCharacter(0, D2);
    } else if (Slavereceived == 2) { // Menampilkan angka 2 jika diterima dari master
      displayCharacter(2, D1);
      displayCharacter(0, D2);
    } else if (Slavereceived == 3) { // Menampilkan angka 3 jika diterima dari master
      displayCharacter(0, D1);
      displayCharacter(3, D2);
    } else if (Slavereceived == 4) {
      displayCharacter(4, D1);
      displayCharacter(4, D2);
    }
    delay(100);
    received = false;
  }
}

5. Kondisi [Kembali]

Percobaan 2 Kondisi 1
Setiap 2 Switch aktif muncul angka berbeda pada digit ke 1, Setiap 3 Switch aktif  muncul angka berbeda pada digit ke 2

6. Video Simulasi [Kembali]



7. Download File [Kembali]

File Rangkaian klik disini
Video Percobaan klik disini
Listing Program klik disini
Datasheet Arduino klik disini
Datasheet Dipswitch klik disini
Datasheet 7 Segment klik disini

MODUL 4 MIKRO TB

PERANCANGAN SISTEM KONTROL TANAMAN BAWANG BERBASIS MIKROKONTROLLER [KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1.Pendahuluan 2. Tujuan ...