Senin, 18 Maret 2024

Laporan Akhir 2 - Modul 2

  





Percobaan 2

 Interrupt Arduino 

1. Foto Hardware dan Diagram Blok [Kembali]

a. Hardware

1. LCD

2. Arduino Uno

    3. Dipswitch 2

4. Resistor

5. Jumper

6. Breadboard

7. LED

8. Buzzer


b. Diagram Blok






2. PROSEDUR PERCOBAAN [Kembali]

  • Rangkai semua komponen 
  • Buat program di aplikasi arduino IDE
  • Setelah selesai masukkan program ke arduino 
  • Jalankan program pada simulasi dan cobakan dengan modul


3. RANGKAIAN SIMULASI DAN PRINSIP KERJA[Kembali]






Prinsip Kerja :

Pada percobaan 2 Interrupt Arduino didasarkan pada kodingan Arduino yang bertujuan untuk mengontrol LED, buzzer, dan menampilkan jumlah hitungan pada LCD. Pada tahap inisialisasi, pin LED, tombol, dan buzzer ditetapkan dengan fungsi pinMode(). Selain itu, LCD juga diinisialisasi untuk menampilkan informasi. Ketika program memasuki loop utama, LED akan dinyalakan, buzzer akan dimatikan, dan nilai hitungan akan ditampilkan pada LCD. Nilai hitungan akan terus bertambah setiap detik dengan fungsi delay(1000) yang digunakan untuk membuat pengulangan setiap detik. Ketika tombol ditekan, fungsi tombol_ditekan() akan dipanggil sebagai interrupt. Saat interrupt terjadi, LED akan dimatikan, buzzer akan dinyalakan, dan nilai hitungan akan direset menjadi 0. Namun, terdapat delay yang sangat panjang setelah reset nilai hitungan (delay(100000)) yang mempengaruhi responsivitas program terhadap tombol ditekan.

Dalam prakteknya, rangkaian ini dapat digunakan sebagai penghitung sederhana yang memberikan umpan balik audio visual ketika tombol ditekan. Saat tombol ditekan, LED akan mati dan buzzer akan berbunyi untuk memberikan indikasi bahwa hitungan telah direset. Dengan menggunakan interrupt, rangkaian ini dapat merespons cepat terhadap aksi pengguna yang memungkinkan penggunaan tombol sebagai input tanpa mengganggu pengulangan utama pada loop(). Meskipun demikian, penundaan yang sangat lama setelah reset mungkin perlu disesuaikan agar rangkaian dapat merespons lebih cepat terhadap interaksi pengguna.


4. FLOWCHART DAN LISTING PROGRAM [Kembali]

a. Flowchart



b. Listing Program
#include <LiquidCrystal_I2C.h>

#define LED 13 // pin 13 bernama LED
#define tombol 2 // pin 2 (pin interrupt) bernama tombol
#define buzzer 11

volatile byte led_nyala = LOW; // kondisi awal LED mati
static int count = 0;
volatile byte buzzer_nyala = LOW;

LiquidCrystal_I2C lcd(0x27, 20, 4);

void setup() {
  lcd.init();
  lcd.backlight();
  pinMode(LED, OUTPUT);
  pinMode(tombol, INPUT);
  attachInterrupt(digitalPinToInterrupt(2), tombol_ditekan, FALLING); // pin 2 (interrupt 0) digunakan sebagai interrupt eksternal
}

void loop() { // Program Utama
  digitalWrite(LED, HIGH);
  digitalWrite(buzzer, LOW);
 
  lcd.setCursor(0, 0);
  lcd.print("Count:");
  lcd.setCursor(0, 1);
  lcd.print(count);
 
  count += 1; // menambah nilai count dengan 1
  delay(1000);
}

// Fungsi yang dieksekusi ketika tombol ditekan, fungsi ini (ISR) dieksekusi secara otomatis setelah Arduino memperoleh sinyal interrupt di pin 2
void tombol_ditekan() {
  digitalWrite(LED, LOW);
  digitalWrite(buzzer, HIGH);
  count = 0;
  delay(100000);
}




5. KONDISI [Kembali]
  
Modul 2 Percobaan 2 - Interrupt Arduino 
6. VIDEO RANGKAIAN [Kembali]




7. ANALISA [Kembali]






8. LINK DOWNLOAD [Kembali]

HTML                                                          klik disini

