Laporan Akhir M2

 [KEMBALI KE MENU SEBELUMNYA]


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 dimana pin dari input dan output dihubungkan ke pin arduino. Dipswith adalah input Arduino yang dihubungkan ke kaki A0-A3 Arduino. Outputnya, 7-segment 2-digit, dihubungkan ke pin 4-13 Arduino dimana melalui komponen kabel jumper untuk menghubungkannya.

    Jika tombol pertama (sw1) ditekan, akan menambahkan angka pada layar digit yang aktif setiap detiknya, mengubah digit antara D1 dan D2. Jika tombol kedua (sw2) ditekan, akan menampilkan urutan angka dari 9 hingga 0 pada layar digit yang aktif, mengubah digit antara D1 dan D2. Jika tombol ketiga (sw3) ditekan, akan menambahkan angka pada layar digit yang aktif bergantian antara D1 dan D2 dengan waktu 2 detik dan yang terakhir, Dengan menekan tombol keempat (sw4), program akan menampilkan urutan angka dari 9 hingga 0 pada layar digit yang aktif dengan waktu debouncing dua detik. 

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 mengaktifkan salah satu Dip Switch untuk dibaca oleh arduino uno dan arduino akan memberikan perintah untuk menampilkan angka pada seven segment begitu pula jika mengaktifkan dua switch sekaligus (yang 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


Laporan Akhir M2

 [KEMBALI KE MENU SEBELUMNYA]


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 :
    
   Dalam Percobaan 1 Modul 2, hardware arduino uno digunakan sebagai pusat pengendali. Dip Switch adalah input yang yang berjemulah 4 switch dan terhubung ke arduino, yang akan merespons berbagai kondisi input. Motor DC sebagai kipas, dan LCD sebagai output, serta sebuah sensor LDR yang digunakan tepat disamping LCD 16 x 2 yang dipakai akan menampilkan karakter yang sesuai dengan kondisi inputnya. 

    Dengan menggunakan rumus Vout/Vin X 1023c pada percobaan ini, sensor LDR dapat mengkonversi sinyal analog menjadi sinyal digital.  Nilai resistansi sensor LDR akan berubah seiring intensitas cahaya yang diterimanya. Nilai LDR kemudian 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 duty cycle PWM yang diberikan ke motor, semakin tinggi kecepatan putaran motor. 

    Saat dipswitch ke 4 akitf atau berlogika tinggi, LCD hanya akan menampilkan nilai LDR yang telah dikonversi. Jika switch ke 3 aktif, motor DC akan bergerak kekanan dan ditampilkan pada LCD bahwa motor bergerak dengan jeda 0.2 detik. Jika switch ke 2 aktif, akan terjadi dua kondisi: pertama, jika nilai ADC LDR yang dibaca lebih kecil dari 550, maka motor akan bergerak kekanan dan LCD akan menampilkan nilai LDR yang telah dikonversi.

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 mengaktifkan  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  

Ujian Tengah Semester - Soal 3