M2 - Tugas Pendahuluan 2




Tugas Pendahuluan 2 Modul 2
(Percobaan 2 Kondisi 4)

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



2. Dip Switch







3. LED




4. Resistor






5.  LCD




6. Ground







7.  Potensiometer






8. IC I2C





9. Power supply


Diagram Blok:




3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi :





Prinsip Kerja :

Pada eksperimen kedua ini, fokusnya adalah penerapan fitur interrupt pada Arduino dengan menggunakan LCD, LED, dan sebuah motor DC sebagai komponen utama. Motor DC tidak digunakan dalam eksperimen ini, digantikan dengan penggunaan dipswitch. Tujuan dari eksperimen ini adalah untuk menampilkan counting dari 0 hingga 50 pada LCD, sambil menampilkan efek LED running saat mencapai bilangan prima, dan memberikan kemampuan untuk mengulang counting dari awal ketika ada interrupt.

LCD yang digunakan adalah jenis LCD I2C, yang memungkinkan penghematan pin Arduino dengan menghubungkan pin SDA dan SCL ke bus I2C. Interrupt diimplementasikan menggunakan sebuah switch yang disetup sebagai pull-down resistor pada pin 2, sementara 6 LED digunakan sebagai output untuk menampilkan kondisi.

Saat rangkaian dijalankan, counting dimulai dari 0 dan terus bertambah satu per satu hingga mencapai batas maksimal 50. Ketika mencapai bilangan prima seperti 2, 3, 5, dan lainnya, efek LED running terlihat di mana LED akan menyala satu per satu dari yang pertama hingga yang keenam selama beberapa detik. Namun, jika angka tidak prima seperti 4, LED tidak akan memberikan respon apa pun dan counting akan tetap berlanjut.

Ketika interrupt diberikan dengan mengubah logika pull-down (dari keadaan switch on menjadi off), proses counting akan dihentikan dan semua LED akan menyala selama beberapa detik. Setelah 3 detik, semua LED akan mati dan counting akan diulang dari awal. Pada program, penggunaan interrupt dapat dilihat dalam fungsi attachInterrupt(), yang membutuhkan pin yang digunakan sebagai interrupt, perintah atau fungsi void yang akan dieksekusi saat terjadi interrupt, dan tipe input interrupt (falling atau rising).

 
4. Flowchart dan Listing Program [Kembali]

Flowchart :



Listing Program :

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define LED_COUNT 6
const int LED_PINS[LED_COUNT] = {13, 12, 11, 10, 9, 8};
const int SWITCH_PIN = 2;

LiquidCrystal_I2C lcd(0x27, 16, 2);  // Alamat I2C LCD: 0x27, ukuran 16x2

volatile bool switchPressed = false;
volatile int counting = 0; // deklarasi counting

void setup() {
  Serial.begin(9600);

  for (int i = 0; i < LED_COUNT; ++i) {
    pinMode(LED_PINS[i], OUTPUT);
  }
  pinMode(SWITCH_PIN, INPUT_PULLUP); // Mengatur pin 2 sebagai input dengan pull-up resistor

  lcd.init();
  lcd.backlight();
  lcd.begin(16, 2);

  attachInterrupt(digitalPinToInterrupt(SWITCH_PIN), resetCounting, FALLING); // Menambahkan fungsi interupsi pada pin 2 dengan turunnya tegangan
}

void loop() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Count: ");
  lcd.print(counting);

  if (switchPressed) {
    counting = 0; // Reset counting menjadi 0
    switchPressed = false;
    for (int i = 0; i < LED_COUNT; ++i) {
      digitalWrite(LED_PINS[i], HIGH);
    }
    delay(3000); // Hidupkan semua LED selama 3 detik
    for (int i = 0; i < LED_COUNT; ++i) {
      digitalWrite(LED_PINS[i], LOW);
    }
  }

  if (counting <= 50) {
    Serial.println(counting);
    delay(1000);
  } else {
    counting = 0;
    Serial.println(counting);
    delay(1000);
  }

  if (isPrime(counting)) {
    runLED();
  }

  counting++;

  if (counting > 50) {
    counting = 0;
    delay(3000); // Menunggu 3 detik setelah mencapai 50
  }
}

bool isPrime(int n) {
  if (n <= 1) return false;
  if (n <= 3) return true;
  if (n % 2 == 0 || n % 3 == 0) return false;
  for (int i = 5; i * i <= n; i += 6) {
    if (n % i == 0 || n % (i + 2) == 0) return false;
  }
  return true;
}

void runLED() {
  for (int i = 0; i < LED_COUNT; ++i) {
    digitalWrite(LED_PINS[i], HIGH);
    delay(400);
    digitalWrite(LED_PINS[i], LOW);
  }
}

void resetCounting() {
  switchPressed = true;
}

5. Kondisi [Kembali]

Percobaan 2 Kondisi 4
"Motor ke kanan,LCD menampilkan counting dari 0 sampai 50, setiap counting kelipatan bilangan prima LED running dari led pertama hingga keenam selama 4 detik,ketika diberi interrupt maka counting diulang dari 0 dan led hidup semuanya selama 3 detik"

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 Button klik disini

Tidak ada komentar:

Posting Komentar