Menggunakan Op-Amp Dengan Catu Daya Tunggal

Rangkaian yang menggunakan komponen op-amp umumnya perlu menggunakan power supply ganda, karena op-amp memerlukan catu daya tegangan positif dan negatif.

Jika diinginkan rangkaian op-amp yang hanya menggunakan sebuah catu daya saja, maka perlu dibuat suatu tegangan sebagai ‘virtual ground’. Virtual ground ini berfungsi sebagai ground pada rangkaian op-amp, namun tegangannya tidak sama dengan 0 volt .

Ground  buatan ini dikenal dengan berbagai nama:

  • Virtual ground
  • Phantom ground
  • Floating ground

Ada beberapa cara membuat virtual ground untuk op-amp sebagai berikut:

  • Pembagi tegangan resistor
  • Pembagi tegangan resistor dengan decoupling
  • Dioda Zener
  • Regulator linear DC
  • Pembagi tegangan resistor dengan op-amp

Virtual Ground Dengan Resistor Pembagi Tegangan

Virtual Ground Dengan Resistor Pembagi Tegangan Dan Decoupling

Virtual Ground Dengan Dioda Zener

Virtual Ground Dengan Regulator Linear DC

Virtual Ground Dengan Pembagi Tegangan Resistor Dengan Op-Amp

Referensi

 

Arsitektur Perangkat Lunak pada Sistem Embedded

Pada artikel ini diuraikan macam-macam arsitektur perangkat lunak dalam konteks system embedded. Pertama akan diuraikan arsitektur aplikasi desktop sebagai perbandingan. Kemudian akan kita lihat 3 macam arsitektur yang umum dipakai pada system embedded, yaitu pertama: arsitektur super loop, kedua arsitektur super loop dengan interupsi. Arsitektur , kedua ini dikenal juga dengan nama foreground-background. Ketiga adalah arsitektur multithreading.

Ada dua macam aplikasi:

  • Aplikasi Desktop
  • Aplikasi Sistem Embedded

Ada beberapa macam arsitektur software sistem embedded:

  1. Super loop (tanpa interupsi)
  2. Super loop dengan interupsi / foreground-background
  3. Multithreading

Aplikasi Desktop

Berikut ini arsitektur desktop yang biasa. Pada aplikasi desktop, pengguna mesti menjalankan dulu system operasi pada computer yang dipakai, misalkan Windows, atau Linux.. Aplikasi dijalankan oleh pengguna. Sistem operasi akan menjalankan aplikasi tersebut , biasanya dengan cara mengambil kode dari storage seperti har disk atau flash memory, kemudian mengalokasikan resource seperti CPU, RAM , input output ke aplikasi tersebut. Kemudian aplikasi mulai dijalankan pada START.  Kemudian aplikasi ini melakukan suatu proses yang dapat terdiri dari beberapa task (atau pekerjaan). Setelah proses ini selesai, maka aplikasi akan berhenti, di flowchart dilambangkan dengan STOP. Sistem operasi kemudian menghapus aplikasi dari memori. Pada saat ini aplikasi selesai.

Diagram alir perangkat lunak aplikasi desktop
Diagram alir perangkat lunak aplikasi desktop

Arsitektur Superloop

Berikut ini adalah arsitektur paling sederhana yang dipakai pada sistem embedded, yaitu arsitektur superloop. Pada arsitektur ini , software dikelompokkan menjadi 2 bagian, yaitu bagian INIT yang berisi kode-kode inisialisasi yang hanya dijalankan satu kali saja pada aplikasi tersebut. Biasanya bagian INIT ini berisi konfigurasi hardware pada mikroprosesor / mikrokontroler yang dipakai. Misalnya adalah melakukan setting pin-pin sebagai input ataupun sebagai output. Kemudian ada bagian TASK / Tugas, yang dikerjakan berulang-ulang tanpa henti. Pada diagram alir / flowchart aplikasi sistem embedded tidak ada blok STOP , karena aplikasi tidak pernah berhenti. Arsitektur ini dapat dipakai untuk 1 task  atau beberapa task yang tidak memerlukan jadwal atau pewaktuan yang kritis.

Diagram alir perangkat lunak embedded dengan superloop
Diagram alir perangkat lunak embedded dengan superloop

Superloop pada Arduino

Pada Arduino , arsitektur perangkat lunak yang paling sering dipakai adalah superloop. Di sini sudah difasilitasi dengan cara memberikan 2 buah fungsi dasar yaitu fungsi setup() dan fungsi loop(). Fungsi setup() hanya dijalankan sekali saja di awal, biasanya berisi inisialisasi hardware. Selain itu ada fungsi loop() yang dijalankan terus menerus. Jadi flowchart atau diagram alir program Arduino prinsipnya adalah seperti pada gambar ini. Sebagai contoh adalah perangkat lunak lampu kedip yang tersedia di contoh aplikasi Arduino. Aplikasi ini biasanya aplikasi yang pertama kali kita jalankan di Arduino, untuk mengecek apakah compiler dan hardware yang dipakai berfungsi baik. Pada aplikasi ini pada bagian setup() berisi inisialisasi sebuah pin (dalam hal ini pin LED_BUILTIN) sebagai output. Pada Arduino Nano dan Arduino UNO, pin LED_BUILTIN ini adalah pin 13. Kemudian pada fungsi loop() , di dalamnya adalah Task untuk menyalakan dan mematikan LED dengan delay sebanyak 1000 milidetik.

 

Berikut ini contoh perangkat lunak Arduino sesuai dengan diagram alir di atas.

// https://www.arduino.cc/en/tutorial/blink

void setup() {

pinMode(LED_BUILTIN, OUTPUT);

}

void loop() {

digitalWrite(LED_BUILTIN, HIGH);

delay(1000); digitalWrite(LED_BUILTIN, LOW);   

delay(1000);

}

 

Superloop Dengan Dua Task

Aplikasi superloop umumnya hanya baik dipakai untuk satu task / tugas yang tidak memerlukan pewaktuan yang kritis. Bisa juga dipakai untuk dua atau lebih task, namun akan ada masalah kalau kedua task tersebut memerlukan pewaktuan yang berbeda. Pada ilustrasi flowchart ini kita lihat 2 buah task / pekerjaan yang dimasukkan ke dalam sebuah loop. Task 1 dan Task 2 akan bekerja bergantian. Untuk memulai Task 2 harus menunggu task 1 selesai, dan sebaliknya : task 1 harus menunggu task 2 selesai sebelum task 1 dapat mulai bekerja.

 

Diagram alir superloop dengan dua task
Diagram alir superloop dengan dua task

Lampu Kedip Dengan Superloop

Berikut ini flowchart lampu kedip pada Arduino. Software ini berfungsi cukup baik dan dapat mudah difahami untuk karena pada system ini hanya ada 1 task saja, dan frekuensi lampu kedip tidak terlalu kritis. Secara sepintas, perioda lampu kedip adalah 2 detik , sehingga frekuensi lampu kedip adalah 0,5 Hz. Namun jika kita lihat lebih teliti, perioda akan sedikit lebih besar dari 2 detik. Perioda sebenarnya adalah 2 detik (karena delay 1000 ms) , ditambah waktu untuk menyalakan LED, dan waktu untuk mematikan LED, serta waktu untuk melakukan JUMP dari bawah setelah delay 1000 milidetik ke LED ON..

Diagram alir lampu kedip dengan superloop
Diagram alir lampu kedip dengan superloop

// https://www.arduino.cc/en/tutorial/blink

void setup() {

pinMode(LED_BUILTIN, OUTPUT);

}

void loop() {

digitalWrite(LED_BUILTIN, HIGH);

delay(1000); digitalWrite(LED_BUILTIN, LOW);   

delay(1000);

}

 

