Cara Kerja Rangkaian Penggerak Relay Dengan Transistor NPN

Pada tulisan ini diuraikan cara kerja rangkaian penggerak relay dengan transistor NPN.

Contoh rangkaian penggerak relay dengan transistor NPN adalah sebagai berikut:

 

Penguat output untuk beban induktif
Rangkaian penggerak relay dengan transistor NPN

Komponen utama rangkaian adalah transistor NPN tipe BC337

Input rangkaian adalah terminal dengan tanda OUT, yang merupakan output dari mikroprosesor seperti Arduino. Tegangan input rangkaian ini diasumsikan 0 volt (untuk logika LOW) dan 5 volt ( untuk logika HIGH)

Tegangan supply relay diasumsikan 5 volt DC.

Tipe relay diasumsikan adalah JQC-3F

Emitter pada transistor terhubung ke GND

Cara Kerja Rangkaian

Jika pin OUT berada pada tegangan rendah (LOW) atau 0 volt, maka transistor akan berada pada keadaan OFF, jadi tidak ada arus mengalir antara kolektor (C) dan emiter (E). Dengan demikian maka kumparan relay tidak mendapat arus. Maka kontak pada relay akan berada pada kondisi normalnya.

Jka pin OUT berapa pada tegangan tinggi (HIGH) atau 5 volt, maka transistor akan berada pada keadaan ON/saturasi. Transistor bertindak sebagai sakelar yang sedang ON. Pin kolektor dan emitter dapat dianggap terhubung dengan resistansi yang sangat rendah. Arus akan mengalir dari supply 5V, melalui kumparan relay, kemudian masuk ke terminal kolektor (C) pada transistor, dan keluar di terminal emitter (E) pada transistor, kemudian masuk ke GND.

Fungsi dioda 1N4007 adalah untuk pada waktu transistor dimatikan. Pada waktu transistor dimatikan, masih ada energi yang tersimpan sebagai medan magnet di dalam kumparan relay. Energi ini berusaha mempertahankan arus pada kumparan. Jika tidak ada dioda, maka arus ini akan memaksa untuk mengalir melalui transistor, sehingga dapat merusak transistor. Dengan adanya dioda, arus ini akan mengalir melalui dioda, sehingga energi yang tersimpan pada kumparan relay dapat dibuang pada dioda tersebut.

Perhitungan Arus dan Tegangan

Pada waktu pin OUT pada tegangan rendah, maka praktis tidak ada arus mengalir pada transistor. Sebenarnya ada, namun kecil sekali sehingga dapat diabaikan.

Pada waktu pin OUT pada tegangan tinggi (5 volt), maka akan ada arus mengalir melalui basis transistor. Tegangan antara basis dan emiter transistor antara 0,6 volt sampai dengan 1,2 volt, tergantung tegangan antara terminal C dan E.

Arus pada relay diasumsikan sekitar 70 mA

Tegangan Vbe pada kondisi itu dapat dilihat pada gambar berikut ini. Ambil kurva Vbe(sat)

Tegangan Vbe dapat diasumsikan sekitar 0,8 volt.

Persamaan arus basis:

VOUT = ib x 2,2k + Vbe

ib = (VOUT –  Vbe) / 2,2k = (5-0.8)/2.2k = 0.002 ampere = 2 mA

Penguatan arus transistro BC337 sekitar 100 sampai 630. Untuk aplikasi ini dianggap penguatan arus = 100

Arus pada kolektor (Ic) adalah:

Ic=Ib x hfe = 2 mA x 100 = 200 mA

Besar arus pada Ic maksimum adalah 200 mA , namun bisa kurang dari 200 mA jika transistor dalam keadaan saturasi. Untuk itu mesti melihat perilaku kumparan relay.

Tegangan Vce saturasi dapat dilihat pada grafik berikut ini:

BC337-saturasi

Tegangan Vce saturasi adalah sekitar 0,2 volt

Tegangan nominal relay adalah 5 volt . Daya pada kumparan relay adalah 0.36 watt. Maka resistansi kumparan relay adalah:

