Perbedaan Arduino dan Programmable Logic Controller (PLC)

Arduino adalah kerangka kerja untuk membuat sistem elektronik open-source yang meliputi sejumlah perangkat keras dan perangkat lunak. Sebagian perangkat keras Arduino menggunakan prosesor/mikrokontroler dari keluarga ATmega. Perangkat keras yang kompatibel dengan Arduino meliputi modul mikrokontroler buatan Arduino serta berbagai modul mikrokontroler lain yang sudah dibuat librarynya supaya kompatibel dengan Arduino. Bahasa pemrograman yang dipakai untuk mengembangkan aplikasi pada Arduino adalah C/C++.

PLC atau Programmable Logic Controller atau terjemahannya “pengontrol yang dapat diprogram” adalah komputer untuk keperluan industri yang telah dibuat kokoh dan disesuaikan untuk mengontrol proses manufaktur di pabrik, seperti jalur perakitan, mesin-mesin pabrik, perangkat robot, atau aktivitas apa pun yang memerlukan keandalan tinggi, kemudahan pemrograman, dan diagnosa jika ada kesalahan proses.

Perangkat PLC untuk monitoring pabrik farmasi
Perangkat PLC untuk monitoring pabrik farmasi

Tabel Perbedaan Arduino dan Programmable Logic Controller

Aspek Arduino PLC
Keandalan tergantung implementasi hardware & software tinggi sesuai standar industri NEMA/IEC dan sebagainya
Ukuran relatif kecil relatif besar
Aplikasi bebas, fleksibel industri, otomasi
Bahasa pemrograman Relatif rendah: C dan C++

Relatif tinggi, seperti:

  • Ladder Diagram
  • Instruction List
  • Structured Text
  • Function Block Diagram
  • Sequential Function Chart
Skalabilitas Untuk sistem yang besar, perlu proses rekayasa yang cukup kompleks. mudah untuk dikembangkan, modul-modul sudah tersedia
Real Time Perlu rekayasa di antaranya dengan menggunakan sistem operasi real time (RTOS) sudah dirancang real-time
Mikrokontroler menggunakan berbagai macam mikrokontroler yang berpengaruh terhadap proses rekayasa sistem. Secara internal menggunakan mikrokontroler / mikroprosesor, namun pemakai tidak dipusingkan oleh jenis mikrokontroler yang dipakai.
Fleksibilitas Sangat fleksibel tergantung kreatifitas perekayasa / pembuat konfigurasi sesuai dengan modul yang tersedia dari pabrikan
Komputasi fleksibel tergantung jenis mikrokontroler yang dipakai relatif lambat
Biaya murah untuk sistem yang sederhana harga lebih mahal terutama untuk sistem yang sederhana
Bentuk & Ukuran bentuk bebas, karena Arduino hanya mikrokontrolernya saja Bentuk sudah tertentu, karena umumnya untuk dipasang di rak dengan standar ukuran tertentu
Arsitektur software semua periferal dan memori pada Arduino dapat diatur secara bebas. Arsitektur software bebas. sudah tertentu

Referensi

 

Perbedaan Arduino dan NodeMCU

Arduino adalah kerangka kerja untuk membuat sistem elektronik open-source yang meliputi sejumlah perangkat keras dan perangkat lunak. Sebagian perangkat keras Arduino menggunakan prosesor/mikrokontroler dari keluarga ATmega. Perangkat keras yang kompatibel dengan Arduino meliputi modul mikrokontroler buatan Arduino serta berbagai modul mikrokontroler lain yang sudah dibuat librarynya supaya kompatibel dengan Arduino. Bahasa pemrograman yang dipakai untuk mengembangkan aplikasi pada Arduino adalah C/C++.

NodeMCU adalah kerangka pengembangan IoT open source berbiaya murah. Perangkat NodeMCU meliputi firmware NodeMCU dan perangkat keras berbasis ESP32 dan ESP8266 yang kompatibel. Bahasa pemrograman yang dipakai untuk mengembangkan aplikasi pada NodeMCU adalah Lua

Pada awalnya yang disebut NodeMCU adalah software (firmware) tertentu yang dijalankan pada modul ESP8266 dan modul ESP-12. Saat ini NodeMCU juga dapat dijalankan di ESP32.

Arduino UNO (kiri), NodeMCU ESP8266 (kanan)
Arduino UNO (kiri), NodeMCU ESP8266 (kanan)

Hardware NodeMCU

Hardware NodeMCU ada yang berbasis ESP8266 dan ESP32.

NodeMCU berbasis ESP32 biasanya menggunakan board DevkitC

ESP32 DevkitC Clone tampak atas
ESP32 DevkitC Clone tampak atas

 

Referensi

  • https://en.wikipedia.org/wiki/NodeMCU
  •  

 

 

Perbedaan Arduino dan Mikrokontroler

Arduino adalah kerangka kerja untuk membuat sistem elektronik open-source yang meliputi sejumlah perangkat keras dan perangkat lunak. Sebagian perangkat keras Arduino menggunakan prosesor/mikrokontroler dari keluarga ATmega.

Mikrokontroler adalah komputer kecil pada suatu keping rangkaian integrasi (integrated circuit/IC) terpadu. Pada mikrokontrole sudah ada CPU (Central Processing Unit) , memori dan periferal. Mikrokontroler umumnya dirancang untuk aplikasi yang tertanam di perangkat lain, atau dikenal dengan istilah ‘embedded system’.

Perangkat keras Arduino menggunakan mikrokontroler, namun tidak semua mikrokontroler adalah bagian dari Arduino

Berikut ini contoh mikrokontroler ATmega8535 yang tidak termasuk Arduino.

Perangkat Keras Arduino

Berikut ini contoh perangkat keras Arduino yang menggunakan mikrokontroler dari keluarga ATmega

Nama Prosesor  
Arduino Nano Every ATmega4809  
Arduino Nano ATmega328  
Arduino UNO ATmega328  
Arduino Mega 2560 ATmega2560  
Arduino Leonardo ATmega32u4  

Berikut ini contoh perangkat keras Arduino yang tidak menggunakan mikrokontroler ATmega.

Nama Prosesor  
Arduino Nano 33 IoT SAMD21 Cortex®-M0+ 32bit low power ARM MCU  
Arduino Nano RP2040 Connect Raspberry Pi® RP2040  
Arduino Nano 33 BLE Sense nRF52840  