Arsitektur Superloop Dengan Interupsi / Foreground-Background

Arsitektur berikutnya adalah superloop dengan interupsi, atau dikenal juga sebagai foreground-background. Pada arsitektur ini terdapat superloop seperti pada arsitektur sebelumnya, ditambah dengan beberapa buah Task yang dijalankan dengan interupsi. Interupsi ini ditrigger oleh suatu kejadian pada hardware Pada keadaan normal tanpa interupsi, yang dijalankan hanya Loop() saja, di sini menjalankan Task 1. Jika ada Interupsi 1, maka Task 1 akan dihentikan dulu, kemudian CPU menjalankan Task 2 sampai selesai , kemudian Interupsi 1 menjalankan RETI (return from interrupt) yang mengakhiri pelaksanaan interupsi 1. setelah itu baru kemudian Loop() yang berisi Task 1 diteruskan. Demikian juga hal serupa jika terjadi Interupsi 2 dan interupsi 3. Loop () ini dikenal juga sebagai background (latar belakang), sedangkan interupsi ini diistilahkan juga dengan Foreground. Analoginya Background ini posisinya di belakang, jadi tidak kelihatan jika ada sesuatu di depannya. Foreground jika ada akan menutupi Background. Maka dari tamsilan ini arsitektur ini dikenal juga dengan nama foreground-background.

Diagram alir superloop dengan interupsi
Diagram alir superloop dengan interupsi

Contoh Superloop Dengan Interupsi Timer

Interupsi yang umum dipakai misalnya adalah interupsi timer dan interupsi eksternal. Interupsi timer dapat timbul jika ada timer yang overflow atau mencapai suatu angka tertentu. Secara praktisnya, Timer ini dapat dipakai untuk membuat sebuah Task yang aktif secara periodik. Pada Arduino Nano/UNO terdapat 3 timer hardware di mikrokontrolernya, sehingga kita dapat membuat 3 buah interupsi timer. Dari sini kita dapat membuat 3 buah LED berkedip, dengan masing-masing dikendalikan oleh 1 interupsi timer. Dengan arsitektur ini, kita dapat mempunyai task periodic sebanyak jumlah timer yang tersedia pada mikrokontroler

Diagram alir superloop dengan interupsi timer
Diagram alir superloop dengan interupsi timer

 

Lampu Kedip Dengan Interupsi

Sebagai contoh pada gambar ini adalah aplikasi untuk membuat 4 buah LED berkedip dengan frekuensi yang berbeda. LED 1, LED 2 dan LED 3 akan berkedip sesuai dengan frekuensi yang diprogramkan pada timer 0, 1 dan 2. Setting timer ini dilakukan di bagian INIT(). LED 4 berkedip sendiri di superloop, namun periodanya tidak akan seusai 100% dengan waktu delay di superloop.

 

Arsitektur Multi Thread Dengan Real Time Operating System (RTOS)

Berikut ini adalah diagram alir arsitektur dengan multithreading atau multitasking. Untuk dapat menjalankan diagram alir ini, harus menggunakan suatu Real Time Operating System seperti FreeRTOS. Pada RTOS, superloop biasanya hanya berisi inisialisasi RTOS, selain itu kosong saja. Fungsi-fungsi di dalam aplikasi dijalankan sebagai Task pada Thread ataupun sebagai interupsi. Interupsi di sini bekerja sama seperti pada arsitektur sebelumnya. Perbedaan utama di sini adalah ada bagian yang bernama Real Time Kernenl dan Thread. Real Time Kernel biasanya dijalankan secara rutin oleh salah satu interupsi Timer pada mikrokontroler. Real Time Kernel ini kemudian tugasnya adalah menjalankan Thread-thread / Task yang ada pada aplikasi tersebut. Real Time Kernel dapat menjalankan dan menghentikan setiap task secara bergantian, sehingga seakan-akan kita memiliki beberapa CPU , padahal sebenarnya hanya ada 1 buah CPU. Pada Thread 1 dan Thread 2, struktur di dalamnya ada inisialisasi, dan ada sebuah superloop di masing-masingnya.

Diagram alir multithread dengan superloop, interupsi dan thread
Diagram alir multithread dengan superloop, interupsi dan thread

Lampu Kedip dengan RTOS

Berikut ini contoh 4 buah lampu kedip dengan menggunakan FreeRTOS.

Lampu kedip dengan FreeRTOS
Lampu kedip dengan FreeRTOS

Source code ada di tautan berikut ini:  https://github.com/waskita/embedded/tree/master/atmega-blink-freertos

Detail lampu kedip tersebut dijelaskan di artikel berikut ini: Elektrologi:  Lampu kedip pada arduino/

Video Demo : https://www.youtube.com/watch?v=LV0qBlbytHE

Mesin Cuci Samsung WF8590NHW sebagai sebuah sistem embedded

Berikut ini mesin cuci WF8590NHW  dengan spesifikasi sangat sederhana: ” Top-Load dengan Diamond Drum – 6 Kg”. Sama sekali tidak disebut kemampuan prosesornya. Kalau dibongkar di dalamnya, terlihat sistem embedded di dalamnya menggunakan prosesor tipe TMP91FU62DFG. Prosesor tersebut memiliki kemampuan clock maksimum 20 MHz, ROM: 96K bytes (Flash ROM), RAM: 4K bytes.

Mesin cuci Samsung WF8590NHW
Mesin cuci Samsung WF8590NHW

Spesifikasi Mesin Cuci

Spesifikasi ringkas: Top-Load dengan Diamond Drum – 6 Kg

Sumber: Situs resmi Samsung WF8590NHW

Sistem Embedded

Berikut ini papan rangkaian pengendali mesin cuci tersebut. Ukuran papan rangkaian adalah panjang 26 cm, lebar 10 cm. Posisi papan rangkaian ini tepat di belakang panel. Pada papan rangkaian terlihat LED 7 segment di bagian kiri atas, LED ini sama dengan yang nampak di bagian atas depan mesin cuci.

Berikut ini tampilan panel atas yang terletak tepat di depan papan rangkaian tersebut.

Panel mesin cuci
Panel mesin cuci

Mesin cuci ini menggunakan mikroprosesor buatan Toshiba tipe TMP91FU62DFG

Papan rangkaian prosesor di mesin cuci WF8590NHW
Papan rangkaian prosesor di mesin cuci WF8590NHW
Prosesor TMP91FU62DFG
Prosesor TMP91FU62DFG

Spesifikasi Prosesor TMP91FU62DFG

High-speed 16-bit CPU (900/L1 CPU)

  • Instruction mnemonics are upward-compatible with TLCS-900,900/H,900/L
  • 16 Mbytes of linear address space
  • General-purpose registers and register banks
  • 16-bit multiplication and division instructions; bit transfer and arithmetic instructions
  • Micro DMA: 4 channels (800ns/2 bytes at 20MHz)
  • Minimum instruction execution time:200ns (at 20MHz)
  • Built-in memory
    – ROM: 96K bytes (Flash ROM)
    – RAM: 4K bytes
  • 8-bit timers: 4 channels
  • 16-bit timers: 4 channels
  • General-purpose serial interface: 4 channels
    – UART/Synchronous mode: 3 channels
    – I2C bus mode: 1 channels
  • 10-bit AD converter (Built-in Sample hold circuit): 16 channels
  • Special timer for CLOCK
  • Watchdog timer
  • Program patch logic: 6 banks
  • Interrupts: 48 interrupts
    – 9 CPU interrupts: Software interrupt instruction and illegal instruction
    – 30 internal interrupts: 7 priority levels are selectable
    – 9 external interrupts: 7 priority levels are selectable (among 1 interrupts are selectable edge mode)
  • Input/output ports: 69 pins
  • Standby function: Three HALT modes: IDLE2 (Programmable), IDLE1 and STOP
  • Clock controller
    – Clock gear function: Select a High-frequency clock fc/1 to fc/16
    – Oscillator for CLOCK (fs = 32.768 kHz)
  • Operating voltage
    Flash read operation
    > Vcc=4.5 V – 5.5 V (fc max = 20MHz)
    Flash write/erase operation
    > Vcc=4.75 V – 5.25 V (fc max = 20MHz)
  • Package
    – LQFP80-P-1212-0.50E (TMP91FU62FG)
    – QFP80-P-1420-0.80B (TMP91FU62DFG)

