Prosesor untuk kuliah Pengolahan Sinyal Digital

Berikut ini beberapa prosesor yang dipakai untuk kuliah Pengolahan Sinyal Digital (Digital Signal Processing) di beberapa perguruan tinggi di dunia.

TU Graz

TU Graz 442.003 Digital Signal Processing, Laboratory Winter Term 2020/21
https://www.spsc.tugraz.at/courses/digital-signal-processing-laboratory.html
prosesor: Raspberry Pi

Penampakan samping
Penampakan samping

University of Texas

ECE445S Real-Time Digital Signal Processing Laboratory
website: http://users.ece.utexas.edu/~bevans/courses/realtime/
prosesor: Texas Instrument TMDSLCKL6748  , harga USD 200
materi: http://users.ece.utexas.edu/~bevans/courses/realtime/handouts/CourseReaderFall2022.pdf

Technische Hocshule Ingolstadt

Laboratory for Digital Signal Processing and Optoelectronics (C307)
https://www.thi.de/en/electrical-engineering-and-information-technology/laboratories-of-faculty-ei/digital-signal-processing-laboratory/
prosesor: TMDSDSK6713 https://www.ti.com/product/TMDSDSK6713/part-details/TMDSDSK6713

 

R.M.K College of Engineering and Technology

Prosesor: Texas Instruments TMS320C50

Website kuliah: https://rmkcet.ac.in/ece-dsp-lab.php

The Grainger College of Engineering, Electrical & Computer Engineering

The Grainger College of Engineering

Nama kuliah: ECE 420- Embedded DSP Laboratory

website kuliah: https://ece.illinois.edu/academics/courses/ece420-120178

Prosesor yang dipakai: Texas Instruments TMS320C5510 Fixed Point Digital Signal Processors  development board

Tipe: TMDSDSK5510 (DSP STARTER KIT TMS320VC5510)

 

Rutgers School of Engineering

Kuliah: 14:332:348 Digital Signal Processing Laboratory

Website kuliah: https://www.ece.rutgers.edu/332348

Tipe prosesor: Texas Instruments TMS320C6713 DSP starter kit

Stanford

Nama kuliah: EE264 Digital Signal Processing

Website kuliah: https://web.stanford.edu/class/ee264/

Materi kuliah DSP: https://web.stanford.edu/~rqi/papers/ee264_spw15.pdf

Prosesor: TMS320C5535. TMDX5535EZDSP, Development board berbasis TMS320C5535 Harga USD 249

Menurut foto di artikelnya, mereka mengembangkan board khusus kerjasama antara Texas Instruments dengan Stanford: (Picture of the DSP shield calculating heart rate in bpm) dari [dokumen]

Berikut ini foto DSP Shield yang dikembangkan Stanford: [sumber]

DSP Shield & Arduino:

Board ini dipasang di atas Arduino Uno

Referensi

Lampu lalu lintas untuk kendaraan dan penyeberang jalan dengan model extended state machine

Model sistem diambil dari Example 5.8 di buku Lee & Seshia “Introduction to Embedded Systems”

Berikut ini model untuk lampu lalu lintas

 

Berikut ini model untuk lampu bagi penyeberang jalan.

Berikut ini semantik gabungan dari lampu untuk mobil dan penyeberang jalan:

Implementasi: masih under construction

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

Lampu kedip dengan extended state machine

Fitur sistem

  • kondisi awal lampu menyala
  • lampu menyala selama 1 siklus
  • setelah itu lampu mati selama 9 siklus
  • 1 siklus adalah 1 detik

Model Extended State Machine

Penampilan hardware

 

Source code: https://github.com/waskita/embedded/tree/master/kedip-duty-cycle/nano-fsm-extended

Video demonstrasi

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

Artikel terkait

 

Lampu kedip dengan duty cycle tertentu menggunakan model finite state machine

Pada artikel ini diuraikan pembuatan sistem mikrokontroler dengan lampu yang berkedip dengan duty cycle 10%.

Pada mikrokontroler , lampu kedip dapat dibuat dengan delay ataupun dengan finite state machine (FSM). Pada artikel ini dipakai FSM dengan tujuan mendemonstratikan kemampuan FSM sebagai model untuk membuat perangkat lunak mikrokontroler.