Listing Program                                          klik disini

Video Percobaan                                        klik disini

Datasheet Arduino                                      klik disini

Download Resistor                                      klik disini

Download Dipswitch                                   klik disini

Download datasheet LED                     klik disini

Download datasheet Buzzer                       klik disini

Download Datasheet Driver Motor L293   klik disini










Laporan Akhir 1 - Modul 2

  





Percobaan 1

Sensor LDR dengan LCD

1. Foto Hardware dan Diagram Blok [Kembali]

a. Hardware

 

    1. LCD 2x16

2. Arduino Uno

   3. Dipswitch_4

4. Resistor

5. Jumper

6. Breadboard

7. Motor

8. Potensiometer

9. Sensor LDR

10. Driver motor L293D

11. Motor DC

b. Diagram Blok






2. PROSEDUR PERCOBAAN [Kembali]

  • Rangkai semua komponen 
  • Buat program di aplikasi arduino IDE
  • Setelah selesai masukkan program ke arduino 
  • Jalankan program pada simulasi dan cobakan dengan modul


3. RANGKAIAN SIMULASI DAN PRINSIP KERJA[Kembali]





Prinsip Kerja :

Pada percobaan 1 Sensor LDR dengan LCD, rangkaian bekerja berdasarkan kondisi input dari tombol dan sensor LDR. Saat tombol utama tidak ditekan, rangkaian memasuki kondisi idle di mana tampilan LCD menampilkan pesan default "ELECTRONIC & INSTRUMENTATION". Namun, saat tombol utama ditekan, program memulai pemantauan tombol lain dan nilai LDR. Jika hanya satu tombol ditekan, motor akan diaktifkan tanpa memperhatikan nilai LDR. Ketika dua tombol ditekan, nilai LDR digunakan untuk mengarahkan motor ke kanan atau kiri berdasarkan ambang batas yang ditentukan. Saat semua tombol ditekan, nilai LDR dijadikan sebagai PWM untuk mengontrol kecepatan motor.

Selama setiap iterasi dalam loop utama, informasi yang relevan ditampilkan pada LCD untuk memberikan umpan balik visual. Misalnya, ketika dua tombol ditekan, tampilan LCD memberikan informasi tentang nilai LDR yang terbaca dan arah yang diambil oleh motor berdasarkan nilai tersebut. Ketika semua tombol ditekan, nilai PWM yang dihasilkan untuk mengontrol kecepatan motor juga ditampilkan pada LCD bersamaan dengan informasi tentang jenis kontrol yang sedang dilakukan. Dengan demikian, rangkaian ini tidak hanya menanggapi input pengguna dengan aksi yang sesuai, tetapi juga memberikan umpan balik visual yang informatif tentang status operasional motor dan nilai LDR yang terbaca.


4. FLOWCHART DAN LISTING PROGRAM [Kembali]

a. Flowchart



b. Listing Program
#include <LiquidCrystal.h>

LiquidCrystal lcd(13, 12, 11, 10, 9, 8);

int sw1 = 2;
int sws[] = {3, 4, 7};
int numsw = 3;
int front = 6;
int back = 5;

void setup() {
  lcd.begin(16, 2);
  pinMode(sw1, INPUT);
 
  for (int thesw = 0; thesw < numsw; thesw++) {
    pinMode(sws[thesw], INPUT);
  }
 
  pinMode(front, OUTPUT);
  pinMode(back, OUTPUT);
 
  Serial.begin(9600);
}