P = V2/R

R=V2/P = 5 x 5 / 0.36 = 69.44 ohm

Perhitungan arus Ic:

VCC = IC x Rrelay + 0,2 volt

IC = (VCC – 0.2) / Rrelay = (5 – 0.2) / 69.44 = 0.069 ampere = 69 mili ampere

Menurut perhitungan transistor, arus Ic max adalah 200 mA. Menurut perhitungan relay, arus Ic adalah 69 mA. Maka arus pada relay adalah 69 mA.

Referensi

Proteksi Firmware pada Mikrokontroler ATmega328

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.

Referensi

Baterai 4 Wh diganti baterai 2 Wh

Apa yang terjadi jika baterai 2Wh dengan voltase 3.7 V dipasang ke alat berdaya 4Wh voltase 3.7?

Jawaban

Perlu diingat dulu bahwa Wh (watt hour / watt jam) adalah satuan energi, bukan daya. Satuan daya adalah watt.

Baterai memiliki kapasitas energi dan kapasitas arus. Dua hal ini akan mempengaruhi alat jika baterai diganti.

Pertama kita bahas dari sisi energi dulu:

Baterai 4 Wh memiliki jumlah energi 2x baterai 2 Wh, jadi baterai 2Wh akan lebih cepat habis. Misal jika pakai baterai 4 Wh alat tahan 10 jam, maka dengan baterai 2 Wh, alat itu hanya tahan kurang lebih 5 jam.

Kedua dari sisi arus.

Biasanya baterai dengan Wh lebih besar memiliki kapasitas arus lebih besar dibandingkan baterai dengan Wh kecil.

Energi 4 Wh setara dengan 1100 mAh. Biasanya kemampuan arus maksimum yang dipakai adalah sebesar angka mAh. Jadi misal baterai dengan kapasitas 1100 mAh, biasanya hanya ditarik arus sampai 1100 mA, atau 1,1 ampere. Jika melebihi angka ini, biasanya efeknya ke arah efisiensi. Baterai 1100 mAh jika ditarik arus melebihi 1100 mA, maka lebih cepat habis.

Baterai 2 Wh setara dengan 550 mAh, batas arus yang normal adalah 550 mA.

Jadi kalau baterai 4 Wh diganti dengan baterai 2 Wh, maka ada kemungkinan arus yg dipakai melebihi kemampuan baterai sehingga baterai lebih cepat habis, atau lebih cepat panas. 

Baterai Lithium-ion 4,07 Wh atau 1100 mAh
Baterai Lithium-ion 4,07 Wh atau 1100 mAh

Referensi

Stabilizer 10 kVA Bisa Untuk Berapa Watt?

Ada pertanyaan:

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

 

 

 

 

Perekam Modbus RTU Dengan ESP32

Pada pengembangan sistem dengan komunikasi Modbus RTU dengan RS485, kadang-kadang kita perlu memonitor pertukaran data di kabel RS-485 untuk memantau apakah komunikasi data berjalan dengan benar. Pada artikel ini diuraikan secara ringkas pembuatan perangkat untuk memantau dan merekam trafik data di komunikasi RS-485 tersebut.

 

Berikut ini skema rangkaiannya secara sederhana

Rangkaian ESP32 dengan RS485
Rangkaian ESP32 dengan RS485

Penjelasan cara kerja rangkaian

Komponen utama sistem adalah sebagai berikut

  • MAX485 berfungsi untuk mengubah level tegangan RS-485 menjadi TTL 5 volt.
  • Level converter berfungsi mengubah tegangan TTL 5 volt dari MAX485 menjadi TTL dengan tegangan 3 volt.
  • Mikrokontroler ESP32 berfungsi merekam data serial dan mengirimnya menggunakan kabel USB ke komputer.
  • Komputer untuk merekam data serial dari ESP32
  • Power supply 5 volt untuk MAX485
Pin pada MAX485
Pin pada MAX485

Berikut ini foto rangkaian dengan breadboard

Alat untuk merekam sinyal Modbus RTU di RS485 dengan mikrokontroler ESP32

