Suara Arduino

Arduino merupakan platform elektronik yang dirancang untuk memudahkan pengontrolan berbagai perangkat.

Hardware arduino mikrokontroller yang memiliki port masukan (input)  dan port keluaran (output). Perangkat keras arduino juga dilengkapi dengan fitur-fitur bawaan chip mikrokontroler atau diprogram secara software, seperti komunikasi serial, SPI, I2C, ADC, TIMER.

Sebagai perangkat digital, arduino juga mampu berperilaku sebagai perangkat multimedia terbatas, yakni hanya sebagai pengontrol melalui protokol yang disediakan. Salah satu perangkat multimedia yang mampu ditangani oleh arduino adalah suara.

Arduino audio / suara bisa dihasilkan dalam 2 metode, yaitu arduino sebagai pembangkit suara dan arduino sebagai pengontrol modul suara.

Suara PWM arduino

Port output arduino mampu melewatkan arus 40mA setiap pinnya, artinya arduno masih mampu membangkitkan suara untuk keperluan headset. Selain keuntungan itu, arduino juga memiliki memory walaupun kapasitasnya kecil, seperti pada arduino uno mampu menampung kurang dari 8detik data PCM 8bit 8KHz yang membutuhkan 8.000 byte flash memory setiap detiknya. Untuk efesiensi memory bisa dengan menurunkan sampling rate atau menggunakan sistem kompresi ADPCM.

prinsip kerja Suara PCM Arduino dengan PWM:

  1. Data suara disimpan dalam memory flash.
  2. Dibutuhkan dua timer, timer1 berfungsi mengatur waktu sampling (misalnya 8KHz, 16KHz dst), dan timer 2 yang berfungsi mengatur PWM Sesuai ukuran bit sampling (misalnya 8bit dan 16 bit).
  3. Data PWM berubah dan dikirim saat timer1 selesai 1 periode sampling.

Keterbatasan PCM arduino adalah : waktu * ukuran sampling tidak bisa melebihi besar clock arduino 16MHz.

Contoh rangkaian suara arduino langsung :

 

Modul Suara WTV020

 

Modul ini menggunakan format suara .ad4 yang disimpan dalam kartu memory microSD (kapasitas terbatas). Pengontrolan menggunakan pin-pin kontrol dengan mode operasi yang tersedia:

  1. MP3 mode
  2. Key mode(3 group of voice)
  3. Key mode(5 group of voice)
  4. Loop play mode
  5. Two line serial mode

Modul suara ISD

Modul ISD menggunakan chip yang memiliki fitur rekam dan membangkitkan suara. terdiri dari beberapa seri dan kapasitas.

Modul mini MP3 TF Player

 

Mini Mp3 TF Player banyak disukai karena murah dan mudah dalam operasionalnya, mampu menggerakkan speaker 0.5Watt, dan menggunakan protokol Serial frame. Data suara disimpan dalam format MP3 / WAV dalam microSD.

Modul Suara VS1053

VS1053 merupakan chip audio player yang powerfull dengan kualitas suara yang bagus. Data suara dalam format MP3 yang disimpan dalam microSD.

Perbandingan modul suara arduino

Masih terdapat beberapa modul suara yang bisa disandingkan dengan arduino, yang disebutkan diatas bisa mewakili yang paling umum digunakan dalam perancangan perangkat multimedia berbasis arduino.

Kualitas suara yang dihasilkan menjadi alasan utama dari pemilihan modul audio untuk arduino, dan menurut penulis kualitas modul VS1053 paling baik dan layak digunakan sebagai media informasi. sedangkan modul lainnya efektif digunakan dalam pengembangan perangkat karena harganya relatif lebih murah.

Kualitas suara bisa ditingkatkan dengan memperhatikan hal berikut:

  1. Filter keluaran suara
  2. Power supply / catu daya yang cukup dan tidak saling menmpengaruhi dengan modu lainnya.
  3. Penggunaan speaker yang sesuai, kalau perlu gunakan box.
  4. Konversi suara mono ke stereo atau sebaliknya menggunakan cara koneksi yang benar.
  5. Konversi suara single supply ke balance double supply atau sebaliknya menggunakan cara konversi yang benar.

Sensor fingerprint