Duty cycle yang diinginkan adalah 10%. Untuk itu maka lampu akan menyala selama 1 satuan waktu, dan lampu mati selama 9 satuan waktu. Lampu menyala selama 1 state , sedangkan lampu mati selama 9 state. Untuk itu dibuat 10 state: 1 state lampu menyala, dan 10 state lampu mati.

Nama state yang dibuat adalah sebagai berikut

  • ON
  • OFF_1
  • OFF_2
  • OFF_3
  • OFF_4
  • OFF_5
  • OFF_6
  • OFF_7
  • OFF_8
  • OFF_9

Diagram state chart adalah sebagai berikut

Source code dapat dilihat di file berikut ini: https://github.com/waskita/embedded/tree/master/kedip-duty-cycle/nano-fsm-normal

Berikut ini video demonstrasi lampu kedip tersebut:

 

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

 

 

Lampu On Off Dengan 1 Sakelar

Pada artikel ini diuraikan membuat sistem mikrokontroler untuk mengendalikan lampu berdasarkan sebuah sakelar. Lampu dinyalakan dengan menekan tombol satu kali. Lampu dimatikan dengan cara menekan tombol agak lama.

Kebutuhan Sistem

  • Input switch push-button
  • Output 1 buah LED
  • Tombol ditekan sekali secara singkat untuk menyalakan lampu
  • Tombol ditekan dan ditahan selamat 1 detik untuk mematikan lampu

Diagram Blok Sistem secara umum sebagai berikut

Skenario sistem

Untuk memperjelas sistem yang akan dibuat, perlu dibuat dulu beberapa skenario yang dapat terjadi pada sistem ini.

  1. LED mati: ditekan 1x pendek (kurang dari 1 detik) maka LED menyala
  2. LED mati: ditekan 1x panjang (lebih dari 1 detik) -> LED menyala
  3. LED menyala: ditekan & ditahan selama 1 detik -> LED mati
  4. LED menyala: ditekan kurang dari 1 detik -> LED tetap menyala
  5. LED menyala: ditekan & ditahan selama lebih dari 1 detik -> LED mati dalam 1 detik, setelah itu tetap mati
  6. LED menyala: switch ditekan berkali-kali pendek -> LED tetap menyala (frekuensi di bawah batas tertentu)
  7. LED mati: switch ditekan berkali-kali pendek -> LED menyala dan tidak mati (frekuensi di bawah batas tertentu)

Hal-hal yang tidak diperhatikan pada sistem ini:

  • prosedur mematikan/menyalakan sistem
  • keadaan baterai habis. Untuk sistem yang menggunakan baterai isi ulang (rechargeable), seharusnya ada mekanisme untuk mencegah baterai betul-betul habis.

Berikut ini Diagram Skenario 1
LED mati: ditekan 1x pendek (kurang dari 1 detik) maka LED menyala

Diagram Skenario 2: LED mati: ditekan 1x panjang (lebih dari 1 detik) -> LED menyala

Diagram skenario 3: LED menyala: ditekan & ditahan selama 1 detik -> LED mati

Skenario 4 LED menyala: ditekan kurang dari 1 detik -> LED tetap menyala

LED menyala: ditekan & ditahan selama lebih dari 1 detik -> LED mati dalam 1 detik, setelah itu tetap mati

Skenario Ekstra 6

Skenario Ekstra 7

Strategi/Algoritma:

  1. Kondisi awal mati
  2. Tunggu ada tombol ditekan. Jika ada , nyalakan lampu.
  3. Tunggu tombol ditekan lama. Jika ada, matikan lampu. Abaikan input lain.
  4. Kembali ke (2)

Model State Chart

Sketsa state chart

State diagram sistem versi final

Implementasi Perangkat Keras

Implementasi Perangkat Lunak

Kode implementasi dapat dilihat di https://github.com/waskita/embedded/blob/master/on-off-switch/nano-on-off/nano-on-off.ino

Pengujian

 

 

 

 

Contoh Implementasi Finite State Machine Dengan Mikrokontroler

