0% menganggap dokumen ini bermanfaat (0 suara)
9 tayangan11 halaman

Kontrol Sequential Arduino

Laporan praktikum ini menjelaskan perancangan dan implementasi sistem kendali sekuensial menggunakan Arduino untuk mengontrol empat timer secara berurutan. Sistem ini dilengkapi dengan antarmuka LCD dan tombol untuk pengaturan, serta menyimpan nilai timer di EEPROM agar tetap tersimpan meskipun daya dimatikan. Meskipun berhasil, laporan ini juga mengidentifikasi beberapa kekurangan dan potensi peningkatan, termasuk penggunaan teknik non-blocking timer untuk meningkatkan responsivitas.

Diunggah oleh

Muh D'X Audy Ray
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
9 tayangan11 halaman

Kontrol Sequential Arduino

Laporan praktikum ini menjelaskan perancangan dan implementasi sistem kendali sekuensial menggunakan Arduino untuk mengontrol empat timer secara berurutan. Sistem ini dilengkapi dengan antarmuka LCD dan tombol untuk pengaturan, serta menyimpan nilai timer di EEPROM agar tetap tersimpan meskipun daya dimatikan. Meskipun berhasil, laporan ini juga mengidentifikasi beberapa kekurangan dan potensi peningkatan, termasuk penggunaan teknik non-blocking timer untuk meningkatkan responsivitas.

Diunggah oleh

Muh D'X Audy Ray
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 11

LAPORAN PRAKTIKUM

PERANCANGAN SISTEM ELEKTRONIKA

“Sistem Kendali Sekuensial menggunakan Arduino”

Disusun Oleh :
Muh D’x Audy Ray (23050430026)

PROGRAM STUDI PENDIDIKAN TEKNIK ELEKTRONIKA


FAKULTAS TEKNIK
UNIVERSITAS NEGERI YOGYAKARTA
2025
A. Tujuan Praktikum
Mahasiswa dapat merancang dan membuat Control System menggunakan Arduino.
B. Alat dan Bahan
a. Laptop
b. Tinkercad
c. Proteus
C. Tampilan Rangkaian dan Code

Tampilan Rangkaian 4 Timer Sequential Looping dengan Arduino


#include <LiquidCrystal.h>
#include <EEPROM.h>

// Deklarasi pin tombol


int tombol_up = A0;
int tombol_down = A1;
int tombol_set = A2;
int tombol_back = A3;
int tombol_stop = A4; // Tombol untuk menghentikan looping

// Variabel timer
int nilai_timer1 = 0;
int nilai_timer2 = 0;
int nilai_timer3 = 0;
int nilai_timer4 = 0;
// Variabel halaman dan kontrol loop
int halaman = 0;
int stop = 1;

// Objek LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
Serial.begin(9600);
lcd.begin(16, 2);

nilai_timer1 = EEPROM.read(0);
nilai_timer2 = EEPROM.read(10);
nilai_timer3 = EEPROM.read(20);
nilai_timer4 = EEPROM.read(30);

pinMode(tombol_up, INPUT);
pinMode(tombol_down, INPUT);
pinMode(tombol_set, INPUT);
pinMode(tombol_back, INPUT);
pinMode(tombol_stop, INPUT);

pinMode(10, OUTPUT); // T1
pinMode(9, OUTPUT); // T2
pinMode(8, OUTPUT); // T3
pinMode(7, OUTPUT); // T4
}