Sidik jari adalah guratan pada jari yang bersifat unik dan permanen. ilmu yang mempelajari sidik jari (daktiloskopi), menyatakan bahwa gelombang fleksibel pada sidik jari tidak ada yang sama persis satu dengan lainnya.

untuk membaca sidik jari secara digital bisa dilakukan dengan langkah berikut :

  1. Mengambil gambar sidik jari, jenis sensor yang umum digunakan adalah : Optic Reflexive, Optic Transmissive with Fiber Optic Plate, Optical Line, Capacitive Line, Thermal Line, Pressure Sensitive, Dynamic Capacitive, Static Capacitive, Acoustic.
  2. Membuat fitur-fitur biometrik sidik jari dalam bentuk digital.
  3. Menyimpan data sidik jari dalam database.

Penetapan fitur-fitur biometrik sidik jari adalah proses paling penting dalam identifikasi. fitur yang signifikan diantaranya:

Pola

Jenis pola yang umum ditemukan:

pola busur pola ikal pola melingkar pola tenda

 

Fitur khusus

Fitur penentu identifikasi

Fitur garis putus fitur cabang fitur garis pendek

gambar sidik jari yang diambil kemudian diproses secara digital untuk mencari pola dan menyimpan fitur-fitur yang ditemukan, semakin banyak fitur yang diperoleh maka keakuratan dalam pencocokan sidik jari semakin besar.

Bagi anak-anak atau orang dewasa yang memiliki sidik jari tipis, sebaiknya menggunakan sensor jenis kontak langsung (direct contact).

Kalibrasi arduino

Sensor-sensor perlu dikalibrasi terlebih dahulu untuk mendapatkan hasil yang terukur. Kalibrasi sensor arduino membutuhkan alat pengukur lainnya yang telah terkalibrasi/ditera. Tahap Kalibrasi merupakan tahapan percobaan dengan membandingkan hasil yang terukur oleh arduino dengan hasil yang terukur oleh alat kalibrasi.

Jika proses kalibrasi sulit dilakukan (tidak punya alat kalibrasi), kita bisa melakukan proses kalibrasi menggunakan pendekatan teoritis yaitu berdasarkan kurva/grafik yang diperoleh dari datasheet sensor tersebut.

Dalam kondisi kebutuhan sensor akurasi tinggi, perancang diharuskan memilih komponen yang tepat dan yang paling penting adalah proses kalibrasi, karena kondisi teoritis dari pabrik belum tentu sesuai dengan kondisi di lapangan.

Kalibrasi crystal RTC 32.768 Hz / 32.000Hz

Komponen kristal kuartsa merupakan pembangkit gelombang dengan frekuensi yang sudah dikalibrasi oleh pabrik pembuatnya. Namun kristal yang umum digunakan masih bergantung pada suhu operasi, dimana frekuensi keluarannya bergantung pada suhu kristal tersebut.

pada DS1307, proses kalibrasi RTC sulit dilakukan karena chip DS1307/1302 tidak memiliki register kalibrasi, proses kalibrasi yang bisa dilakukan adalah dengan penambahan ofset waktu pada kontroller/arduino misalnya dengan penambahan 1 detik / hari atau 3 detik per 30 hari dst.

pada DS3231/3232, chip ini sudah memiliki kalibrasi sendiri (temperatur conpensation)

Kalibrasi sensor analog arduino

Pembacaan sensor analog pada arduino menggunakan perintah analogWrite() harus memperhatikan hal berikut:

  • ADC arduino juga memiliki faktor kesalahan akurasi (offset, gain, Integral Non-linearity dan Differential Non-linearity).
  • Faktor konversi nilai digital dari adc ke nilai sebenarnya.
  • Tegangan Vref yang digunakan.

Kalibrasi sensor lebar pulsa

Sensor yang bekerja dengan menghitung lebar pulsa seperti sensor kecepatan dan sensor jarak (echo) harus memperhatikan faktor berikut:

  • Situasi sensor bebas dari objek lain yang mungkin terdeteksi.
  • Untuk hasil yang akurat, gunakan pembacaan dengan detail tinggi, misalnya timer dengan prescaler 1 dan juga matikan fungsi interupsi untuk memastikan tick waktu mulai dan tick waktu selesainya benar-benar terdeteksi.

Fakta menarik arduino

