Charger 9V 2A Berapa Watt?
Watt adalah satuan daya listrik.
Rumus daya adalah sebagai berikut:
P = V x I
Dengan
- P : daya dalam watt
- V : tegangan dalam volt
- I : arus dalam watt
Maka daya menjadi: 9V x 2A = 18 watt

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.
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:
Jadi gunakanlah adaptor yang tegangannya sesuai dengan yang seharusnya.
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
Jadi adaptor bisa rusak, atau alat tidak berfungsi normal. Untuk amannya, gunakan adaptor yang ampernya sesuai.
Komunikasi Nirkabel (wireless) untuk mikrokontroler/mikroprosesor pada pita frekuensi ISM (Industrial Scientific Medical).
Chip CC1101 ini adalah buatan Texas Instruments. Berikut ini contoh modul wireless yang menggunakan chip CC1101
Datasheet CC1101: https://www.ti.com/product/CC1101
Datasheet HC-12: http://statics3.seeedstudio.com/assets/file/bazaar/product/HC-12_english_datasheets.pdf
LORA
Referensi: https://en.wikipedia.org/wiki/LoRa
Contoh perangkat dengan WiFi yang populer adalah ESP32 dan ESP8266
Perangkat mikrokontroler dengan protokol bluetooth misalnya adalah ESP32
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
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 |
|
|
|
Ada 3 cara memasang power supply:
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 |
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 |
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
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
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
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
Produk ini statusnya sudah sold out
Tersedia di Aliexpress: https://id.aliexpress.com/item/1005003679748239.html
VisionFive sudah sold out, kelanjutannya adalah VisionFive 2
Berikut ini tautan untuk membeli board StarFive Vision Five 2:
Literatur tentang VisionFive 2
VisonFive 2 Technical Document
Applications
Tersedia di Aliexpress https://id.aliexpress.com/item/1005003422624354.html
Tersedia di Aliexpress https://www.aliexpress.com/item/1005003741287162.html
Berikut ini daftar tajuk keilmuan Sistem Embedded
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 |
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.
ESP8266 adalah prosesor yang dibuat oleh Espressif. ESP8266 adalah pendahulu dari ESP32.
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()
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);
}
Pada artikel ini diuraikan lampu kedip yang dapat dimatikan dan dinyalakan dengan 2 buah tombol push button.
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.
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.
// 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();
}
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 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 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