Berikut ini contoh mikrokontroler yang tidak termasuk pada sistem Arduino:

  • ATmega8535
  • ATmega8
  • ATmega16
  • ATmega32

Mikrokontroler Secara Umum

Mikrokontroler adalah komputer kecil pada suatu keping rangkaian integrasi (integrated circuit/IC) terpadu. Pada mikrokontrole sudah ada CPU (Central Processing Unit) , memori dan periferal. Mikrokontroler umumnya dirancang untuk aplikasi yang tertanam di perangkat lain, atau dikenal dengan istilah ‘embedded system’.

Pada masa lalu, mikrokontroler umumnya dibuat dalam 1 keping chip. Pada saat ini mulai dikenal konsep SoC (System on a Chip). SoC ini menggabungkan keping silikon berisi mikrokontroler dengan komponen-komponen lain yang lebih kompleks, misalnya GPU (Graphical Processing Unit) ataupun antarmuka WiFi.

Mikrokontroler digunakan dalam berbagai produk dan perangkat yang dikontrol secara otomatis, seperti sistem kontrol mesin mobil, perangkat medis, remote control, mesin kantor, alat rumah tangga, perkakas listrik, mainan, dan sistem tertanam (embedded) lainnya. Desain dengan mikrokontroler lebih ekonomis daripada mikroprosesor karena pada mikrokontroler memori dan perangkat input/output dapat digabung dalam 1 chip, sedangkan pada mikroprosesor memori dan perangkat input/output harus ditambahkan pada chip terpisah.

Mikrokontroler ada murni digital, ada juga yang campuran antara sinyal digital dan analog. Dalam konteks internet of things (IoT), mikrokontroler adalah teknik pengumpulan data yang ekonomis dan populer, mengukur dan mengendalikan dunia fisik sebagai perangkat ‘komputasi tepi’. Kontras dari ‘komputasi tepi’ adalah ‘komputasi awan’ atau ‘cloud computing’, di mana data & informasi dikumpulkan secara terpusat untuk kemudian semua data diolah secara terpusat.

Referensi

 

Perbedaan Arduino UNO dan ESP32

Berikut ini perbedaan utama antara Arduino UNO dan ESP32:

Parameter Arduino Uno ESP32
Prosesor ATmega328 Xtensa dual core / single core
Clock prosesor 16 MHz 160 MHz / 240 MHz
Ukuran 68,6 mm x 53,4 mm tergantung board
Analog Input 6 kanal, 10 bit ADC 18 kanal, 12 bit ADC
Tegangan catu daya 6 sampai 20 volt DC, namun disarankan hanya 7 sampai 12 volt DC 5 volt (USB)
Pin untuk Digital Input/Output 14 (6 dengan fitur Pulse Width Modulation) 34 (maksimum)
Berat 25 g tergantung board
Ukuran lebih kecil. shield Arduino Mega tidak dapat dipakai di Arduino UNO lebih besar. shield Arduino UNO dapat dipakai di Arduino Mega
Kapasitas flash memory 32 kilobyte 4 MB (eksternal denganm antar muka SDIO/SPI)
SRAM 2 kilobyte 320 kilobyte
EEPROM 1 kilobyte tidak ada secara khusus, namun dapat menggunakan sebagian memory Flash
Tegangan kerja 5 volt 3 volt
Konektor USB USB type B USB mini
Konektivitas Jaringan tidak ada WiFi 802.11, bluetooth
Port serial (UART) 1 (hardware) 3 (hardware)
I2C 1 kanal 2 kanal
Output analog tidak ada DAC (Digital to Analog Converter) ada DAC 2 kanal, 8 bit
SPI (Serial Peripheral Interface) 1 kanal 4 kanal

 

Arduino UNO R3, ESP32 Devkit-C  , ESP32 Lolin32 Lite
Arduino UNO R3, ESP32 Devkit-C , ESP32 Lolin32 Lite

Arduino UNO

Arduino UNO R3 asli
Arduino UNO R3 asli

Arduino UNO adalah rangkaian mikrokontroler berbasis ATmega328P. Arduino UNO memiliki 14 pin input/output digital (6 di antaranya dapat digunakan sebagai output PWM), 6 input analog, resonator keramik 16 MHz sebagai sumber clock, koneksi USB untuk catu daya dan komunikasi serial, colokan listrik DC, header ICSP (In Circuit Serial Programming), dan tombol reset. Papan rangkaian Arduino UNO berisi semua hal yang diperlukan untuk mendukung mikrokontroler. Untuk menggunakan Arduino UNO, cukup dengan disambung ke komputer dengan kabel USB atau sambungkan dengan adaptor AC-ke-DC atau baterai untuk memulai. Anda dapat mengotak-atik UNO Anda tanpa terlalu khawatir melakukan kesalahan. Pada kondisi terburuk, chip ATmega328 dengan kemasan DIP (Dual In line Package) dapat diganti jika rusak.

ESP32

ESP 32 adalah mikrokontroler yang memiliki banyak fitur pada prosesornya, dan dilengkapi dengan konektivitas Wi-Fi dan Bluetooth terintegrasi untuk berbagai macam aplikasi.

ESP32 mampu berfungsi dengan andal di lingkungan industri, dengan suhu pengoperasian mulai dari –40°C hingga +125°C. ESP32 dapat secara dinamis menghilangkan ketidaksempurnaan sirkuit eksternal dan beradaptasi dengan perubahan kondisi eksternal dengan dukungan rangkaian kalibrasi di dalamnya. Rangkaian kalibrasi ini memungkinkan WiFi pada ESP32 berfungsi tanpa perlu kalibrasi ekstra.

ESP32 dirancang untuk perangkat bergerak (mobile), perangkat elektronik yang dapat dikenakan (wearable electronics), dan aplikasi IoT. Konsumsi daya ESP32 dapat dibuat sangat rendah dengan kombinasi beberapa macam perangkat lunak khusus. ESP32 juga mencakup fitur-fitur canggih, seperti ‘clock gating‘ untuk mereduksi konsumsi daya, berbagai mode daya, dan penskalaan daya secara dinamis.

