Sabtu, 30 Maret 2024

Laporan Akhir 1 (Percobaan 5)




PERCOBAAN 5
Kontrol Putaran Motor DC

1. Prosedur
[Kembali]

 1. Rangkai komponen sesuai percobaan dan kondisi yang dipilih.

2. Buat program menggunakan Arduino IDE.

3. Compile program yang telah dibuat lalu Upload ke dalam Arduino Uno.

4. Uji coba program pada rangkaian percobaan sesuai dengan kondisi yang diinginkan.

5. Selesai

2. Hardware dan Diagram Blok [Kembali]

Hardware:



Blok Diagram :





3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi:

                                    


Prinsip Kerja:

Pada percobaan 5 ini, kita menggunakan arduino sebagai mikrokontroler, sensor infrared sebagai input dan dihubungkan ke arduino, dan dipswitch sebagai output dari arduino, serta motor dc dan kipas. Pertama input program yang ada pada modul ke dalam software arduino ide. Dan kondisinya diatur dimana saat potensiometer di putar ke kanan atau menurut program jika adc >= 256 maka motor atau kipas akan berputar ke kanan dan pada dot matrix akan menunjukkan panah ke kanan, sedangkan jika potensiometer diputar ke kiri atau menurut program adc >= 768, maka motor/kipas akan berputar ke kiri dan dot matrix akan menampilkan panah ke kiri. Namun saat potensiometer berada dalam kondisi normal atau pada program adc tidak memenuhi kondisi di atas maka motor/kipas tidak berputar dan pada dot matrix akan menampilkan x seperti gambar rangkaian di atas.


4. Flowchart dan Listing Program [Kembali]

Flowchart :





Listing Program :

#include <LedControl.h>
// Inisialisasi modul MAX7219
LedControl lc = LedControl(5,6,7,1); // Pin DIN, CLK, LOAD (CS) dihubungkan ke Arduino
byte patterns[8] = {0, 0, 0, 0, 0, 0, 0, 0}; // Pola LED untuk ditampilkan
// Pengaturan pin untuk dipswitch dan motor
const int potensio = A0;
const int infrared = 8;
const int enable = 4;
const int motor1Pin1 = 2;
const int motor1Pin2 = 3;
void setup() {
 // Set up dot matrix module
 lc.shutdown(0, false); // Mengaktifkan modul
  lc.setIntensity(0, 8); // Mengatur kecerahan (0-15)
 lc.clearDisplay(0); // Membersihkan tampilan
 // Mengatur pin-pin sebagai output untuk motor
 pinMode(enable, OUTPUT);
 pinMode(infrared, INPUT);
 pinMode(motor1Pin1, OUTPUT);
 pinMode(motor1Pin2, OUTPUT);
 Serial.begin(9600);
}
void loop() {
 // Membaca nilai dari lm35
 float adc = analogRead(potensio);
 Serial.println(adc);
 // Membaca nilai dari infrared
 int infrarednya = digitalRead(infrared);
 // Mengendalikan arah motor berdasarkan nilai dipswitch
 if(infrarednya == HIGH){
 digitalWrite(enable, HIGH);
 if (adc <= 256) {
 // Maju
 digitalWrite(motor1Pin1, HIGH);
 digitalWrite(motor1Pin2, LOW);
 displayArrowRight();
 }
 else if (adc >= 768) {
 // Mundur
 digitalWrite(motor1Pin1, LOW);
 digitalWrite(motor1Pin2, HIGH);
 displayArrowLeft();
 }
 else {
 // Berhenti
 digitalWrite(motor1Pin1, LOW);
 digitalWrite(motor1Pin2, LOW);
 displayLetterX();
 }
 }
 else{
 digitalWrite(enable, LOW);
 }
}
// Fungsi untuk menampilkan panah pada dot matrix
void displayArrow(byte pattern) {
 for (int row = 0; row < 8; row++) {
 lc.setRow(0, row, pattern);
 }
 delay(500); // Mengatur kecepatan animasi
 lc.clearDisplay(0);
 delay(500); // Jeda sebelum membaca input lagi
}
// Menampilkan panah ke kanan
void displayArrowRight() {
 byte arrowRight[8] = {
 B00011000,
 B00001100,
 B00000110,
 B11111111,
 B00000110,
 B00001100,
 B00011000,
 B00000000
 };
 for (int row = 0; row < 8; row++) {
 lc.setRow(0, row, arrowRight[row]);
 }
}
// Menampilkan panah ke kiri
void displayArrowLeft() {
 byte arrowLeft[8] = {
 B00011000,
 B00110000,
 B01100000,
 B11111111,
 B01100000,
 B00110000,
 B00011000,
 B00000000
 };
 for (int row = 0; row < 8; row++) {
 lc.setRow(0, row, arrowLeft[row]);
 }
}
// Menampilkan huruf "X"
void displayLetterX() {
 byte letterX[8] = {
 B10000001,
 B01000010,
 B00100100,
 B00011000,
 B00011000,
 B00100100,
 B01000010,
 B10000001
 };
 for (int row = 0; row < 8; row++) {
 lc.setRow(0, row, letterX[row]);
 }
}