Fakta arduino yang menarik dicermati (arduino fun fact):

  1. Pin 13 pada Arduino terhubung ke onboard led ‘L’.
  2. Maksimum nilai delayMicroseconds(x) adalah x = 16383.
  3. Nilai millis() akan kembai ke angka 0 dalam 49.7 hari atau 49 hari 17 jam 2 menit dan 47 detik
  4. Pin digital mampu mengalirkan arus 40mA (200mA dalam satu port) dan mampu menghidupkan LED (menggunakan resistor sebagai pembatas arus).
  5. analogWrite(pin, value) hanya berlaku pada pin: UNO 3, 5, 6, 9, 10, dan 11; MEGA 2 – 13 dan 44 – 46.
  6. Memiliki fitur Capacitive touch sensing.
  7. Maximum frekuensi PWM 8.000.000 Hz (8MHz).
  8. Maksimal baud rate Serial = 2.000.000 (2Mbps). Arduino 101 57600bps
  9. Flash memory Mega 8KBytes; UNO 2KBytes
  10. RAM Mega 256KBytes; UNO 32KBytes
  11. EEPROM Mega 4KBytes; UNO 1KBytes
  12. Area kode program uno 32.256 byte, nano 30.720 byte, micro 28.672 byte, walaupun sama-sama menggunakan ATMega328
  13. EEPROM Mega 4KBytes; UNO 1KBytes
  14. Fitur virtual komunikasi serial bisa menggunakan Fungsi SoftewareSerial dengan ketentuan :
    • Jika menggunakan lebih dari satu SoftewareSerial maka hanya satu SoftewareSerial yang bisa menerima data (receive) dalam satu waktu.
    • Pada arduino mega hanya pin-pin berikut yang bisa digunakan sebagai pin RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8, A9, A10, A11, A12, A13, A14 , A15. Pada Leonardo hanya : 8, 9, 10, 11, 14, 15, 16. dan Arduino 101 selain pin 13.
  15. Nama lain/alias pin Arduino Uno
    • 0 = RX
    • 1 = TX
    • 10 = SS
    • 11 = MOSI
    • 12 = MISO
    • 13 = SCK
    • A0 = 14
    • A1 = 15
    • A2 = 16
    • A3 = 17
    • A4 = 18
    • A5 = 19
  16. Nama lain/alias pin Arduino mega
    • 0 = RX
    • 1 = TX
    • 50 = MISO
    • 51 = MOSI
    • 52 = SCK
    • 53 = SS
    • A0 = 54
    • A1 = 55
    • A2 = 56
    • A3 = 57
    • A4 = 58
    • A5 = 59
    • A6 = 60
    • A7 = 61
    • A8 = 62
    • A9 = 63
    • A10 = 64
    • A11 = 65
    • A12 =66
    • A13 = 67
    • A14 = 68
    • A15 = 69

Kesalahan umum perancangan berbasis Arduino

Kendala perancangan arduino yang sering terjadi :

  1. Program berhenti ditengah jalan
  2. Contoh rangkaian dan sketch tidak jalan
  3. Tegangan referensi bersama
  4. Hasil pembacaan sensor analog tidak konsisten
  5. Jalannya program tersendat
  6. Pembacaan detik yang berulang pada RTC
  7. Modul serial tidak bisa berkomunikasi
  8. Data dari komunikasi melalui internet tidak lengkap
  9. Arduino kekurangan power
  10. Kesalaham umum sketch/program
  11. kondisi if..else tidak bekerja di dalam loop()
  12. Interupsi bertumpuk dan terabaikan
  13. Variabel tidak berubah didalam blok interupsi
  14. Arduino me-reset saat relay berubah keadaan
  15. Upload sketch gagal

Para perancang Arduino sering menghadapi masalah dalam mengembangkan sistem berbasis arduino, maka sebelum melakukan perakitan arduino pastikan hal sepele berikut :

  1. Pastikan kabel jumper tersambung antara ujung-ujungnya.
  2. Komponen tidak rusak/cacat secara fisik
  3. Power supply / baterai / adaptor tersambung dengan benar (sesuai polaritas dan tegangan)

Sebelum memulai merakit arduino Juga perlu diperhatikan jalur internal pin-pin di papan/board arduino yang terhubung secara fisik.

  1. Antara pin A0-A5 (A0 – A8 pada mega) dan pin 0  – 5 (0 – 8 pada mega) adalah berbeda.
  2. Pin TWI/I2C (SCL dan SDA) dan SPI (SCK, MOSI, MISO) terhubung seperti gambar berikut:

    Apabila salah satu pin telah digunakan, maka pasangannya tidak lagi bisa digunakan sebagai pin (kecuali keperluan sambungan tambahan).

