Laporan Akhir 2 Modul 2 PWM, ADC, dan Interrupt

Modul 2 PWM, ADC, dan Interrupt


DAFTAR ISI
1. Prosedur
2. Hardware dan Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja
4. Flowchart dan Listing Program
5. Video Demo
6. Kondisi
7. Download File

 

1. Prosedur [kembali]

  • Buatlah rangkaian sesuai dengan kondisi yang telah dipilih
  • Buat Program pada software Arduino IDE
  • Masukkan program yang telah dibuat pada software Arduino IDE sebagai library Arduino
  • Jalankan rangkaian, sesuai dengan kondisi yang diinginkan
  • Lihat output pada motor DC dan Dot Matrix

2. Hardware dan Diagram Blok [kembali]
a. Hardware

b. Diagram Blok

3. Rangkaian Simulasi dan Prinsip Kerja [kembali]

a. Rangkaian Simulasi

b. Prinsip Kerja
Pada rangkaian ini, kami menggunakan potensiometer sebagai input dan layar LCD dot matriks dan motor DC sebagai output.

Pada LCD dot matriks digunakan driver motor MAX7219 dan driver motor L293D pada motor DC.

Bila nilai ADC terbaca pada potensiometer = 768 maka motor DC akan mundur dan menampilkan tanda panah kiri pada LCD dot matrik, dan jika kondisi diatas berbeda maka motor akan menyalakan DC akan berhenti dan menampilkan a pesan silang status pada LCD dot matriks.
4. Flowchart dan Listing Program [kembali]
a. Flowchart

b. 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. Video Demo [kembali]


6. Kondisi [kembali]

Semua switch pull down, ketika nilai adc yang terbaca pada potensio <=256 maka motor dc akan maju dan ketika  nilai adc yang terbaca pada potensio >=768 maka motor dc akan mundur.


Download HTML klik disini
Download Program Arduino klik disini
Download Video Demo klik disini
Download Gambar Hardware klik disini
Download Gambar Simulasi klik disini
Download Datasheet Arduino klik disini
Download Datasheet Potensiometer klik disini
Download Datasheet Dot Matrix klik disini
Download Datasheet Motor DC klik disini
Download Datasheet IC L293D klik disini
Download Datasheet IC MAX7219 klik disini
Download Datasheet Sensor Infrared klik disini
Download Library Sensor Infrared klik disini

Laporan akhir 1 Modul 2 PWM, ADC, dan Interrupt

 


DAFTAR ISI
1. Prosedur
2. Hardware dan Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja
4. Flowchart dan Listing Program
5. Video Demo
6. Kondisi
7. Download File

 

1. Prosedur [kembali]

  • Buatlah rangkaian sesuai dengan kondisi yang telah dipilih
  • Buat Program pada software Arduino IDE
  • Masukkan program yang telah dibuat pada software Arduino IDE sebagai library Arduino
  • Jalankan rangkaian, sesuai dengan kondisi yang diinginkan
  • Lihat output pada putaran motor servo dengan menekan keypad

2. Hardware dan Diagram Blok [kembali]
a. Hardware

b. Diagram Blok

3. Rangkaian Simulasi dan Prinsip Kerja [kembali]

a. Rangkaian Simulasi

b. Prinsip Kerja
Pada percobaan ini digunakan keyboard sebagai input dan motor servo sebagai output.

Rangkaian ini bekerja sesuai dengan program yang kita masukkan pada ARDUINO, ketika kita menekan angka 1 pada keyboard maka motor servo akan berada pada posisi 0 derajat, ketika kita menekan angka 2 pada keyboard maka motor servo akan berada pada posisi 0 derajat.

pada posisi 0 derajat.

Posisi 45 derajat ketika kita menekan angka 3 pada keyboard berarti motor servo akan berada pada posisi 90 derajat ketika kita menekan angka 4 pada keyboard maka motor servo akan berada pada posisi 135 derajat ketika kita menekan angka 5 pada keyboard.

motor servo akan berada pada posisi 180 derajat, ketika kita menekan angka 6 pada keyboard maka motor servo akan berada pada posisi 135 derajat, ketika kita menekan angka 7 pada keyboard maka motor servo akan berada pada posisi 135 derajat.

derajat.

Pada posisi 90 derajat, ketika kita menekan angka 8 pada keyboard maka motor servo akan berada pada posisi 45 derajat, dan ketika kita menekan angka 9 pada keyboard maka motor servo akan berada pada posisi 0 derajat.

Ini sesuai dengan program yang kita masukkan di Arduino.

4. Flowchart dan Listing Program [kembali]
a. Flowchart

b. 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. Video Demo [kembali]


6. Kondisi [kembali]

Keypad 1 hingga 9 memberikan PWM 0-180 dengan jarak PWM antar key 45

7. Download File [kembali]

Download HTML klik disini
Download Program Arduino klik disini
Download Video Demo klik disini
Download Gambar Hardware klik disini
Download Gambar Simulasi klik disini
Download Datasheet Arduino klik disini
Download Datasheet Keypad klik disini
Download Datasheet Motor Servo klik disini

TUGAS PENDAHULUAN MODUL 2 PERCOBAAN 6 KONDISI 6

 [KEMBALI KE MENU SEBELUMNYA]


