Senin, 18 Maret 2024

TP M2P2K2

 



Percobaan 2
Interrupt Arduino

1. Foto Hardware dan Diagram Blok [Kembali]

    
1. Arduino Uno


        2. LCD




        3. Sensor LDR (ADC)

        

 

      4. DIP Switch

 

      5. L293D
 
      6. Motor DC
   
      7. Potensiomotor
   

 

      8. Baterai


        9. Resistor

       10. Power Supply


     11. Ground




Diagram Blok:



2. Prosedur Percobaan  [Kembali]

1. Susun semua elemen perangkat
2. Buatlah sebuah skrip di dalam aplikasi Arduino IDE
3. Setelah selesai, unggulkan skrip ke papan Arduino
4. Aktifkan skrip dalam simulasi dan uji dengan modul yang ada


Rangkaian Simulasi
 

Prinsip Kerja

Rangkaian ini melibatkan beberapa komponen, termasuk Arduino Uno, motor DC, LCD 16x2, PCF8574, DIP Switch, Driver L293D, Potensiometer, Baterai, Resistor, power supply, dan Ground. Arduino Uno berperan sebagai otak utama dalam rangkaian ini, terhubung dengan motor DC dan LCD 16x2 untuk mengontrol gerakan motor dan menampilkan informasi. LCD 16x2 digunakan untuk menampilkan informasi, namun karena keterbatasan pin I/O pada Arduino Uno, PCF8574 digunakan sebagai ekspander I/O untuk menghubungkan keduanya. PCF8574 bertindak sebagai perantara, memperluas jangkauan pin Arduino sehingga dapat berinteraksi dengan LCD secara efisien. Motor DC dikontrol oleh Arduino melalui pin digital untuk berputar ke kanan, dan arah putarannya dikendalikan oleh program yang diunggah ke Arduino. Terdapat juga switch yang terhubung ke Arduino, yang berfungsi sebagai pemicu interrupt. Ketika switch ditekan, interrupt dipicu, yang menyebabkan program menunda sementara eksekusi fungsi utama dan beralih ke fungsi penanganan interrupt. Selama interrupt aktif, program yang telah ditetapkan akan dijalankan, dimana dalam rangkaian ini, program yang dijalankan saat interrupt adalah menghentikan motor DC selama 4 detik. Fungsi penanganan interrupt juga dapat diprogram untuk menghentikan "Counting" pada LCD, sehingga nilai hitungan yang ditampilkan pada LCD akan tetap pada angka terakhir yang ditampilkan saat tombol ditekan. Setelah durasi interrupt selesai (4 detik berlalu), program akan kembali menjalankan fungsi utama, melanjutkan pengendalian motor dan penghitung mundur dari kondisi terakhir sebelum interupsi. Potensiometer digunakan untuk mengatur kontras layar LCD, sedangkan resistor berfungsi untuk membatasi arus pada rangkaian agar berjalan dengan baik dan terhindar dari kerusakan akibat arus atau tegangan yang berlebihan.

4. Flowchart dan Listing Program [Kembali]

Flowchart
http://www.plantuml.com/plantuml/png/VLAxKiD03Epz5IgJBcbj6C90muGqy0KAfpZ2P_dch2F3ttEF63AUXChdrQwqUcn6HQ-XjrL-LFKxQN3WMC2Wm1TwnZtPfk83B5v4oVlW5EBt4mq_B46F9B1GDjWjAu1wHzAY1W-AlMEB0gzFpqsCd8viAJ9ze4GirCpf8kbZ2A9cE4cJOwbQXiZ3FQocCjzOf57yHYDfaP5lpkYeWyjFiYDTvhY3zUfAbZbbphXYiv1Dwb80fUqGPB1WE68EY_spWMai_wRw5OZXGtL3Ublu9wiVE-L38lI33kVmpQtDnxab6p3sXPxdkoXZdLLBZeAqRO1rR5ovQmgy3HwbPH2so1TMapHVG5NQAwNh7IfVMfwGSdr7Di6bduxwFLgUJcc-_68hkzp4T-Zj3m00