berikut ini adalah beberapa permasalahan yang sering muncul dalam perancangan sistem otomatis berbasis arduino:

Program berhenti ditengah jalan

Perangkat berjalan normal tetapi terhenti setelah menyelesaikan tugasnya. dan tidak bisa menjalankan perintah lainnya. Hal ini terjadi karena didalam sketch terdapat baris berikut:

while(1);
atau
for(;;);

baris sketch ini akan menghentikan jalannya program (kecuali interrupt), biasanya disisipkan oleh perancang untuk melihat hasil dan membuat perangkat selesai melakukan tugasnya dan berhenti dititik itu.
dengan menghapus baris tersebut maka program akan kembali berjalan dan menjalankan baris perintah berikutnya.

Contoh rangkaian dan sketch tidak jalan

Rangkaian dan sketch dibuat serupa tanpa perubahan tetapi perangkat tidak berkerja.

Dalam merakit rangkaian, –utamakan– defenisi poisisi pin dari sketch yang akan di upload. contohnya kode berikut berarti pin sensor berada dan pin nomor 2:

#define sensor 2
int sensor = 2;

Tegangan referensi bersama

Groung/polaritas negatif yang tidak terhubung mengakibatkan intepretasi yang berbeda terhadap suatu nilai.

Membangun sebuah sistem digital atau sistem analog yang terhubung dengan beberapa perangkat lain harus memiliki tegangan referensi yang sama (biasanya ground/negatif) kecuali wireless.

Hasil pembacaan sensor analog tidak konsisten

Pembacaan sensor analog melalui pin A0-A5 (A0-A8 pada mega) menggunakan perintah analogRead(pin), hasil berubah-ubah padahal sensor mengukur sesuatu yang diam.

Pembacaan analog dengan Arduino menggunakan ADC. ADC pada Arduino sendiri memiliki spesifikasi yang harus dipenuhi seperti dalam datasheetnya, beberapa penyebab yang sering terjadi adalah:

  1. Tegangan sumber (power supply) ke Arduino dan sensor tidak stabil.
  2. Resistansi yang besar, bisa diakibatkan
  • Jarak sensor dan pin dengan kabel yang panjang.
  • kabel memiliki resistansi besar.
  • Koneksi konektor yang tidak bagus (tidak kontak sempurna) karena longgar atau karatan.
  • interferensi sinyal lain (sinyal yang bersebelahan, jala listrik, sinyal handphone dll)

Jalannya program tersendat

penyebab umum jalannya program arduino lambat dan tersendat:

  1. Delay sering digunakan, namun sebenarnya pengunaan perintah delay yang berlebihan sangat merugikan karena
    • Menyita kinerja CPU
    • Melewatkan adanya permintaan dari modul/komponen luar yang ingin segera ditanggapi.
  2. Interupsi yang berlangsung tanpa disadari seperti penggunaan library yang sebenarnya mengandung interupsi.
  3. Perulangan seperti for, do, while yang berlangsung terus menerus, sebaiknya lebih diefesien lagi dan keluar dengan perintah ‘break’ jika persyaratannya telah terpenuhi.

Pembacaan detik yang berulang pada RTC

RTC digunakan sebagai penedia data waktu real time, namun kesalahan yang sering terjadi adalah ketika menunggu adanya perubahan data dari RTC (detik), pembacaan dilakukan berulang-ulang ke RTC.

Jika dicermati RTC juga memiliki fitur interupsi yang memberii tahu CPU bahwa adanya perubahan data. Ketika CPU Arduino mendapat interupsi ini barulah dilakukan pembacaan data RTC.

Modul serial tidak bisa berkomunikasi