Berikut ini beberapa contoh implementasi FSM dengan mikrokontroler. Urutan contoh ini mulai dari yang paling mudah, sampai yang paling sulit.

  1. Lampu kedip berbasis FSM dengan delay. Pada contoh ini dibuat lampu kedip dengan duty cycle 50%
  2. Lampu kedip berbasis FSM dengan interupsi Timer 1
  3. Lampu kedip berbasis FSM dengan FreeRTOS
  4. Lampu kedip duty cycle 10% dengan model FSM biasa
  5. Lampu kedip duty cycle 10% dengan model Extended State Machine
  6. Lampu on-off (toggle) dengan input switch
  7. Lampu on-off (toggle) dengan fitur debounce dan model extended state machine
  8. Lampu on-off (toggle) dengan fitur debounce dan model cascade composition
  9. Lampu on off (tekan lama) dengan extended state machine
  10. Lampu on-off (tekan ganda)
  11. Lampu on-off dengan 2 tombol
  12. Lampu lalu lintas jalan dengan extended state machine. Contoh ini adalah implementasi Example 3.9 di buku Lee & Seshia “Introduction to Embedded Systems”.
  13. Lampu lalu lintas untuk kendaraan dan penyeberang jalan dengan model extended state machine.  Contoh ini adalah implementasi Example 5.9 di buku Lee & Seshia “Introduction to Embedded Systems”.
  14. Lampu geser dengan arsitektur event triggered
  15. Lampu geser dengan arsitektur time triggered
  16. Kendali pintu otomatis dengan supervisory control

Lampu Penyeberangan Jalan Dengan Extended State Machine

Berikut ini adalah implementasi lampu penyeberangan jalan (“traffic light at a pedestrian
crosswalk”) dari Example 3.9 di buku “Introduction to Embedded Systems, a cyber physical systems approch” karangan Lee & Seshia.

Model sistem menggunakan Extended State Machine, sebagai berikut:

Perangkat Keras

Implementasi hardware menggunakan Arduino Nano ATmega328

Pin yang dipakai:

  • output lampu merah : pin D2 (active high)
  • output lampu hijau: D3 (active high)
  • output lampu kuning: pin D4 (active high)
  • input tombol: pin D11 (active low)
  • output lampu kedip: pin LED_BUILTIN / D13

Pada model tidak diperlukan lampu kedip, namun pada aplikasi ini ditambahkan lampu kedip sebagai indikasi bahwa sistem berfungsi.

Perangkat Lunak

Model FSM perangkat lunak mengikuti Example 3.9 sebagai berikut:

Kode aplikasi dapat dilihat di https://github.com/waskita/embedded/blob/master/traffic-light-controller/nano-fsm-extended/nano-fsm-extended.ino

Perangkat lunak dibuat menggunakan library Arduino. Perangkat lunak terbagi menjadi bagian inisialisasi yang hanya dilakukan sekali di fungsi setup() dan bagian yang dilakukan berulang-ulang di fungsi loop().

Implementasi finite state machine (FSM) ada di fungsi fsm_init() dan fsm(). Fungsi fsm_init() berisi inisialisasi variabel FSM. fungsi fsm() berisi perubahan (reaction) yang terjadi pada FSM. Sesuai dengan penjelasan di Example 3.9, fungsi fsm() ini dipanggil secara setiap 1 detik, dengan cara menambahkan delay dengan fungsi delay().

Membuat fungsi periodik dengan delay() sebenarnya tidak tepat sekali pewaktuannya. Jika diperlukan pewaktuan yang lebih tepat, dapat menggunakan interupsi Timer1.

Penjelasan Perangkat Lunak

Pada sistem ini terdapat 4 buah state. Untuk itu, setiap state didefinisikan menggunakan macro. Penggunaan macro ini untuk membantu memahami kode dengan lebih mudah.

#define STATE_RED    100
#define STATE_GREEN   101
#define STATE_PENDING   102
#define STATE_YELLOW   103

Setiap state diasosiasikan dengan suatu angka tertentu. Angka yang dipakai bebas, asal memperhatikan batas tipe data yang dipakai. Pada program ini tipe data yang dipakai adalah int, sehingga nilainya yang dapat dipakai adalah antara -32,768 sampai dengan 32,767

Bagian selanjutnya adalah definisi untuk pin-pin yang dipakai. Ada 4 pin yang dipakai, sehingga diperlukan 4 buah macro sebagai berikut.

#define PEDESTRIAN_BUTTON 11
#define OUTPUT_RED     2
#define OUTPUT_GREEN   3
#define OUTPUT_YELLOW  4