ESP32 dibuat sangat terintegrasi dengan sakelar pemilih antena di dalamnya, RF balun, power amplifier untuk radio, amplifier penerima radio dengan kebisingan rendah (low noise), filter, dan modul manajemen daya. ESP32 menambahkan fungsionalitas dan keserbagunaan yang banyak aplikasi dengan hanya memerlukan ruang kecil di PCB (Printed Circuit Board)

ESP32 dapat berfungsi sebagai sistem mandiri yang lengkap atau sebagai perangkat pembantu ke mikrokontroler lain, mengurangi overhead tumpukan komunikasi pada prosesor aplikasi utama. ESP32 dapat berinteraksi dengan sistem lain untuk menyediakan fungsionalitas Wi-Fi dan Bluetooth melalui antarmuka SPI/SDIO atau I2C/UART.

Modul ESP32 tersedia dalam berbagai versi, di antaranya adalah Lolin32 Lite dan DevkitC serta clone nya.

ESP32 memiliki beberapa kelebihan dibandingkan Arduino. Di antaranya sebagai berikut:

  • Prosesor di ESP32 dari keluarga Xtensa, lebih cepat dibandingkan prosesor ATmega dengan arsitektur AVR. ESP32 clocknya adalah 240 MHz, sedangkan Arduino UNO menggunakan ATmega328 dengan kecepatan maksimum 16 MHz
  • Jumlah core pada prosesornya lebih banyak. ESP32 mempunyai 2 core, sedangkan ATmega328 hanya 1 core saja.
  • Memori Flash yang terhubung lebih banyak. ESP32 memiliki Flash Memory sebesar 1 MB sampai 16 MB. Arduino UNO memiliki memori flash sebesar 32 KB. Model Arduino lain ada yang memiliki flash lebih besar, seperti ATmega2560 yang memiliki flash sebesar 256 KB
  • Memori RAM lebih besar. ESP32 memiliki SRAM 520 KiB, sedangkan Arduino UNO memiliki SRAM hanya 2 KB. ATmega2560 memiliki SRAM sebesar 8 kilobyte
  • ESP32 memiliki kemampuan nirkabel WiFi 802.11 dan Bluetooth. Fitur ini di Arduino UNO tidak ada, harus menambah modul/shield.

Referensi

Perbedaan Arduino dan ATmega

Arduino adalah kerangka kerja untuk membuat sistem elektronik open-source yang meliputi sejumlah perangkat keras dan perangkat lunak. Sebagian perangkat keras Arduino menggunakan prosesor/mikrokontroler dari keluarga ATmega.

ATmega adalah keluarga mikrokontroler dari arsitektur AVR yang diproduksi oleh perusahaan Atmel. Saat ini perusahaan Atmel sudah diakuisisi oleh Microchip.

Perangkat Keras Arduino

Berikut ini contoh perangkat keras Arduino yang menggunakan prosesor ATmega

Nama Prosesor  
Arduino Nano Every ATmega4809  
Arduino Nano ATmega328  
Arduino UNO ATmega328  
Arduino Mega 2560 ATmega2560  
Arduino Leonardo ATmega32u4  

Berikut ini contoh perangkat keras Arduino yang tidak menggunakan prosesor ATmega

Nama Prosesor  
Arduino Nano 33 IoT SAMD21 Cortex®-M0+ 32bit low power ARM MCU  
Arduino Nano RP2040 Connect Raspberry Pi® RP2040  
Arduino Nano 33 BLE Sense nRF52840  
     
     
     

Perangkat Lunak Arduino

Berikut ini perangkat lunak Arduino

  • Arduino IDE (versi terbaru adalah 2.0.1) untuk pengembangan perangkat lunak di komputer laptop/desktop.
  • Arduino Web Editor untuk mengembangkan perangkat lunak secara online. Data-data disimpan di cloud server.

Mikrokontroler ATmega

Berikut ini beberapa contoh mikrokontroler ATmega yang dipakai di perangkat keras Arduino

  • ATmega168
  • ATmega328
  • ATmega2560
  • ATmega32u4
  • ATmega4809

Berikut ini beberapa contoh mikrokontroler ATmega yang tidak dipakai di perangkat keras Arduino

Berikut ini contoh prosesor ATmega168 yang dipakai di Arduino

Berikut ini contoh rangkaian berbasis ATmega8535 yang bukan menggunakan Arduino

Referensi

 

 

Perbedaan Antara Arduino UNO dan Raspberry PI 3

Berikut ini perbedaan utama antara Arduino Uno dan Arduino Nano

Parameter Arduino Uno Raspberry PI 3
Prosesor ATmega328 (AVR), single core, 8 bit ARM Cortex A53, quad core, 64 bit.
Clock 16 MHz 1,2 GHz
Memori RAM 2 kilobyte 1 gigabyte
Memori EEPROM 1 kilobyte tidak ada
Memori Flash 32 kilobyte (internal) tidak ada internal. Memori flashmenggunakan SD card eksternal
Input Analog 6 pin tidak ada
Input/Output Digital 14 (6 dengan fitur Pulse Width Modulation) 40 pin GPIO, namun tidak semuanya dipakai untuk input/output
Sistem Operasi tidak perlu sistem operasi, namun dapat menggunakan sistem operasi real time seperti FreeRTOS Raspberry Pi OSRaspberry Pi Debian, dan berbagai sistem operasi berbasis Linux, Windows IoT Core
Bahasa Pemrograman C / C++ praktis semua bahasa pemrograman yang dapat dijalankan di sistem operasi Linux
Port USB 1 buah USB type B untuk port serial dan catu daya 1 buah mini USB untuk catu daya
4 buah USB type-A untuk memasang periferal seperti keyboard-USB dan mouse-USB
Koneksi jaringan komputer tidak ada Ethernet 802.3 dan Wifi 802.11 (2,4 GHz)
Tegangan Kerja 5 volt 3,3 volt
Catu Daya 5 volt (USB), 6 ~ 12 volt (pin catu daya). Konsumsi arus untuk prosesor maksimum adalah 14 mA. Konsumsi arus untuk periferal output maksimum 200 mA. 5 VDC, 2,5 ampere
Ukuran 68,6 mm x 53,4 mm 85 mm x 56 mm
berat 37 g 50 g
harga Rp 350.000 ~ Rp 450.000 Rp 3,5 juta (model B+)

Arduino UNO

Arduino UNO R3 asli
Arduino UNO R3 asli