Referensi

 

 

Contoh Sistem Embedded

Berikut ini beberapa contoh sistem embedded yang sering dijumpai sehari-hari.

  • Mesin cuci front loading otomatis
  • Pulse oxymeter, alat pengukur kadar saturasi oksigen dalam darah.
  • Senter LED
Contoh sistem embedded: mesin cuci front loading otomatis, pulse oxymeter, senter LED
Contoh sistem embedded

Contoh Sistem Non Embedded

Sebagai perbandingan, berikut ini contoh sistem yang bukan sistem embedded. Berikut ini contoh mesin cuci manual top loading dua tabung, di mana semua operasi dilakukan manual

 

Diagram blok mesin cuci top loading
Diagram blok mesin cuci top loading

Timer menggunakan mekanik / elektromekanik, tidak ada komponen mikroprosesor sehingga praktis tidak ada komputasi di dalamnya

Pada mesin cuci ini ada 2 motor terpisah, yaitu motor pencuci dan motor pengering. Pengisian dan pembuangan air menggunakan katup mekanik, dengan pembukaan dan penutupan dilakukan secara manual.

Timer pencuci fungsinya menyalakan motor pencuci selama beberapa menit, ditentukan oleh orang yang mencuci. Selama pencucian, arah putaran motor dapat berubah-ubah arah supaya pencucian lebih baik dibandingkan kalau putaran motor hanya satu arah.

Timer pengering fungsinya menyalakan motor pengering selama beberapa menit, ditentukan oleh orang yang mencuci. 

Fitur otomatis pada mesin cuci ini hanya pada timer pencuci, timer pengering dan sensor pintu pengering yang otomatis menghentikan motor pengering jika pintu penutup pengering dibuka dalam keadaan motor menyala.

Mesin cuci ini tidak mengandung prosesor ataupun pengolah informasi , sehingga dapat dikatakan sistem ini bukan termasuk sistem embedded

Mesin Cuci Front Loading Otomatis

 

Mesin cuci front loading
Mesin cuci front loading

 

Diagram blok mesin cuci front loading
Diagram blok mesin cuci front loading

Berikut ini ilustrasi mesin cuci front loading otomatis. Tabung pencuci digerakkan oleh motor. Ada katup pengisian air, ada pompa pembuangan air. Semuanya dikendalikan secara otomatis dengan mikroprosesor. Sensor yang dipakai antara lain sensor kecepatan motor, sensor temperature air, sensor ketinggian air, sensor pintu. Pengaturan cukup dengan menekan tombol-tombol di panel. Status mesin cuci ditampilkan pada sebuah display LCD. Dari diagram bloknya saja sudah Nampak bahwa system ini cukup kompleks. Bagi pengguna, yang penting adalah bahwa mesin ini dapat mencuci baju dengan baik. Pengguna tidak mencari mesin cuci berdasarkan kecepatan CPU, kapasitas memori dan sebagainya.

Ada juga kunci pintu supaya tidak dapat dibuka setelah mesin dinyalakan.

Mesin cuci ini termasuk CPS (Cyber Physical System), karena ada benda fisik (physical) yang diatur, yaitu tabung pencuci dan air di dalamnya. Tabung pencuci diatur kecepatan putarannya, sedangkan air diatur ketinggian dan temperaturnya.

Aktuator pada mesin cuci ini adalah sebagai berikut

  • panel display LCD
  • Buzzer
  • katup air
  • motor listrik pencuci & pengering
  • pompa pembuang air

Sensornya pada mesin cuci ini adalah sebagai berikut

  • sensor ketinggian air
  • sensor temperatur air
  • sensor kecepatan putaran motor
  • sensor pintu (terbuka atau tertutup)
  • tombol pada panel

Berikut ini tahap proses mesin cuci pada pencucian normal

  • Cucian dimasukkan (secara manual)
  • Pintu ditutup (secara manual)
  • Jenis pencucian dipilih oleh pengguna & proses dimulai
  • Pintu dikunci otomatis
  • Masukkan air & sabun (air otomatis, sabun manual)
  • Cuci dengan diputar bolak-balik dengan kecepatan tertentu
  • Buang air cucian & pompa air keluar
  • Cucian dibilas dengan air untuk membersihkan sabun
  • Keringkan dengan putaran tinggi & pompa air keluar
  • Tunggu sampai tabung berhenti berputar
  • Buka kunci pintu (otomatis)

Dalam prakteknya tahap-tahap di atas lebih kompleks, karena ada beberapa mode pencucian (pencucian cepat 29 menit, pencucian lama 2 jam, pengeringan saja, dan sebagainya) dan juga ada kemungkinan terjadinya kesalahan/gangguan pada waktu pencucian. Contoh gangguan adalah air tidak mengisi dengan baik, pompa pembuangan macet dan sebagainya

Pulse Oxymeter

Berikut ini alat pulse oximeter yang populer untuk mengukur denyut jantung dan kadar oksigen dalam darah.

Pulse oxymeter
Pulse oxymeter
Diagram blok pulse oxymeter
Diagram blok pulse oxymeter

Alat ini merupakan salah satu perangkat untuk mengukur kondisi pasien covid19 dan orang yang ada gangguan asthma.

Prinsip kerja alat ini adalah mengukur intensitas cahaya yang menembus jari tangan pada 2 buah Panjang gelombang yang berbeda

Ada sumber cahaya yang diatur oleh mikroprosesor. Intensitas cahaya yang menembus jari tangan diukur oleh sensor cahaya. Fluktuasi cahaya tersebut diproses dengan suatu algoritma di mikroprosesor. Data denyut jantung dan kadar oksigen yang didapat kemudian ditampilkan pada display

Pada system ini tidak ada pengendalian, jadi system ini tidak termasuk CPS, namun system ini termasuk ke system embedded

Mikroprosesor hanya memilih sensor mana yg aktif dengan mengatur sumber cahaya.

Algoritma pengukuran denyut jantung contohnya di artikel analisis-sinyal-detak-jantung/

Referensi

 

 

Pengertian Real Time pada Sistem Embedded

Banyak sistem embedded berinteraksi dengan dunia fisik, sehingga system embedded harus dapat merespon dunia fisik secara cukup cepat. Respon cepat ini disebut juga sebagai “real time” .

Tidak semua sistem embedded harus real time, demikian juga tidak semua sistem real time harus embedded

Pengertian Menurut Kamus

The actual time during which something takes place
  • –The computer may partly analyze the data in real time (as it comes in) – R.H. March
  • –Chatted online in real time

Sumber: https://www.merriam-webster.com/dictionary/real%20time

Maksudnya dari ‘the actual time during which something takes place” adalah ada 2 atau lebih kejadian, dan semuanya terjadi praktis pada waktu yang sama.

Real time secara Bahasa Inggris diartikan sesuatu yang terjadi seketika, namun dalam dunia teknik, kita perlu definisi yang lebih lugas.

Pengertian dalam Sistem Embedded

A real-time computer system is a computer system where the correctness of the system behavior depends not only on the logical results of the computations, but also on the physical time when these results are produced. By system behavior we mean the sequence of outputs in time of a system.