Beberapa baudrate yang direkomendasikan : 300, 1.200, 2.400, 4.800, 9.600, 19.200, 38.400, 57.600, 74.880, 115.200, 230.400, 250.000, 500.000, 1.000.000, 2.000.000. Pemilihan baudrate berdasarkan :

  1. Spesifikasi modul yang akan berkomunikasi dengan Arduino. beberapa modul memiliki fitur ‘auto Baudrate’
  2. Tingkat kesalahan data, hal ini berkaitan dengan frekuensi CPU arduino, batas yang dizinkan adalah 0.5%.
    yang dihitung menggunakan rumus :
    error(%) = ((baudrate sebenarnya/badudrate )- 1) * 100%
  3. Baud rate yang rendah akan menyebabkan waktu tunda (delay) yang lebih banyak, seringkali hal ini tidak disadari dan menyebabkan baris perintah lain terlambat untuk dieksekusi.
    untuk menghitung waktu yang dibutuhkan serial dalam mengirim data (1 start bit, 8 data, 1 parity, 1stop bit) digunakan formula:Waktu(detik) = (1/baudrate * 11) * jumlah datasebagai contoh untuk mengirim 100 karakter pada baud rate 9600 dalam mode asynchronous membutuhkan waktu ±1  detik

Data dari komunikasi melalui internet tidak lengkap

Akses Arduino bisa dilakukan menggunakan ethernet, Wifi, Modem. Kesalahan umumnya adalah data yang diterima tidak lengkap, terpotong, kacau. kemungkinan yang terjadi adalah :

  1. Koneksi terganggu, perbaiki pengkabelan dan periksa apakah koneksi ke internet berjalan dari perangkat lain.
  2. Upaya menampilkan hasil data yang diterima melalui komunikasi serial.
    • naikkan baudrate misal Serial.begin(115200) untuk mengurangi waktu bagi komunikasi serial
    • Simpan data yang diterima dalam variabel string, dan tampilkan melalui serial setelah komunikasi internet selesai.

Arduino kekurangan power

Arduino memiliki internal regulator tegangan 5V dan 3.3V, dengan kemampuan arus 0.8-1A. keluaran dari regulator ini digunakan oleh Arduino sendiri dan sisanya melalui pin power. Jika sumber tegangan ini juga digunakan oleh modul-modul diluar arduino, maka pastikan itu mencukupi (sesuai spesifikasi) untuk memperoleh kinerja maksimal.

Kesalaham umum sketch/program

Dalam membuat sketch/koding/program/listing program dengan IDE Arduino kita harus mengikuti gaya bahasa C++, dan aturan gaya bahasa serta logika program yang sering terlewatkan adalah :

  1. Tanda titik koma (semicolon) pada setiap akhir perintah.
  2. Tanda kurung (parentheses) dan kurung kurawal (curly bracket) haruslah berpasangan.
  3. Penamaan variabel pada C++ bersifat case-sensitive, yang berarti perbedaan kapitalisasi huruf berarti beda variabel.
  4. Variabel global dan variabel local dengan nama yang sama sebaiknya dihindari.
  5. Tipe data antara signed dan unsigned harus menjadi perhatian khusus, karena akan menghasilkan logika matematika berbeda pada operasi tertentu.
  6. Variabel dengan bilangan berkoma (floating point) akan tersimpan sebagai bilangan digital basis 2 yang kadang berbeda (dibulatkan).

kondisi if..else tidak bekerja di dalam loop()

void setup() {
  pinMode(12, INPUT_PULLUP);//Tombol
  pinMode(13, OUTPUT);//LED
}
void loop() {
  if(digitalRead(12))
  {
    digitalWrite(13, HIGH);
  }
  else
  {
    digitalWrite(13, HIGH);
    delay(1000);
    digitalWrite(13, LOW);
  }
}

dari sketch diatas kita mengharapkan ketika tombol di pin 12 ditekan maka LED akan hidup terus, dan ketika dilepas LED akan hidup selama 1 detik kemudian mati.

Namun setelah dirunning ternyata LED terus hidup dan tidak pernah mati. kondisi ini disebut dengan “false loop”, karena sebenarnya kondisi dalam blok else selalu dijalakan karena berada didalam operasi loop().

Interupsi bertumpuk

Interupsi akan memotong jalannya program biasa untuk mengeksekusi baris yang ada dalam blok interupsi dan tidak dapat diinterupsi lagi. Apabila terjadi interupsi lain yang berbeda sebelum sebuah interupsi selesai/keluar (reti) maka interupsi lain itu harus menunggu.

Apabila sebuah interupsi berjalan dan terjadi kejadian interupsi yang sama lagi maka interupsi kedua ini akan dibatalkan (selama flag interupsi masih aktif).