Arduino UNO adalah rangkaian mikrokontroler berbasis ATmega328P. Arduino UNO memiliki 14 pin input/output digital (6 di antaranya dapat digunakan sebagai output PWM), 6 input analog, resonator keramik 16 MHz sebagai sumber clock, koneksi USB untuk catu daya dan komunikasi serial, colokan listrik DC, header ICSP (In Circuit Serial Programming), dan tombol reset. Papan rangkaian Arduino UNO berisi semua hal yang diperlukan untuk mendukung mikrokontroler. Untuk menggunakan Arduino UNO, cukup dengan disambung ke komputer dengan kabel USB atau sambungkan dengan adaptor AC-ke-DC atau baterai untuk memulai. Anda dapat mengotak-atik UNO Anda tanpa terlalu khawatir melakukan kesalahan. Jika ATmega328 rusak dapat diganti jika rusak.

Raspberry PI Model 3

Spesifikasi Raspberry Pi secara ringkas

The Raspberry Pi 3 Model B+ is the final revision in the Raspberry Pi 3 range.

  • Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz
  • 1GB LPDDR2 SDRAM
  • 2.4GHz and 5GHz IEEE 802.11.b/g/n/ac wireless LAN, Bluetooth 4.2, BLE
  • Gigabit Ethernet over USB 2.0 (maximum throughput 300 Mbps)
  • Extended 40-pin GPIO header
  • Full-size HDMI
  • 4 USB 2.0 ports
  • CSI camera port for connecting a Raspberry Pi camera
  • DSI display port for connecting a Raspberry Pi touchscreen display
  • 4-pole stereo output and composite video port
  • Micro SD port for loading your operating system and storing data
  • 5V/2.5A DC power input
  • Power-over-Ethernet (PoE) support (requires separate PoE HAT)

Memilih Arduino Atau Raspberry Pi

Arduino dan Raspberry memiliki kelebihan dan kekurangan masing-masing. Berikut ini beberapa saran untuk melakukan pemilihan.

Faktor-faktor yang mengarah ke Raspberry Pi:

  • Perlu menjalankan aplikasi perlu dijalankan di sistem operasi Linux, misal database MySQL, web server Apache, dan sebagainya.
  • Aplikasi menggunakan bahasa pemrograman selain C/C++, misal Python, PHP, Java dan sebagainya.
  • Perlu terhubung ke internet lewat ethernet atau wifi
  • Tidak perlu input analog. Jika terpaksa perlu input analog, maka perlu menambah ADC eksternal seperti MCP3008, ADC1115 , HX711
  • Perlu output HDMI ke monitor
  • Perlu kamera
  • Perlu memori besar, baik memori RAM ataupun memori Flash.
  • Perlu kecepatan komputasi besar
  • Perlu periferal USB, seperti keyboard, mouse
  • Fasih menggunakan sistem operasi berbasis Linux

Faktor-faktor yang mengarahkan ke Arduino

  • Harga Arduino lebih murah
  • Aplikasi sederhana, sehingga sumber daya CPU dan memori yang diperlukan aplikasi sedikit.
  • Aplikasi mobile dengan sumber energi solar cell atau baterai, sehingga perlu hemat energi.
  • Tidak perlu konektivitas jaringan komputer, seperti ethernet atau wifi.
  • Perlu input analog
  • Perlu fitur real time dengan sistem operasi real time seperti FreeRTOS.
  • Porting real time operating system (RTOS) untuk Raspberry Pi tersedia untuk beberapa RTOS, namun tidak sepopuler pada Arduino atau mikrokontroler lain.
  • erlu akses langsung ke interupsi pada mikroprosesor. Pada Raspberry Pi, interupsi diurus oleh sistem operasi, jadi tidak dapat diakses langsung oleh pengguna.

Referensi

Perbedaan Arduino UNO dan Arduino Mega 2560

Berikut ini perbedaan utama antara Arduino UNO dan Arduino Mega

Parameter Arduino Uno Arduino Mega
Prosesor ATmega328 ATmega2560
Ukuran 68,6 mm x 53,4 mm 101,52 mm x  53,3 mm
Analog Input 6 16
Tegangan catu daya 6 sampai 20 volt DC, namun disarankan hanya 7 sampai 12 volt DC 7 sampai 12 volt DC
Pin untuk Digital Input/Output 14 (6 dengan fitur Pulse Width Modulation) 54 (6 dengan fitur Pulse Width Modulation)
Berat 25 g 37 g
Ukuran lebih kecil. shield Arduino Mega tidak dapat dipakai di Arduino UNO lebih besar. shield Arduino UNO dapat dipakai di Arduino Mega
Kapasitas flash memory 32 kilobyte 256 kilobyte
SRAM 2 kilobyte 8 kilobyte
EEPROM 1 kilobyte 4 kilobyte

Kesamaan antara Arduino UNO dan Mega:

Parameter Nilai
Clock prosesor 16 MHz
Digital Input/Output 14
EEPROM 1 kilobyte
Tegangan kerja 5 volt
Konektor USB USB type B
Tegangan kerja 5 volt

Arduino UNO

Arduino UNO R3 asli
Arduino UNO R3 asli

Arduino UNO adalah rangkaian mikrokontroler berbasis ATmega328P. Arduino UNO memiliki 14 pin input/output digital (6 di antaranya dapat digunakan sebagai output PWM), 6 input analog, resonator keramik 16 MHz sebagai sumber clock, koneksi USB untuk catu daya dan komunikasi serial, colokan listrik DC, header ICSP (In Circuit Serial Programming), dan tombol reset. Papan rangkaian Arduino UNO berisi semua hal yang diperlukan untuk mendukung mikrokontroler. Untuk menggunakan Arduino UNO, cukup dengan disambung ke komputer dengan kabel USB atau sambungkan dengan adaptor AC-ke-DC atau baterai untuk memulai. Anda dapat mengotak-atik UNO Anda tanpa terlalu khawatir melakukan kesalahan. Pada kondisi terburuk, chip ATmega328 dengan kemasan DIP (Dual In line Package) dapat diganti jika rusak.

Arduino Mega 2560