Penggunaan macro ini untuk memudahkan pembacaan source code.

Bagian selanjutnya adalah variabel global

int state ;
int sig_r = 0;
int sig_g = 0;
int sig_y = 0;
int count = 0;

Pada program ini diperlukan beberapa variabel global. Variabel global diperlukan karena fungsi fsm_init() dipanggil di setup(), sedangkan fsm() dipanggil di fungsi loop(), padahal ada variabel FSM diperlukan untuk keduanya.

Software embedded yang baik seharusnya meminimalkan penggunaan variabel global, supaya program lebih rapi.

Fungsi setup()

Selanjutnya adalah fungsi setup() untuk inisialisasi Arduino

  pinMode(OUTPUT_RED, OUTPUT);
  pinMode(OUTPUT_GREEN, OUTPUT);
  pinMode(OUTPUT_YELLOW, OUTPUT);
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(PEDESTRIAN_BUTTON, INPUT_PULLUP);
  Serial.begin(115200);
  Serial.println(__FILE__);

fungsi pinMode() dipanggil untuk mengatur konfigurasi pin-pin sebagai input dan output. Pada kode ini, yang dipakai adalah macro dari nomor pin, dengan tujuan memudahkan pembacaan software.

Port serial sebenarnya tidak wajib diaktifkan untuk sistem lampu penyeberangan ini. Pada implementasi ini, port serial dipakai untuk melakukan monitoring dan debugging. Variabel state, input dan output dicetak ke port serial secara teratur untuk mengecek apakah implementasi sudah berjalan sebagaimana mestinya.

Bagian selanjutnya dari fungsi setup() adalah melakukan inisialisasi FSM.

  fsm_init();
  activate_output(sig_r, sig_g, sig_y);
  print_state(0);
  delay(1000);

Fungsi activate_output()

Fungsi activate_output(int r, int g, int y) fungsinya adalah menyalakan lampu output sesuai output dari FSM. Pada penjelasan Example 3.9, output adalah berupa sinyal sigR, sigR dan sigY. Sinyal-sinyal ini hanya ada / aktif ketika diperlukan perubahan lampu yang menyala. Untuk itu perlu fungsi ini untuk mengubah 3 buah sinyal ini menjadi penyalaan lampu yang sesuai.

Fungsi fsm_init()

Fungsi fsm_init() berfungsi memasukkan nilai awal (state) di FSM.

Berikut ini adalah bagian yang diimplementasikan di fungsi fsm_init()

Menurut model FSM, yang perlu dilakukan di awal adalah variabel count diubah menjadi 0, dan state awal adalah RED. Namun pada program ini ditambahkan juga kondisi awal lampu merah menyala, dengan cara memberikan sinyal sigR.

 

Fungsi loop()

Fungsi loop() dipanggil secara rutin oleh Arduino.

Hal-hal yang dilakukan di fungsi ini adalah:

  • membaca input dari tombol dengan perintah digitalRead()
  • membalik nilai input, karena tombol di hardware dibuat active low, sedangkan FSM memerlukan tombol pedestrian yang active_high
  • memanggil fungsi fsm() untuk menghitung state berikut dari FSM berdasarkan state terkini dan input pada saat itu. Hasilnya adalah state akan diubah, variabel count diubah, dan ada keluaran di variabel output.
  • memanggil activate_output() untuk melakukan perubahan lampu menyala jika diperlukan
  • mencetak state,input dan output untuk keperluan debugging / monitoring
  • membuat delay 1 detik

Fungsi print_state()

Fungsi ini tugasnya adalah mencetak semua variabel sistem untuk melakukan debugging

Fungsi fsm()

Fungsi ini adalah implementasi state chart.

Fungsi ini dirancang untuk tidak menggunakan variabel global, karena variabel global kurang baik dipakai . Semua output menggunakan pointer sebagai metode passing parameter.  Pada fungsi ini tidak ada variabel global ataupun variabel jenis static.

Jenis FSM yang dipakai adalah extended state machine, jadi pada FSM ini ada variabel state dan variabel ‘count’.

Pada bagian awal, variabel sig_r,sig_g dan sig_y dinolkan, untuk menandakan bahwa defaultnya tidak ada output apapun.