Rangkaian ESP32 , MAX485 dan level converter di breadboard
Rangkaian ESP32 , MAX485 dan level converter di breadboard

 

#esp32-freertos-rs485-analyzer
/**
   analisis data RS485
*/
#define LED_BUILTIN 22

#define RXD1 17
#define TXD1 5
#define RXD2 18
#define TXD2 23


void setup() {
  Serial.begin(115200);
  Serial1.begin(9600, SERIAL_8N1, RXD1, TXD1);
  Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);

  Serial.println("Serial Txd 0 is on pin: " + String(TX));
  Serial.println("Serial Rxd 0 is on pin: " + String(RX));

  Serial.println("Serial Txd 1 is on pin: " + String(TXD1));
  Serial.println("Serial Rxd 1 is on pin: " + String(RXD1));

  Serial.println("Serial Txd 2 is on pin: " + String(TXD2));
  Serial.println("Serial Rxd 2 is on pin: " + String(RXD2));

  pinMode(LED_BUILTIN, OUTPUT);


  if (1)
    xTaskCreate(
      TaskBlinker, /* Task function. */
      "TaskBlinker", /* String with name of task. */
      1000, /* Stack size in bytes. */
      NULL, /* Parameter passed as input of the task */
      1, /* Priority of the task. */
      NULL); /* Task handle. */
  xTaskCreate(
    TaskSerial1, /* Task function. */
    "TaskSerial1", /* String with name of task. */
    2000, /* Stack size in bytes. */
    NULL, /* Parameter passed as input of the task */
    1, /* Priority of the task. */
    NULL); /* Task handle. */
}


// the loop function runs over and over again forever

void loop() {
  delay(10000);
}


void TaskBlinker(void *parameter) {
  int counter = 0;
  TickType_t xLastWakeTime;
  const TickType_t xPeriod = 500      ;
  xLastWakeTime = xTaskGetTickCount();
  //  dht.begin(); // aktifkan sensor DHT22
  while (1) {
    digitalWrite(LED_BUILTIN, HIGH);
    vTaskDelayUntil(&xLastWakeTime, xPeriod);
    digitalWrite(LED_BUILTIN, LOW);
    vTaskDelayUntil(&xLastWakeTime, xPeriod);
//    Serial.print("Counter:");
//    Serial.println(counter);
    counter++;
  }
}

#define BUFFER_MAX 200

void TaskSerial1(void *parameter) {
  int interframe_timer_max = 0;
  int interframe_timer = 0; // untuk mengukur waktu antar frame
  char buffer_data[BUFFER_MAX];
  int buffer_idx = 0;
  TickType_t xLastWakeTime;
  const TickType_t xPeriod = 1      ;
  xLastWakeTime = xTaskGetTickCount();
  while (1) {
    int incomingByte;
    if (Serial1.available() > 0) {
      interframe_timer = 0;
    } else {
      interframe_timer++;
    }
    while (Serial1.available() > 0) {
      // read the incoming byte:
      incomingByte = Serial1.read();
      buffer_data[buffer_idx] = incomingByte ;
      buffer_idx++;
      if (buffer_idx > BUFFER_MAX) {
        buffer_idx = BUFFER_MAX;  // buffer overflow protection
      }
    }
    //Serial.print(incomingByte, HEX);
    //Serial.print(" ");
    if (interframe_timer > interframe_timer_max) {
      interframe_timer_max = interframe_timer;
      Serial.print("interframe_max ");
      Serial.println(interframe_timer_max);
    }
    if (interframe_timer > 6 && buffer_idx > 0) {
      // cetak semua data di buffer
      for (int i = 0; i < buffer_idx; i++) {
        Serial.print(buffer_data[i], HEX);
        Serial.print(" ");
      }
      Serial.println();
      buffer_idx = 0; // empty buffer
    }
    vTaskDelayUntil(&xLastWakeTime, xPeriod);
  }
}

Referensi

Lampu Kedip di ESP32 Dengan Sistem Operasi FreeRTOS