Arduino Mega 2560 adalah modul mikrokontroler berbasis prosesor ATmega2560. Arduino Mega 2560 memiliki 54 pin input/output digital (15 di antaranya dapat digunakan sebagai output Pulse Width Modulation(PWM) / Modulasi Lebar Pulsa), 16 input analog, 4 UART (port serial perangkat keras), osilator kristal 16 MHz, koneksi USB, colokan catu daya, header ICSP (In Circuit Serial Programming), dan tombol reset. Modul berisi semua komponen yang diperlukan untuk menjalankan sistem mikrokontroler; Untuk mulai menggunakan/mengaktifkan, cukup dengan menyambungkan modul ini ke komputer dengan kabel USB atau nyalakan dengan adaptor AC-ke-DC atau baterai. Modul Arduino Mega 2560 kompatibel dengan sebagian besar perisai yang dirancang untuk Arduino UNO dan modul sebelumnya seperti Arduino Duemilanove atau Arduino Diecimila.

Arduino Mega 2560 adalah versi baru dari Arduino Mega. Perbedaan utama Arduino Mega 2560 dengan Arduino Mega adalah prosesor yang dipakai. Arduino Mega 2560  menggunakan prosesor ATmega 2560, sedangkan Arduino Mega menggunakan prosesor ATmega 1280.

Referensi

Perbedaan Arduino UNO dan Nano

Berikut ini perbedaan utama antara Arduino Uno dan Arduino Nano

Parameter Arduino Uno Arduino Nano
Ukuran 68,6 mm x 53,4 mm 18 mm x 45 mm
Konektor USB USB type B USB mini
Analog Input 6 8
Tegangan catu daya 6 sampai 20 volt DC, namun disarankan hanya 7 sampai 12 volt DC 7 sampai 12 volt DC
Pin untuk Digital Input/Output 14 (6 dengan fitur Pulse Width Modulation) 22 (6 dengan fitur Pulse Width Modulation)
Berat 25 g 7 g
Ukuran lebih besar, terutama dirancang untuk dipasangi Arduino Shield lebih kecil, terutama dirancang untuk dipasang di breadboard
     
     

Kesamaan antara Arduino UNO dan Nano:

Parameter Nilai
Prosesor ATmega328 (arsitektur AVR)
Clock prosesor 16 MHz
Digital Input/Output 14
EEPROM 1 kilobyte
SRAM 2 kilobyte
Flash memory 32 kilobyte ( 2 kilobyte  untuk boot loader)
   
   
   
Arduino UNO dan Arduino Nano
Arduino UNO (atas)  dan Arduino Nano (bawah)

Arduino UNO

Arduino UNO R3 asli
Arduino UNO R3 asli

Arduino UNO adalah rangkaian mikrokontroler berbasis ATmega328P. Arduino UNO memiliki 14 pin input/output digital (6 di antaranya dapat digunakan sebagai output PWM), 6 input analog, resonator keramik 16 MHz sebagai sumber clock, koneksi USB untuk catu daya dan komunikasi serial, colokan listrik DC, header ICSP (In Circuit Serial Programming), dan tombol reset. Papan rangkaian Arduino UNO berisi semua hal yang diperlukan untuk mendukung mikrokontroler. Untuk menggunakan Arduino UNO, cukup dengan disambung ke komputer dengan kabel USB atau sambungkan dengan adaptor AC-ke-DC atau baterai untuk memulai. Anda dapat mengotak-atik UNO Anda tanpa terlalu khawatir melakukan kesalahan. Pada kondisi terburuk, chip ATmega328 dengan kemasan DIP (Dual In line Package) dapat diganti jika rusak.

Berikut ini contoh Arduino UNO dengan sebuah shield tampilan LCD yang dirancang untuk dipasang di atas Arduino UNO.

TFT LCD 2.4" Shield untuk Arduino UNO
Arduino UNO di sebelah TFT LCD

Arduino Nano

Arduino Nano asli
Arduino Nano asli

Arduino Nano adalah rangkaian mikrokontroler berbasis ATmega328 dalam kemasan kecil, lengkap, dan mudah dipasang di breadboard. Ini memiliki fungsi yang kurang lebih sama dengan Arduino UNO, dengan bentuk yang lebih kecil. Arduino Nano tidak memiliki colokan listrik DC, dan konektor USB yang dipakai adalah USB mini-B, lebih kecil daripada USB type-A di Arduino UNO.

Berikut ini contoh Arduino Nano dipasang di sebuah breadboard.

Rangkaian Arduino Nano dan MCP4725 di breadboard
Rangkaian Arduino Nano dan MCP4725 di breadboard

Referensi

 

1 volt berapa mv

1 volt berapa mv?

Jawaban: 1 volt adalah 1000 mv

Volt dan milivolt

‘Volt’ adalah satuan besaran listrik. Satuan ini ditulis ‘volt’ (huruf kecil) atau disingkat ‘V’ (huruf besar).

‘mv’ maksudnya adalah millivolt, atau disingkat mV. milli artinya seperseribu. Jadi 1 volt sama dengan 1000 milli volt.

Awalan SI

‘milli’ adalah awalan (prefiks) untuk satuan. Daftar prefiks adalah sebagai berikut:

 
Awalan Basis 1000 Basis 10 Desimal Sebutan Adopsi[nb 1]
Nama Simbol Skala pendek Skala panjang
yota Y  10008  1024 1.000.000.000.000.000.000.000.000  septiliun  kuadriliun 1991
zeta Z  10007  1021 1.000.000.000.000.000.000.000  sekstiliun  triliar 1991
eksa E  10006  1018 1.000.000.000.000.000.000  kuintiliun  triliun 1975
peta P  10005  1015 1.000.000.000.000.000  kuadriliun  biliar 1975
tera T  10004  1012 1.000.000.000.000  triliun  biliun 1960
giga G  10003  109 1.000.000.000  biliun  miliar 1960
mega M  10002  106 1.000.000  juta 1873
kilo k  10001  103 1.000  ribu 1795
hekto h  10002/3  102 100  ratus 1795
deka da  10001/3  101 10  puluh 1795
   10000  100 1  satu
desi d  1000−1/3  10−1 0,1  sepersepuluh 1795
senti c  1000−2/3   10−2 0,01  seperseratus 1795
mili m  1000−1  10−3 0,001  seperseribu 1795
mikro µ  1000−2  10−6 0,000001  sepersejuta 1873
nano n  1000−3  10−9 0,000000001  sepersebiliun  sepersemiliar 1960
piko p  1000−4  10−12 0,000000000001  sepersetriliun  sepersebiliun 1960
femto f  1000−5  10−15 0,000000000000001  sepersekuadriliun  sepersebiliar 1964
ato a  1000−6  10−18 0,000000000000000001  sepersekuintiliun  sepersetriliun 1964
zepto z  1000−7  10−21 0,000000000000000000001  sepersesekstiliun  sepersetriliar 1991
yokto y  1000−8  10−24  0,000000000000000000000001  seperseseptiliun  sepersekuadriliun 1991
 