Untuk interupsi yang sering terjadi dan dalam jeda yang singkat, maka baris program yang ada di badan interupsi haruslah sesingkat mungkin, baris program dihitung dalam satuan baris assembler misalnya satu baris “Serial.println();” akan menghasilkan lebih dari satu baris assembler.

Jika badan interupsi harus memiliki baris program yang besar, maka sebaiknya badan interupsi hanya menghasilkan flag, dan flag ini akan dibaca oleh baris program reguler untuk dieksekusi lebih lanjut.

Variabel tidak berubah didalam blok interupsi

Apabila interupsi digunakan untuk merubah keadaan/nilai sebuah variabel, maka variabel tersebut harus dideklarasikan dengan properti volatile.

Proses compile sketch menjadi bahasa mikrokontroller juga menjalankan fungsi optimalisasi, artinya baris program yang menurut compiler tidak efektif/sia-sia akan diabaikan, kecuali variabel dengan properti volatile (tetap diperhitungkan).

Arduino me-reset saat relay berubah keadaan

Relay merupakan komponen elektro mekanik yang memiliki koil (lilitan) untuk menggerakkan tuas kontak. Dalam operasional relay menghasilkan spike (kejut listrik) yang dihasilkan oleh:

  1. Koil, memiliki induktansi yang berpengaruh terhadap laju arus/detik, saat koil diberi tegangan maka koil akan dialiri arus sesaat yang besar sedangkan ketika di nonaktifkan relay akan menghasilkan arus sesaat yang besar dalam arah berlawanan (minus).
    Arus sesaat yang besar ini bisa mengakibatkan terjadinya kejut listrik diseluruh rangkaian nya.
  2. Kontak listrik, berlaku seperti saklar (switch) dimana semakin besar arus beban yang diputus/disambungkan maka akan semakin besar pula kemungkinan terjadinya bunga api, yang juga berpotensi besar menghasilkan kejut listrik.

Upaya pemecahan permasahan kontak relay ini bisa dilakukan dengan cara:

  1. Gunakan kabel berkualitas
  2. batasi arus ke koil dengan penambahan hambatan (resistor) yang sesuai
  3. Gunakan power supply yang bagus (dayanya cukup saat beban max) dan dilengkapi EMI filter (perlindungan dari gangguan luar)
  4. Pemisahan power supply arduino dan relay serta beban-beban besar
  5. Relay dilengkapi flyback dioda (seperti 1N4048)
  6. Lindungi kabel power dari EMI (twist, shielding)
  7. Lengkapi decoupling kapasitor sedekat mungkin ke pin power.
  8. Lindungi kabel komponen sensitif dari EMI (twist yang rapi) kabel clock diutamakan.
  9. tambahkan decoupling/filter kapasitor (1-100nf) di clock komponen sensitif
  10. saat relay bekerja, komponen sensitif dalam keadaan read mode
  11. Pisahkan jalur kabel daya dan kontrol, beda ducting.
  12. kabel antara Arduino dan komponen sensitif sedekat mungkin.
  13. firmware trick.

Upload sketch gagal

Sebelum mengupload sketch ke arduino pastikan memlih board dan processor serta port (dalam menu Tools) yang sesuai dengan board Arduino yang terpasang. Pastikan juga kabel usb dalam keadaan baik.

Masalah yang kerap terjadi saat proses upload adalah:

  1. Bentrok dengan Serial, arduino melakukan proses upload memanggunakan pin Serial (pin 0 dan 1) apabila pin tersebut juga digunakan untuk keperluan lain dapat dipastikan akan terjadi interferensi data.
  2. Gangguan juga bisa ditimbulkan oleh komponen/modul lain yang bekerja/berubah keadaan dan menyebabkan tegangan tidak stabil.
  3. Port Serial di PC/laptop digunakan oleh program lain seperti processing, putty atau serial monitor dari arduino IDE yang tidak se-gruop.

Sistem kontrol PID dengan Arduino

Sistem kontrol adalah suatu sistem untuk mengendalikan keadaan sehingga diperoleh hasil bersesuaian dengan nilai yang diinginkan se-efektif mungkin.

diagram diatas merupakan sistem kontrol terbuka (open loop), dalam sistem ini tidak ada pemberitahuan (klarifikasi).