Berikut ini contoh program sederhana untuk membuat LED onboard berkedip di pada ESP32 Lolin32 Lite. Sistem operasi yang digunakan adalah FreeRTOS. IDE menggunakan Arduino. Delay menggunakan delay dari FreeRTOS, dengan fungsi vTaskDelayUntil().

ESP32 Lolin32 Lite (atas) dan ESP32 DevkitC (bawah)
ESP32 Lolin32 Lite (atas) dan ESP32 DevkitC (bawah)

Lampu berkedip dengan frekuensi 1 Hz. Suatu angka (counter) dikirim melalui port serial setiap detik. Kecepatan port serial adalah 115200 bps

#define LED_BUILTIN 22 # Wemos Lolin32 onboard LED di pin 22

void setup() {
  Serial.begin(115200);
  Serial.println("Start");  
  pinMode(LED_BUILTIN, OUTPUT);

  if (1)
    xTaskCreate(
      TaskBlinker, /* Task function. */
      "TaskBlinker", /* String with name of task. */
      1000, /* Stack size in bytes. */
      NULL, /* Parameter passed as input of the task */
      1, /* Priority of the task. */
      NULL); /* Task handle. */
}

// the loop function runs over and over again forever

void loop() {
  delay(10000);
}

void TaskBlinker(void *parameter) {  
  int counter = 0;
  TickType_t xLastWakeTime;
  const TickType_t xPeriod = 500      ;   
  xLastWakeTime = xTaskGetTickCount();
  while (1) {
    digitalWrite(LED_BUILTIN, HIGH);
    vTaskDelayUntil(&xLastWakeTime, xPeriod);
    digitalWrite(LED_BUILTIN, LOW);
    vTaskDelayUntil(&xLastWakeTime, xPeriod);
    Serial.print("Counter:");
    Serial.println(counter);
    counter++;
  }
}

Dummy Load 12 volt Untuk Power Supply

Kadang-kadang kita perlu menguji power supply komputer dengan beban yang diketahui betul resistansinya, supaya nantinya daya yang keluar dapat diatur.

Misal:
target daya : 100 watt
tegangan output power supply: 12 volt
R = V*V/P = 12×12/100 = 1,44 ohm
resistor putih bisa max disipasi daya 5 watt, jadi perlu 20 buah (20×5 = 100 watt).
Misal 20 resistor diparalel supaya menjadi 1,44 ohm, maka ukuran setiap resistor adalah 1,44 x 20 = 28,8 ohm
resistor 28,8 ohm tidak ada, misalnya paling dekat adalah 33 ohm.
Jika pakai R=33 ohm, maka perlu 33/1.44 = 22,9 buah, dibulatkan 23 buah.
Resistansi realnya: 33/23 = 1,434 ohm
disipasi daya realnya = V*V/R = 12×12/1,434 = 100.36 watt

 

Instalasi Library mbedtls di Windows

Library mbedtls diperlukan di Linux/Windows kalau kita mau melakukan enkripsi data, terutama kalau aplikasi kita akan berkomunikasi secara tersandikan dengan mikrokontroler ESP32. Library kriptografi di Windows yang kompatibel dengan kriptograsi di ESP32 antara lain adalah mbedtls.

Pertama lakukan instalasi library. Pada contoh berikut ini instalasi dilakukan di cygwin.

Jalankan setup cygwin, kemudian pilih package yang bernama ‘mbedtls”.

Pada contoh di atas, yg dipilih adalah library mbedtls dan mbedtls-devel

Selanjutnya library ini mesti ditambahkan ketika proses link di aplikasi kita.

Sebagai contoh, saya menggunakan IDE Codeblocks. Ketika membuat project, pilih compiler “Cygwin GCC”

Selanjutnya pada CodeBlocks, penambahan library dilakukan dengan masuk ke menu Project -> Build Options -> Linker Setting

Tambahkan file library mbedtls. File library dapat dicari di direktori c:\cygwin64\lib

Nama library yang diperlukan adalah “libmbedcrypto.a”

Selanjutnya kita dapat melakukan aplikasi yang menggunakan mbedtls, seperti “Enkripsi data antara ESP32 dan Windows