Referensi

 

Real Time Clock

Real Time Clock (RTC) atau ‘Jam Waktu Nyata’ adalah perangkat elektronik yang mengukur berjalannya waktu. Real Time Clock dipakai sebagai jam atau referensi waktu pada sistem elektronik.

Real Time Clock umumnya memiliki catu daya tersendiri, sehingga kalau catu daya utama mati, jam pada Real Time Clock masih dapat berjalan sendiri.

Catu daya untuk RTC umumnya menggunakan baterai lithium, karena baterai lithium memiliki waktu penyimpanan yang lama. Artinya baterai lithium tidak berkurang isinya walaupun disimpan saja. Alternatif selain baterai lithium adalah menggunakan supercapacitor.

RTC umumnya ada di motherboard komputer desktop maupun laptop. Supaya waktu tidak hilang, RTC ini dilengkapi baterai lithium.

 

Contoh komponen RTC:

Dallas DS1307

DS1307 real time clock
DS1307 real time clock

Dallas DS1287 Real Time Clock

Dallas DS1287 real time clock tampak atas dan bawah
Dallas DS1287 real time clock

Dallas DS1387

Berikut ini contoh penggunaan Dallas DS1387 di sebuah motherboard komputer desktop

Istilah Real Time Clock mirip dengan Real Time System, namun memiliki pengertian yang sangat berbeda

Referensi

Perbedaan Antara Resistor dan Transistor

Resistor adalah komponen pasif dua terminal yang memiliki sifat melawan arus. Transistor adalah komponen aktif dari bahan semikonduktor yang berfungsi sebagai penguat atau sakelar.

Resistor

Resistor di bidang elektronika adalah komponen pasif yang memiliki tahanan listrik di dalamnya. Resistor tersusun dari material konduktor listrik. Resistor memiliki dua terminal. Hubungan antara arus dan tegangan pada resistor mengikuti hukum ohm sebagai berikut:

V = I x R

Dengan:
V: tegangan listrik dengan satuan volt (V)
I: arus listrik dengan satuan ampere (A)
R: resistansi pada resistor dengan satuan ohm (Ω)

Berikut ini contoh komponen resistor dalam berbagai bentuk dan ukuran.

Macam-macam resistor

Transistor

Berikut ini contoh foto transistor:

Parameter Resistor Transistor
Peranan menghambat arus listrik penguat atau sakelar
Jumlah kutub 2 umumnya 3
Persamaan matematis V = I x R  
Bahan / material karbon, thick film, thin film, metal film, metal oxide film, wire wound, metal foil semikonduktor seperti silikon , germanium dan sebagainya
Menyimpan energi tidak tidak
Aktif/pasif pasif aktif
     
     
     

Referensi

 

 

Perbedaan Antara Resistor, Kapasitor dan Induktor

Resistor adalah komponen elektronika yang sifatnya menghambat arus listrik, Kapasitor adalah komponen elektronika yang sifatnya menyimpan energi dalam bentuk medan listrik. Induktor adalah komponen elektronika yang sifatnya menyimpan energi dalam bentuk medan magnetik pada arus yang mengalir.

Kapasitor dikenal juga sebagai kondensator.

 

Berikut ini penjelasan lebih panjang dari hal tersebut.

Resistor

Resistor di bidang elektronika adalah komponen pasif yang memiliki tahanan listrik di dalamnya. Resistor tersusun dari material konduktor listrik. Resistor memiliki dua terminal. Hubungan antara arus dan tegangan pada resistor mengikuti hukum ohm sebagai berikut:

V = I x R

Dengan:
V: tegangan listrik dengan satuan volt (V)
I: arus listrik dengan satuan ampere (A)
R: resistansi pada resistor dengan satuan ohm (Ω)

Berikut ini contoh komponen resistor dalam berbagai bentuk dan ukuran.

Macam-macam resistor

Kapasitor

Kapasitor/kondensator di bidang elektronika dalah komponen pasif yang menyimpan energi listrik dalam bentuk medan listrik. Kapasitor tersusun dari 2 keping penghantar listrik yang dipisahkan oleh bahan isolator listrik.

Hubungan antara muatan listrik dan tegangan pada kapasitor adalah sebagai berikut:

C = Q / V
Dengan:
C: nilai kapasitansi kapasitor dengan satuan farad (F)
Q: muatan listrik dengan satuan coulomb (C)
V: tegangan listrik dengan satuan volt (V)

Berikut ini kapasitor dalam berbagai bentuk:

Induktor

Induktor adalah komponen elektronika pasif yang dapat menyimpan energi pada medan magnet yang ditimbulkan oleh arus listrik yang melintasinya.

Berikut ini beberapa contoh komponen induktor.

Beberapa macam induktor

 

Parameter Resistor Kapasitor Induktor
Peranan menghambat arus listrik menyimpan energi dalam medan listrik menyimpan energi dalam medan magnet
Jumlah kutub 2 2 2
Persamaan matematis V = I x R C = Q / V  
Bahan / material karbon, thick film, thin film, metal film, metal oxide film, wire wound, metal foil multilayer ceramic, ceramic disc, multilayer polyester film, polystyrene, aluminium electrolytic konduktor umumnya dalam bentuk gulungan. Sering diberi inti dari bahan feromagnetik
Menyimpan energi tidak dalam medan listrik dalam medan magnet
Aktif/pasif pasif pasif pasif
       
       
       

 

Referensi

 

Lampu Kedip Dengan Model Finite State Machine dan FreeRTOS

Artikel ini adalah pengembangan dari artikel “Lampu Kedip Dengan Model Finite State Machine“. Pada artikel tersebut pewaktuan 1 detik menggunakan fungsi delay() dari Arduino. Pada artikel ini digunakan vTaskDelay pada sistem operasi real time FreeROTS untuk mendapatkan perioda 1 detik untuk eksekusi Finite State Machine (FSM).

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.

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:

  • delay pada Arduino atau library lain
  • interupsi timer
  • delay pada Real Time Operating System misal FreeRTOS