Pada fungsi fsm() , yang dihitung adalah:

  • state selanjutnya, di variabel *state
  • variabel count (*count)

Perhitungan state dan variabel *count dibagi berdasarkan state terkini.

Implementasi STATE_RED

Berikut ini adalah bagian dari state chart yang diimplementasikan untuk case STATE_RED

    case STATE_RED: {
        if (*count >= 60) {
          *state = STATE_GREEN;
          *sig_g = 1;
          *count = 0;
        } else {
          *count = *count + 1;
        }
        break;
      }

Dari state RED akan pindah ke state GREEN dengan syarat varioabel count lebih besar atau sama dengan 60. Jika terjadi perpindahan ini, maka variabel count diubah menjadi 0.

Jika tidak terjadi perpindahan state, maka variabel count ditambah dengan 1.

Implementasi STATE_GREEN

Berikut ini adalah bagian dari state chart yang diimplementasikan untuk case STATE_GREEN

 case STATE_GREEN: {
        if (pedestrian == 1 && *count < 60) {
          *state = STATE_PENDING;
          *count = *count + 1;
        } else if (pedestrian == 1 && *count >= 60) {
          *sig_y = 1;
          *state = STATE_YELLOW;
          *count = 0;
        } else if (pedestrian == 0 && *count < 60) {
          *count = *count + 1;
        } else {
          // do nothing
        }
        break;
      }

Dari state GREEN akan pindah ke state PENDING dengan syarat tombol input pedestrian ditekan, dan variabel count<60. Jika terjadi perpindahan ini, maka variabel count ditambah 1.

Dari state GREEN akan pindah ke state YELLOW dengan syarat tombol input pedestrian ditekan, dan variabel count lebih dari atau sama dengan 60. Jika terjadi perpindahan ini, maka variabel count diubah menjadi 0.

Implementasi STATE_PENDING

Berikut ini adalah bagian dari state chart yang diimplementasikan untuk case STATE_PENDING

 case STATE_PENDING: {
        if (*count >= 60) {
          *state = STATE_YELLOW;
          *sig_y = 1;
          *count = 0;
        } else {
          *count = *count + 1;
        }
        break;
      }

Dari state PENDING akan pindah ke state YELLOW dengan syarat variabel count lebih atau sama dengan 60. Jika terjadi perpindahan ini, maka terjadi output sigY dan variabel count diset menjadi 0.

Jika tidak terjadi perpindahan tersebut, maka variabel count ditambah 1

Implementasi STATE_YELLOW

Berikut ini adalah bagian dari state chart yang diimplementasikan untuk case STATE_YELLOW

 

    case STATE_YELLOW: {
        if (*count >= 5) {
          *state = STATE_RED;
          *sig_r = 1;
          *count = 0;
        } else {
          *count = *count + 1;
        }
        break;
      }

Dari state YELLOW akan pindah ke state RED dengan syarat count>5. Jika terjadi transisi ini , maka akan ada sinyal sigR dan variabel count dibuat menjadi 0

Jika tidak terjadi pindah ke state RED, maka variabel count ditambah 1.

Komentar

Pada model FSM yang diberikan di Example 3.9, ada kelemahan:

  • pada initial state tidak diberikan output, sehingga lampu yang menyala tidak terdefinisi. Pada program, hal ini diselesaikan dengan menambahkan sinyal sigR untuk menyalakan lampu merah

Sistem ini memiliki kelemahan dalam pembacaan tombol input. Penekanan tombol perlu dilakukan cukup lama agar terbaca oleh FSM. Hal ini terjadi karena fungsi fsm() dipanggil setiap detik. Jadi pada kondisi worst case, tombol input pedestrian perlu ditekan dan ditahan selama 1 detik. Pada best case cukup ditahan mendekati 0 detik. Rata-rata 0,5 detik.

Untuk mengatasi masalah lambatnya pembacaan tombol, dapat diatas dengan memperkecil perioda pemanggilan fungsi fsm(). Supaya perilaku sistem tidak berubah, maka batas-batas untuk variabel count di FSM perlu diubah. Misal perioda diubah dari 1 detik menjadi 1 milidetik. Maka batasan  count<60 di FSM pada STATE_GREEN perlu diubah menjadi count<60000, demikian juga untuk batasan lainnya.

