Pada perang Rusia-Ukraina, pihak Rusia banyak menggunakan guided missile (roket dengan pemandu) sebagai senjata. Pada misil-misil ini ternyata di dalamnya banyak menggunakan komponen buatan Amerika dan negara barat lainnya.
Pengukur ketinggian dengan radio (radio altimeter) yang dipakai di misil Kalibr dan 9M727 Iskander. Modul ini menggunakan chip semikonduktor buatan Altera
Chip TMS320C30GEL dari Texas Instrument dari misil 9M727 Iskander. TMS320C30 adalah prosesor untuk pengolahan sinyal digital dengan kemampuan floating point. Lebih jauh tentang TMS320C30 dapat dibaca di artikel “The TMS320C30 Floating-Point Digital Signal Processor“.
Berikut ini modul pengendali dari misil 9M727 Kalibr berbasis DSP (Digital Signal Processor) dari Texas Instrument. Modul ini dilengkapi dengan sirip pendingin di sekitarnya.
Cara mengubah IPAddress menjadi char[] di Arduino – class IPAddress memiliki fungsi toString untuk mengubah ke String – class String memiliki fungsi c_str untuk mengubah ke pointer character
Pada tulisan ini akan diuraikan bagaimana membuat filter digital dalam bahasa C dari persamaan filter dalam transformasi Laplace. Contoh ini diadaptasi dari Example 8.4 di buku “Lizhe Tan, Digital Signal Processing, Fundamentals and Applications” halaman 324.
Misal diketahui suatu filter dalam domain s (Laplace) dengan persamaan sebagai berikut:
\(H(s)=\frac{10}{s+10} \)
Untuk mengubah ke bentuk digital, kita perlu tentukan perioda sampling. Misal dipilih perioda sampling T=0.01 detik
Persamaan transformasi s ke z sebagai berikut
\( s=\frac{2(z -1) }{Tz + 1} \)
H(s) diubah ke H(z) dengan cara substitusi s pada H(s). T=0.01 dimasukkan ke persamaan transformasi. Maka didapat persamaan berikut:
Selanjutnya terapkan teknik di Bab 6 (Example 6.5) untuk mengubah persamaan dalam domain (z) ke domain waktu (n).
Akan didapat persamaan difference dalam n sebagai berikut:
y(n)=0.0476 x(n) + 0.0476 x(n-1) + 0.9048 y(n-1)
Simulasi
Tahap selanjutnya adalah simulasi persamaan difference tersebut dengan input fungsi step.
Tahap simulasi ini penting untuk mengecek apakah filter digital yang dihasilkan memiliki perilaku yang sama dengan filter analog di awal. Jika hasilnya berbeda, ada kemungkinan salah perhitungan atau salah koding.
Simulasi dapat dilakukan dengan bahasa pemrograman apa saja, misal C, C++, Matlab, Python, dan sebagainya.
Simulasi di bawah ini dibuat dengan bahasa Python. GUI yang dipakai adalah Jupyter Notebook
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import AutoMinorLocator
from matplotlib import gridspec
import matplotlib.ticker as ticker
%matplotlib inline
t=-1 # start time at -1
xn=0
xn1=0
yn1=0
period=0.01
times=np.linspace(-1, 10, 111).reshape(111, 1)
xs=[]
ys=[]
ts=[]
for counter in range(0,200):
if t<0:
xn=0
else:
xn=1
t=t+period
xs.append(xn)
y=0.04676 * xn + 0.0476 * xn1 + 0.9048 * yn1
ys.append(y)
ts.append(t)
yn1=y
xn1=xn
Berikut ini output sistem (merah) terhadap input step (warna hijau).
time constant = 1/10
Titik biru adalah t = time constant, dengan value = 63.2%. Posisi titik biru ini pada grafik merah, sehingga dapat disimpulkan respon sistem ini cocok dengan yang diharapkan.
Selanjutnya adalah memberi sinyal sinusoidal dengan frekuensi = frekuensi cut-off ke filter tersebut . Menurut teori, amplitudo pada steady state adalah 0.707 x amplitudo maksimum.
Berikut ini kode untuk memberikan sinyal sinusoida.
t=-1 # start time at -1
xn=0
xn1=0
yn1=0
period=0.01
times=np.linspace(-1, 10, 111).reshape(111, 1)
xs=[]
ys=[]
ts=[]
w=10
for counter in range(0,200):
t=t+period
xn=math.sin(w*t)
xs.append(xn)
y=0.04676 * xn + 0.0476 * xn1 + 0.9048 * yn1
ys.append(y)
ts.append(t)
yn1=y
xn1=xn
Grafik tersebut menunjukkan amplitudo output (merah) ada di sekitar 0.7 dari amplitudo sinyal input (hijau). Terjadi pergeseran fasa sekitar 45 derajat.
Implementasi Bahasa C di Windows
Tahap selanjutnya adalah membuat implementasi filter dengan bahasa C.
Pada tulisan ini diuraikan cara mengendalikan lampu secara wireless dengan ThingsBoard. Mikroprosesor yang dipakai adalah ESP32. Metode yang dipakai adalah RPC (Remote Procedure Call)
TOKEN adalah kode token dari perangkat. Diambil dari ThingsBoard
#include <WiFi.h> // WiFi control for ESP32
#include <ThingsBoard.h> // ThingsBoard SDK
// Helper macro to calculate array size
#define COUNT_OF(x) ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x])))))
// WiFi access point
#define WIFI_AP_NAME "WIFI_AP_NAME "
// WiFi password
#define WIFI_PASSWORD "WIFI_PASSWORD "
// See https://thingsboard.io/docs/getting-started-guides/helloworld/
// to understand how to obtain an access token
#define TOKEN "yd8R3K3GE61Drm7TtvgF"
// ThingsBoard server instance.
#define THINGSBOARD_SERVER "192.168.0.90"
#define ONBOARD_LED 22
// Baud rate for debug serial
#define SERIAL_DEBUG_BAUD 115200
// Initialize ThingsBoard client
WiFiClient espClient;
// Initialize ThingsBoard instance
ThingsBoard tb(espClient);
// the Wifi radio's status
int status = WL_IDLE_STATUS;
// Array with LEDs that should be controlled from ThingsBoard, one by one
uint8_t leds_control[] = { 12, 13, 27 };
// Main application loop delay
int quant = 20;
// Initial period of LED cycling.
int led_delay = 1000;
// Period of sending a temperature/humidity data.
int send_delay = 2000;
// Time passed after LED was turned ON, milliseconds.
int led_passed = 0;
// Time passed after temperature/humidity data was sent, milliseconds.
int send_passed = 0;
// Set to true if application is subscribed for the RPC messages.
bool subscribed = false;
// LED number that is currenlty ON.
//int current_led = 0;
// Processes function for RPC call "setGpioStatus"
// RPC_Data is a JSON variant, that can be queried using operator[]
// See https://arduinojson.org/v5/api/jsonvariant/subscript/ for more details
RPC_Response processSetGpioState(const RPC_Data &data)
{
Serial.println("Received the set GPIO RPC method");
int pin = data["pin"];
bool enabled = data["enabled"];
if (pin < COUNT_OF(leds_control)) {
Serial.print("Setting LED ");
Serial.print(pin);
Serial.print(" to state ");
Serial.println(enabled);
digitalWrite(leds_control[pin], enabled);
}
return RPC_Response(data["pin"], (bool)data["enabled"]);
}
// RPC handlers
RPC_Callback callbacks[] = {
{ "setGpioStatus", processSetGpioState },
};
// Setup an application
void setup() {
// Initialize serial for debugging
Serial.begin(SERIAL_DEBUG_BAUD);
WiFi.begin(WIFI_AP_NAME, WIFI_PASSWORD);
InitWiFi();
for (size_t i = 0; i < COUNT_OF(leds_control); ++i) {
pinMode(leds_control[i], OUTPUT);
}
pinMode(ONBOARD_LED, OUTPUT); \
// LED check
digitalWrite(leds_control[0], HIGH);
delay(500);
digitalWrite(leds_control[1], HIGH);
delay(500);
digitalWrite(leds_control[2], HIGH);
delay(500);
digitalWrite(leds_control[0], LOW);
delay(500);
digitalWrite(leds_control[1], LOW);
delay(500);
digitalWrite(leds_control[2], LOW);
delay(500);
}
// Main application loop
void loop() {
delay(quant);
led_passed += quant;
send_passed += quant;
// Reconnect to WiFi, if needed
if (WiFi.status() != WL_CONNECTED) {
reconnect();
return;
}
// Reconnect to ThingsBoard, if needed
if (!tb.connected()) {
subscribed = false;
// Connect to the ThingsBoard
Serial.print("Connecting to: ");
Serial.print(THINGSBOARD_SERVER);
Serial.print(" with token ");
Serial.println(TOKEN);
if (!tb.connect(THINGSBOARD_SERVER, TOKEN)) {
Serial.println("Failed to connect");
return;
}
}
// Subscribe for RPC, if needed
if (!subscribed) {
Serial.println("Subscribing for RPC...");
// Perform a subscription. All consequent data processing will happen in
// callbacks as denoted by callbacks[] array.
if (!tb.RPC_Subscribe(callbacks, COUNT_OF(callbacks))) {
Serial.println("Failed to subscribe for RPC");
return;
}
Serial.println("Subscribe done");
subscribed = true;
}
if (send_passed > send_delay) {
send_passed = 0;
}
// Process messages
tb.loop();
static int blink_counter = 0;
if (blink_counter < 50) {
digitalWrite(ONBOARD_LED, LOW);
} else {
digitalWrite(ONBOARD_LED, HIGH);
}
blink_counter++;
if (blink_counter >= 100) {
blink_counter = 0;
}
}
void InitWiFi()
{
Serial.println("Connecting to AP ...");
// attempt to connect to WiFi network
WiFi.begin(WIFI_AP_NAME, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
void reconnect() {
// Loop until we're reconnected
status = WiFi.status();
if ( status != WL_CONNECTED) {
WiFi.begin(WIFI_AP_NAME, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
}
Berikut ini software PHP untuk mengendalikan LED dari Windows/Ubuntu
Mikrokontroler seperti ATmega328 dapat diproteksi dengan memprogram fuse bit pada mikrokontroler tersebut. Pemrograman fuse bit mesti dilakukan menggunakan ISP (In System Programming) atau High Voltage Programming, jadi tidak dapat menggunakan port USB pada Arduino Nano / UNO.
Namun demikian proteksi ini dapat juga dibypass dengan menggunakan alat khusus.
misalnya saya beli stabilizer dengan 10 Kva dengan input voltage V = 150-240 volt dan output voltage 110v / 220v. Itu watt aman yg bisa kita pake brp watt ya ?
Jawaban singkat:
Pada kondisi serba ideal, daya maksimum yang dapat dipakai adalah 10 kW = 10000 watt . Dalam prakteknya, stabilizer sebaiknya dipakai hanya pada beban 70% saja (7000 watt). Efisiensi stabilizer juga perlu diperhatikan, misal 90%. Jika beban induktif seperti motor atau pompa, perlu dikalikan lagi dengan faktor daya misalnya 0,8 .
Kondisi serba ideal ini adalah:
beban 3 fasa seimbang, sehingga arus pada setiap fasa sama besarnya. Dalam prakteknya arus pada setiap fasa perlu dihitung / diukur.
faktor daya = 1, dalam prakteknya tergantung sifat beban. Kalau beban induktif dapat dipakai faktor daya=0,8.
Stabilizer dapat dipakai pada 100% beban, dalam prakteknya sekitar 70%
Efisiensi stabilizer 100%, dalam prakteknya sekitar 90%
Contoh kasus
Beban seimbang, beban pompa listrik 3 fasa (induktif). Maka kemampuan maksimum: 10 kW x 0.7 x 0.7 x 0.9 = 4410 watt
Perlu diperhatikan bahwa stabilizer 10 kVA biasanya 3 fasa. Pada stabilizer 3 fasa 10 kVA, arus maksimum di setiap fasa adalah sekitar 15 ampere.
Perhitungannya:
10 kVA / 3 / 220 volt = 15.151 ampere
Jika arus pada suatu fasa melebihi 15 ampere, maka dapat merusak stabilizer tersebut. Untuk amannya, batasi arus pada 70% arus maksimum, jadi dibatasi pada 15 x 70% = 10.5 ampere.
Sebaiknya dipelajari dulu spesifikasi dari stabilizer yang dipakai, misal di artikel ini: https://www.indotara.co.id/catalog/Arakawa%20Catalog%20Full.pdf
Berikut ini beberapa tajuk yang dapat diajarkan di kelas sistem embedded.
Embedded: – mengukur memory usage di stack – apa yang terjadi kalau stack terlalu kecil pada sebuah task – apa yang terjadi jika suatu resource diakses bersamaan oleh beberapa buah task
Tools pada pengembangan sistem embedded – GIT: source control – Unit Testing
Tajuk advanced: – keamanan sistem embedded – kriptografi sederhana – machine learning & sistem embedded
Tugas Perancangan: – metodologi desain – pemodelan sistem – multi tasking – benchmark komputasi di PC dan di mikrokontroler – pengujian algoritma di PC dan mikrokontroler
ada beberapa pengertian impedansi, yg saya ingat 3:
impedansi listrik pada rangkaian listrik, misal resistor + kapasitor + induktor yg dibuat menjadi suatu rangkaian. impedansi ini adalah perbandingan arus & tegangan pada komponen tersebut.
impedansi saluran transmisi, misal pada kabel koaksial, kabel twisted pair. impedansi ini adalah perbandinga L dan C pada kabel tersebut. impedansi ini dikenal juga sebagai ‘impedansi karakteristik’
impedansi pada gelombang elektromagnetik, ini adalah perbandingan kuat medan listrik & medan magnet. impedansi ini dikenal juga sebagai ‘wave impedance’.
Berikut ini uraian istilah Cyber Physical System atau “Sistem Fisik Siber” menurut bahasa atau arti kata. Definisi dalam dunia engineering dapat dibaca di artikel “Pengertian Cyber Physical System“
Konsep Cyber Physical System (https://ptolemy.berkeley.edu/projects/cps/)
Definisi “Cyber”:
of, relating to, or involving computers or computer networks (such as the Internet)