Pada implementasi ini yang dibuat adalah menggunakan FreeRTOS. Delay menggunakan fungsi vTaskDelay() pada FreeRTOS. Penjelasan tentang FreeRTOS di Arduino dapat dibaca di artikel https://www.arduino.cc/reference/en/libraries/freertos/

Model diagram alir (flowchart) perangkat lunak adalah sebagai berikut.

Diagram alir perangkat lunak berbasis FreeRTOS

Aplikasi memiliki 2 super loop. Super loop pertama ada di main program, tidak berisi apa-apa. Super loop kedua ada di Task FSM.

Kode lengkap dapat dilihat di repository https://github.com/waskita/embedded/blob/master/kedip/nano-fsm-freertos/nano-fsm-freertos.ino

Bagian Awal

#include "Arduino_FreeRTOS.h"

#define ON    100
#define OFF   101

#define LED_OUTPUT 3
int state = OFF;
TaskHandle_t xHandle1 = NULL;

Inisialisasi Sistem

void setup() {
  int output = 0;
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(LED_OUTPUT, OUTPUT);
  Serial.begin(115200);

  Serial.print("portTICK_PERIOD_MS: ");
  Serial.print(portTICK_PERIOD_MS);
  Serial.println();

  fsm_init(&state);
  fsm_output(output);

  xTaskCreate(
    TaskFSM
    ,  "TaskFSM"  // A name just for humans
    ,  100  // stacksize
    ,  NULL
    ,  2  // Priority, with 3 (configMAX_PRIORITIES - 1) being the highest, and 0 being the lowest.
    ,  &xHandle1 );
}

Implementasi Inisialisasi Finite State Machine

Implementasi ini serupa dengan di artikel “Lampu Kedip Dengan Model Finite State Machine

void fsm_init(int *state, int *out) {
  *state = OFF;
  *out = 0;
}

Implementasi Finite State Machine

Implementasi ini serupa dengan di artikel “Lampu Kedip Dengan Model Finite State Machine

void fsm(int  *state, int *out) {
  switch (*state) {
    case ON: {
        *state = OFF;
        *out = 0;
        break;
      }
    case OFF: {
        *state = ON;
        *out = 1; // nyalakan output
        break;
      }
  }
}

Implementasi Output FSM

Implementasi ini serupa dengan di artikel “Lampu Kedip Dengan Model Finite State Machine

void fsm_output(int output_value) {
  if (output_value == 1) {
    digitalWrite(LED_OUTPUT, HIGH);
  } else {
    digitalWrite(LED_OUTPUT, LOW);
  }
}

Implementasi Task / Thread

static void TaskFSM(void *pvParameters) 
{
  TickType_t xLastWakeTime;
  /* The xLastWakeTime variable needs to be initialised with the current tick
    count.  Note that this is the only time we access this variable.  From this
    point on xLastWakeTime is managed automatically by the vTaskDelayUntil()
    API function. */
  xLastWakeTime = xTaskGetTickCount();
  while (1)
  {
    int output = 0;
    fsm(&state, &output);
    if (output == 1) {
      digitalWrite(LED_OUTPUT, HIGH);
    } else {
      digitalWrite(LED_OUTPUT, LOW);
    }
    Serial.print("state: ");
    Serial.print(state);
    Serial.print(" output: ");
    Serial.print( output);
    Serial.println();
    vTaskDelayUntil( &xLastWakeTime, ( 1000 / portTICK_PERIOD_MS ) ); // perioda 1 detik
  }
}

Pengujian

Pengujian dilakukan dengan menjalankan program, kemudian mengamati kedipan lampu dan output ke port serial.

Pada output serial akan muncul tampilan seperti berikut ini:

16:23:36.204 -> state: 100 output: 1
16:23:37.280 -> state: 101 output: 0
16:23:38.302 -> state: 100 output: 1
16:23:39.324 -> state: 101 output: 0
16:23:40.390 -> state: 100 output: 1
16:23:41.415 -> state: 101 output: 0
16:23:42.427 -> state: 100 output: 1
16:23:43.466 -> state: 101 output: 0
16:23:44.534 -> state: 100 output: 1
16:23:45.557 -> state: 101 output: 0
16:23:46.581 -> state: 100 output: 1
16:23:47.652 -> state: 101 output: 0
16:23:48.674 -> state: 100 output: 1

Dari output serial tersebut nampak perubahan state dan output terjadi sesuai rancangan.

Waktu perubahan tidak tepat 1 detik, terlihat bergeser sedikit. Penyebabnya kemungkinan karena implementasi timer tick pada FreeRTOS Arduino menggunakan Watchdog Timer, bukan Timer 0, Timer 1 ataupun Timer 2. Watchdog Timer pada Arduino menggunakan osilator RC yang tidak setepat osilator kristal.

Video

Lampu Kedip Dengan Model Finite State Machine dan Interupsi Timer

Artikel ini adalah pengembangan dari artikel “Lampu Kedip Dengan Model Finite State Machine“. Pada artikel tersebut pewaktuan 1 detik menggunakan fungsi delay() dari Arduino. Pada artikel ini digunakan Timer 1 untuk mendapatkan perioda 1 detik untuk eksekusi Finite State Machine (FSM).

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.

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:

  • delay pada Arduino atau library lain
  • interupsi timer
  • delay pada Real Time Operating System misal FreeRTOS

Pada implementasi ini yang dibuat adalah menggunakan interupsi Timer 1 pada Arduino.

Model diagram alir (flowchart) perangkat lunak adalah sebagai berikut.

 

Inisialisasi di fungsi setup() hanya dipanggil sekali.

loop() dapat dikosongkan , karena tidak melakukan apa-apa di situ.

Interupsi Timer 1 dipanggil setiap detik oleh periferal Timer 1 pada Arduino.