Listing Program:
 
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);  // Alamat LCD I2C dan ukuran (16 karakter, 2 baris)
volatile boolean interrupted = false; // Flag untuk interupsi
const int motorPin1 = 12; // Pin untuk kontrol motor (output 1)
const int motorPin2 = 13; // Pin untuk kontrol motor (output 2)
const int interruptPin = 2; // Pin yang digunakan untuk interupsi
unsigned int counter = 100; // Variabel untuk menghitung mundur

void setup() {
  pinMode(motorPin1, OUTPUT); // Mengatur pin motor sebagai output
  pinMode(motorPin2, OUTPUT); // Mengatur pin motor sebagai output
  pinMode(interruptPin, INPUT_PULLUP); // Mengatur pin interupsi sebagai input dengan resistor pull-up
  attachInterrupt(digitalPinToInterrupt(interruptPin), stopMotor, RISING); // Mengaktifkan interupsi pada pin 2 (FALLING = terjadi ketika tegangan turun)
 
  // Inisialisasi LCD
  lcd.init();
  lcd.backlight(); // Nyalakan pencahayaan belakang LCD
  lcd.clear(); // Bersihkan layar LCD
}

void loop() {
  while (true) {
    lcd.setCursor(0, 0); // Set kursor ke baris 1 kolom 1
    lcd.print("Countdown: "); // Tampilkan teks "Countdown: "

    // Menambahkan angka nol di depan jika counter kurang dari 100
    if (counter < 100) {
      lcd.print("0"); // Tambahkan angka nol di depan
    }
    
    // Menambahkan angka nol di depan jika counter kurang dari 10
    if (counter < 10) {
      lcd.print("0"); // Tambahkan angka nol di depan
    }
    
    lcd.print(counter); // Tampilkan nilai counter
    
    digitalWrite(motorPin1, LOW); // Aktifkan motor (putaran searah)
    digitalWrite(motorPin2, HIGH);
    delay(100); // Jeda 1 detik
    
    if (counter == 0) {
      // Jika mencapai 0, reset counter ke 100
      counter = 100;
      break; // Keluar dari loop saat mencapai 0
    }
    
    if(interrupted){
      // Jika terjadi interupsi, keluar dari loop countdown
      break;
    }
    
    counter--; // Kurangi nilai counter
  }
 
  digitalWrite(motorPin1, LOW); // Matikan motor setelah countdown selesai
  digitalWrite(motorPin2, LOW);

  if(interrupted){
    // Matikan LCD
    lcd.clear(); // Bersihkan layar LCD
    lcd.noBacklight(); // Matikan pencahayaan belakang LCD
    // Tunda selama 4 detik
    delay(4000);
    // Nyalakan kembali pencahayaan belakang LCD
    lcd.backlight();
    // Reset counter
    counter = 100;
    // Reset flag interupsi
    interrupted = false;
  }
}

void stopMotor() {
  // Fungsi yang dipanggil saat interupsi terjadi
  // Atur flag interupsi menjadi true
  interrupted = true;
}

5. Kondisi [Kembali]

Motor ke kanan,LCD menampilkan counting dari 100 sampai 0, interrupt maka motor DC berhenti 4 detik


    Download HTML
    Download Rangkaian
   
Download Program
   
Download Video Simulasi
    Download Datasheet SW-SPDT
    Download Datasheet Sensor LDR
    
Download Datasheet Arduino Uno
   
Download Datasheet Motor DC
    Download Datasheet L293D 

    Download Datasheet LCD 2x16

 











Tidak ada komentar:

Posting Komentar

Tugas Besar Machine Learning: Penerapan Penerapan Jaringan Syaraf Tiruan Backpropagation untuk Smart Control Early Warning System (EWS)

Referensi : Rahardi, G. A. (2023). Penerapan Jaringan Syaraf Tiruan Backpropagation untuk Smart Control Early Warning System (EWS).  CYCLOTR...