void loop() {
switch (halaman) {
case 0:
lcd.setCursor(0, 0);
lcd.print("T1 T2 T3 T4");
lcd.setCursor(0, 1);
lcd.print(nilai_timer1);
lcd.setCursor(4, 1);
lcd.print(nilai_timer2);
lcd.setCursor(8, 1);
lcd.print(nilai_timer3);
lcd.setCursor(12, 1);
lcd.print(nilai_timer4);

if (digitalRead(tombol_down) == HIGH) {
lcd.clear();
halaman = 1;
}

if (digitalRead(tombol_up) == HIGH) {
lcd.clear();
halaman = 4;
}

if (digitalRead(tombol_set) == HIGH) {
lcd.clear();
halaman = 5;
}
break;

// Halaman setting timer T1–T4 (kode serupa bisa dilanjutkan seperti


sebelumnya, cukup tambah EEPROM.write dan baca nilai_timer4 untuk case 4)
// Halaman Timer 1
case 1:
lcd.setCursor(0, 0);
lcd.print("Timer 1");
lcd.setCursor(0, 1);
lcd.print(nilai_timer1);
lcd.setCursor(14, 1);
lcd.print("mS");

if (digitalRead(tombol_up) == HIGH) {
lcd.clear();
halaman = 0;
}

if (digitalRead(tombol_down) == HIGH) {
lcd.clear();
halaman = 2;
}

else if (digitalRead(tombol_set) == HIGH) {


while (stop == 1) {
if (digitalRead(tombol_up) == HIGH) {
nilai_timer1++;
delay(200);
}
if (digitalRead(tombol_down) == HIGH) {
nilai_timer1--;
delay(200);
}

lcd.setCursor(0, 0);
lcd.print("Timer 1 ");
lcd.setCursor(0, 1);
lcd.print(nilai_timer1);
lcd.setCursor(14, 1);
lcd.print("mS");

if (digitalRead(tombol_back) == HIGH) {
break;
}
}
EEPROM.write(0, nilai_timer1);
lcd.clear();
}
break;

// Halaman Timer 2
case 2:
lcd.setCursor(0, 0);
lcd.print("Timer 2");
lcd.setCursor(0, 1);
lcd.print(nilai_timer2);
lcd.setCursor(14, 1);
lcd.print("mS");

if (digitalRead(tombol_up) == HIGH) {
lcd.clear();
halaman = 1;
}

if (digitalRead(tombol_down) == HIGH) {
lcd.clear();
halaman = 3;
}

else if (digitalRead(tombol_set) == HIGH) {


while (stop == 1) {
if (digitalRead(tombol_up) == HIGH) {
nilai_timer2++;
delay(200);
}

if (digitalRead(tombol_down) == HIGH) {
nilai_timer2--;
delay(200);
}

lcd.setCursor(0, 0);
lcd.print("Timer 2 ");
lcd.setCursor(0, 1);
lcd.print(nilai_timer2);
lcd.setCursor(14, 1);
lcd.print("mS");

if (digitalRead(tombol_back) == HIGH) {
break;
}
}
EEPROM.write(10, nilai_timer2);
lcd.clear();
}
break;

// Halaman Timer 3
case 3:
lcd.setCursor(0, 0);
lcd.print("Timer 3");
lcd.setCursor(0, 1);
lcd.print(nilai_timer3);
lcd.setCursor(14, 1);
lcd.print("mS");

if (digitalRead(tombol_up) == HIGH) {
lcd.clear();
halaman = 2;
}

if (digitalRead(tombol_down) == HIGH) {
lcd.clear();
halaman = 0;
}
else if (digitalRead(tombol_set) == HIGH) {
while (stop == 1) {
if (digitalRead(tombol_up) == HIGH) {
nilai_timer3++;
delay(200);
}

if (digitalRead(tombol_down) == HIGH) {
nilai_timer3--;
delay(200);
}

lcd.setCursor(0, 0);
lcd.print("Timer 3 ");
lcd.setCursor(0, 1);
lcd.print(nilai_timer3);
lcd.setCursor(14, 1);
lcd.print("mS");

if (digitalRead(tombol_back) == HIGH) {
break;
}
}
EEPROM.write(20, nilai_timer3);
lcd.clear();
}
break;

// Halaman Eksekusi Timer


case 4:
lcd.setCursor(0, 0);
lcd.print("Timer 4");
lcd.setCursor(0, 1);
lcd.print(nilai_timer4);
lcd.setCursor(14, 1);
lcd.print("s ");

if (digitalRead(tombol_up) == HIGH) {
lcd.clear();
halaman = 3;
break;
}
if (digitalRead(tombol_down) == HIGH) {
lcd.clear();
halaman = 0;
break;
}

else if (digitalRead(tombol_set) == HIGH) {


while (stop == 1) {
if (digitalRead(tombol_up) == HIGH) {
nilai_timer4++;
delay(200);
}

if (digitalRead(tombol_down) == HIGH) {
nilai_timer4--;
delay(200);
}

lcd.setCursor(0, 0);
lcd.print("Timer 4 ");
lcd.setCursor(0, 1);
lcd.print(nilai_timer4);
lcd.setCursor(14, 1);
lcd.print("s ");

if (digitalRead(tombol_back) == HIGH) {
break;
}
}
EEPROM.write(30, nilai_timer4);
lcd.clear();
}
break;

// Eksekusi looping semua timer


case 5:
while (digitalRead(tombol_stop) == LOW) {
lcd.clear(); lcd.setCursor(0, 0); lcd.print("Running T1...");
digitalWrite(10, HIGH);
for (int i = 0; i < nilai_timer1; i++) {
lcd.setCursor(0, 1);
lcd.print("T1: "); lcd.print(nilai_timer1 - i); lcd.print("s ");
if (digitalRead(tombol_stop) == HIGH) goto berhenti;
delay(1000);
}
digitalWrite(10, LOW);

lcd.clear(); lcd.setCursor(0, 0); lcd.print("Running T2...");


digitalWrite(9, HIGH);
for (int i = 0; i < nilai_timer2; i++) {
lcd.setCursor(0, 1);
lcd.print("T2: "); lcd.print(nilai_timer2 - i); lcd.print("s ");
if (digitalRead(tombol_stop) == HIGH) goto berhenti;
delay(1000);
}
digitalWrite(9, LOW);

lcd.clear(); lcd.setCursor(0, 0); lcd.print("Running T3...");


digitalWrite(8, HIGH);
for (int i = 0; i < nilai_timer3; i++) {
lcd.setCursor(0, 1);
lcd.print("T3: "); lcd.print(nilai_timer3 - i); lcd.print("s ");
if (digitalRead(tombol_stop) == HIGH) goto berhenti;
delay(1000);
}
digitalWrite(8, LOW);

lcd.clear(); lcd.setCursor(0, 0); lcd.print("Running T4...");


digitalWrite(7, HIGH);
for (int i = 0; i < nilai_timer4; i++) {
lcd.setCursor(0, 1);
lcd.print("T4: "); lcd.print(nilai_timer4 - i); lcd.print("s ");
if (digitalRead(tombol_stop) == HIGH) goto berhenti;
delay(1000);
}
digitalWrite(7, LOW);
}
break;

berhenti:
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Berhenti");
delay(2000);
halaman = 0;
lcd.clear();
break;
}
}

