Kamis, 21 Maret 2024

LA M2P4

 



Percobaan 4
Interrupt Arduino - Kontrol Motor Servo dengan PWM

1. Foto Hardware dan Diagram Blok [Kembali]

    
        1. Arduino Uno



        2.Motor Servo


        3. Keypad



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

Pada rangkaian ini, terdapat Arduino Uno, keypad, dan Motor Servo. Arduino digunakan untuk menghubungkan keypad dan servo motor. Saat sebuah tombol pada keypad ditekan, Arduino akan membaca input tersebut dan menentukan sudut yang sesuai untuk motor servo berdasarkan tombol yang ditekan. Misalnya, tombol 1 akan mengatur motor servo pada sudut 0 derajat, tombol 2 pada sudut 45 derajat, dan seterusnya sesuai dengan konfigurasi yang telah ditentukan. Setelah menentukan sudut yang sesuai, Arduino mengirimkan sinyal kontrol ke motor servo, yang kemudian akan berputar ke sudut yang telah ditentukan oleh Arduino.

4. Flowchart dan Listing Program [Kembali]

Flowchart
http://www.plantuml.com/plantuml/png/hPD1IyCm5CVl-HH_JqjlpcswhGm6mvEeO4-UPDYtDInDGl8owRUtPiXw45gmboGyylln9tbl6tZlETPQi69DACYVBNRMiBSQHHEOQY7I9R4kYAEJMIw-AgK9adsaJ030-ets9KxKk7PJnaNEKrqT8DigRZPuUVruUdpFm1KPo8R2XKpqhgBFqmyEvoa4AYzqrx31P3hvaqw6PticX1IUBMvHqj4JXQk7TA2EwswmQxxebSq6orRzoUQ3PTDPVxJ5SDkoFzlzgDaUndosvPWVklfNfvbI7SIl5TBORgTRmyf4WhRMANFCnHLfrpHOOjkUOgs_0G00

Listing Program:
 
#include <Servo.h>
#include <Keypad.h>

Servo servoMotor;
const int servoPin = 11; // PWM pin for servo
const int numRows = 4;    // Number of rows in keypad
const int numCols = 3;    // Number of columns in keypad

char keys[numRows][numCols] = {
    {'1', '2', '3'},
    {'4', '5', '6'},
    {'7', '8', '9'},
    {'*', '0', '#'}
};

byte rowPins[numRows] = {9, 8, 7, 6}; // Rows 0 to 3
byte colPins[numCols] = {5, 4, 3};     // Columns 0 to 2

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, numRows, numCols);

void setup() {
    servoMotor.attach(servoPin);
    servoMotor.write(90); // Initial position
    Serial.begin(9600);
}

void loop() {
    char key = keypad.getKey();
    if (key != NO_KEY) {
        Serial.println(key);
        // Perform actions based on the key pressed
        switch (key) {
            case '1':
                // Move servo to position 0 degrees
                servoMotor.write(0);
                break;
            case '2':
                // Move servo to position 45 degrees
                servoMotor.write(45);
                break;
            case '3':
                // Move servo to position 90 degrees
                servoMotor.write(90);
                break;
            case '4':
                // Move servo to position 135 degrees
                servoMotor.write(135);
                break;
            case '5':
                // Move servo to position 180 degrees
                servoMotor.write(180);
                break;
            case '6':
                // Move servo to position 135 degrees
                servoMotor.write(135);
                break;
            case '7':
                // Move servo to position 90 degrees
                servoMotor.write(90);
                break;
            case '8':
                // Move servo to position 45 degrees
                servoMotor.write(45);
                break;
            case '9':
                // Move servo to position 0 degrees
                servoMotor.write(0);
                break;
            default:
                break;
        }
    }
}


5. Kondisi [Kembali]

Motor servo akan bergerak sesuai masukkan tombol keypad yang mana tiap tombol keypad memiliki sudut rotasi tertentu.


    Download HTML
   
Download Program
   
Download Video Simulasi
    Download Datasheet Motor Servo
    
Download Datasheet Arduino Uno
    Download Datasheet Keypad 

 











LA M2P2K2

 



Percobaan 2
Interrupt Arduino - LED dan LCD

1. Foto Hardware dan Diagram Blok [Kembali]

    
        1. Arduino Uno



        2. LCD

 

      3. DIP Switch


 

      4. Buzzer

        5. LED
 


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

Pada rangkaian ini, digunakan komponen seperti Arduino Uno, LED, LCD, DIP Switch, dan Buzzer. Prinsip kerjanya adalah saat rangkaian dijalankan, Arduino akan terus menghitung angka (Countdown), menyalakan LED dan buzzer. Angka tersebut akan terus berkurang dari 100 hingga 0 dan ditampilkan pada LCD. Perhitungan angka ini akan terus berkurang sebesar satu hingga mendapatkan interupsi. Interupsi terjadi ketika pin tertentu (dalam hal ini pin 2) mengalami perubahan dari logika 1 ke logika 0 (Falling). Ketika interupsi terjadi, program akan mengulang angka yang dihitung sebelumnya, mematikan LED dan buzzer, kemudian melanjutkan perhitungan dari angka sebelumnya sebelum terjadi interupsi. Proses ini akan berulang lagi hingga pin interupsi (pin 2) mengalami perubahan logika dari 1 ke 0 (Falling) kembali.

4. Flowchart dan Listing Program [Kembali]

Flowchart
http://www.plantuml.com/plantuml/png/JO-nZjim44Jx_Ohj8dLEIgbnOXc10LTEcbG1BQwiXQXTWLp2iOFxzxkJBDyr13Z3uRpP9dFHyXZW2pRKiH2ctasK80qiaujkn5R5ix4A_WT4n1-k7IvHi_YT1eruv4jlVoW4lIw-HaznyHeNXvyQFCb9FRp0HyrS3Ci9rK7Os0M-4nvtJGtLBpASM71KJ-dj_jtCjJso6CMO9wi18ataRAwiVkSeg8B7VLD_LheEp_b-f_XG6qvJS3TiDOlDWTqQE4WRQIInnLm3zFxyAoPgLNpzACLhpu6mi9Yf1E0EYyDAXYep-RSIhIV1uaQfN3xR_wCs6w7fUDRmrxFHuAG62ecm42s1n7C7yAHV1ZtdhLkg4oLwWgwGcyq3CzK0oNI2BOdFOtW5

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 mula-mula 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() { // Main Program
  digitalWrite(LED, HIGH);
  digitalWrite(buzzer, LOW);
  lcd.setCursor(0, 0);
  lcd.print("Count:");
  lcd.setCursor(0, 1);
  lcd.print(count);
  count += 1; // menambahkan integer count dengan angka 1
  delay(1000);
}

// membuat fungsi bernama 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]

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 Arduino Uno
    Download Datasheet Buzzer 

    Download Datasheet LCD 2x16

 











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

 











Sistem Otomatis Lampu Belajar dan Kipas Pendingin Berbasis Kehadiran dan Suara

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