void loop() {
  int s1 = digitalRead(sw1);
  int ldr = analogRead(A0);

  if (s1 == HIGH) {
    int activesw = 0;
   
    for (int thesw = 0; thesw < numsw; thesw++) {
      if (digitalRead(sws[thesw]) == HIGH) {
        activesw++;
      }
    }
   
    Serial.print("Number of Switch: ");
    Serial.println(activesw);
    delay(200);

    switch (activesw) {
      case 0:
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print(ldr);
        lcd.setCursor(0, 1);
        lcd.print("The LDR Value");
        delay(200);
        break;

      case 1:
        lcd.clear();
        lcd.setCursor(2, 0);
        lcd.print("Running The");
        lcd.setCursor(2, 1);
        lcd.print("Motor");
        digitalWrite(front, HIGH);
        digitalWrite(back, LOW);
        delay(200);
        break;

      case 2:
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("LDR Value: ");
        lcd.setCursor(13, 0);
        lcd.print(ldr);

        if (ldr < 550) {
          lcd.setCursor(0, 1);
          lcd.print(" ");
          lcd.setCursor(0, 1);
          lcd.print("turn Motor right");
          digitalWrite(front, HIGH);
          digitalWrite(back, LOW);
        } else {
          lcd.setCursor(0, 1);
          lcd.print(" ");
          lcd.setCursor(0, 1);
          lcd.print("turn Motor left");
          digitalWrite(front, LOW);
          digitalWrite(back, HIGH);
        }
        break;

      case 3:
        int pwm = map(ldr, 0, 1023, 0, 255);
        digitalWrite(back, LOW);
        analogWrite(front, pwm);
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("PWM = ");
        lcd.print(pwm);
        lcd.setCursor(0, 1);
        lcd.print(" Control ???");
        delay(200);
        break;
    }
    delay(10);
  } else {
    lcd.clear();
    lcd.setCursor(4, 0);
    lcd.print("ELECTRONIC");
    lcd.setCursor(0, 1);
    lcd.print("&INSTRUMENTATION");
    delay(100);
  }
}




5. KONDISI [Kembali]
  

Modul 2 Percobaan 1 - Sensor LDR dengan LCD

6. VIDEO RANGKAIAN [Kembali]




7. ANALISA [Kembali]





8. LINK DOWNLOAD [Kembali]

HTML                                                           klik disini

Listing Program                                            klik disini

Video Percobaan                                          klik disini

Datasheet Arduino                                        klik disini 

Download Resistor                                        klik disini

Download Dipswitch                                     klik disini

Download datasheet sensor LDR                  klik disini

Download Datasheet LCD 2X16                   klik disini

Download Datasheet Driver Motor L293D    klik disini

Download Datasheet Motor DC                        klik disini







Tugas Pendahuluan 2 - Modul 2




Percobaan 3 Kondisi 5

Ketika 2 switch aktif 7-Segment menampilkan kombinasi 2,0,2,4 setelah hitung maju hingga 3

1. Prosedur
[Kembali]
  • Rangkailah semua komponen 
  • Buat program di aplikasi arduino IDE
  • Setelah selesai, masukkan program ke arduino 
  • Jalankan program pada simulasi dan lakukan sesuai kondisi
2. Hardware dan diagram blok [Kembali]
      a. hardware
                 


                                                      
1. Arduino Uno
2. Dipswitch_4
3. Dual 7-Segment 

            b. Digram Blok





3. Rangkaian Simulasi dan Prinsip kerja [Kembali]
Gambar Rangkaian Sebelum Disimulasikan
                                    




Gambar Rangkaian Setelah Disimulasikan


                                        
PRINSIP KERJA
    Pada percobaan 2 Kondisi 7, diinstruksikan bahwa Ketika 2 switch aktif 7-Segment menampilkan kombinasi 2,0,2,4 setelah hitung maju hingga 3. Untuk menampilkan setiap output pada dual seven segmen bergantung pada dipswitch dan kodingan yang terdapat pada arduino.

angkaian ini menggunakan Arduino untuk mengendalikan display tujuh segmen dan dua tombol sebagai input. Pada setiap iterasi loop, Arduino akan membaca status tombol dan menampilkan angka 0, 1, 2, dan 3 secara berurutan. Selain itu, jika 2 switch dari 4 switch ditekan (sw1 dan sw2 atau sw3 dan sw4), Arduino akan menampilkan angka 2024 secara berulang, dengan masing-masing angka ditampilkan selama 0.5 detik. Timer millis digunakan untuk mengatur interval waktu antara setiap iterasi loop, sehingga membuat kode menjadi lebih responsif dan tidak terblokir. Prinsip kerjanya adalah membaca status tombol dan mengendalikan display berdasarkan kondisi input yang diberikan, sambil memastikan bahwa setiap iterasi loop dijalankan dalam interval waktu yang ditentukan.


4. FlowChart [Kembali]


a. Listing Program 

#define a 6
#define b 7
#define c 8
#define d 9
#define e 10
#define f 11
#define g 12
#define dp 13
#define D1 4
#define D2 5
#define Dsw1 A0
#define Dsw2 A1
#define Dsw3 A2
#define Dsw4 A3