5. Kondisi [Kembali]

Percobaan 5 sesuai dengan modul 2.

6. Video Demo [Kembali]]





7. Analisa dan Pembahasan [Kembali]







8. Download File [Kembali]

HTML                   klik disini
Video Percobaan    klik disini
Listing Program     klik disini
datasheet arudino   klik disini
Datasheet Button   klik disini
Datasheet LED      klik disini


Laporan Akhir 2 (Percobaan 2)




PERCOBAAN 2
Interrupt Arduino

1. Prosedur
[Kembali]

 1. Rangkai komponen sesuai percobaan dan kondisi yang dipilih.

2. Buat program menggunakan Arduino IDE.

3. Compile program yang telah dibuat lalu Upload ke dalam Arduino Uno.

4. Uji coba program pada rangkaian percobaan sesuai dengan kondisi yang diinginkan.

5. Selesai

2. Hardware dan Diagram Blok [Kembali]

Hardware:





Blok Diagram :







3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi:

                                    




Prinsip Kerja:

Pada percobaan 2 kita menggunakan arduino sebagai mikrokontroler yang menerima input dari pin dipswitch dan untuk outputnya akan ditampilkan pada LCD, LED dan buzzer. Dimana untuk kondisi nya sudah di atur pada program yang ada pada modul dan program ini nantinya akan dibuat pada arduino ide dan  akan di upload pada kommponen arduino pada rangkaian percobaan. Untuk percobaan, sesuai dengan program yang ada, jika tida ada inputan atau dipswitch berlogika low maka pada LCD akan menampilkan cunting dari 0 sampai tak hingga. Kemudian saat dipswitch berlogika high maka inputan akan masuk ke arduino dan akan terbaca sehingga sesuai dengan program saat dipswitch high maka LCD akan menampilkan counting. Dan saat diberi interrupt maka LED akan menyala dan buzzer berbunyi, dan setelah selesai akan kembali seperti semula yaitu counting diulang.

4. Flowchart dan Listing Program [Kembali]

Flowchart :







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.clear();
 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(3000);
}

5. Kondisi [Kembali]

Percobaan 2 sesuai dengan modul 2.

6. Video Demo [Kembali]]





7. Analisa dan Pembahasan [Kembali]







8. Download File [Kembali]

HTML                   klik disini
Video Percobaan    klik disini
Listing Program     klik disini
datasheet arudino   klik disini
Datasheet Button   klik disini
Datasheet LED      klik disini


Jumat, 29 Maret 2024

Tugas Pendahuluan 2 (Percobaan 3 Kondisi 4)

Percobaan 3 Kondisi 4

1. Prosedur [Kembali]

1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.

2. Hardware dan Diagram Blok [Kembali]

Hardware :

1. Arduino





2. 7-Segment



3. Ground



4. Resistor
               

5.  Power Supply



6. Dip Switch





Diagram Blok :


3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]



Prinsip Kerja:

Buat program sesuai dengan kondisi yaitu "Ketika 1 switch aktif 7-segment akan menampilkan kombinasi 2,0,0,3 setelah hitung mundur dari 3". Pada percobaan ini, mengguanakn dip switch sebagai input dan terhubung ke kaki arduino (A0-A3), dan 7-segment sebagai output yang terhubung pada kaki (2,3, dan 6-13), serta arduino sebagai mikrokontrolernya.  Kemudian upload program yang dibuat dari arduino ide ke arduino pada proteus. Sekanjutnya, run rangkaian pada proteus, pada kondisi semua switch off maka 7-segment hanya akan menampilkan hitung mundur dari 3, dan jika salah satu dari switch on maka 7-segment nantinya akan menampilkan hitung mundur 3 kemudian kombinasi 2,0,0,3 dan akan seperti itu jika salah satu dari switch on/aktif.


Flowchart :




Listing Program:

#define D1 2
#define D2 3
#define Dsw1 A0
#define Dsw2 A1
#define Dsw3 A2
#define Dsw4 A3

bool switches[] = {Dsw1, Dsw2, Dsw3, Dsw4};
int digits[] = {D1, D2};
int segments[] = {5, 6, 7, 8, 9, 10, 11, 12};
int digitPatterns[][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
};

void setup() {
  for (int i = 0; i < sizeof(segments) / sizeof(segments[0]); i++) {
    pinMode(segments[i], OUTPUT);
  }
  for (int i = 0; i < sizeof(digits) / sizeof(digits[0]); i++) {
    pinMode(digits[i], OUTPUT);
  }
  for (int i = 0; i < sizeof(switches) / sizeof(switches[0]); i++) {
    pinMode(switches[i], INPUT_PULLUP);
  }
  Serial.begin(9600);
}

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