DAFTAR ISI
1. Prosedur
2. Rangkaian Simulasi dan Prinsip Kerja
3. Flowchart dan Listing Program
4. Kondisi
5. Video Simulasi
6. Download File

 

1. Prosedur [kembali]

  • Buatlah rangkaian sesuai dengan kondisi yang telah dipilih
  • Buat Program pada software Arduino IDE
  • Masukkan program yang telah dibuat pada software Arduino IDE sebagai library Arduino
  • Jalankan rangkaian, sesuai dengan kondisi yang diinginkan

2. Rangkaian Simulasi dan Prinsip Kerja [kembali]
a. Rangkaian Simulasi


Gambar Rangkaian Sebelum Disimulasikan


Gambar Rangkaian Setelah Disimulasikan

b. Prinsip Kerja
Percobaan 6 kondisi 6 menggunakan sensor LDR sebagai input dan motor stepper sebagai output.

Disini kita akan menggunakan driver motor ULN2003A yang akan meningkatkan tegangan output yang dikeluarkan Arduino sehingga kita dapat menggerakkan motor stepper.

Sesuai kondisi yang diminta, sensor LDR aktif bila tegangan yang diukur oleh sensor LDR <2> 2,5, sehingga input Arduino adalah 1.

Ini akan mengaktifkan pin 8, 9, 10, dan 11 sesuai kondisi yang dimasukkan ke dalam program Arduino, mengaktifkan motor stepper, dan memutar motor stepper sesuai kondisi yang dimasukkan.

3. Flowchart dan Listing Program [kembali]

a. Flowchart

b. Listing Program
#include <Stepper.h>

#define A 8
#define B 9
#define C 10
#define D 11
#define PB1 2
#define PB2 3
#define PB3 4
#define PB4 5
#define PB5 A1

const int stepsPerRevolution = 200; // Banyak langkah perputaran
// Inisialisasi objek Stepper
Stepper myStepper(stepsPerRevolution, A, B, C, D);

void pergerakan_1() {
  digitalWrite(A, LOW);
  digitalWrite(D, HIGH);
  digitalWrite(B, LOW);
  digitalWrite(C, HIGH);
}

void pergerakan_2() {
  digitalWrite(A, HIGH);
  digitalWrite(D, HIGH);
  digitalWrite(B, LOW);
  digitalWrite(C, LOW);
}

void pergerakan_3() {
  digitalWrite(A, HIGH);
  digitalWrite(D, LOW);
  digitalWrite(B, HIGH);
  digitalWrite(C, LOW);
}

void pergerakan_4() {
  digitalWrite(A, LOW);
  digitalWrite(D, LOW);
  digitalWrite(B, HIGH);
  digitalWrite(C, HIGH);
}

void nonpergerakan() {
  digitalWrite(A, LOW);
  digitalWrite(D, LOW);
  digitalWrite(B, LOW);
  digitalWrite(C, LOW);
}

void pergerakan() {
  pergerakan_1();
  delay(100);
  pergerakan_2();
  delay(100);
  pergerakan_3();
  delay(100);
  pergerakan_4();
  delay(100);
}

void setup() {
  // Put your setup code here, to run once:
  pinMode(PB5, INPUT);
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(PB1, INPUT_PULLUP);
  pinMode(PB2, INPUT_PULLUP);
  pinMode(PB3, INPUT_PULLUP);
  pinMode(PB4, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  int b4 = digitalRead(PB4);
  int b3 = digitalRead(PB3);
  int b2 = digitalRead(PB2);
  int b1 = digitalRead(PB1);
  int sensorLDRValue = analogRead(PB5); // Membaca nilai dari sensor LDR
  float voltage = sensorLDRValue * (5.0 / 1023.0); // Mengonversi nilai bacaan menjadi tegangan (diasumsikan 5V)

  Serial.print("Voltage: ");
  Serial.println(voltage); // Mencetak nilai tegangan (opsional)

  // Motor stepper
  if (b4 == LOW) {
    pergerakan_4(); // Pindahkan servo ke 45 derajat
  } else if (b3 == LOW) {
    pergerakan_3(); // Pindahkan servo ke 45 derajat
  } else if (b2 == LOW) {
    pergerakan_2(); // Pindahkan servo ke 45 derajat
  } else if (b1 == LOW) {
    pergerakan_1(); // Pindahkan servo ke 45 derajat
  } else {
    nonpergerakan();
    delay(100);
  }

  // Check nilai sensor LDR
  if (voltage > 2.5) {
    Serial.println("LDR SENSOR active. Stepper motor rotating.");
    // Eksekusi stepper
    pergerakan();
  } else {
    Serial.println("Stepper Motor rotating.");
    // Eksekusi stepper
    myStepper.step(0);
  }
  delay(100);
}

Sertakan dengan LDR ketika bernilai >2.50 putaran motor searah jarum jam



Download HTML klik disini
Download Rangkaian Proteus klik disini
Download Program Arduino klik disini
Download Video klik disini
Download Datasheet Driver IC ULN2003A klik disini
Download Datasheet Arduino klik disini
Download Datasheet Motor Stepper klik disini
Download Datasheet Sensor LDR klik disini
Download Datasheet Push Button klik disini

 Bahan Presentasi untuk mata kuliah kimia         Oleh : Zhafir Ibnu Tanjung 2010953028     Dosen Pengampu: Darwison...