https://elektrologi.iptek.web.id/author/admin/
21/10/2022
Pada artikel ini diuraikan pembuatan lampu kedip berbasis mikrokontroler Arduino Nano
ATmega328 dengan model Finite State Machine (FSM). Lampu kedip sebenarnya dapat juga
dibuat dengan menggunakan model flowchart biasa. Tujuan tulisan ini untuk menunjukkan teknik
implementasi FSM yang sederhana. Untuk sistem yang sangat sederhana seperti lampu kedip
biasa, penggunaan FSM mungkin berlebihan (overkill). Pada sistem yang kompleks,
penggunaan FSM akan sangat memudahkan. Implementasi FSM dalam bentuk perangkat lunak
agak rumit, memerlukan latihan. Untuk itu pada artikel ini ditunjukkan tahap implementasi FSM
yang sederhana dulu. Setelah dapat memahami artikel ini, dapat dilanjutkan dengan membuat
FSM yang lebih kompleks.
Spesifikasi
Sistem yang dibuat adalah lampu kedip, dengan perioda 2 detik.
Perangkat Keras
Perangkat lunak dengan Arduino Nano ATmega328. Output dengan LED yang diseri dengan
resistor pembatas arus. Nilai resistor tidak kritis. Pada percobaan ini dipakai nilai resistor 1000
ohm. LED disambung ke port D3 pada Arduino Nano.
Model Sistem
Model FSM untuk lampu kedip adalah sebagai berikut.
Pada sistem ini tidak ada input.
Notasi FSM pada gambar ini diadopsi dari buku Lee & Seshia “Introduction to Embedded
Systems”.
Kondisi awal sistem adalah state OFF, dengan lampu mati. Pada state OFF, state berikutnya
adalah ON, tanpa syarat. Maka pada panah dari OFF ke ON diberi syarat ‘true’, artinya transisi
ini selalu terjadi tanpa syarat apapun. Transisi ini menyebabkan state berganti menjadi ON, dan
lampu output menyala. Output aktif ditandai dengan ‘out=1’.
Pada state ON, state selanjutnya adalah OFF tanpa syarat. Maka syarat transisi dari ON ke OFF
adalah ‘true’. Setiap kali transisi ini, output sistem adalah 1, maka ditulis sebagai ‘out=0’.
Perangkat Lunak
Pada sistem ini diperlukan pewaktuan (timing) agar lampu berkedip dengan frekuensi 0,5 Hz.
Untuk itu diperlukan FSM yang dihitung/dipanggil setiap 1 detik. Untuk membuat pemanggilan
periodik seperti ini dapat dilakukan dengan beberapa cara sebagai berikut:
interupsi timer
Pendefinisian state
#define ON 100
#define OFF 101
Inisialisasi FSM
void fsm_init(int *state, int *out) {
*state = OFF;
*out = 0;
}
Fungsi ini tidak menggunakan global variabel maupun static variabel, supaya didapat kode yang
lebih aman.
Output dari fungsi diberikan dengan passing pointer pada fungsi. Ada 2 parameter yaitu state
(state dari FSM) dan out (output). Kedua parameter diberikan menggunakan pointer.
Implementasi FSM ini menggunakan kode C standar yang dapat dijalankan di semua
mikrokontroler. Akses ke port output dipisahkan ke fungsi fsm_output(). Tujuannya agar fungsi ini
dapat dengan mudah diporting ke mikrokontroler lain.
Inisialisasi sistem
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(LED_OUTPUT, OUTPUT);
Serial.begin(115200);
int output = 0;
fsm_init(&state);
fsm_output(output);
}
void loop() {
int output = 0;
fsm(&state, &output);
fsm_output(output);
Serial.print("state: ");
Serial.print(state);
Serial.print(" output: ");
Serial.print( output);
Serial.println();
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500); //
digitalWrite(LED_BUILTIN, HIGH);
}
mencetak status FSM ke port serial. Data yang dicetak meliputi state dan output.
Jika FSM memiliki input ataupun variabel pada extended state machine, maka
perubahan state. Frekuensinya tidak akan tepat sekali di 1 Hz, namun untuk
Pengujian
Pengujian dilakukan dengan menjalankan program, kemudian mengamati kedipan lampu dan
output ke port serial.
Dari output serial tersebut dapat diamati perubahan state dan output serta waktu kejadiannya.
Dari output di atas dapat disimpulkan bahwa lampu berkedip dengan perioda sekitar 2 detik.
Perubahan state juga sesuai dengan model FSM.
Related Posts:
1. Prosesor untuk kuliah Pengolahan Sinyal Digital
2. Lampu Kedip Dengan Model Finite State Machine dan Interupsi Timer
3. Lampu On Off Dengan 1 Sakelar
4. Lampu kedip dengan duty cycle tertentu menggunakan model finite state
machine
5. Lampu Penyeberangan Jalan Dengan Extended State Machine
6. Lampu kedip dengan extended state machine