void loop() {
  bool switchStates[4];
  for (int i = 0; i < sizeof(switches) / sizeof(switches[0]); i++) {
    switchStates[i] = digitalRead(switches[i]);
  }

  // Hitungan mundur dari 3 ke 0 sebelum switch ditekan
  if (switchStates[0] && switchStates[1] && switchStates[2] && switchStates[3]) {
    for (int i = 3; i >= 0; 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, 0, dan 3 setelah satu switch diaktifkan
  else if (!switchStates[0] || !switchStates[1] || !switchStates[2] || !switchStates[3]) {
    int digitsToShow[] = {2, 0, 0, 3};
    for (int i = 0; i < 4; i++) {
      digitalWrite(digits[i % 2], i < 2 ? HIGH : LOW); // Switch antara D1 dan D2
      number(digitsToShow[i]); // Menampilkan angka sesuai dengan array digitsToShow
      delay(500); // Delay selama 0.5 detik
    }
  }
}

Percobaan 3 Kondisi 4 : 
"Ketika 1 switch aktif 7-segment akan menampilkan kombinasi 2,0,0,3 setelah hitung mundur dari 3"





7. Download File [Kembali]

HTML                        klik disini
File Rangkaian          klik disini
Video Percobaan      klik disini
Listing Program         klik disini
datasheet arudino     klik disini
Datasheet LED         klik disini


Tugas Pendahuluan 1 (Percobaan 2 Kondisi 5)

Percobaan 2 Kondisi 5

1. Prosedur [Kembali]

1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.

2. Hardware dan Diagram Blok [Kembali]

Hardware :

1. Arduino





2. Motor



3. LED



4. Resistor
               

5.  LCD



6. Dip Switch





Diagram Blok :




3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]



Prinsip Kerja:

Buatlah program sesuai dengan kondisi yang dipilih yaitu "Motor ke kanan selama 3 detik lalu mati 2 detik, ke kiri 3 detik dan mati 2 detik, LCD menampilkan counting dari 0 sampai 50, interrupt counting diulang dari 0 saat motor DC berhenti 4 detik dan 1 LED hidup setiap kali dilakukan interrupt". Kemudian program dimasukkan ke arduino. Pada percobaan ini menggunakan inputan dip switch yang terhubung ke kaki arduino sebagai input dan output dari percobaan ini adalah motor, LED, dan LCD. Setelah rangkaian pada proteus di run, maka dapat dilihat LCD nantinya akan menampilkan counting secara berurutan dari 0 sampai 50. Setelah counting mencapai 50, maka motor akan berputar ke kiri dahulu selama 3 detik kemudian berhenti 2 detik dan ke kanan 3 detik, lalu LED nantinya akan hidup.

Dan apabila dilakukan interrupt pada kondisi RISING, yaitu pada Dip Switch dari off ke on, maka LCD akan menampilkan counting dengan kelipatan 10, misal jika kita melakukan interrupt saat counting pada LCD menampilkan angka 10 maka setelah itu akan counting dengan kelipatan 10 yaitu 10,20 hingga 100 dan kemudian akan kembali ke 10. Selanjutnya selama beberapa detik, counting akan berhenti dan kemudian motor akan bergerak ke kanan 3 detik berhenti 2 detik lalu ke kiri 3 detik kemudian mati 4 detik, dan LED akan menyala/hidup. 


Flowchart :




Listing Program:

#include <LiquidCrystal_I2C.h>

// Definisikan pin
const int motorPin1 = 5;    // Motor pin 1
const int motorPin2 = 6;    // Motor pin 2
const int ledPin = 13;      // Pin LED
const int switchPin = 2;    // Pin untuk switch
volatile int count = 0;     // Variabel untuk menghitung interrupt
bool lastStateWasLoop = true; // Variabel penanda kondisi terakhir

LiquidCrystal_I2C lcd(0x27, 20, 4); // Inisialisasi LCD

void setup() {
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(switchPin, INPUT_PULLUP); // Mengatur switchPin sebagai input dengan pull-up resistor
  
  // Inisialisasi LCD
  lcd.init();
  lcd.backlight();
  
  // Attach interrupt
  attachInterrupt(digitalPinToInterrupt(switchPin), interruptHandler, RISING);
}

void loop() {
  // Loop utama
  if (lastStateWasLoop) {
    for (int i = 0; i <= 50; i++) {
      lcd.setCursor(0, 0);
      lcd.print("Count: ");
      lcd.print(count);
      count += 1; // Menambahkan integer count dengan angka 1
      delay(150); // Tunda 150 ms
      if (count > 50) {
        count = 0;
      }
    }

    // Putar motor ke kanan selama 3 detik
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    delay(3000);
    
    // Berhenti selama 2 detik
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    delay(2000);
    
    // Putar motor ke kiri selama 3 detik
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    delay(3000);
    
    // Berhenti selama 2 detik
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    delay(2000);

    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Count: ");
    lcd.print(count);
    delay(1500);
    
    // Berhenti 5 detik setelah setiap putaran
    digitalWrite(ledPin, HIGH); // Nyalakan LED
    delay(5000);
    digitalWrite(ledPin, LOW); // Matikan LED
  }
}

void interruptHandler() {
  count = 0; // Reset count ke 0

  digitalWrite(motorPin1, LOW); // Mematikan motor
  digitalWrite(motorPin2, LOW); // Mematikan motor
  delay(4000); // Motor berhenti selama 4 detik

  digitalWrite(ledPin, HIGH);   // Menghidupkan LED
  delay(100); // Tunda 0.1 detik
  digitalWrite(ledPin, LOW);    // Mematikan LED
  
  lastStateWasLoop = true; // Mengatur variabel penanda
}

Percobaan 2 Kondisi 5 : 
"Motor ke kanan selama 3 detik lalu mati 2 detik, ke kiri 3 detik dan mati 2 detik, LCD menampilkan counting dari 0 sampai 50, interrupt counting diulang dari 0 saat motor DC berhenti 4 detik dan 1 LED hidup setiap kali dilakukan interrupt"



7. Download File [Kembali]

HTML                          klik disini
File Rangkaian             [klik disini]
Video Percobaan          klik disini
Listing Program           klik disini
datasheet arduino         klik disini
Datasheet LED            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. ...