Video Demonstrasi

Penutup

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

Referensi:

  • Lee & Seshia “Introduction to Embedded Systems, a cyber physical systems approach”

 

 

Unit Test untuk C/C++

Berikut ini beberapa library unit test untuk bahasa pemrograman C atau C++

Unity Unit Test

CppUTest

Google Test

 

Aplikasi Untuk Menggambar Rangkaian Elektronika

Berikut ini beberapa aplikasi untuk menggambar rangkaian elektronika.

Falstadt

Alamat situs: https://www.falstad.com/circuit/

Aplikasi ini hanya ada versi online.

Aplikasi ini dapat dipakai untuk menggambar rangkaian dan animasi simulasi rangkaian.

Logicly

Alamat website: https://logic.ly/

Aplikasi ini berbayar. Ada versi demonya di https://logic.ly/demo

Aplikasi ini hanya ada versi online.

Aplikasi ini dapat dipakai untuk menggambar rangkaian dan animasi simulasi rangkaian.

Logisim

Alamat website: http://www.cburch.com/logisim/

Aplikasi ini diinstall di desktop.

Digital Signal Processor di Drone Iran

Sebuah drone buatan Iran jatuh di Ukraina. Di dalamnya ternyata terdapat komponen prosesor digital buatan Texas Instruments di Amerika . DSP (Digital Signal Processor) adalah mikroprosesor yang dioptimasi untuk melakukan perhitungan matematis yang sangat cepat.

Tipe DSP di gambar tersebut adalah TMS320F28335, Real Time Microcontroller C200 series 320-bit MCU.

Kemampuan TMS320F28335 adalah komputasi 150 MIPS , Floating Point Unit, 512 KB flash memory, EMIF (External Memory Interface), 12 bit Analog to Digital Converter.

Berikut ini foto drone buatan Iran tersebut (foto dari sebuah pameran militer):

Tipe drone tersebut: Shahed-191 UAV

Selain prosesor digital, ada juga pompa bahan bakar buatan Polandia

Update:

Ada lagi ditemukan komponen dari kepingan drone Shahed136 .

Di antaranya prosesor TMS320F28335, Real Time Microcontroller C200 series 320-bit MCU

Berikut ini komponen MCIMX6L2EVN10AB dari NXP Semiconductors

Menurut situs NXP, komponen ini adalah “i.MX 6 series 32-bit MPU, ARM Cortex-A9 core, 1GHz, MAPBGA 432”

Menurut datasheetnya, fitur dari MCIMX6L2EVN10AB  adalah sebagai berikut :

  • Application processor
  • Multilevel memory system
  • smart speed technology
  • dynamic voltage and frequency scaling
  • Multimedia powerhouse
  • Powerful graphics acceleration
  • Interface flexibility
  • Electronic Paper Display Controller
  • Advanced security
  • Integrated power management
  • GPIO with interrupt capabilities
  • speed grade 1 GHz
  • ARM Cortex-A9 MPCore CPU processor

Spesifik untuk MCIMX6L3DVN10AB:

  • ada GPU
  • tidak ada EPDC

Berikut ini relay tipe P3C47

 

Sumber: 

  • https://twitter.com/United24media/status/1574692917834309632
  • https://www.thedrive.com/the-war-zone/the-drones-russia-is-reportedly-receiving-from-iran-for-its-ukraine-war
  • https://twitter.com/Gerashchenko_en/status/1579799277122920448

Komponen Elektronika di Persenjataan Rusia

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.

Rudal jelajah Iskander
Rudal jelajah Iskander [sumber]

Maket rudal jelajah 3m-54 Kalibr

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“.

Chip MAX1480 buatan MAXIM dari rudal jelajah 9M727. MAX1480 fungsinya adalah “Complete, Isolated RS-485/RS-422 Data Interface

Cypress semiconductor dari onboard computer

Berikut ini modul pengendali dari misil 9M727 Kalibr berbasis DSP (Digital Signal Processor) dari Texas Instrument. Modul ini dilengkapi dengan sirip pendingin di sekitarnya.

Sumber:

 

5500 VA berapa watt

5500 VA berapa watt?

Rumah dengan listrik 5500 VA dapat dipakai sampai berapa watt?

Jawab: P = V x I x cos phi

