Penggunaan Adaptor Yang Tegangannya Lebih Besar daripada yang Diperlukan

Apa yang terjadi jika suatu perangkat diberi daya dengan adaptor yang tegangannya lebih besar dari yang diperlukan?

Setiap perangkat memiliki batas maksimum tegangan catu daya. Jika tegangan dari adaptor lebih besar dari batas maksimum, maka perangkat elektronik bisa rusak.

Jadi gunakanlah adaptor yang tegangannya sesuai dengan yang seharusnya.

Penggunaan Adaptor Yang Tegangannya Lebih Kecil daripada yang Diperlukan

Apa yang terjadi jika suatu perangkat diberi daya dengan adaptor yang tegangannya kurang dari yang diperlukan?

Setiap perangkat memiliki batas minimum tegangan catu daya. Jika tegangan dari adaptor kurang, maka perangkat tidak akan bekerja normal. Beberapa kemungkinan yang dapat terjadi:

  • Perangkat tidak menyala sama sekali karena tegangan tidak cukup
  • Perangkat dapat menyala dengan baik dan lancar, karena sebenarnya dapat berfungsi dengan tegangan di bawah yang disebutkan.
  • Perangkat dapat menyala di awal, namun ketika melakukan komputasi / proses yang banyak, maka perangkat tidak berfungsi normal. Jika perangkat berbasis komputer seperti smartphone, console dan sebagainya , bisa jadi restart sendiri.

Jadi gunakanlah adaptor yang tegangannya sesuai dengan yang seharusnya.

Penggunaan Adaptor Yang Ampernya Lebih Kecil daripada yang Diperlukan

Apa yang terjadi kalau kita menggunakan adaptor / power supply yang ampernya lebih kecil dari yang diperlukan suatu perangkat? Hal ini sering terjadi misalnya ketika adaptor aslinya rusak.

Adaptor dirancang berfungsi sampai arus amper tertentu. Jika arus melebihi batas, maka dapat terjadi satu atau beberapa hal sebagai berikut

  • Tegangan adaptor akan turun dari yang seharusnya, sehingga perangkat tidak berfungsi normal.
  • Panas di adaptor akan melebihi batas, sehingga adaptor cepat rusak
  • Pada adaptor yang bagus dengan pembatas arus , maka adaptor otomatis mati sendiri kalau arus melebihi batas.
  • Transistor daya di dalam adaptor rusak, terutama pada adaptor tanpa pembatas arus

Jadi adaptor bisa rusak, atau alat tidak berfungsi normal. Untuk amannya, gunakan adaptor yang ampernya sesuai.

Perbandingan power supply omron dengan power supply lainvolt
Contoh adaptor / power supply

Komunikasi Nirkabel untuk Mikrokontroler

Komunikasi Nirkabel (wireless) untuk mikrokontroler/mikroprosesor pada pita frekuensi ISM (Industrial Scientific Medical).

Frekuensi 433 MHz

Modul CC1101

Chip CC1101 ini adalah buatan Texas Instruments. Berikut ini contoh modul wireless yang menggunakan chip CC1101

Modul CC1101
Modul CC1101

Datasheet CC1101: https://www.ti.com/product/CC1101

Modul HC-12

Datasheet HC-12: http://statics3.seeedstudio.com/assets/file/bazaar/product/HC-12_english_datasheets.pdf

Frekuensi 915 MHz

LORA

Modul LORA

Referensi: https://en.wikipedia.org/wiki/LoRa

Frekuensi 2,4 GHz

Protokol WiFi (IEEE 802.11)

Contoh perangkat dengan WiFi yang populer adalah ESP32 dan ESP8266

ESP8266 NodeMCU (kiri), ESP32 DevkitC (tengah), ESP32 Lolin32 Lite (kanan)
ESP8266 NodeMCU (kiri), ESP32 DevkitC (tengah), ESP32 Lolin32 Lite (kanan)

Protokol Bluetooth

Perangkat mikrokontroler dengan protokol bluetooth misalnya adalah ESP32

Protokol lain

Contoh protokol di frekuensi 2,4 GHz lainnya adalah NRF24L01 buatan Nordic Semiconductor

Datasheet: https://www.mouser.com/datasheet/2/297/nRF24L01_Product_Specification_v2_0-9199.pdf