Dalam suatu sistem pasti terdapat gangguan dan variabel didalam dan dari luar sistem yang mengakibatkan ketidaksesuaian antara hasil yang diperoleh dan nilai yang diinginkan.

diagram diatas merupakan sistem kontrol tertutup (close loop), dengan adanya umpan balik maka sistem bisa melakukan koreksi.

Untuk menjadikan sistem se-efektif mungkin, perlu dilakukan pemodelan terhadap sistem yang dibangun yakni:

    1. Pemodelan masukan (input)
    2. Pemodelan sistem kontrol
      • hidup mati (on/off)
      • proporsional (P)
      • integral (I)
      • proporsional + integral (PI)
      • proporsional + derivative (PD)
      • proporsional + integral + derivative (PID)
    3. Pemodelan gangguan baik baik dari dalam maupun dari luar, dari dalam lebih kepada keandalan pelaksana/actuator (contohnya motor, pemanas, dll) dan gangguan dari luar adalah kondisi-kondisi yang dapat mempengaruhi kinerja pelaksana (contohnya penambahan beban pada motor, sumber panas lain pada pemanas)
    4. pemodelan pelaksana/actuator adalah karakteristik respon dari pelaksana terhadap perintah/sinyal yang diberikan (contohnya perubahan kecepatan motor terhadap setiap level sinyal yang diberikan)
    5. pemodelan objek/plant menyangkut sifat dan variasi perubahan yang akan terjadi pada objek.
    6. pemodelan sensor juga mencakup karakteristik pembacaan sensor terhadap perubahan dari perangkat pelaksana yang diukur.

Adanya model dari sistem yang dibangun akhirnya dapat diperoleh hasil akhir berikut ini:

Keluaran (objek) = Sistem kontrol x masukan

penyederhanaan ini bisa dilakukan dengan metode laplace. persamaan diatas adalah bagaimana hubungan antara masukan dan keluaran sehingga tergambar perilaku dinamik dari sistem kontrol.

apabila variabel-variabel sistem kontrol tidak memberikan respon yang efektif seperti yang diinginkan, maka dilakukan penyesuaian (tuning)

Sistem kontrol PID (Proportional–Integral–Derivative)

PID merupakan mekanisme pengambil keputusan dalam merespon adanya nilai kesalahan. Mekanisme ini memiliki 3 variabel (Kp, Ki, Kd) yang bisa disesuaikan guna memperoleh respon yang efektif.
Sistem kontrol itu berbasis dengan waktu, untuk memperoleh nilai kesalahan berbasis waktu digunakan :

 	kesalahan = input - sensor;
 	integralKesalahan += kesalahan;
 	derivatifKesalahan = kesalahan - kesalahanLalu;
 	kesalahanLalu = kesalahan;
  1. Proporsional adalah faktor kali dari nilai kesalahan saat ini (berbanding lurus), nilai ini berpengaruh langsung terhadap sensitifitas dan responsifitas suatu sistem. Jika nilai Kp dibuat lebih tinggi maka sistem menjadi lebih responsif terhadap nilai kesalahan, tetapi apabila nilai kesalahan terlalu tinggi maka sistem akan terlalu sensitif.
     	Respon = Kp * kesalahan;
    
  2. Integral adalah faktor kali dari nilai kesalahan sebelumnya, nilai Ki merupakan penjumlahan dari nilai-nilai kesalahan yang berfungsi untuk mempercepat sistem menuju nilai yang diinginkan. Jika nilai Ki terlalu tinggi maka dikhawatirkan sistem akan menjadi tidak stabil (overshoot)
     	Respon += Ki * integralKesalahan;
    
  3. Derivatif adalah faktor kali dari kemungkinan nilai kesalahan yang akan datang, nilai Kd berfungsi untuk memprediksi nilai kesalahan beikutnya disebut juga faktor redam karena nilai Kd akan memperlambat tercapainya nilai yang diinginkan namun membuat sistem lebih stabil
     	Respon += Kd * derivatifKesalahan;
    

sketch/program lengkapnya seperti berikut

float kesalahan;
float integralKesalahan;
float derivatifKesalahan;
float kesalahanLalu = 0;
float Kp, Ki, Kd;
float input;

//Pin
byte sensorPin = A0;
byte Pemanas = 2;

//konstanta
#define Ksensor 0.2 //faktor koreksi sensor panas