Sumber: Herman Kopetz, Real Time Systems, Design Principles for Distributed Embedded Applications 2nd edition, Springer, 2011, halaman 2

Terjemahan bebas: “Sistem komputer waktu nyata adalah system computer yang ketepatan perilakunya tergantung tidak hanya pada hasil komputasinya , namun juga waktu terjadinya hasil komputasi tersebut. Perilaku system di sini adalah urutan output terhadap waktu pada system tersebut.”

Jadi pada sistem komputer biasa, kualitas sistem hanya ditentukan hasil perhitungan yang benar, sedangkan pada komputer waktu nyata (real time), kualitas ditentukan oleh ketepatan hasil perhitungan dan waktu keluarnya hasil perhitungan tersebut.

Batasan ‘cepat’ perlu diturunkan dari fenomena fisik pada sistem. Jadi kita perlu memahami perilaku system fisik supaya dapat mendapatkan batasan waktu yang tepat.

Jika komputasi terlalu lambat maka sistem komputasi tidak dapat merespon perubahan fisik dengan baik. Jika hasil komputasi (dikeluarkan) terlalu cepat maka output juga dianggap tidak tepat.

Optimasi komputer juga diperlukan. Jika komputer yang dipakai terlalu cepat dari yang diperlukan, maka harganya akan lebih mahal. Jadi dalam hal ini perlu penentuan kecepatan komputer yang optimal.

Real time bukan hanya sekedar menggunakan prosesor yang cepat, namun juga ada masalah penjadwalan. Hal ini akan dibahas di bahasan Real Time Operating System di  bagian Scheduler (penjadwal). Pada RTOS, selain kecepatan komputasi juga ada faktor pergantian ke pekerjaan yang lebih penting.

Referensi

  • Herman Kopetz, Real Time Systems, Design Principles for Distributed Embedded Applications 2nd edition, Springer, 2011
  • Pengertian Sistem Embedded

Pengertian Cyber Physical System

Cyber Physical System (Sistem Fisik Siber) adalah sistem yang terdiri dari subsistem fisik , komputasi dan jaringan komunikasi

Pada sistem embedded, suatu mikroprosesor atau pengolah informasi lainnya dihubungkan dengan suatu system fisik. Keadaan dari system fisik dibaca oleh mikroprosesor, kemudian program di mikroprosesor mengatur system fisik. Pada system yang sederhana, kombinasi ini dapat diprogram dengan mudah. Namun pada system yang lebih kompleks, interaksi antara komputasi dan fisik ini cukup rumit. Pada tahun 2006, mulai muncul istilah ‘Cyber Physical System’, sebagai disiplin ilmu baru untuk membahas permasalahan ini.

Cyber Physical System
Cyber Physical System

Definisi Cyber Physical System

Berikut ini definisi Cyber Physical System pada beberapa literatur. 

Terjemahan bebasnya:

Definisi 1: Cyber Physical System (Sistem Fisik Siber) adalah sistem yang terdiri dari subsistem fisik , komputasi dan jaringan komunikasi

Definisi 2: Sistem Fisik Siber terdiri dari kumpulan perangkat komputasi yang berkomunikasi satu sama lain dan berinteraksi dengan dunia fisik melalui sensor dan aktuator dalam suatu umpan balik.

Definisi 3: Sistem Fisik Siber menggabungkan kemampuan siber (komputasi) dengan kemampuan fisik untuk menyelesaikan masalah-masalah yang tidak dapat diselesaikan oleh salah satu darinya saja (fisik atau komputasi)

Definisi 4: Istilah siber fisik merujuk ke gabungan erat dan koordinasi antara komputasi dan sumber daya fisik.

Definisi 5: Sistem Fisik Siber adalah sistem yang direkayasa yang dibuat dan tergantung pada integrasi erat antara komponen komputasi dan komponen fisik. Sistem Fisik Siber menggabungkan secara erat perangkat komputasi, aktuator dan kendali, infrastruktur jaringan komunikasi dan pemindaian dunia fisik.

Definis 6: Sistem Fisik Siber adalah gabungan antara komputasi dengan proses fisik

Jadi ada 3 elemen pada suatu CPS: cyber yaitu komputasi, physical yaitu system fisik yang diatur/dikendalikan, komunikasi yang menghubungkan antara beberapa komputasi yang terdistribusi dan menghubungkan antara komputasi dan physical.

Lee & Seshia menyebutkan adanya networking, artinya ada komunikasi di dalamnya. Rajeev Alur menyebutkan adanya komunikasi antar perangkat komputasi yang dipakai. NSF pada tahun 2010 tidak menyebutkan komunikasi, namun pada tahun 2021 mencantumkan ‘networking infrastructure‘ pada penjelasannya.

Berikut ini ilustrasi system CPS dengan memasukkan elemen komunikasi.

Cyber Physical System dengan komunikasi
Cyber Physical System dengan komunikasi

Adanya komunikasi membuat perilaku system lebih kompleks, karena ada factor waktu jeda pada pengiriman data.

Komputasi dan komunikasi ini dipelajari dalam ilmu distributed systems atau distributed computing.

Pada pembahasan ini kita tidak membahas aspek komunikasi ini.

Berikut ini adalah sistem CPS dengan memasukkan aktuator dan sensor.

Sistem Siber Fisikal / Sistem Siber Fisikal / Cyber Physical System
Sistem Siber Fisikal

Fungsi aktuator adalah mengubah besaran listrik menjadi besaran fisik. Fungsi sensor adalah mengubah besaran fisik menjadi besaran listrik. Keseluruhan sistem membentuk umpan balik tertutup (closed feed back loop)

Sistem Kendali Closed Loop.

Berikut ini diagram sebuah system kendali . Pada system kendali ini ada benda physical yang dikendalikan, komputasi sebagai pengendali, input biasanya dari pengguna / manusia, dan output.

Sistem kendali umpan tertutup sebagai CPS
Sistem kendali umpan tertutup sebagai CPS

Pada system kendali diinginkan output mengikuti input. Pada system ini terdapat umpan balik dari output ke komputasi, sehingga system ini juga disebut system kendali umpan tertutup, atau closed loop control.

Perilaku system kendali seperti ini dipelajari secara detail di kuliah system kendali. Di kuliah system kendali titik beratnya di analisis matematis dari system kendali tersebut.

Sistem Kendali Open Loop

Berikut ini contoh system kendali tanpa umpan balik. Keadaan dari system fisik tidak dimasukkan lagi ke komputasi. Sistem ini dapat berfungsi baik jika perilaku physical diketahui dengan baik dan tidak ada gangguan dari luar.

Sistem kendali open loop
Sistem kendali open loop

Menurut definisi CPS, system ini tidak termasuk dalam CPS. Sistem ini masih termasuk system embedded karena ada elemen komputasi di dalamnya.

Sistem Monitoring

Sistem embedded untuk monitoring
Sistem embedded untuk monitoring

Ada juga system embedded yang tidak punya input, namun hanya mengolah sinyal keluaran dari suatu benda fisik. Contohnya adalah pada alat pengukur dan perekam data. Alat ini hanya mengukur besaran fisik suatu benda, kemudian mencatat , menganalisis, mengirim ke tempat lain atau menampilkan besaran tersebut. Contohnya misalnya IoT atau internet of things untuk mencatat parameter cuaca seperti temperature, kelembaban dan curah hujan.

Menurut definisi CPS di atas, sistem monitoring ini tidak termasuk dalam CPS. Sistem ini masih termasuk system embedded karena ada elemen komputasi di dalamnya.

Algoritma Cyber Physical System

CPS melibatkan suatu sistem kendali di dalamnya, sehingga diperlukan suatu algoritma sistem kendali.