Situs resmi NRF24: https://www.nordicsemi.com/Products/nRF24-series

 

 

Luatos ESP32-C3-Core

Spesifikasi

  • Based on the ESP32-C3 WIFI & Bluetooth LE RISC-V Single-Core CPU
  • Type-C USB
  • Castellated pads
  • 4MB Flash
  • Clock speed: 160 Mhz
  • 15x Digital IO
  • ADC(5 channel, 12-bit), I2C, SPI, UARTx2
  • Size: 21mm x 51mm
  • Default firmware: LuatOS
  • 2 red status LEDs

Pinout

Deskripsi Pin

Numbering

name

Default function after reset

multiplexing function

power domain

Pull-up and pull-down ability

32

GND

grounding

 

 

 

31

5V

5V power interface, connected to VBUS of USB

 

 

 

30

BOOT

GPIO09, input

BOOTMODE

VDD3P3_CPU

UP/DOWN

29

IO08

GPIO08, input, output, high impedance

 

VDD3P3_CPU

UP/DOWN

28

IO04

GPIO04, input, output, high impedance

I2C_SDA/ADC_4

VDD3P3_RTC

UP/DOWN

27

IO05

GPIO05, input, output, high impedance

I2C_SCL/ADC_5

VDD3P3_RTC

UP/DOWN

26

3.3V

Chip power supply, 3.3V

 

 

 

25

GND

grounding

 

 

 

twenty four

PB_11

GPIO11, input, output, high impedance

VDD_SPI

VDD3P3_CPU

UP/DOWN

twenty three

IO07

GPIO07, input, output, high impedance

SPI2_CS

VDD3P3_CPU

UP/DOWN

twenty two

IO06

GPIO06, input, output, high impedance

 

VDD3P3_CPU

UP/DOWN

twenty one

IO10

GPIO10, input, output, high impedance

SPI2_MISO

VDD3P3_CPU

UP/DOWN

20

IO03

GPIO03, input, output, high impedance

SPI2_MOSI/ADC_3

VDD3P3_RTC

UP/DOWN

19

IO02

GPIO02, input, output, high impedance

SPI2_CK/ADC_2

VDD3P3_CPU

UP/DOWN

18

3.3V

Chip power supply, 3.3V

 

 

 

17

GND

grounding

 

 

 

16

5V

5V power interface, connected to VBUS of USB

 

 

 

15

PWB

Chip 3.3V power supply control, high level is effective, can be suspended when not in use

 

 

 

14

GND

grounding

 

 

 

13

3.3V

Chip power supply, 3.3V

 

 

 

12

RESET

chip reset

 

VDD3P3_RTC

 

11

NC

 

 

 

 

10

IO13

GPIO13, input, output, high impedance

 

VDD3P3_CPU

UP/DOWN

09

U0_RX

GPIO20, input, output, high impedance

UART0_RX

VDD3P3_CPU

UP/DOWN

08

U0_TX

GPIO21, input, output, high impedance

UART0_TX

VDD3P3_CPU

UP/DOWN

07

GND

grounding

 

 

 

06

IO19

GPIO19, input, output, high impedance

USB_D+

VDD3P3_CPU

UP/DOWN

05

IO18

GPIO18, input, output, high impedance

USB_D-

VDD3P3_CPU

UP/DOWN

04

IO12

GPIO12, input, output, high impedance

SPIHD

VDD3P3_CPU

UP/DOWN

03

IO01

GPIO1, input, output, high impedance

UART1_RX/ADC_1

VDD3P3_CPU

UP/DOWN

02

IO00

GPIO0, input, output, high impedance

UART1_TX/ADC_0

VDD3P3_CPU

UP/DOWN

01

GND

grounding

 

 

 

Fungsi

Power Supply

Ada 3 cara memasang power supply:

  • USB-C (default)
  • 5V & GND header
  • 3V3 & GND header

LED

Ada 2 buah LED pada board ini.

LED number

Corresponding to GPIO

pin function

describe

D4

IO12

GPIO12 configuration

active high

D5

IO13

GPIO13 configuration

active high

Tombol

Ada 2 buah tombol, yaitu tombol BOOT dan RST

key number

pin function

describe