void setup() {
  pinMode(Pemanas, OUTPUT);
  Serial.begin(9600);
  Serial.println("Sistem kendali PID dengan Arduino");
  Serial.println("https://www.project.semesin.com");
  
  input = 100;
  Kp = 1;
  Ki = 0.5;
  Kd = -0.2;
}

void loop() {
  float sensor = 1.0 * analogRead(sensorPin) * Ksensor;
  
  float respon = hitungPID(input, sensor);
  analogWrite(Pemanas, respon);
  Serial.print(input);
  Serial.print(",");
  Serial.println(sensor);
}

float hitungPID(float input, float sensor)
{
  kesalahan = input - sensor;
  integralKesalahan += kesalahan;
  derivatifKesalahan = kesalahan - kesalahanLalu;
  kesalahanLalu = kesalahan;
  
  return (Kp * kesalahan) + (Ki * integralKesalahan) + (Kd * derivatifKesalahan);
}

loadcell / sensor berat

loadcell adalah sensor yang menghasilkan sinyal listrik dimana besarnya sinyal sebanding dengan berat yang diukur.

beberapa jenis loadcell :

  1. resistansi ketegangan bahan (strain gauge)
  2. piezzoelectric
  3. hidrolik
  4. pneumatik

Dalam artikel ini hanya membahas loadcell jenis resistansi ketegangan bahan

Merupakan jenis loadcell yang sering digunakan, loadcell ini memanfaatkan perubahan resistansi yang sebanding dengan perubahan ketegangan bahan akibat tekanan berat yang diukur. bahan yang digunakan bersifat :

  1. kaku
  2. bisa digunakan dalam jangka yang panjang
  3. memiliki elastisitas yang bagus

pengukuran resistansi ketegangan bahan menggunakan konfigurasi jembatan wheatstone.

Dengan menerapkan tegangan referensi pada dua titik berlawanan maka akan menghasilkan perbedaan tegangan pengukuran pada dua titik lainnya biasanya hanya beberapa miliVolt. Untuk mengetahui besaran ini bisa menggunakan penguat tegangan atau komponen differential analog to digital.

loadcell resistansi ketegangan bahan (strain gauge) tersedia dalam berbagai ukuran, formasi dan karakteristik. Contoh ukuran yang sering digunakan seperti 1, 2, 5,  … 200Kg, sedangkan formasinya bermacam-macam seperti :

  1. Balok dengan tekanan di ujungnya
  2. Balok ganda dengan tekanan berat di tengah.
  3. tipe-S untuk mengukur berat menggantung
  4.  kompresi
  5. tali digunakan pada crane

untuk rangkaiannya tersedia pula dalam bentuk 4 jembatan (full bridge) dan 2 jembatan (half bridge)

Karakteristik yang menentukan kualitas loadcell adalah sensitifitas dalam satuan mV/V, yaitu perbandingan output tegangan di titik pengukuran (A+ dan A-) dengan tegangan dititik sumber (E+ dan E-). Semakin besar nilainya maka pengukuran akan semakin bagus karena mampu mendeteksi perubahan resistansi ketegangan bahan lebih kecil.

catatan dalam penggunaan loadcell jenis resistansi ketegangan bahan :

  1. Bantalan (mounting) harus terukur atau dibuat nol dengan menempatkannya pada tempat yang benar-benar tidak bergerak. Bantalan yang buruk akan menghasilkan histeresis yang mengurangi tingkat presisi pengukuran.
  2. Memberi batas mekanik untuk menghindari kelebihan beban yang dapat mengakibatkan elastisitas sensor berkurang atau hilang.
  3. Menghindari gesekan dengan benda lain. Gesekan akan menghasilkan gaya redam tekanan.
  4. Tegangan referensi yang stabil dan terhindar dari gangguan riak dari rangkaian diluarnya.
  5. adakalanya loadcell perlu dikalibrasi ulang akibat adanya pengaruh suhu, elastisitas bahan dan variasi tegangan.
  6. Ukuran loadcell perlu disesuaikan dengan kapasitas berat yang akan diukur.

contoh rangkaian loadcell:

warna kabel :

  1. merah, E+
  2. hitam, E-
  3. hijau, A+
  4. putih, A-

Pemasangan loadcell 4 kabel

Pemasangan loadcell 4 x 3 kabel

Pemasangan loadcell 2 x 3 kabel