Untuk mengaktifkan Timer 1 pada aplikasi ini dipakai modul TimerOne (https://www.arduino.cc/reference/en/libraries/timerone/).

Modul ini dapat diinstall secara manual, ataupun dari Library Manager di Arduino.

Untuk instalasi manual, unzip isi library ke direktori Arduino/hardware/libraries/Timer1/ 

Untuk instalasi dengan library manager, cari library timerone dari Sketch -> Include Library -> Manage Libraries

Source code dapat dilihat di https://github.com/waskita/embedded/tree/master/kedip/nano-fsm-timer1

Penjelasan isi source code sebagai berikut.

Bagian Awal

#include <TimerOne.h>
#define ON    100
#define OFF   101
#define LED_OUTPUT 3
int state = OFF;

Implementasi Inisialisasi

void setup() {
  int output = 0;
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(LED_OUTPUT, OUTPUT);
  Serial.begin(115200);
  fsm_init(&state,&output);
  fsm_output(output);
  Timer1.initialize(1000000); // delay dalam microsecond
  Timer1.attachInterrupt(ISR_Timer1);
}

Implementasi FSM Init

Implementasi ini serupa dengan di artikel “Lampu Kedip Dengan Model Finite State Machine

void fsm_init(int *state, int *out) {
  *state = OFF;
  *out = 0;
}

Implementasi FSM

Implementasi ini serupa dengan di artikel “Lampu Kedip Dengan Model Finite State Machine

void fsm(int  *state, int *out) {
  switch (*state) {
    case ON: {
        *state = OFF;
        *out = 0;
        break;
      }
    case OFF: {
        *state = ON;
        *out = 1; // nyalakan output
        break;
      }
  }
}

Implementasi Output FSM

Implementasi ini serupa dengan di artikel “Lampu Kedip Dengan Model Finite State Machine

void fsm_output(int output_value) {
  if (output_value == 1) {
    digitalWrite(LED_OUTPUT, HIGH);
  } else {
    digitalWrite(LED_OUTPUT, LOW);
  }
}

Implementasi Interrupt Service Routine (ISR)

Fungsi ini dipanggil setiap kali terjadi interupsi timer 1. Setiap kali ada interupsi, dilakukan hal berikut:

  • menghitung transisi state
  • mengirim output ke port digital I/O pada Arduino
  • mengirim status ke port serial. status ini dipakai untuk debugging / monitoring. Jika dipakai pada sistem sesungguhnya (production), bagian monitoring ini tidak wajib ada.
void ISR_Timer1(void)
{
  int output = 0;
  fsm(&state, &output);
  fsm_output(output);
  Serial.print("state: ");
  Serial.print(state);
  Serial.print(" output: ");
  Serial.print( output);
  Serial.println();
}

Pengujian

Pengujian dilakukan dengan menjalankan program, kemudian mengamati kedipan lampu dan output ke port serial.

Pada output serial akan muncul tampilan seperti berikut ini:

14:40:39.834 -> state: 100 output: 1
14:40:40.812 -> state: 101 output: 0
14:40:41.838 -> state: 100 output: 1
14:40:42.813 -> state: 101 output: 0
14:40:43.834 -> state: 100 output: 1
14:40:44.808 -> state: 101 output: 0
14:40:45.836 -> state: 100 output: 1
14:40:46.813 -> state: 101 output: 0
14:40:47.844 -> state: 100 output: 1
14:40:48.815 -> state: 101 output: 0
14:40:49.835 -> state: 100 output: 1
14:40:50.812 -> state: 101 output: 0

Pada serial monitor Arduino kita dapat mengaktifkan timestamp, sehingga kita dapat mengecek apakah pewaktuan pada sistem ini sudah sesuai dengan yang spesifikasi.

Video

under construction

Lampu Kedip Dengan Model Finite State Machine

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.

FSM dievaluasi setiap detik.

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:

  • delay pada Arduino atau library lain
  • interupsi timer
  • delay pada Real Time Operating System misal FreeRTOS

Pada implementasi ini yang dibuat adalah menggunakan delay dengan Arduino

Model diagram alir (flowchart) software adalah sebagai berikut.

Implementasi perangkat lunak dapat dilihat di file berikut ini: https://github.com/waskita/embedded/blob/master/kedip/nano-fsm/nano-fsm.ino

Penjelasan isi source code sebagai berikut.

Pendefinisian state

#define ON    100
#define OFF   101

Inisialisasi FSM

void fsm_init(int *state, int *out) {
  *state = OFF;
  *out = 0;
}

Implementasi Finite State Machine

Finite State Machine diimplementasikan di fungsi fsm(). Pada fungsi ini ada 2 state yang ditangani yaitu ON dan OFF. Pemilihan state dilakuan dengan perintah switch() di bahasa C. Pada setiap case diimplementasikan setiap transisi yang ada pada model FSM di atas.

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.

void fsm(int  *state, int *out) {
  switch (*state) {
    case ON: {
        *state = OFF;
        *out = 0;
        break;
      }
    case OFF: {
        *state = ON;
        *out = 1; 
        break;
      }
  }
}

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);
}

Superloop / Main loop

Berikut ini potongan kode dari main loop.

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);
}

Proses yang dilakukan di main loop adalah sebagai berikut:

  • Perhitungan nilai state di FSM
  • Output ke pin output digital dengan fungsi fsm_output()
  • mencetak status FSM ke port serial. Data yang dicetak meliputi state dan output. Jika FSM memiliki input ataupun variabel pada extended state machine, maka nilai-nilai ini juga perlu dicetak.
  • Melakukan delay selama 1 detik. Pada implementasi delay ini ditambahkan fitur lampu kedip, sehingga LED_BUILTIN akan berkedip dengan frekuensi sekitar 1 Hz. Lampu kedip 1 Hz ini fungsinya untuk menunjukkan waktu terjadinya perubahan state. Frekuensinya tidak akan tepat sekali di 1 Hz, namun untuk sistem ini sudah dapat dianggap cukup baik.

Output FSM

Fungsi fsm_output() adalah menerjemahkan output dari FSM ke pin output pada mikrokontroler.

void fsm_output(int output_value) {
  if (output_value == 1) {
    digitalWrite(LED_OUTPUT, HIGH);
  } else {
    digitalWrite(LED_OUTPUT, LOW);
  }
}

Pengujian

Pengujian dilakukan dengan menjalankan program, kemudian mengamati kedipan lampu dan output ke port serial.

Pada output serial akan muncul tampilan seperti berikut ini

11:08:45.511 -> state: 100 output: 1
11:08:46.493 -> state: 101 output: 0
11:08:47.517 -> state: 100 output: 1
11:08:48.492 -> state: 101 output: 0

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.

Video

Under construction