Dengan

  • P : daya listrik (dalam watt)
  • V: tegangan jala-jala listrik (dalam volt)
  • I: arus listrik (dalam ampere)
  • cos phi: faktor daya (antara 0 sampai 1)

V x I ini adalah “5500 VA” yang merupakan daya terpasang di rumah

Pada kondisi ideal, faktor daya adalah 1. Maka daya maksimum adalah : 5500 watt

Jika di rumah banyak beban induktif seperti pompa, AC, kulkas, kipas, maka faktor daya biasanya sekitar 0,7. Maka daya maksimum = P = 5500 x 0,7 = 3850 watt.

Tegangan normal di rumah-rumah adalah 220 volt. Namun sering tegangan turun, misal sampai ke 200 volt. Akibat tegangan turun, daya akan lebih kecil lagi.

5500 VA pada tegangan 220 volt, artinya arus = 5500/220 = 25 ampere. Besaran ini sesuai dengan ukuran MCB yang terpasang di panel listrik.

Pada kondisi non ideal: tegangan 220 volt, faktor daya 0,7 , arus maksimum tetap 25 ampere. Maka daya sebagai berikut:

P = P x I x faktor daya = 220 x 25 x 0,7 = 3500 watt

Kesimpulan:

  • 5500 VA memberikan daya maksimum 5500 watt pada kondisi ideal
  • 5500 VA memberikan daya maksimum 3500 watt pada kondisi non ideal (tegangan turun ke 200 volt, faktor daya = 0,7)

Berikut ini contoh MCB dengan kapasitas 25 ampere. MCB ini biasa dipasang untuk membatasi arus sampai 25 ampere, artinya daya (VA) = 5500 VA

 

Charger 25 watt berapa ampere

Beberapa smartphone model terbaru (tahun 2022) dapat dicharge dengan charger 25 watt. Untuk mendapatkan daya 25 watt tersebut, berapakah arusnya (dalam ampere)?

Jawaban ringkas: arus adalah 3 ampere atau 2,77 ampere.

Penjelasan

Sebagai contoh kita bisa lihat charger 25 watt dari Samsung, atau “Wall Charger for Super Fast Charging (25W)“.

Pada bagian spesifikasi terdapat keterangan sebagai berikut:

  • Input Voltage 100-240 V
  • Output Voltage (Max, Normal Charge) 5 V
  • Output Voltage (Max, Fast Charge) PDO : 9V / PPS : 3.3-5.9V or 3.3-11.0V
  • Output Current (Max, Normal Charge) 3 A
  • Output Current (Max, Fast Charge) PDO : 2.77A(9V) / PPS : 3.0A(3.3-5.9V) or 2.25A(3.3-11.0V)

PPS artinya adalah “Programmable Power Supply”

PDO artinya adalah “Power Data Objects”

Charger tersebut memiliki tegangan output bervariasi, antara 3,3 volt sampai 11 volt.

Beberapa variasi arus/tegangan yang disampaikan di spesifikasi tersebut:

  • PDO 2,77 ampere, 9 volt. P = 2,77 x 9 = 24.93 watt
  • PPS 3 A ; tegangan = 3,3 volt. Maka daya P = 3 x 5,9 = 9,9 watt
  • PPS 3 A ; tegangan = 5,9 volt. Maka daya P = 3 x 5,9 = 17,7 watt
  • PPS 2,25A ; tegangan 3,3 volt. Maka daya P = 2,25 x 3,3 = 7,425 watt
  • PPS 2,25A ; tegangan 11 volt. Maka daya P = 2,25 x 11 = 24,75 watt

Referensi

  • https://blog.ravpower.com/2021/02/pps-fast-charging/
  • https://www.samsung.com/id/mobile-accessories/wall-charger-for-super-fast-charging-25w-black-ep-ta800nbegww/

IoT Pengukur Debu Dengan ESP32 dan Sensor Sharp GP2Y1010

Spesifikasi

 

// CJMCU-8118
#include <WiFi.h>           // WiFi control for ESP32
#include <ThingsBoard.h>    // ThingsBoard SDK
#include <esp_task_wdt.h>

// WiFi access point
#define WIFI_AP_NAME        "APNAME" // ganti dengan WIFI AP 
// WiFi password
#define WIFI_PASSWORD       "123456"  // ganti dengan WIFI AP password
#define TOKEN               "zRG1HN8w0PRydh5gV7Il"