D. Pembahasan

Praktikum ini bertujuan untuk merancang dan mengimplementasikan sistem kendali


sekuensial menggunakan platform Arduino. Sistem yang dirancang adalah kontroler empat
timer (T1, T2, T3, T4) yang bekerja secara berurutan (sekuensial) dan dapat menyimpan
nilai pengaturan timer ke dalam memori non-volatile EEPROM. Antarmuka pengguna
disediakan melalui LCD 16×2 dan serangkaian tombol untuk navigasi menu serta
pengaturan nilai timer.

Komponen Utama dan Fungsinya:

1. Arduino Uno: Berfungsi sebagai mikrokontroler utama yang menjalankan


program, membaca input dari tombol, mengendalikan output digital, dan
berinteraksi dengan LCD serta EEPROM.
2. LCD 16×2: Digunakan sebagai antarmuka tampilan untuk menampilkan status
sistem, nilai timer, dan menu pengaturan kepada pengguna.
3. Tombol (Push Buttons): Terdapat lima tombol dengan fungsi spesifik:
o tombol_up (A0): Untuk menaikkan nilai timer atau navigasi ke atas.
o tombol_down (A1): Untuk menurunkan nilai timer atau navigasi ke bawah.
o tombol_set (A2): Untuk masuk ke mode pengaturan timer atau memulai
eksekusi sekuensial.
o tombol_back (A3): Untuk keluar dari mode pengaturan timer.
o tombol_stop (A4): Untuk menghentikan proses eksekusi sekuensial yang
sedang berjalan.
4. EEPROM (Internal Arduino): Digunakan untuk menyimpan nilai nilai_timer1
hingga nilai_timer4 secara permanen, sehingga nilai tersebut tidak hilang ketika
Arduino dimatikan dan dihidupkan kembali. Lokasi alamat EEPROM yang
digunakan adalah 0, 10, 20, dan 30 untuk masing-masing timer.
5. Output Digital (Pin 10, 9, 8, 7): Merepresentasikan output dari masing-masing
timer (T1 hingga T4), yang akan aktif secara berurutan sesuai durasi yang telah
diatur.
Kelebihan dan Kekurangan Implementasi:

 Kelebihan:
o Mencapai tujuan kendali sekuensial dengan empat timer.
o Memiliki antarmuka pengguna yang fungsional dengan LCD dan tombol.
o Fitur penyimpanan nilai ke EEPROM sangat berguna untuk mempertahankan
pengaturan setelah power cycle.
o Fungsi "stop" darurat memberikan kontrol yang baik kepada pengguna.
 Kekurangan dan Potensi Peningkatan:
o Blocking delay(): Penggunaan delay() secara ekstensif (terutama 1000 ms
dalam loop eksekusi dan 200 ms untuk debouncing) membuat mikrokontroler
"diam" selama durasi delay. Ini berarti mikrokontroler tidak dapat merespons
input tombol lain selama delay aktif, kecuali untuk tombol_stop yang diperiksa
di dalam loop for. Untuk aplikasi yang lebih kompleks atau responsif, teknik
non-blocking timer menggunakan fungsi millis() sangat direkomendasikan.
o Penggunaan goto: Meskipun berfungsi dalam konteks ini, penggunaan goto
umumnya dianggap praktik pemrograman yang kurang baik karena dapat
membuat alur program sulit dilacak dan dipelihara. Alternatif seperti flag
boolean dan loop while dengan kondisi multi-bagian akan lebih bersih.
o Debouncing Tombol Sederhana: delay(200) adalah metode debouncing yang
efektif, namun dapat memperlambat responsivitas. Teknik debouncing berbasis
state change (misalnya, membaca tombol beberapa kali dalam interval waktu
singkat untuk mengonfirmasi penekanan) akan lebih optimal.
o Unit Waktu yang Konsisten: Perbedaan label mS dan s untuk timer pada LCD
bisa membingungkan. Sebaiknya gunakan unit waktu yang konsisten
(misalnya, selalu detik) atau sediakan opsi untuk memilih unit.
o Batas Nilai EEPROM: Karena EEPROM.write() menyimpan satu byte (0-
255), nilai timer tidak dapat melebihi 255. Jika diperlukan durasi timer yang
lebih lama, perlu digunakan dua byte atau lebih untuk setiap nilai timer.

E. Kesimpulan

Berdasarkan praktikum yang telah dilaksanakan, dapat disimpulkan bahwa tujuan untuk
merancang dan membuat sistem kendali sekuensial menggunakan Arduino telah berhasil
dicapai. Sistem ini mampu mengendalikan empat output secara berurutan dengan durasi
yang dapat diatur oleh pengguna melalui antarmuka LCD dan tombol. Fitur penyimpanan
nilai ke EEPROM berhasil diimplementasikan, memastikan bahwa pengaturan timer tetap
tersimpan meskipun catu daya dimatikan. Fungsi stop darurat juga memberikan kontrol
yang efektif selama proses eksekusi. Meskipun implementasi dasar ini fungsional,
penggunaan teknik non-blocking timer di masa depan akan meningkatkan responsivitas
sistem secara signifikan, memungkinkan pemrosesan tugas lain secara bersamaan. Sistem
kendali sekuensial seperti ini memiliki aplikasi luas dalam otomatisasi industri, kontrol
proses, dan proyek-proyek elektronik yang membutuhkan urutan waktu yang presisi.

Anda mungkin juga menyukai