BOOT/GPIO9

When the button is pressed, the chip enters the download mode

active low

RST

When the button is pressed, the chip resets

active low

 

Schematic

ESP32 C3 Luatos-schematic flash section
Memori Flash
ESP32 C3 Luatos-schematic mikroprosesor
Skema bagian mikroprosesor
ESP32 C3 Luatos-schematic switch and LEDs
Sakelar dan LEDs
ESP32 C3 Luatos-schematic regulator section
Regulator
ESP32 C3 Luatos-schematic USB section
USB circuit

Teknik Pemrograman

di Arduino IDE, pilih board ESP32C3 Dev Module, kemudian pilih flashmode “DIO”

Tips dari https://github.com/mboehmerm/Luatos_C3_Core_DIO_SSD1309_I2C_128x64

Referensi

 

Lampu Kedip dengan Jetson Nano 2GB Developer Kit

Berikut ini prosedur untuk menambahkan lampu kedip ke Jetson Nano 2GB Developer Kit

Download library dari https://github.com/pjueon/JetsonGPIO

git clone https://github.com/pjueon/JetsonGPIO
cd JetsonGPIO
mkdir build
cd build
cmake ..
make install

Compiling

 g++ -o simple_out simple_out.cpp  -lJetsonGPIO -lpthread

Setup library path

LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH

Jalankan progrram

./sample_out

Referensi

Tegangan Maksimum pada Raspberry Pi

Berikut ini batas tegangan maksimum yang dapat diberikan pada pin Raspberry Pi

Simbol Parameter Minimum Maksimum Satuan
VBAT Core SMPS Supply -0.5 6.0 volt
3V3 3V3 Supply Voltage -0.5 4.10 volt
1V8 1V8 Supply Voltage -0.5 4.10 volt
VDAC TV DAC Supply -0.5 4.10 volt
GPIO0-27 VDD GPIO0-27 I/O Supply Voltage -0.5 4.10 volt
GPIO28-45 VDD GPIO28-45 I/O Supply Voltage -0.5 4.10 volt
SDX VDD Primary SD/eMMC Supply Voltage -0.5 4.10 volt
         
         

Tabel ini diperoleh dari datasheet Raspberry Pi  https://datasheets.raspberrypi.com/cm/cm1-and-cm3-datasheet.pdf

Modul RISC-V yang kompatibel dengan Ubuntu

RISC-V adalah prosesor yang desainnya dibuat open source. Prosesor ini mulai diperkenalkan tahun 2010. Karena masih baru, belum banyak modul mikroprosesor berbasis RISC-V ini.

Berikut ini daftar modul sistem mikroprosesor dengan prosesor berbasis RISC-V

Galeri

SiFive HiFive Unmatched

 

SiFive Hifive Unmatched
SiFive Hifive Unmatched

Produk ini statusnya sudah sold out

StarFive The VisionFive

StarFive VisionFive

Tersedia di Aliexpress: https://id.aliexpress.com/item/1005003679748239.html

VisionFive sudah sold out, kelanjutannya adalah VisionFive 2

StarFive VisionFive 2
StarFive VisionFive 2

Berikut ini tautan untuk membeli board StarFive Vision Five 2:  

Literatur tentang VisionFive 2

VisonFive 2 Technical Document

  • https://doc-en.rvspace.org/Doc_Center/visionfive_2.html

Applications

  • https://wiki.rvspace.org/en/application/Application
  • https://riscv.or.jp/wp-content/uploads/day3_StarFive_risc-v_tokyo_day2022Autumn.pdf
  • https://rvspace.org/en/project/VisionFive2_Debian_Wiki_202303_Release
  • Hands-on experience with StarFive VisionFive 2 RISC-V SBC using Debian 12 https://www.cnx-software.com/2023/02/12/starfive-visionfive-2-sbc-review-debian-12/
  • VisionFive 2: RISC-V Quad Core Low Cost SBC https://www.youtube.com/watch?v=ykKnc86UtXg
  • RISC-V Business: Testing StarFive’s VisionFive 2 SBC https://www.jeffgeerling.com/blog/2023/risc-v-business-testing-starfives-visionfive-2-sbc
  • StarFiveTech VisionFive2 SDK https://github.com/starfive-tech/VisionFive2
  • StarFive VisionFive 2 (Ubuntu) https://wiki.ubuntu.com/RISC-V/StarFive%20VisionFive%202