Algoritma sistem kendali yang dapat dipakai antara lain sebagai berikut

  • Model Continuous Dynamics, Model berbasis dinamika kontinu, biasanya dibuat menggunakan persamaan diferensial. Contoh yang sering dipakai adalah kendali berbasis PID (Proportional Integral Derivative)
  • Model Discrete Dynamics, yaitu model yang berbasis dinamika sistem discrete event. Contohnya adalah pemodelan dengan State Chart, dan perangkat lunaknya dibuat dengan model Finite State Machine (FSM).
  • Model Hybrid, menggabungkan antara continuous dynamics dengan discrete dynamics.

Penutup

Pada pembahasan ini kita hanya membahas terutama aspek komputasi dan physical saja. Aspek komunikasi tidak dibahas.

Referensi

 

Pengertian Sistem Embedded

Pengertian Sistem Embedded pada dunia elektronika adalah “sistem pengolah informasi yang menyatu di dalam suatu produk“.

Definisi Sistem Embedded

Istilah “embedded” adalah istilah dalam bahasa Inggris dengan arti sebagai berikut:

1.occurring as a grammatical constituent (such as a verb phrase or clause) within a like constituent

2.enclosed closely in or as if in a matrix : set firmly into a mass or material

3.attached to a military unit or group for some purpose (such as covering a conflict or providing expert advice)

sumber: “Embedded.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/embedded 

Arti yang paling dekat dengan arti embedded pada dunia elektronika adalah arti nomor 2, yang artinya kurang lebih “sesuatu yang menyatu atau tertanam di dalam benda lain”. Terjemahan langsung istilah ‘embedded’ adalah ‘tertanam’.

Definisi berikut diambil dari buku “Peter Marwedel, Embedded System Design 3rd edition, Springer 2018, halaman 2″

Embedded systems are information processing systems embedded into enclosing products

Pada pengertian ini embedded system adalah suatu system pengolah informasi yang digabungkan atau ditanamkan ke suatu produk atau benda lain. Sistem pengolah informasi di sini tidak harus berupa komputer atau mikroprosesor.

Tertanam atau menyatu di sini berarti bagi orang yang melihat produk hanya melihat produk saja, tidak lagi melihat prosesor di dalamnya sebagai suatu benda yang terpisah.

Berikut ini beberapa definisi menurut literatur lain.

  • An embedded system is any application where a dedicated computer is built right into the system” [Jack Ganssle, The Art of Designing Embedded Systems, 2nd Edition, Newnes, 2008]
  • An application that contains at least one programmable computer (uC, uP or DSP) and which is used by individuals who are in the main, unaware that the system is computer based. [ Pont, M.J. , Patterns for Time Triggered Embedded Systems, (2001)]
  • Any computer system hidden in any products , [David E. Simon, An Embedded Software Primer ,Addison-Wesley Professional; 1st edition (1999)]

Definisi ini menyebutkan secara spesifik bahwa sistem embedded adalah mikroprosesor, dapat berupa mikroprosesor biasa, mikrokontroler ataupun mikropsesor dari jenis digital signal processor

Komputer Umum

Sistem komputer ada yang umum (general purpose) dan embedded. Pada sistem komputer yang umum, kita masih dapat mengenali bahwa benda tersebut adalah sebuah komputer. Dari spesifikasinya biasanya berdasarkan fitur-fitur komputer, seperti kecepatan CPU (Central Processing Unit), ukuran memori dan ukuran storage. Sedangkan pada sistem embedded, biasanya spesifikasinya tidak menampilkan kemampuan komputer yang dipakai di dalamnya, namun hanya menampilkan kemampuan produknya.

Berikut ini beberapa jenis sistem komputer umum:

  1. Desktop Personal Computer
  2. Notebook atau Laptop
  3. Mobile: Smartphone dan tablet
  4. information processing: web server, server database

Berikut ini ilustrasi komputer desktop  (sumber)

Contoh komputer desktop
Contoh komputer desktop

 

Komputer Laptop
Komputer Laptop
Smartphone
Smartphone

Contoh Spesifikasi Komputer Umum

Berikut ini contoh spesifikasi laptop. Perhatikan bahwa disebut jelas tentang kemampuan CPU, memori dan storage dari laptop tersebut.

Thinkpad T495
Thinkpad T495
Spesifikasi Thinkpad T495
Spesifikasi Thinkpad T495

Contoh Produk Dengan Sistem Embedded

Berikut ini contoh mesin cuci tipe front loading otomatis. Di dalam mesin cuci ini ada mikroprosesor untuk mengendalikan semua pekerjaan mesin cuci tersebut. Namun dalam spesifikasinya sama sekali tidak disebut tentang kemampuan mikroprosesornya tersebut.

Mesin cuci Panasonic ECONAVI 8 kg
Mesin cuci Panasonic ECONAVI 8 kg

Spesifikasi:

Spesifikasi mesin cuci Panasonic

Sumber: https://www.panasonic.com/au/support/product-archives/household/laundry-irons/washing-machines/na-148vg4wau.specs.html

Sistem Mikroprosesor dan Sistem Embedded

Berikut ini diagram blok suatu sistem mikroprosor. Komponen utama pada suatu mikroprosesor adalah CPU (Central Processing Unit), memori (RAM, ROM, Flash Memory, EEPROM, EPROM, NVRAM) , Input Output dan bus mikroprosesor.

Diagram blok sistem mikroprosesor
Diagram blok sistem mikroprosesor

Arti dari sistem mikroprosesor sangat mirip dengan system embedded.

Ketika kita bicara system mikroprosesor, biasanya konteksnya kita membahas struktur susunan sistem mikroprosesor, yang terdiri dari CPU, memori dan input output.

Ketika kita membicarakan system embedded, biasanya konteksnya adalah system mikroprosesor ini akan dijadikan bagian dari suatu produk lain.

Di banyak literatur, istilah ‘sistem mikroprosesor’ sinonim dengan ‘sistem embedded’. Pada buku literatur yang baru-baru, misalkan Ketika kita mencari referensi tentang Arduino, yang merupakan mikroprosesor, seringkali judul bukunya mengandung kata ‘embedded’.

Namun perlu diingat juga bahwa tidak semua system embedded menggunakan mikroprosesor, seperti definisi yang sudah disebut di awal. Di bukunya, Peter Marwedel mencontohkan ada system embedded yang menggunakan FPGA (field programmable Gate Array) sebagai pengolah informasi. FPGA ini adalah rangkaian digital yang terdiri dari gerbang rangkaian logika dan memori, yang disusun sebagai pengolah informasi. Untuk kuliah ini kita hanya focus ke system embedded yang menggunakan mikroprosesor.

Referensi

  • Desktop computer https://en.wikipedia.org/wiki/Desktop_computer
  • Laptop computer https://en.wikipedia.org/wiki/Laptop
  • Smartphone https://en.wikipedia.org/wiki/Smartphone
  • “Embedded.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/embedded 
  • Peter Marwedel, Embedded System Design 3rd edition, Springer 2018
  • Jack Ganssle, The Art of Designing Embedded Systems, 2nd Edition, Newnes, 2008
  • Pont, M.J. , Patterns for Time Triggered Embedded Systems, (2001)
  • David E. Simon, An Embedded Software Primer ,Addison-Wesley Professional; 1st edition (1999)

 

 

Membuat Gelombang Sinus Dengan Arduino Nano Dan DAC MCP4725

Gelombang sinus dapat dibuat dengan Arduino Nano, dengan bantuan DAC (Digital to Analog Converter).

Arduino Nano dan UNO di dalamnya menggunakan mikrokontroler  ATmega328. ATmega328 ini tidak memiliki DAC, sehingga sebenarnya tidak mampu membuat tegangan analog secara langsung. Untuk aplikasi yang sederhana, hal ini dapat diakali dengan menggunakan fitur PWM (Pulse Width Modulation). Librarynya di Arduino menggunakan AnalogWrite() . Namun untuk menghasilkan tegangan analog yang lebih baik, diperlukan komponen DAC seperti MCP4725.