#define LED_SENSOR 23
#define ADC_INPUT 34
#define BUILTIN_LED 2
#define WDT_TIMEOUT 60

// ThingsBoard server instance.
#define THINGSBOARD_SERVER  "192.168.0.114"

#include <Arduino.h>
#include <Wire.h>

// Initialize ThingsBoard client
WiFiClient espClient;
// Initialize ThingsBoard instance
ThingsBoard tb(espClient);
// the Wifi radio's status
int status = WL_IDLE_STATUS;

// main application loop delay (ms)
int quant = 20;

// Period of sending a temperature/humidity data.
int send_delay = 2000;

// Time passed after telemetry data was sent, milliseconds.
int send_passed = 0;

char mac_str[20]; // storing MAC address string
byte mac_byte[6]; // storing MAC address bytes

int led_counter = 0; //blinking built int led

void setup() {
  pinMode(BUILTIN_LED, OUTPUT);
  pinMode(LED_SENSOR, OUTPUT);

  // put your setup code here, to run once:
  Serial.begin(115200);
  delay(1000);
  Serial.print("Source Code: ");
  Serial.println(__FILE__);

  //wait for serial connection to open (only necessary on some boards)
  while (!Serial);

  WiFi.begin(WIFI_AP_NAME, WIFI_PASSWORD);
  InitWiFi();
  WiFi.macAddress(mac_byte);
  sprintf(mac_str, "%02x%02x%02x%02x%02x%02x", mac_byte[0], mac_byte[1], mac_byte[2], mac_byte[3], mac_byte[4], mac_byte[5]);
  Serial.print("ESP board MAC address:  ");
  Serial.println(WiFi.macAddress());
  Serial.print("ESP board  IP address: ");
  Serial.println(WiFi.localIP());

  // setup WDT
  esp_task_wdt_init(WDT_TIMEOUT, true); //enable panic so ESP32 restarts
  esp_task_wdt_add(NULL); //add current thread to WDT watch

}

void loop() {
  float temperature = 25;
  float pressure = 0;
  float humidity = 60; // default humidity
  float co2 = 0;
  float tvoc = 0;

  delay(quant);
  send_passed += quant;

  // Reconnect to WiFi, if needed
  if (WiFi.status() != WL_CONNECTED) {
    reconnect();
    return;
  }

  // Reconnect to ThingsBoard, if needed
  if (!tb.connected()) {
    // 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;
    }
  }

  // Check if it is a time to send sensor data
  if (send_passed > send_delay) {
    int dust;
    dust = DustRead();

    Serial.print("Sending telemetry data...");
    Serial.print("Dust ");
    Serial.print(dust);
    Serial.println("");
    tb.sendTelemetryFloat("dust", dust);
    send_passed = 0;
  }

  // Process messages
  tb.loop();

  led_counter++; // LED blink at 1 Hz
  if (led_counter > 50) {
    led_counter = 0;
  }
  if (led_counter > 25) {
    digitalWrite(BUILTIN_LED , LOW);
  } else {
    digitalWrite(BUILTIN_LED , HIGH);
  }
  esp_task_wdt_reset(); // WDT reset setelah berhasil mengirim data
}

void I2C_Scan() {
  byte error, address;

  int nDevices;
  Serial.println("I2C Scanning...");
  nDevices = 0;
  for (address = 1; address < 127; address++ ) {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.println(address, HEX);
      nDevices++;
    }
    else if (error == 4) {
      Serial.print("Unknow error at address 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.println(address, HEX);
    }
  }
  if (nDevices == 0) {
    Serial.println("No I2C devices found\n");
  }
  else {
    Serial.println("done\n");
  }
}

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

int DustRead() {
  int sensorValue;
  // read the analog in value:
  digitalWrite(LED_SENSOR, HIGH);
  delayMicroseconds(280);
  sensorValue = analogRead(ADC_INPUT); // measurement 280 us after signal start
  delayMicroseconds(40); // total signal duration 320 us
  digitalWrite(LED_SENSOR, LOW); // turn off LED

  // print the results to the Serial Monitor:
  Serial.print("sensor = ");
  Serial.println(sensorValue);
  return sensorValue;
}