AllWinner Nezha

Alwinner Nezha

Tersedia di Aliexpress https://id.aliexpress.com/item/1005003422624354.html

Sipeed LicheeRV Dock

Sipeed LicheeRV Dock

Tersedia di Aliexpress https://www.aliexpress.com/item/1005003741287162.html

Referensi

 

Perbedaan ESP32 dan ESP8266

Perbedaan ESP32 dan ESP8266 adalah sebagai berikut

Parameter ESP32 ESP8266
Prosesor / CPU Xtensa :LX6 dual core / single core Xtensa L:106 single core
clock processor 160 MHz 80 MHz
Memori Flash ada versi dengan built in flash tidak ada built in flash
Memori SRAM    
Memori EEPROM di flash memory  
Wifi HT40 HT20
Bluetooth tidak ada Bluetooth 4.2 dan BLE
SPI 4 2
I2C 2 1
I2S 2 2
UART 2 2
ADC 12 bit 10 bit
CAN ada tidak ada
Built in sensor hall sensor, temperature sensor tidak ada

 

ESP8266 NodeMCU (kiri), ESP32 DevkitC (tengah), ESP32 Lolin32 Lite (kanan)
ESP8266 NodeMCU (kiri), ESP32 DevkitC (tengah), ESP32 Lolin32 Lite (kanan)

Penjelasan Ringkas 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.

Penjelasan Ringkas ESP8266

ESP8266 adalah prosesor yang dibuat oleh Espressif. ESP8266 adalah pendahulu dari ESP32.

Referensi

 

UDP Server dengan Python

Berikut ini contoh kode UDP server dengan bahasa Python. Kode ini dapat dijalankan di Windows, Linux dan Raspberry Pi

import socket

# bind all IP
HOST = '0.0.0.0' 
# Listen on Port 
PORT = 44444 
#Size of receive buffer   
BUFFER_SIZE = 1024    
# Create a TCP/IP socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Bind the socket to the host and port
s.bind((HOST, PORT))
while True:
    # Receive BUFFER_SIZE bytes data
    # data is a list with 2 elements
    # first is data
    #second is client address
    data = s.recvfrom(BUFFER_SIZE)
    if data:
        #print received data
        print('Client to Server: ' , data)
        # Convert to upper case and send back to Client
        s.sendto(data[0].upper(), data[1])
# Close connection
s.close()

Referensi

UDP Client di ESP32

Berikut ini contoh pembuatan aplikasi UDP client di ESP32 dengan compiler Arduino

#include <WiFi.h>
#include <WiFiUdp.h>

/* WiFi network name and password */
const char * ssid = "dd-wrt";
const char * pwd = "0000000000";

// IP address to send UDP data to.
// it can be ip address of the server or 
// a network broadcast address
// here is broadcast address
const char * udpAddress = "192.168.1.100";
const int udpPort = 44444;

//create UDP instance
WiFiUDP udp;