Berikut ini contoh pembangkitan gelombang sinusoidal dengan Arduino Nano dan DAC MCP4725.

Pertama rakit hubungkan MCP4725 ke Arduino. Koneksinya menggunakan protokol I2C.

Daftar pin yang dihubungkan adalah sebagai berikut:

Pin Arduino Pin MCP4725 Keterangan
A4 (SDA) SDA pin data untuk I2C
A5 (SCL) SCL pin clock untuk I2C
GND GND ground 0 volt
VCC 5V supply 5 volt

Protokol I2C menggunakan 2 kabel, yaitu SDA (data) dan SCL (clock). Kedua jalur ini sebenarnya perlu disambungkan dengan pull up menggunakan resistor, namun pada Arduino sudah ada pull up internal 10 kilo ohm, sehingga tidak perlu ditambah lagi.

MCP4725 perlu supply 5 volt, yang dapat diambil dari pin 5V dari Arduino. Namun perlu diperhatikan pada Arduino clone/KW, tegangan 5V ini biasanya kurang dari 5 volt, terutama jika menggunakan power supply dari USB.

Rangkaian Arduino Nano dan MCP4725 di breadboard
Rangkaian Arduino Nano dan MCP4725 di breadboard

Tahap selanjutnya adalah instalasi library “Adafruit MCP4725”. Ada beberapa cara instalasi:

  • Download langsung filenya dari  https://github.com/adafruit/Adafruit_MCP4725/archive/master.zip, kemudian instalasi dengan cara copy ke direktori library Arduino secara manual
  • Instalasi dari menu Arduino

Untuk melakujkan instalasi dari Arduino, lakukan tahap berikut ini:

  • Klik di menu “Tools” -> “Manage Libraries”, atau Ctrl -Shift – I
  • Cari library “Adafruit MCP4725”, kemudian klik install
  • Proses download akan dilakukan. Tunggu sampai selesai

 

Alamat MCP4725 mungkin perlu dicoba-coba, antara 0x60, 0x61, 0x62, 0x63, 0x64, 0x65. Jika ingin dicari dengan cepat, dapat menggunakan program kecil I2C Scanner untuk Arduino UNO/Nano

Berikut ini contoh software pembangkit sinusoidal. Kode ini diadaptasi dari situs https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog-converter-hookup-guide/all

Pada contoh di bawah ini, alamat MCP4725 adalah 0x63, namun mungkin perlu diubah-ubah.

/******************************************************************************
MCP4725 Example Waveform Sketch
Joel Bartlett
SparkFun Electronics
Sept. 11, 2014
https://github.com/sparkfun/MCP4725_Breakout

This sketch takes data from a lookup table to provide
waveforms to be generated by the MCP4725 DAC.

Development environment specifics:
Arduino 1.0+
Hardware Version V14

This code is beerware; if you see me (or any other SparkFun employee) at the local,
and you've found our code helpful, please buy us a round!

Distributed as-is; no warranty is given.

This code builds off the sketch written by Mark VandeWettering, which can be found here:
http://brainwagon.org/2011/02/24/arduino-mcp4725-breakout-board/
*/

#include <Wire.h>//Include the Wire library to talk I2C

//This is the I2C Address of the MCP4725, by default (A0 pulled to GND).
//Please note that this breakout is for the MCP4725A0.
#define MCP4725_ADDR 0x63
//For devices with A0 pulled HIGH, use 0x61

//Sinewave Tables were generated using this calculator:
//http://www.daycounter.com/Calculators/Sine-Generator-Calculator.phtml


int lookup = 0;//varaible for navigating through the tables

int sintab2[512] =
{
2048, 2073, 2098, 2123, 2148, 2174, 2199, 2224,
2249, 2274, 2299, 2324, 2349, 2373, 2398, 2423,
2448, 2472, 2497, 2521, 2546, 2570, 2594, 2618,
2643, 2667, 2690, 2714, 2738, 2762, 2785, 2808,
2832, 2855, 2878, 2901, 2924, 2946, 2969, 2991,
3013, 3036, 3057, 3079, 3101, 3122, 3144, 3165,
3186, 3207, 3227, 3248, 3268, 3288, 3308, 3328,
3347, 3367, 3386, 3405, 3423, 3442, 3460, 3478,
3496, 3514, 3531, 3548, 3565, 3582, 3599, 3615,
3631, 3647, 3663, 3678, 3693, 3708, 3722, 3737,
3751, 3765, 3778, 3792, 3805, 3817, 3830, 3842,
3854, 3866, 3877, 3888, 3899, 3910, 3920, 3930,
3940, 3950, 3959, 3968, 3976, 3985, 3993, 4000,
4008, 4015, 4022, 4028, 4035, 4041, 4046, 4052,
4057, 4061, 4066, 4070, 4074, 4077, 4081, 4084,
4086, 4088, 4090, 4092, 4094, 4095, 4095, 4095,
4095, 4095, 4095, 4095, 4094, 4092, 4090, 4088,
4086, 4084, 4081, 4077, 4074, 4070, 4066, 4061,
4057, 4052, 4046, 4041, 4035, 4028, 4022, 4015,
4008, 4000, 3993, 3985, 3976, 3968, 3959, 3950,
3940, 3930, 3920, 3910, 3899, 3888, 3877, 3866,
3854, 3842, 3830, 3817, 3805, 3792, 3778, 3765,
3751, 3737, 3722, 3708, 3693, 3678, 3663, 3647,
3631, 3615, 3599, 3582, 3565, 3548, 3531, 3514,
3496, 3478, 3460, 3442, 3423, 3405, 3386, 3367,
3347, 3328, 3308, 3288, 3268, 3248, 3227, 3207,
3186, 3165, 3144, 3122, 3101, 3079, 3057, 3036,
3013, 2991, 2969, 2946, 2924, 2901, 2878, 2855,
2832, 2808, 2785, 2762, 2738, 2714, 2690, 2667,
2643, 2618, 2594, 2570, 2546, 2521, 2497, 2472,
2448, 2423, 2398, 2373, 2349, 2324, 2299, 2274,
2249, 2224, 2199, 2174, 2148, 2123, 2098, 2073,
2048, 2023, 1998, 1973, 1948, 1922, 1897, 1872,
1847, 1822, 1797, 1772, 1747, 1723, 1698, 1673,
1648, 1624, 1599, 1575, 1550, 1526, 1502, 1478,
1453, 1429, 1406, 1382, 1358, 1334, 1311, 1288,
1264, 1241, 1218, 1195, 1172, 1150, 1127, 1105,
1083, 1060, 1039, 1017, 995, 974, 952, 931,
910, 889, 869, 848, 828, 808, 788, 768,
749, 729, 710, 691, 673, 654, 636, 618,
600, 582, 565, 548, 531, 514, 497, 481,
465, 449, 433, 418, 403, 388, 374, 359,
345, 331, 318, 304, 291, 279, 266, 254,
242, 230, 219, 208, 197, 186, 176, 166,
156, 146, 137, 128, 120, 111, 103, 96,
88, 81, 74, 68, 61, 55, 50, 44,
39, 35, 30, 26, 22, 19, 15, 12,
10, 8, 6, 4, 2, 1, 1, 0,
0, 0, 1, 1, 2, 4, 6, 8,
10, 12, 15, 19, 22, 26, 30, 35,
39, 44, 50, 55, 61, 68, 74, 81,
88, 96, 103, 111, 120, 128, 137, 146,
156, 166, 176, 186, 197, 208, 219, 230,
242, 254, 266, 279, 291, 304, 318, 331,
345, 359, 374, 388, 403, 418, 433, 449,
465, 481, 497, 514, 531, 548, 565, 582,
600, 618, 636, 654, 673, 691, 710, 729,
749, 768, 788, 808, 828, 848, 869, 889,
910, 931, 952, 974, 995, 1017, 1039, 1060,
1083, 1105, 1127, 1150, 1172, 1195, 1218, 1241,
1264, 1288, 1311, 1334, 1358, 1382, 1406, 1429,
1453, 1478, 1502, 1526, 1550, 1575, 1599, 1624,
1648, 1673, 1698, 1723, 1747, 1772, 1797, 1822,
1847, 1872, 1897, 1922, 1948, 1973, 1998, 2023
};


