Minggu, 24 Maret 2024

LA-2 MODUL 2


Percobaan III

 Timer Arduino

1. Prosedur [Kembali]

  • Rangkailah seperti rangkaian berikut
  • Buka Arduino IDE dan masukan listing program
  • Upload program ke arduino
  • Variasikan tombol yang ditekan dan amati keluarannya pada LCD
Gambar 1. Rangkaian Hardware
 

   1. Arduino Uno

    2. DIP Switch 


    3. LCD


    4. Kabel jumper

    5. Breadboard
    6. Resistor
    7. Seven Segment

Diagram Blok:



Prinsip Kerja :

    Pada percobaan 3 modul 2 menggunakan komponen berupa arduino uno sebagai pusat pengendali. Dipswith yang berguna sebagai input dari Arduino yang dihubungkan ke kaki A0-A3 arduino, sedangkan untuk outputnya yaitu 7-segment 2 digit yang masing masing pinnya dihubungkan ke pin 4-13 Arduino yang semuanya terhubung menggunakan kabel jumper.

    Jika tombol pertama (sw1) ditekan, maka akan menambahkan angka pada display digit yang aktif setiap detiknya, Pengubahan digit akan bergantian antara D1 dan D2. Jika tombol kedua (sw2) ditekan, maka akan menampilkan urutan angka secara berurutan dari 9 hingga 0 pada display digit yang aktif, Pengubahan digit akan bergantian antara D1 dan D2.  Jika tombol ketiga (sw3) ditekan, maka akan menambahkan angka pada display digit yang aktif bergantian antara D1 dan D2 dengan waktu debouncing yang lebih panjang yaitu 2 detik. Jika tombol keempat (sw4) ditekan, program akan menampilkan urutan angka secara berurutan dari 9 hingga 0 pada display digit yang aktif dengan waktu debouncing 2 detik. Dimana untuk mencegah efek bouncing pada sakelar, dilakukan pemeriksaan waktu terakhir pembacaan sakelar menggunakan fungsi millis (sebagai timer pada program  memungkinkan program untuk melakukan debouncing dengan tepat dan menghindari respons yang tidak stabil akibat bouncing pada tombol (switch)).

4. Flowchart dan Listing Program [Kembali]

Flowchart:


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] = {
  {0, 0, 0, 0, 0, 0, 1}, // 0
  {1, 0, 0, 1, 1, 1, 1}, // 1
  {0, 0, 1, 0, 0, 1, 0}, // 2
  {0, 0, 0, 0, 1, 1, 0}, // 3
  {1, 0, 0, 1, 1, 0, 0}, // 4
  {0, 1, 0, 0, 1, 0, 0}, // 5
  {0, 1, 0, 0, 0, 0, 0}, // 6
  {0, 0, 0, 1, 1, 1, 1}, // 7
  {0, 0, 0, 0, 0, 0, 0}, // 8
  {0, 0, 0, 0, 1, 0, 0}  // 9
};

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() {
  int sw1 = digitalRead(Dsw1);
  int sw2 = digitalRead(Dsw2);
  int sw3 = digitalRead(Dsw3);
  int sw4 = digitalRead(Dsw4);
  static int digit = 1; // Digit yang sedang ditampilkan (1 atau 2)
  static int count = 0; // Counter untuk digit
  static unsigned long lastTime = 0; // Waktu terakhir pembacaan tombol

if (sw1 == LOW) {
    if (millis() - lastTime > 1000) { // Debouncing
        lastTime = millis();
        count++;
        if (count > 9) {
            count = 0;
        }
        if (digit == 1) {
            digitalWrite(D1, HIGH);
            digitalWrite(D2, LOW);
            number(count);
            digit = 2;
        } else {
            digitalWrite(D1, LOW);
            digitalWrite(D2, HIGH);
            number(count);
            digit = 1;
        }
    }
}

else if (sw2 == LOW) {
    if (millis() - lastTime > 1000) { // Debouncing
        lastTime = millis();
        digitalWrite(D1, HIGH);
        digitalWrite(D2, LOW);
        for (int i = 9; i >= 0; i--) {
            number(i);
            delay(1000); // Delay agar Anda bisa melihat perubahan digit
        }
    }
}
if (sw3 == LOW) {
    if (millis() - lastTime > 2000) { // Debouncing
        lastTime = millis();
        count++;
        if (count > 9) {
            count = 0;
        }
        if (digit == 1) {
            digitalWrite(D2, HIGH);
            digitalWrite(D1, LOW);
            number(count);
            digit = 2;
        } else {
            digitalWrite(D2, LOW);
            digitalWrite(D1, HIGH);
            number(count);
            digit = 1;
        }
    }
}
else if (sw4 == LOW) {
    if (millis() - lastTime > 2000) { // Debouncing
        lastTime = millis();
        digitalWrite(D2, HIGH);
        digitalWrite(D1, LOW);
        for (int i = 9; i >= 0; i--) {
            number(i);
            delay(200); // Delay agar Anda bisa melihat perubahan digit
        }
    }
}
}


