Tugas Pendahuluan 1
Percobaan IV
Kontrol Motor Servo dengan PWM
1. Prosedur [Kembali]
- Rangkailah seperti rangkaian berikut
- Buka Arduino IDE dan masukan listing program
- Upload program ke arduino
- Tekan tombol pada keypad dan amati hasil
2. Hardware dan Diagram Blok [Kembali]
1. Arduino Uno
2. Keypad 4x4
3. Servo Motor
5. Ground
Gambar 1. Rangkaian Simulasi. Prinsip Kerja: Pada saat keypad ditekan angka 1 hingga 9, maka output yang akan dikeluarkan ada pada motor servo yang berputar sesuai PWM yang diberikan, dimana PWM yang diberikan adalah 25 dikali angka keypad, yang berarti angka 1 memberikan 25, 2 memberikan 50, dan seterusnya. Saat yang ditekan adalah keypad A-D, maka output yang didapatkan adalah PWM dengan duty cycle 0%, 25%, 50%, dan 100% berurutan. |
4. Flowchart dan Listing Program [Kembali]
Flowchart:
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 = 4; // Number of columns in keypad
char keys[numRows][numCols] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[numRows] = {9, 8, 7, 6}; // Rows 0 to 3
byte colPins[numCols] = {5, 4, 3, 2}; // 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 (25% duty cycle)
servoMotor.write(map(25, 0, 100, 0, 180));
break;
case '2':
// Move servo to position 45 degrees (50% duty cycle)
servoMotor.write(map(50, 0, 100, 0, 180));
break;
case '3':
// Move servo to position 90 degrees (100% duty cycle)
servoMotor.write(map(100, 0, 100, 0, 180));
break;
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
// Move servo to position 90 degrees (100% duty cycle)
int dutyCycle = (key - '0') * 25; // Convert char to int and calculate duty cycle
servoMotor.write(map(dutyCycle, 0, 100, 0, 180));
break;
case 'A':
servoMotor.write(map(25, 0, 100, 0, 180));
break;
case 'B':
servoMotor.write(map(50, 0, 100, 0, 180));
break;
case 'C':
servoMotor.write(map(75, 0, 100, 0, 180));
break;
case 'D':
servoMotor.write(map(100, 0, 100, 0, 180));
break;
default:
break;
}
}
}
Keypad A hingga D memberikan PWM 0%, 25%, 50%, dan 100% duty cycle secara berurutan, sementara key 1 hingga 9 memberikan PWM dengan nilai 25 dikali angka keypad
᭒ HTML↠ klik disini
᭒ Rangkaian Simulasi ↠ klik disini
᭒ Rangkaian Simulasi ↠ klik disini
᭒ Gambar Simulasi ↠ klik disini
᭒ Video Simulasi ↠ klik disini
᭒ Listing Program ↠ klik disini
᭒ Video Simulasi ↠ klik disini
᭒ Listing Program ↠ klik disini
No comments:
Post a Comment