void setup()
{
Wire.begin();

// Set A2 and A3 as Outputs to make them our GND and Vcc,
//which will power the MCP4725
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);

digitalWrite(A2, LOW);//Set A2 as GND
digitalWrite(A3, HIGH);//Set A3 as Vcc
}
//---------------------------------------------------
void loop()
{
Wire.beginTransmission(MCP4725_ADDR);
Wire.write(64); // cmd to update the DAC
Wire.write(sintab2[lookup] >> 4); // the 8 most significant bits...
Wire.write((sintab2[lookup] & 15) << 4); // the 4 least significant bits...
Wire.endTransmission();
lookup = (lookup + 1) & 511;
}

Definisi alamat MCP4725 ada di baris berikut ini:

#define MCP4725_ADDR 0x63

Versi lain software pembangkit sinusoidal dapat dilihat di https://github.com/adafruit/Adafruit_MCP4725/blob/master/examples/sinewave/sinewave.ino

Tegangan output sinusoidal dapat diukur di pin OUT pada MCP4725.

Berikut ini contoh output yang diukur dengan osiloskop.

Tegangan sinusoidal dari MCP4725 dan Arduino Nano
Tegangan sinusoidal dari MCP4725 dan Arduino Nano

Frekuensi gelombang sinusoidal adalah 4,5039 Hz . Jumlah sampel dalam 1 periode adalah 512. Periode sampling adalah 1/4,5039/512 = 0,434 milidetik. Frekuensi sampling adalah 2306 Hz.

Demikianlah cara sederhana membuat gelombang sinusoidal pada Arduino Nano dengan menggunakan DAC MCP4725. Namun demikian rangkaian ini masih mempunyai kelemahan:

  • Tegangan referensi DAC menggunakan tegangan 5V dari Arduino Nano yang kalau diukur tegangannya kurang dari 5 volt (sekitar 4,6 volt), dan ada ripple / noise di situ. Solusinya adalah menambahkan filter atau regulator supaya tegangan VCC untuk MCP4725 lebih stabil.
  • Tegangan keluaran masih terbatas dari 0 sampai 5 volt, sesuai tegangan VCC pada MCP4725. Jika perlu jangkauan tegangan lain maka perlu ditambah rangkaian penguat / pengubah level, yang mudahnya dapat dibuat dengan rangkaian op-amp
  • Belum ada filter rekonstruksi (reconstruction filter), untuk menghilangkan efek tangga pada tegangan output DAC. Sistem DAC yang lebih lengkap dapat dilihat di artikel https://elektrologi.iptek.web.id/sistem-filter-digital/

Referensi

I2C Scanner Untuk Arduino UNO & Nano

I2C Scanner Untuk Arduino UNO & Nano diperlukan untuk mengecek periferal apa saja yang terhubung ke bus I2C. Kadang-kadang ada modul yang dijual dengan berbagai alamat (seperti MCP4725). I2C scanner ini juga dapat membantu untuk mengecek kualitas sambungan pada bus I2C.

Kadang-kadang bus I2C tidak berfungsi dengan baik karena kabel terlalu panjang, resistor pull-up kurang kecil, bidirectional logic converter tidak jalan (jika bus menggunakan tegangan ganda 5 volt dan 3,3 volt), dan berbagai hal lainnya. Software I2C scanner ini dapat membantu mencari terjadinya kesalahan tersebut.

Ide software ini diambil dari situs https://playground.arduino.cc/Main/I2cScanner/

// --------------------------------------
// i2c_scanner
// https://playground.arduino.cc/Main/I2cScanner/
// Version 1
// This program (or code that looks like it)
// can be found in many places.
// For example on the Arduino.cc forum.
// The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
// Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26 2013
// V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
// by Arduino.cc user Krodal.
// Changes by louarnold removed.
// Scanning addresses changed from 0...127 to 1...119,
// according to the i2c scanner by Nick Gammon
// https://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
// As version 4, but address scans now to 127.
// A sensor seems to use address 120.
// Version 6, November 27, 2015.
// Added waiting for the Leonardo serial communication.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//


#include <Wire.h>


void setup()
{
Wire.begin();

Serial.begin(115200);
while (!Serial); // Leonardo: wait for serial monitor
Serial.println("\nI2C Scanner");
}