Referensi

Lampu Geser 2 Arah Asinkron Dengan Mikroprosesor

Spesifikasi

  • Input 2 buah tombol SPST
  • Nama input: tombol kiri, tombol kanan
  • Output 4 buah lampu LED
  • Lampu dipasang berjejer, dari kiri ke kanan. Nama lamput: OUT1,OUT2,OUT3,OUT4

Perilaku yang diharapkan

  • pada satu saat hanya 1 lampu yang menyala
  • kondisi awal lampu paling kiri menyala
  • jika tombol kanan ditekan, lampu yang menyala bergeser ke kanan
  • jika tombol kiri ditekan, lampu yang menyala bergeser ke kiri
  • jika lampu yang menyala sudah sampai di paling kanan, penekanan ke kanan akan membuat lampu paling kiri menyala
  • jika lampu yang menyala sudah sampai di paling kiri , penekanan ke kiri akan membuat lampu paling kanan menyala

Perancangan

Pada artikel ini, solusi yang dibuat memiliki sifat berikut

  • even triggered, input penekanan tombol menyebabkan terjadinya interupsi yang akan memanggil Finite State Machine (FSM)
  • FSM bersifat asinkron. Transisi/ reaksi FSM ditrigger oleh penekanan tombol

Perilaku sistem yang diharapkan dapat dimodelkan dengan menggunakan Timing Diagram (diagram waktu).. Untuk sederhananya dimulai dulu dengan kasus lampu hanya digeser ke 1 arah saja.

Diagram waktu lampu geser kanan 1 arah
Diagram waktu lampu geser kanan 1 arah

Model Flowchart (Diagram Alir)

Model State Chart

State chart lampu geser asinkron
State chart lampu geser asinkron

Video demo

 

Hasil

  • Lampu sudah dapat bergeser kiri kanan sesuai penekanan tombol
  • Masih terjadi bouncing, yaitu penekanan tombol satu kali menghasilkan pergeseran lampu lebih dari satu. Solusinya  mesti ditambahkan fitur debouncing.

Lampiran

Implementasi perangkat lunak

 /*
  lampu geser dengan input event-triggerred dari interupsi eksternal
  FSM dengan model asinkron 
*/

#define OUT1 12
#define OUT2 11
#define OUT3 10
#define OUT4 9

#define STATE1 101
#define STATE2 102
#define STATE3 103
#define STATE4 104

#define EVENT_A 201
#define EVENT_B 202

int state = STATE1;

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(OUT1, OUTPUT);
  pinMode(OUT2, OUTPUT);
  pinMode(OUT3, OUTPUT);
  pinMode(OUT4, OUTPUT);

  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);

  attachInterrupt(digitalPinToInterrupt(2), Pin2_isr, FALLING );
  attachInterrupt(digitalPinToInterrupt(3), Pin3_isr, FALLING );

  // initial state
  state = STATE1;
  digitalWrite(OUT1, HIGH);
}

void Pin2_isr() {
  fsm(EVENT_B);
}

void Pin3_isr() {
  fsm(EVENT_A);
}

