NIM : 2110951004

.

Senin, 25 Maret 2024

M2_TP 1_Prak UpUc




1. Prosedur
[Kembali]
  1. Rangkai seluruh komponen alat dan bahan yang diperlukan sesuai dengan kondisi percobaan yang dipilih.
  2. Buat program arduino pada aplikasi Arduino IDE sesuai dengan kondisi percobaan. Pastikan aplikasi Arduino IDE sudah mendownload library yang dibutuhkan dan sudah memilih board arduino yang sesuai.
  3. Verifikasi atau upload program pada arduino. 
  4. Jalankan atau uji coba rangkaian yang telah dibuat sesuai dengan kondisi.
  5. Perhatikan rangkaian dan output apakah sesuai dengan kondisi.
  6. Rangkaian telah selesai dibuat.
2. Hardware dan Diagram Blok [Kembali]
1. Arduino Uno
 
2. Dipswitch

3. LCD 16X2
Jual Cuci Gudang Lcd Display 1602 + I2c 16x2 16 2 16*2 Biru Blue Di Seller  Algorista - Sanan Wetan, Kota Blitar | Blibli
4. PCF8574
Jual Modul Ekspansi IO 8 Bit PCF8574 Via Port I2C utk Arduino/Raspberry pi  - Kab. Bandung - Diggyshop | Tokopedia
4. Motor DC
Mengenal Motor DC - Enfys
b. Diagram Blok

3. Rangkaian Simulasi dan Prinsip kerja [Kembali]

    a). Rangkaian Simulasi
Gambar Rangkaian Simulasi Percobaan

    b). Prinsip Kerja
Program ini adalah contoh program untuk Arduino yang menggunakan beberapa komponen seperti LCD, LED, dan motor DC. Program ini memiliki tujuan untuk menampilkan nilai count pada LCD, menyalakan LED secara berurutan setiap kali nilai count adalah kelipatan 10, serta menggerakkan motor DC ke kanan secara terus menerus. 

Pertama, program melakukan inisialisasi pin untuk LED, motor, dan pin interrupt. Kemudian, program mengaktifkan interrupt pada pin yang telah ditentukan, sehingga fungsi interruptServiceRoutine() akan dipanggil ketika interrupt terjadi.

Selanjutnya, program masuk ke dalam loop utama. Di dalam loop, nilai count akan terus bertambah dan ditampilkan pada LCD. Program juga akan menyalakan LED sesuai dengan nilai count/10 (LED1 menyala saat count=10, LED2 saat count=20, dan seterusnya). 

Selain itu, program juga akan menggerakkan motor DC ke kanan dengan delay 500ms, kemudian mematikan motor dan menunggu 500ms sebelum iterasi berikutnya. Proses ini akan terus berulang sampai nilai count mencapai 100.

Ketika nilai count mencapai 100, program akan berhenti dan tidak melakukan apa-apa (loop kosong). Fungsi interruptServiceRoutine() digunakan untuk mengatur ulang nilai count menjadi 0 dan mematikan semua LED saat interrupt terjadi.

4. Flowchart dan Listing Program [Kembali]
    a). Flowchart

    b). Listing Program
#include <LiquidCrystal_I2C.h>

#define LED1 13
#define LED2 12
#define LED3 11
#define LED4 10
#define motorPin1 9
#define motorPin2 8
#define interruptPin 2

volatile bool buttonPressed = false;  // Flag untuk menandakan bahwa tombol telah ditekan, Kata kunci volatile digunakan agar variabel dapat diakses dan diubah nilai nya dalam fungsi interrupt.
int count = 0;                        // Variabel untuk menyimpan nilai count

LiquidCrystal_I2C lcd(0x27, 16, 2);  // Alamat I2C, jumlah kolom, jumlah baris LCD

void setup() { //inisialisasi pin
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);

  attachInterrupt(digitalPinToInterrupt(interruptPin), interruptServiceRoutine, FALLING);

  lcd.init();
  lcd.backlight();
}

void loop() { //operasi utama program yang berulang
  count++; //menambah nilai variabel count setiap kali program masuk ke dalam loop.

  // Menampilkan nilai count pada LCD
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Count: ");
  lcd.print(count);

  // Memeriksa apakah count adalah kelipatan 10 dan menyalakan LED sesuai
  if (count % 10 == 0) { //Memeriksa apakah count adalah kelipatan 10, jika ya, maka akan menyalakan LED sesuai dengan nilai count/10.
    switch (count / 10) { //enggunakan switch-case untuk menyalakan LED sesuai dengan nilai count/10.
      case 1:
        digitalWrite(LED1, HIGH);
        break;
      case 2:
        digitalWrite(LED2, HIGH);
        break;
      case 3:
        digitalWrite(LED3, HIGH);
        break;
      case 4:
        digitalWrite(LED4, HIGH);
        break;
    }
  }

  // Memutar motor ke kanan
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);

  delay(500);

  // Mematikan motor
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);

  // Menunggu 500ms sebelum iterasi berikutnya
  delay(500);

  // Memeriksa apakah count sudah mencapai 100
  if (count >= 100) { //Memeriksa apakah count sudah mencapai 100, jika ya, maka program akan berhenti dengan menjalankan loop kosong.
    while (true) {
      // Do nothing, program berhenti di sini
    }
  }
}

// Fungsi untuk menangani interrupt
void interruptServiceRoutine() { //Fungsi ini akan dipanggil saat interrupt terjadi dan mengatur ulang nilai count menjadi 0 serta mematikan semua LED.
  count = 0;  // Mengulang count menjadi 0
  // Mematikan semua LED
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, LOW);
  digitalWrite(LED4, LOW);
}

5. Kondisi [Kembali]
    Percobaan 2 Kondisi 1 : 
    Motor ke kanan,LCD menampilkan counting dari 0 sampai 100, setiap counting kelipatan 10 maka hidup 1 LED,ketika diberi interrupt maka counting diulang dari 0 dan 1 led mati

6. Video Simulasi [Kembali]

7. Download File [Kembali]
File Rangkaian  File HTML
Share:

0 komentar:

Posting Komentar

Blogger news

Blogger templates