void loop()
{
byte error, address;
int nDevices;

Serial.println("Scanning...");

nDevices = 0;
for (address = 1; address < 127; address++ )
{
Serial.println(address, HEX);
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the 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.print(address, HEX);
Serial.println(" !");

nDevices++;
}
else if (error == 4)
{
Serial.print("Unknown 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");

delay(5000); // wait 5 seconds for next scan


Referensi

Kekurangan Arduino Mega 2560

Apa kekurangan Arduino Mega 2560? Untuk itu pertama dibandingkan dulu spesifikasi antara Arduino Mega 2560 dengan Arduino UNO Rev 3.

Spesifikasi

Perbandingan antara Arduino Mega 2560 dengan Arduino UNO

  Arduino UNO Rev 3
Arduino Mega 2560 Rev 3
Prosesor / Mikrokontroler ATmega328P ATmega 2560
Clock 16 MHz 16 MHz
SRAM 2 KB 8 KB
EEPROM 1 KB 4 KB
Flash Memory 32 KB 256 KB, 8 KB untuk bootloader
Digital I/O 14 (6 dengan PWM) 54 pin (15 dengan PWM)
Analog Input 6 16 pin
berat 25 g 37 g
Ukuran 68,6 x 53,4 mm 101,52 mm x 53,3 mm
Harga
  • Original: Rp 300 ribu ~ Rp 400 ribu
  • Clone / KW: Rp 60 ribuan ~ Rp 70 ribuan
  • Original: Rp 500 ~ Rp 600 ribuan
  • Clone/ KW: Rp 100 ribuan

Dari hasil perbandingan tersebut dapat disimpulkan bahwa secara teknis Arduino Mega 2560 lebih unggul dari sisi teknis, namun kelemahannya dibandingkan Arduino  UNO adalah harganya yang jauh lebih mahal, dan ukurannya yang lebih besar.

Kekurangan Arduino Mega 2560 Rev 3 adalah sebagai berikut

  • harga lebih mahal
  • ukuran lebih besar
  • bobot lebih berat

Keuntungan Arduino Mega 2560 dibandingkan Arduino UNO adalah sebagai berikut:

  • memori SRAM (Static Random Access Memory) lebih besar, 8 KB vs 2 KB
  • memori EEPROM (Electrically Erasable Programmable Read Only Memory) lebih besar, 4 KB vs 1 KB
  • memori Flash (untuk diisi program) lebih besar, 256 KB vs 32 KB
  • jumlah pin lebih banyak

Kesamaannya adalah sama-sama menggunaan prosesor dari keluarga AVR, dan kecepatan clocknya adalah sama-sama 16  MHz. Jadi program yang dijalankan di Arduino Mega akan sama kecepatannya dengan dijalankan di Arduino UNO.

Referensi

Cara Menghubungkan 2 Arduino

Dua buah board Arduino UNO/Nano dapat dihubungkan dengan komunikasi serial, sehingga keduanya dapat berkomunikasi.

Alternatif komunikasi serial yang dapat dipakai adalah sebagai berikut:

  • Komunikasi Serial Asinkron
  • Komunikasi Serial I2C / TWI (Two Wire Interface)
  • Komunikasi SPI (Serial Peripheral Interface)

Komunikasi Serial Asinkron

Pada komunkasi serial asinkron, port yang dipakai adalah port komunikasi serial TX & RX, atau pin D0 dan D1 pada Arduino. Cara menghubungkannya adalah silang, yaitu TX dihubungkan ke RX , RX dihubungkan ke TX. Pengiriman data dilakukan dengan menggunakan library Serial pada Arduino. Pada komunikasi ini hanya dapat dihubungkan 2 buah board Arduino.

Komunikasi asinkron pada Arduino dapat menggunakan hardware dan software. Secara hardware, komunikasi asinkron terhubung ke pin D0 dan D1. Jika perlu tambahan komunikasi serial, dapat menggunakan library SoftwareSerial. 

Jika menggunakan library SoftwareSerial, port yang digunakan bebas.

Berikut ini skema menghubungkan Arduino dengan komunikasi sinkron, menggunakan port asinkron bawaan aslinya. Pin TX di Arduino pertama dihubungkan ke RX di Arduino kedua. Pin RX di Arduino pertama dihubungkan ke TX di Arduino kedua.

Cara menghubungkan 2 arduino dengan komunikasi asinkron
Cara menghubungkan 2 arduino dengan komunikasi asinkron

Komunikasi Serial I2C/TWI

Pada komunikasi ini digunakan protokol TWI (Two Wire Interface). Pin yang dipakai adalah SDA (ADC4) dan SCL (ADC5).

Berikut ilustrasi port pada Arduino:

Pin Arduino UNO
Pin Arduino UNO

Pada protokol TWI/I2C, 1 prosesor menjadi master, sedangkan lainnya adalah slave. Pengalamatan pada I2C adalah 7 bit, jadi jumlah node maksimum yang dapat dihubungkan pada bus I2C adalah 128 buah prosesor.

Berikut ini contoh cara menghubungkan 2 buah Arduino dengan protokol I2C.

Arduino UNO Master Slave I2C
Arduino UNO Master Slave I2C

Tutorialnya dapat diikuti di https://www.arduino.cc/en/Tutorial/MasterWriter

Komunikasi SPI (Serial Peripheral Interface)

Pada komunikasi ini digunakan protokl SPI. Pin yang dipakai adalah SCK, MOSI, MISO dan SS.

Daftar pin yang dipakai untuk SPI  pada Arduino adalah sebagai berikut:

Jalur SPI
Pin Arduino Pin ATmega328
MOSI 11 or ICSP-4 PB3
MISO 12 or ICSP-1 PB4
SCK 13 or ICSP-3 PB5
SS 10 PB2

Berikut cara menghubungkan 2 perangkat yang menggunakan protokol SPI

 

Arduino Dengan SPI
Arduino Dengan SPI

Tutorial menghubungkan 2 Arduino dengan SPI dapat diikuti di https://circuitdigest.com/microcontroller-projects/arduino-spi-communication-tutorial

Referensi

Berapakah besar arus maksimal masing masing pin digital Arduino?

Arus maksimal masing-masing pin digital Arduino UNO dan Arduino Nano adalah 40 milliampere (mA), dengan asumsi tidak melanggar batasan arus maksimum VCC dan GND sebesar 200 mA.

Arduino UNO dan Arduino Nano menggunakan prosesor ATmega328. Arus maksimal ini dijelaskan di datasheet prosesor ATmega328 tersebut sebagai berikut:

ATmega328 absolute maximum rating
ATmega328 absolute maximum rating
 

Namun demikian perlu diperhatikan batasan arus yang lain, yaitu arus maksimum di pin VCC dan GND, yaitu 200 mA. Jumlah pin pada ATmega328 adalah 23 buah, jadi kalau semua pin mengeluarkan arus yang sama, maka arus di setiap pin adalah 200/23 = 8.7 mA.

Jika ingin mengeluarkan arus 40 mA, maka maksimum jumlah pin yang memberikan arus 40 mA adalah 200/40 = 5 pin saja.

Board Arduino tidak semuanya menggunakan prosesor ATmega328. Untuk Arduino yang menggunakan prosesor lain, maka perlu dicek datasheet masing-masing prosesornya.

Perangkat Lunak Untuk Simulasi Arduino

Arduino dapat disimulasikan dengan perangkat lunak apa saja?

Berikut ini beberapa simulator Arduino dalam bentuk perangkat lunak (software):

  1. Atmel Studio (https://www.microchip.com/mplab/avr-support/atmel-studio-7)
  2. TinkerCad (https://www.tinkercad.com/) , simulasi berbagai perangkat termasuk Arduino. Gratis. Hanya Online
  3. Paul Ware’s Arduino simulator (https://github.com/Paulware/ArduinoDebugger/). Gratis & open source
  4. Simduino  (https://apps.apple.com/us/app/simduino/id526927905), hanya jalan di aplikasi Apple. Berbayar
  5. Emulare Arduino simulator (http://emulare.sourceforge.net/)
  6. Proteus Virtual System Modelling (VSM) https://www.labcenter.com/simulation/
  7. Virtronics Simulator for Arduino (http://www.virtronics.com.au/Simulator-for-Arduino.html)
  8. Arduino IO Simulator https://xevro.be/
  9. Circuit.io (https://www.circuito.io/) (hanya online)
  10. Virtual Breadboard (http://www.virtualbreadboard.com/)

Simulator Arduino yang sudah tidak aktif:

  1. Autodesk Eagle: fitur simulasi sudah tidak ada, tinggal PCB design saja
  2. Autodesk Circuits: sudah jadi tinkercad
  3. ArduinoSim: tidak dapat dicari lagi
  4. Arduino Simulator (https://sourceforge.net/projects/arduinosim/) sudah tidak aktif
  5. Electronify (https://www.electronify.org) ,sudah tidak aktif
  6. Yenka (https://www.yenka.com/). Sudah tidak menyediakan Arduino

 

Pemrograman Arduino Dengan Java, Mungkinkah?

 

Arduino UNO R3
Arduino UNO R3

Pemrograman Arduino dengan Java, mungkinkah? Arduino UNO / Nano tidak dapat diprogram dengan bahasa pemrograman Java. Alasan mudahnya karena memori RAM dan Flash pada Arduino terlalu kecil untuk menjalankan Java Virtual Machine (JVM).

Sejauh ini prosesor yang mendukung JVM adalah sebagai berikut:

  • x86
  • x86-64
  • SPARC
  • MIPS
  • Itanium
  • Power ISA
  • ARM
  • Alpha
  • S/390
  • z/Architecture
  • m68k

JVM juga memerlukan sistem operasi di bawahnya. Berikut ini sistem operasi yang mendukung JVM:

  • Windows
  • Linux
  • FreeBSD
  • NetBSD
  • OpenBSD
  • Solaris
  • OpenSolaris
  • Darwin
  • macOS
  • iOS
  • BeOS
  • Haiku
  • AIX
  • IRIX
  • OS/2
  • Windows Mobile
  • AmigaOS

Arsitektur CPU pada Arduino UNO adalah AVR. Sistem operasi pada Arduino UNO juga tidak mendukung JVM.

Jika perlu program Java yang mengakses port pada Arduino, biasanya dilakukan dengan cara menjalankan program Java di komputer yang mendukung JVM, dengan mengirimkan perintah-perintah melalui port serial ke Arduino UNO. Contohnya adalah dengan menggunakan library Processing.

Referensi

  • https://en.wikipedia.org/wiki/Comparison_of_Java_virtual_machines
  • https://processing.org/