void setup(){
  Serial.begin(115200);
  
  //Connect to the WiFi network
   WiFi.begin(ssid, pwd);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop(){
  //data will be sent to server
  uint8_t buffer[50] = "hello world";
  //This initializes udp and transfer buffer
  udp.beginPacket(udpAddress, udpPort);
  udp.write(buffer, 11);
  udp.endPacket();
  memset(buffer, 0, 50);
  //processing incoming packet, must be called before reading the buffer
  udp.parsePacket();
  //receive response from server, it will be HELLO WORLD
  if(udp.read(buffer, 50) > 0){
    Serial.print("Server to client: ");
    Serial.println((char *)buffer);
  }
  //Wait for 1 second
  delay(1000);
}

Referensi

Lampu On Off dengan 2 Tombol

Pada artikel ini diuraikan lampu kedip yang dapat dimatikan dan dinyalakan dengan 2 buah tombol push button.

Deskripsi sistem

Proses menggunakan input 2 tombol pushbutton, pb1 dan pb2. Lalu ada output 1 buah LED. Jika pb1 ditekan, maka LED menyala selama 10 detik, kemudian padam sendiri. Jika pb2 ditekan, maka LED langsung padam, meskipun dia menyala kurang dari 10 menit.

Model State Chart / Finite State Machine

Berikut ini model FSM dari sistem tersebut

FSM ini menggunakan konsep mesin Mealy, artinya output berubah tergantung input dan state saat itu. Jadi perubahan output mesti dinyatakan secara eksplisit pada setiap transisi.

FSM yang dipakai menggunakan konsep ‘extended state machine’ untuk memungkinkan delay 10 menit. Delay 10 menit kalau dibuat dengan FSM biasa akan memerlukan banyak sekali state. Untuk menghemat jumlah state, maka digunakan variabel ‘counter’ untuk menggantikan state yang banyak.

Kondisi awal sistem adalah LED mati (OFF), untuk itu ditandai dengan trainsisi “true / LED=OFF”. ‘true’ artinya transisi ini terjadi tanpa syarat. ‘LED=OFF’ artinya LED mati.

Ada 2 state pada sistem, yaitu OFF dan ON. OFF artinya lampu mati, ON artinya lampu menyala.

Pada state OFF, lampu tetap mati selama tombol PB1 tidak ditekan. Hal ini ditandai dengan transisi ‘PB=0 / LED=OFF’. PB=0 adalah syarat transisi tersebut.

Pada state OFF, jika tombol PB1 ditekan maka akan terjadi transisi ke state ON, dan lampu menyala. Hal ini dinyatakan dengan transisi ‘PB1=1 / LED=ON’. Transisi ini juga mereset variabel ‘counter’ menjadi 0 , untuk persiapan memulai proses menunggu maksimum 10 menit.

Setelah lampu menyala, maka lampu akan menyala selama 10 menit jika tombol PB2 tidak ditekan. Hal ini dilakukan dengan transisi ‘PB2=0 / LED=0, counter=counter+1’. Tiap kali tombol PB2 tidak ditekan, angka pada counter dinaikkan 1. Jika angka counter sudah melewati batas tertentu (10 menit), maka terjadi transisi ke state OFF. Hal ini dilakukan dengan transisi ‘counter>10*60 / LED=OFF’, artinya ini adalah transisi bersyarat nilai variabel ‘counter’. Perubahan ke state OFF juga dapat terjadi jika tombol PB2 ditekan. Untuk itu ditambahkan ‘or’ pada syarat transisi dari ON ke OFF.

Perangkat Keras

Rangkaian lampu on-off  dengan breadboard. Mikroprosesor Arduino Nano ATmega328,  2 buah push button, 1 buah LED dengan resistor 1k
Rangkaian lampu on-off
  • Prosesor menggunakan Arduino Nano ATmega328
  • Lampu dengan LED merah, diseri dengan resistor 1 kilo ohm
  • Input 2 buah push button dengan konfigurasi active low.

Perangkat Lunak

Versi Interupsi

// lampu on-off dengan 2 tombol model FSM dan timer one
// https://www.arduino.cc/reference/en/libraries/timerone/
// To install, cari library timerone dari Sketch -> Include Library -> Manage Libraries

#include <TimerOne.h>
#define STATE_INITIAL    100
#define STATE_ON    101
#define STATE_OFF   102
#define SWITCH_PB1 3
#define SWITCH_PB2 2
#define LED_OUTPUT 4

#define TIMEOUT 100
int state = STATE_INITIAL;
int counter=0;

void setup() {
  int output = 0;
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(LED_OUTPUT, OUTPUT);
  pinMode(SWITCH_PB1, INPUT_PULLUP);
  pinMode(SWITCH_PB2, INPUT_PULLUP);
  Serial.begin(115200);
  Serial.println(__FILE__);
  fsm_output(output);
  Timer1.initialize(100000); // delay dalam microsecond
  Timer1.attachInterrupt(ISR_Timer1);
}

void loop() {
}

void fsm(int  *state, int *out, int pb1, int pb2, int *counter) {
  switch (*state) {
    case STATE_INITIAL: { // initial state
        *state = STATE_OFF;
        *out = 0;
        break;
      }
    case STATE_ON: {
        if (pb2 == 0) {
          // tetap
          if (*counter >= TIMEOUT) {
            *state = STATE_OFF;
            *out = 0;
          } else {
            *counter = *counter + 1; // tunggu timeout
            *state = STATE_ON;
            *out = 1;
          }
        } else {
          *state = STATE_OFF;
          *out = 0;
        }
        break;
      }
    case STATE_OFF: {
        if (pb1 == 0) {
          // tetap
          *state = STATE_OFF;
          *out = 0;
        } else {
          *counter = 0;
          *state = STATE_ON;
          *out = 1;
        }
        break;
      }
  }
}

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

void ISR_Timer1(void)
{
  int output = 0;
  int pb1, pb2, switch1, switch2;
  switch1 = digitalRead(SWITCH_PB1);
  switch2 = digitalRead(SWITCH_PB2);
  if (switch1 == 1)
    pb1 = 0;
  else {
    pb1 = 1;
  }
  if (switch2 == 1)
    pb2 = 0;
  else {
    pb2 = 1;
  }
  fsm(&state, &output, pb1, pb2, &counter);
  fsm_output(output);
  Serial.print("state: ");
  Serial.print(state);
  Serial.print(" pb1: ");
  Serial.print( pb1);
  Serial.print(" pb2: ");
  Serial.print( pb2);
  Serial.print(" counter: ");
  Serial.print( counter);
  Serial.print(" output: ");
  Serial.print( output);
  Serial.println();
}

Versi Delay

Berikut ini code tanpa interupsi, hanya menggunakan delay()

// lampu on-off dengan 2 tombol model FSM dan delay

#define STATE_INITIAL    100
#define STATE_ON    101
#define STATE_OFF   102
#define SWITCH_PB1 3
#define SWITCH_PB2 2
#define LED_OUTPUT 4
#define PERIOD_MS 10 // perioda delay dalam milisecond
#define TIMEOUT 10 // TIMEOUT dalam detik
int state = STATE_INITIAL;
int counter = 0;

void setup() {
  int output = 0;
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(LED_OUTPUT, OUTPUT);
  pinMode(SWITCH_PB1, INPUT_PULLUP);
  pinMode(SWITCH_PB2, INPUT_PULLUP);
  Serial.begin(115200);
  Serial.println(__FILE__);
  fsm_output(output);
}

void loop() {
  mainloop();
  delay(PERIOD_MS);
}

void fsm(int  *state, int *out, int pb1, int pb2, int *counter) {
  switch (*state) {
    case STATE_INITIAL: { // initial state
        *state = STATE_OFF;
        *out = 0;
        break;
      }
    case STATE_ON: {
        if (pb2 == 0) {
          // tetap
          if (*counter >= TIMEOUT * 1000 / PERIOD_MS) {
            *state = STATE_OFF;
            *out = 0;
          } else {
            *counter = *counter + 1; // tunggu timeout
            *state = STATE_ON;
            *out = 1;
          }
        } else {
          *state = STATE_OFF;
          *out = 0;
        }
        break;
      }
    case STATE_OFF: {
        if (pb1 == 0) {
          // tetap
          *state = STATE_OFF;
          *out = 0;
        } else {
          *counter = 0;
          *state = STATE_ON;
          *out = 1;
        }
        break;
      }
  }
}

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

void mainloop(void)
{
  int output = 0;
  int pb1, pb2, switch1, switch2;
  switch1 = digitalRead(SWITCH_PB1);
  switch2 = digitalRead(SWITCH_PB2);
  if (switch1 == 1)
    pb1 = 0;
  else {
    pb1 = 1;
  }
  if (switch2 == 1)
    pb2 = 0;
  else {
    pb2 = 1;
  }
  fsm(&state, &output, pb1, pb2, &counter);
  fsm_output(output);


  // cetak jika ada perubahan state , atau sudah 1 detik berlalu
  static int prev_state = 0;
  static int display_counter = 0;

  if (prev_state != state || display_counter > 1000 / PERIOD_MS) {
    Serial.print("state: ");
    if (state == STATE_ON) {
      Serial.print("ON  ");
    } else if (state == STATE_OFF) {
      Serial.print("OFF ");
    } else {
      Serial.print(state);
    }

    Serial.print(" pb1: ");
    Serial.print(pb1);
    Serial.print(" pb2: ");
    Serial.print(pb2);
    Serial.print(" c: ");
    Serial.print( counter);
    Serial.print(" out: ");
    Serial.print(output);
    Serial.println();
    prev_state = state;
    display_counter = 0;
  }
  display_counter++;

}

Demonstrasi

demonstrasi versi 1

Demonstrasi versi 2

Contoh lain sistem mikrokontroler dengan finite state machine: https://elektrologi.iptek.web.id/contoh-implementasi-finite-state-machine-dengan-mikrokontroler/

Aplikasi Membuat Flowchart: app.diagrams.net

aplikasi online untuk membuat macam-macam diagram, di antaranya flowchart (diagram alir) https://app.diagrams.net/

Contoh tampilan untuk membuat flowchart sebagai berikut

 

Aplikasi ini juga tersedia untuk versi desktopnya di https://github.com/jgraph/drawio-desktop/releases/tag/v20.3.0.

Versi desktop tersedia untuk sistem operasi berikut ini

  • Windows
  • macOS
  • Linux
  • Google Chrome OS

 

 

 

Contoh Cyber Physical System

Contoh Aplikasi Cyber Physical System (CPS) di berbagai bidang adalah sebagai berikut:

Bidang Manufakturing dan Produksi meliputi bidang manufaktur yang lincah, konektivitas pada jalur pasokan

Aplikasi CPS pada manufaktur dan produksi:

  • Intelligent controls: Kendali cerdas
  • Otomasi proses dan perakitan
  • Robot yang dapat bekerja secara aman dengan manusia

Bidang transportasi dan pergerakan meliputi kendaraan otonom dan kendaraan cerdas, baik di darat, udara, perairan dan angkasa luar; Komunikasi antar kendaraan dan kendaraan ke infrastruktur transportasi.

  • Sistem kendaraan dengan ‘drive by wire’, artinya kendali pada kendaraan tidak langsung oleh manusia namun dibantu dengan perangkat komputer
  • mobil dengan kecerdasan
  • Sistem kendali lalu lintas yang interaktif
  • Sistem transportasi udara generasi selanjutnya

Energi meliputi sistem kelistrikan, sumber energi terbarukan, produksi minyak dan gas

  • Jaringan listrik cerdas
  • Sistem pengisian listrik pada kendaraan
  • Jaringan distribusi minyak dan gas dengan kecerdasan
Konsep smart power grid masa depan
Konsep smart power grid masa depan

Infrastruktur sipil meliputi jembatan, bendungan, pengolahan air bersih dan air limbah

  • Monitoring secara aktif dan sistem kendali , misal pada jembatan dan bendungan
  • Jaringan air dan limbah dengan kecerdasan

Kesehatan meliputi perangkat kesehatan, perangkat kesehatan pribadi, diagnosa penyakit dan pencegahan penyakit.

Aplikasi CPS pada bidang kesehatan:

  • Jaringan komunikasi personal (untuk alat kesehatan pada seseorang)
  • Sistem untuk membantu kesehatan
  • Sensor yang dapat dikenakan pada manusia dan perangkat yang dipasang di dalam tubuh

Bangunan dan Struktur meliputi bandungan perumahan dan komersil dengan performansi tinggi

Aplikasi CPS pada bangunan dan struktur:

  • Pengendalian seluruh aspek pada bangunan
  • Perangkat HVAC cerdas
  • Sistem otomasi bangunan
  • Perabot dan perangkat rumah/kantor yang tersambung ke jaringan
Jembatan dengan kecerdasan
Jembatan dengan kecerdasan

Pertahanan dan Keamanan meliputi perangkat tentara, persenjataan, perangkat logistik, sensor otonom bawah air

Aplikasi CPS pada pertahanan & keamanan:

  • senjata cerdas, dalam arti berpandu dan presisi
  • perangkat komputasi dan sensor yang dapat dikenakan oleh prajurit
  • Kendaraan cerdas tidak berawak
  • Rantai pasokan dan logistik

Keadaan Darurat meliputi perangkat bagi responden pertama, perangkat komunikasi , perangkat pemadam api.

Aplikasi CPS pada keadaan darurat meliputi:

  • sistem deteksi dan pemantauan
  • jaringan komunikasi yang tahan gangguan
  • sistem responden yang terintegrasi

Referensi