5. Kondisi [Kembali]

    Ketika menswitch salah satu Dip Switch akan terbaca oleh arduino dan arduino akan memberikan perintah untuk menampilkan angka pada seven segment begitu pula jika menswitch 2 sekaligus (terdapat millis) sesuai dengan kondisi pada program. 

᭒ HTML↠ klik disini
᭒ Gambar Rangkaian ↠ klik disini
᭒ Video Demo ↠ klik disini
᭒ Listing Program ↠ klik disini


᭒ Datasheet Arduino↠ klik disini

᭒ Datasheet 7-Segment↠ klik disini

᭒ Datasheet LCD↠ klik disini

᭒ Datasheet DIP Switch↠ klik disini

LA-1 MODUL 2


Percobaan I

 Sensor LDR dengan LCD

1. Prosedur [Kembali]

  • Rangkailah seperti rangkaian berikut
  • Buka Arduino IDE dan masukan listing program
  • Upload program ke arduino
  • Variasikan tombol yang ditekan dan amati keluarannya pada LCD
Gambar 1. Rangkaian Hardware
 

   1. Arduino Uno

    2. dip switch 



    3. LCD


    4. Kabel jumper

    5. Breadboard
    6. Potensiometer
    7. Resistor


    8. Baterai
    9. Sensor LDR
    10. Driver Motor L293D
    11. Kipas

Diagram Blok:




Prinsip Kerja :
    
    Pada Percobaan 1 Modul 2 yang telah di praktikum kan, menggunakan hardware berupa arduino uno sebagai pusat pengendali, Dip Switch sebagai inputan yang terhubung ke arduino yang nantinya akan memberikan respons yang berbeda terhadap kondisi input yang berbeda. LCD sebagai output yang akan menampilkan karakter sesuai dengan kondisi dari inputnya tadi dan Motor DC berupa kipas. 

    Jika salah satu switch aktif atau dalam keadaan high maka akan  melakukan tindakan berdasarkan jumlah switch yang aktif. Jika tidak ada switch yang aktif, maka akan menampilkan nilai LDR pada LCD. Jika hanya satu switch yang aktif,  maka akan mengaktifkan motor dengan memutar ke satu arah. Jika dua switch aktif, maka akan menampilkan nilai LDR pada LCD dan mengatur arah putaran motor berdasarkan nilai LDR. Jika tiga switch aktif , maka akan mengatur kecepatan motor berdasarkan nilai LDR menggunakan PWM.

    Sensor LDR berfungsi mengubah sinyal analog menjadi sinyal digital dengan rumus Vout/Vin X 1023 untuk mempermudah pembacaan sensor analog pada mikrokontroler. Sensor LDR akan mengukur intensitas cahaya di sekitarnya. Nilai resistansi LDR akan berubah sesuai dengan intensitas cahaya yang diterimanya. Nilai yang diperoleh dari LDR kemudian akan dikonversi menjadi nilai yang dapat digunakan untuk mengatur PWM. Setelah nilai LDR dikonversi, nilai tersebut akan digunakan untuk mengatur PWM pada pin yang terhubung ke kontrol kecepatan motor. Semakin tinggi nilai yang diperoleh dari LDR (yang mengindikasikan cahaya yang lebih terang), semakin tinggi duty cycle PWM yang akan diberikan ke motor, sehingga kecepatan putaran motor akan meningkat. 

4. Flowchart dan Listing Program [Kembali]

Flowchart:

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() {
 // put your setup code here, to run once:
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() {
 // put your main code here, to run repeatedly:
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]

    Ketika menswitch salah satu Dip Switch akan terbaca oleh arduino dan arduino akan memberikan perintah untuk menampilkan perintah pada LCD dan menggerakkan kipas

᭒ HTML↠ klik disini
᭒ Gambar Rangkaian ↠ klik disini
᭒ Video Demo ↠ klik disini
᭒ Listing Program ↠ klik disini


᭒ Datasheet Arduino↠ klik disini

᭒ Datasheet Potensiometer↠ klik disini

᭒ Datasheet LCD↠ klik disini

᭒ Datasheet DIP Switch↠ klik disini

᭒ Datasheet L293D↠ klik disini

᭒ Datasheet Sensor LDR↠ klik disini

᭒ Datasheet Motor DC↠ klik disini  


MODUL 4

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