int fsm(int event) {
  switch (state) {
    case STATE1: {
        if (event == EVENT_A) {
          state = STATE2;
          digitalWrite(OUT1, LOW);
          digitalWrite(OUT2, HIGH);
          digitalWrite(OUT3, LOW);
          digitalWrite(OUT4, LOW);
        } else if (event == EVENT_B)
        {
          state = STATE4;
          digitalWrite(OUT1, LOW);
          digitalWrite(OUT2, LOW);
          digitalWrite(OUT3, LOW);
          digitalWrite(OUT4, HIGH);
        }
        break;
      }
    case STATE2: {
        if (event == EVENT_A) {
          state = STATE3;
          digitalWrite(OUT1, LOW);
          digitalWrite(OUT2, LOW );
          digitalWrite(OUT3, HIGH);
          digitalWrite(OUT4, LOW);
        } else if (event == EVENT_B)
        {
          state = STATE1;
          digitalWrite(OUT1, HIGH);
          digitalWrite(OUT2, LOW);
          digitalWrite(OUT3, LOW);
          digitalWrite(OUT4, LOW);
        }
        break;
      }
    case STATE3: {
        if (event == EVENT_A) {
          state = STATE4;
          digitalWrite(OUT1, LOW);
          digitalWrite(OUT2, LOW );
          digitalWrite(OUT3, LOW);
          digitalWrite(OUT4, HIGH);
        } else if (event == EVENT_B)
        {
          state = STATE2;
          digitalWrite(OUT1, LOW);
          digitalWrite(OUT2, HIGH);
          digitalWrite(OUT3, LOW);
          digitalWrite(OUT4, LOW);
        }
        break;
      }
    case STATE4: {
        if (event == EVENT_A) {
          state = STATE1;
          digitalWrite(OUT1, HIGH);
          digitalWrite(OUT2, LOW);
          digitalWrite(OUT3, LOW);
          digitalWrite(OUT4, LOW);
        } else if (event == EVENT_B)
        {
          state = STATE3;
          digitalWrite(OUT1, LOW);
          digitalWrite(OUT2, LOW);
          digitalWrite(OUT3, HIGH);
          digitalWrite(OUT4, LOW);
        }
        break;
      }
    default: {
        break;
      }
  }
}

void loop() {
}

Contoh-contoh lain pemodelan dengan FSM dapat dilihat di artikel “Contoh Implementasi FSM dengan mikrokontroler

Charger 5V 2A Berapa Watt

Charger 5V 2A Berapa watt? Berapakah daya yang keluar dari charger 5 volt 2 ampere?

Perhitungan daya dapat dilakukan dengan rumus berikut ini:

P=V x I

Dengan

  • P (daya) dengan satuan watt
  • V (tegangan) dengan satuan volt
  • I (arus) dengan satuan ampere

Jadi jawabannya:

P = V x I = 5 x 2 = 10 watt.

Jawaban ini adalah dengan asumsi efisiensi 100%. Pada prakteknya efisiensi charger berkisar antara 80%  ~ 95%, jadi daya yang masuk ke charger dari jala-jala listrik 220 V lebih tinggi sedikit dari daya yang keluar (5 volt 2 ampere).

 

Charger USB 5 volt, warna putih dan hitam, merek Satoo, Samsung.
Ilustrasi charger USB 5 volt dengan kemampuan arus bermacam-macam

 

Socomec Countis E13X Energy Meter

 

Foto

 

Referensi

Tajuk Pengajaran Sistem Embedded

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

Praktikum:
– pengolahan sinyal LTI
– kendali LTI
– kendali FSM
– kendali hybrid

 

Real Time pada Raspberry Pi

Raspberry Pi dapat dibuat menjadi real time dengan menggunakan sistem operasi RTOS (Real Time Operating System), misalnya:

Berikut ini petunjuk instalasi RTOS pada Raspberry Pi:

Raspberry Pi umumnya menggunakan sistem operasi Raspbian , yang merupakan varian dari Debian Linux. Sistem operasi Linux ini bukan sistem operasi real time, sehingga Raspberry Pi tidak real time jika menggunakan sistem operasi Raspbian.

Fitur penting pada Raspbery PI adalah kemampuan komputasinya di prosesornya yang cepat (bisa sampai 4 core @1  GHz), memori yang besar (sampai 8 GB) dan sistem operasi Linux yang fleksibel.

Kekurangan Raspberry Pi jika menggunakan RTOS adalah contoh programnya tidak sebanyak Raspberry Pi dengan sistem operasi Raspbian. Jika kita perlu Raspberry Pi dengan sistem operasi Raspbian tapi perlu juga fitur real time, maka salah satu solusinya adalah fitur real time ditangani oleh prosesor lain, misal ATmega328 (Arduino Nano) atau ESP32. Untuk menghubungkan Raspberry Pi ke ArduinoNano / ESP32 dapat menggunakan protokol serial, seperti serial asinkron maupun I2C (Inter Integrated Circuit).

Referensi