bool sw1, sw2, sw3, sw4;
int segments[] = {a, b, c, d, e, f, g};
byte digitPatterns[10][7] = {
  {1, 1, 1, 1, 1, 1, 0}, // 0
  {0, 1, 1, 0, 0, 0, 0}, // 1
  {1, 1, 0, 1, 1, 0, 1}, // 2
  {1, 1, 1, 1, 0, 0, 1}, // 3
  {0, 1, 1, 0, 0, 1, 1}, // 4
  {1, 0, 1, 1, 0, 1, 1}, // 5
  {1, 0, 1, 1, 1, 1, 1}, // 6
  {1, 1, 1, 0, 0, 0, 0}, // 7
  {1, 1, 1, 1, 1, 1, 1}, // 8
  {1, 1, 1, 1, 0, 1, 1}  // 9
};

unsigned long previousMillis = 0;
const long interval = 500;

void setup() {
  for (int i = 0; i < 7; i++) {
    pinMode(segments[i], OUTPUT);
  }
  pinMode(dp, OUTPUT);
  pinMode(D1, OUTPUT);
  pinMode(D2, OUTPUT);
  pinMode(Dsw1, INPUT_PULLUP);
  pinMode(Dsw2, INPUT_PULLUP);
  pinMode(Dsw3, INPUT_PULLUP);
  pinMode(Dsw4, INPUT_PULLUP);
  Serial.begin(9600);
}

void number(int display) {
  if (display >= 0 && display <= 9) {
    for (int i = 0; i < 7; i++) {
      digitalWrite(segments[i], digitPatterns[display][i]);
    }
  }
}

void loop() {
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;

    sw1 = digitalRead(Dsw1);
    sw2 = digitalRead(Dsw2);
    sw3 = digitalRead(Dsw3);
    sw4 = digitalRead(Dsw4);

    // Menampilkan angka 0, 1, 2, dan 3 di awal output
    for (int i = 0; i <= 3; i++) {
      digitalWrite(D1, HIGH);
      digitalWrite(D2, LOW);
      number(i); // Menampilkan angka yang sedang dihitung
      delay(500); // Delay selama 0.5 detik
    }

    // Menampilkan kombinasi angka 2, 0, 2, dan 4 setelah kedua switch diaktifkan
    if ((sw1 == LOW && sw2 == LOW && sw3 == HIGH && sw4 == HIGH) ||
        (sw1 == LOW && sw2 == HIGH && sw3 == LOW && sw4 == HIGH) ||
        (sw1 == LOW && sw2 == HIGH && sw3 == HIGH && sw4 == LOW) ||
        (sw1 == HIGH && sw2 == LOW && sw3 == LOW && sw4 == HIGH) ||
        (sw1 == HIGH && sw2 == LOW && sw3 == HIGH && sw4 == LOW) ||
        (sw1 == HIGH && sw2 == HIGH && sw3 == LOW && sw4 == LOW)) {
      digitalWrite(D1, HIGH);
      digitalWrite(D2, LOW);
      number(2); // Menampilkan angka 2 pada digit pertama
      delay(500); // Delay selama 0.5 detik

      digitalWrite(D1, LOW);
      digitalWrite(D2, HIGH);
      number(0); // Menampilkan angka 0 pada digit kedua
      delay(500); // Delay selama 0.5 detik

      digitalWrite(D1, HIGH);
      digitalWrite(D2, LOW);
      number(2); // Menampilkan angka 2 pada digit pertama
      delay(500); // Delay selama 0.5 detik

      digitalWrite(D1, LOW);
      digitalWrite(D2, HIGH);
      number(4); // Menampilkan angka 4 pada digit kedua
      delay(500); // Delay selama 0.5 detik
    }
  }
}


b. Flowchart







5. Kondisi [Kembali]

Pada percobaan 2 kondisi 7 kondisi rangkaian yaitu Ketika 2 switch aktif 7-Segment menampilkan kombinasi 2,0,2,4 setelah hitung maju hingga 3

6. Video Simulasi [Kembali]
                                           

  

7. Download File [Kembali]

Rangkaian Simulasi  klik disini
Video Simulasi klik disini
Listing Program klik disini
Datasheet Arduino klik disini
Datasheet Seven Segmen klik disini

MODUL 4

  [KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI     1. Pendahuluan     2. Tujuan     3. Alat dan Bahan     4. Dasar Teori     5. Perc...