Kendala perancangan arduino yang sering terjadi :
- Program berhenti ditengah jalan
- Contoh rangkaian dan sketch tidak jalan
- Tegangan referensi bersama
- Hasil pembacaan sensor analog tidak konsisten
- Jalannya program tersendat
- Pembacaan detik yang berulang pada RTC
- Modul serial tidak bisa berkomunikasi
- Data dari komunikasi melalui internet tidak lengkap
- Arduino kekurangan power
- Kesalaham umum sketch/program
- kondisi if..else tidak bekerja di dalam loop()
- Interupsi bertumpuk dan terabaikan
- Variabel tidak berubah didalam blok interupsi
- Arduino me-reset saat relay berubah keadaan
- Upload sketch gagal
Para perancang Arduino sering menghadapi masalah dalam mengembangkan sistem berbasis arduino, maka sebelum melakukan perakitan arduino pastikan hal sepele berikut :
- Pastikan kabel jumper tersambung antara ujung-ujungnya.
- Komponen tidak rusak/cacat secara fisik
- 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.
- Antara pin A0-A5 (A0 – A8 pada mega) dan pin 0 – 5 (0 – 8 pada mega) adalah berbeda.
- 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:
- Tegangan sumber (power supply) ke Arduino dan sensor tidak stabil.
- 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:
- 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.
- Interupsi yang berlangsung tanpa disadari seperti penggunaan library yang sebenarnya mengandung interupsi.
- 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 :
- Spesifikasi modul yang akan berkomunikasi dengan Arduino. beberapa modul memiliki fitur ‘auto Baudrate’
- 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% - 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 :
- Koneksi terganggu, perbaiki pengkabelan dan periksa apakah koneksi ke internet berjalan dari perangkat lain.
- 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 :
- Tanda titik koma (semicolon) pada setiap akhir perintah.
- Tanda kurung (parentheses) dan kurung kurawal (curly bracket) haruslah berpasangan.
- Penamaan variabel pada C++ bersifat case-sensitive, yang berarti perbedaan kapitalisasi huruf berarti beda variabel.
- Variabel global dan variabel local dengan nama yang sama sebaiknya dihindari.
- Tipe data antara signed dan unsigned harus menjadi perhatian khusus, karena akan menghasilkan logika matematika berbeda pada operasi tertentu.
- 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:
- 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. - 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:
- Gunakan kabel berkualitas
- batasi arus ke koil dengan penambahan hambatan (resistor) yang sesuai
- Gunakan power supply yang bagus (dayanya cukup saat beban max) dan dilengkapi EMI filter (perlindungan dari gangguan luar)
- Pemisahan power supply arduino dan relay serta beban-beban besar
- Relay dilengkapi flyback dioda (seperti 1N4048)
- Lindungi kabel power dari EMI (twist, shielding)
- Lengkapi decoupling kapasitor sedekat mungkin ke pin power.
- Lindungi kabel komponen sensitif dari EMI (twist yang rapi) kabel clock diutamakan.
- tambahkan decoupling/filter kapasitor (1-100nf) di clock komponen sensitif
- saat relay bekerja, komponen sensitif dalam keadaan read mode
- Pisahkan jalur kabel daya dan kontrol, beda ducting.
- kabel antara Arduino dan komponen sensitif sedekat mungkin.
- 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:
- 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.
- Gangguan juga bisa ditimbulkan oleh komponen/modul lain yang bekerja/berubah keadaan dan menyebabkan tegangan tidak stabil.
- Port Serial di PC/laptop digunakan oleh program lain seperti processing, putty atau serial monitor dari arduino IDE yang tidak se-gruop.
kak mau nanya aku pakai node mcu, load cell sama ulrasonik wiringnya udah bener tapi kok diserial monitor cuma muncul “connect: 192.168.0.7 ” nilainya gak muncul, kurangnya dimana ?
belum bisa di analisa dengan deskripsi seperti itu,
::: recheck lagi kodingnya
Mau tanya hu, saya pakai wemos d1 mini untuk nembak ke api. Nah ketika dia connect/ saat di debug dgn laptop respon berjalan dgn baik dan normal. Namun ketika daya dipindah ke baterai atau power supply gk bisa connect ke wifi, tapi kondisi sensor dan arduino nyala. Apakah ada masalah di dayanya atay yg lain ya?
kemungkinan besar masalah daya
bang mau nanya kenapa nilai load cellnya turun terus ya padahal udah dikalibrasi?
banyak faktor yang mempengaruhi
yang signifikan adalah kualitas sensor (loadcell), konektor2 pengkabelan, power supply (stability)
Bang mau tanya, saya menggunakan arduino untuk control bilik disinfektan, awalnya oke, tapi setelah beberapa bulan, arduinonya sering aktf sendiri (tanpa trigger), kira kira apanya ya.
Terimakasih
periksa triggernya
jika trigger (sisi arduino) aktif low, ada kemungkinan switch triggernya korslet, dst…
Bang tanya, Arduino ku kok tiap kali udh upload bisa lepas cabut pasang lagi gak bisa harus ngulang coding sama lagi baru bisa
Bang cara atasi arduino selalu reset (kosong ulang) saat lepas dan pasang lagi
Belum pernah nemu masalah seperti ini
kemungkinan ada masalah di hardware
:: coba dengan arduino lainnya
Bang, ini saya mau buat spider robot, progam arduino sudah sama persis dengan tutorial, tapi pas saya coba aslinya tidak sama, gimana dong?
berbaik sangka, dan lakukan pengujian baris demi baris program
Bang programku kenapa berulang terus ya padahal harusnya setelah 1x loop dia akan berhenti dan bekerja lagi saat ada kondisi high dari rfid. Tp ini baru 1 x tap , programnya looping terus. Kira2 masalahnya apa ya?
Saya menggunakan pro mini dan node mcu. Pro mini untuk inisiate input dan node mcu untuk eksekusi program.
Makasih bang
tergantung logika koding nya,
cek variabel kondisi nya, false-kan jika sudah dieksekusi
bang, mau nanya kan saya pake arduino esp 32 yang ada wifinya trus pas dicolokin ke laptop apakah wifinya nyal a juga?
wifi akan menyala jika diprogram menyala
( dalam hal di colokin ke laptop, maka laptop hanya sebagai power supply di samping sebagai programmer )
Assallamuallaikum, dan selamat malam semuanya. saya mau bertanya,
Saya lagi membuat project saklar sms,sudah terupload program, dan sudah terpasang rapi. Muncul masalah, setiap pertama kali dihidupkan harus menekan tombol reset baru bisa menerima sms. Mohon bantuanya
rada susah di analisa
cat: ‘pertama kali dihidupkan’ = reset, artinya kondisi arduino sama-sama dalam kondisi awal
relay saya di kaskade dengan coil kontaktor, coil nya bekerja di 220 V AC, kalau kontak pas lagi ada bebannya nya suka bikin hang LCD, ada saran bg?
faktor utama yang mempengaruhi : arus kejut sesaat
coba minimalisir efek ini misalnya isolated, termasuk kualitas komponen seperti power supply
Kak mau tanya. Saya mau menggunakan sensor ZMPT101B, untuk mengukur tegangan. Nah masalahnya ada di sinyal ADC sensor. Saat saya coba menggunakan kabel usb dalam keadaan laptop tidak dicas. Sinyal ADC stabil dan bisa berubah sesuai tegangan yang dibaca. Namun bila laptopnya dalam keadaan dicas, sinyal ADC malah tak berubah dan cenderung tinggi, sinyal ADC tetap sama walaupun mengukur tegangan 0V atau 220V.
Itu msalahnya di mana ya kak? Kok sinyal ADC kacau saat laptop dalam keadaan dicas saja. Mohon bantuannya, terima kasih
Kemungkinan sumber riplenya ada di charger laptop, hal ini bisa saja terjadi akibat noise yang mengalir melalui kabel2 (terutama gnd)
Mas mau nanya, kalau program bentrok di bagian set up, itu mengatasinya kayak gimana ya mas? Terima kasih mas.
ketrangannya kurang lengkap,
dalam kasus tertentu bisa menerapkan sistem ‘bongkar pasang’, jadi di bagian setup cukup di inisialisasi salah satunya
dan dalam loop dengan menonaktifkan salah satu sebelum mengaktifkan yang lainnya
Izin kak,
kalo ada tulisan gini
sketch uses 4286 bytes (13%) of program storage space. Maximum is 32256 bytes.
Global variables use 241 bytes (11%) of dynamic memory, leaving 1807 bytes for local variables. Maximum is 2048 bytes.
program masih bisa berjalan ga ya?
masih bisa jalan (cenderung masih kosong)
peringatan memory penuh akan muncul ketika ‘sketch uses’ : > 100% atau Global variables : > 80%
Mau nanya mas, saya ada kendala nilai pada port analog tetap berjalan meskipun tidak terhubung dengan sensor. Itu kira-kira kenapa ya?
Sudah tak coba di arduino Uno dan stm32, meskipun tidak konek dengan sensor, portnya tetep mengeluarkan nilai dan nilainya itu tidak stabil
Mau nanya mas, port analog arduino tetep mengeluarkan nilai meskipun tidak terhubung dengan sensor, itu masalahnya apa ya?
port analog (atau digital) pada mode input bersifat floating/mengambang dan itu normal pembacaannya mengeluarkan nilai yang tidak stabil
Mau nanya kak, pada port analog arduino saya mengeluarkan nilai yang tidak stabil meskipun tidak terhubung dengan sensor, itu cara menghilangkan nilainya gimana kak? Karena saat disambung dengan sensor, maka outputnya akan ditambah dengan nilai tadi yang mengakibatkan nilainya jadi double
port analog (atau digital) pada mode input bersifat floating/mengambang (kecuali pada mode input pull up ==indikasinya pembacaan stabil di 1023/maksimal==)
jadi ketika di pasangi sensor, maka yang terbaca adalah output sensor dari itu sendiri
Kak mau tanya, saya membeli relay 2 channel untuk suatu projek. Relay itu masih berfungsi dengan baik sampai saya gunakan untuk tester kabel jumper apakah kabel masih berfungsi atau tidak. Jadi pas lagi ngetes kabel yang lain tiba-tiba relaynya ga bisa hidup sama sekali, padahal udh betul pin jumpernya. Itu masalahnya apa ya? Sama solusinya gimana? Mohon bantuannya kak
*modul relay pada umumnya di lengkapi indikator led power supply, pastikan led power on itu menyala (cek kabel power +5v-gnd)
*mekanik relay membutuhkan daya, pastikan power supplynya cukup daya / arusnya cukup (misal 5 volt – 2 ampere)
selamat malam bg, kenapa arduino tiba-tiba led L, TX, RX nyala terus dan system tidak bekerja untuk membaca ultrasonic us-015..
indikator l terhubung ke pin 13, dan rx-tx sebagai indikasi komunikasi serial
jika rx-tx nyala terus bisa jadi ada komunikasi serial yang terus-terusan, dan penyalaan pin 13
cek lagi logika programnya, besar kemungkinan program hanya loop di pengiriman data serial
mau tanya nih di arduino nano indikatornya 3 lampu menyala semua (hidup terus) itu solusinya bagaimana ya
umumnya di arduino ada 4 led yaitu on, led, rx dan tx,
on sebagai indikator power supply
l terhubung ke pin 13
led rx-tx hanya menyala ketika ada transmisi data serial,
jika maksudnya led rx-tx selalu menyala berarti ada transmisi komunikasi serial yang terus menerus (normal jika memang di programkan demikian)
Saya menggunakan arduino uno dan load cell, tapi nilai load cell yang terbaca di serial monitor tidak stabil kira-kira itu karena apa ya? Dan ketika sudah stabil tetapi nilai yang terbaca tidak berbeda antara load cell dengan beban dan tanpa beban, masalahnya dimana ya padahal load cell yang saya gunakan baru.
Loadcell/strain gauge adalah sensor analog yang rentan terhadap variasi tegangan, suhu, interferensi
upayakan faktor external tersebut stabil
maaf kak, saya mau tanya, saya mau menjalankan bell sekolah dari mains 220v melalui single chanel 5v optocoupler relay, yang di kendalikan oleh pin ouput dan pin input interupt, arduino uno, yang terhubung ke pushbutton dengan pullup internal resistor, dan interupt aktif bila kondisi low… pada waktu test relay saya hubungkan dengan buzzer dan powersupplly 5v.. rangkaian berjalan dengan baik, bila yang di drive dengan relay alat yang jalan dengan baterai atau dc powered,
namun pada tahap implementasi ketika kaki common pada relay baru saja terhubung dengan 220v belum di apa2in, kalau kaki common di sentuh dengan obeng, kadang interupt langsung jalan seperti push button tertekan
dan di tengah2 running seperti ada random triger interupsinya, kira2 masalahnya di mana ya kak ? terima kasih sebelumnya
kemungkinan penyebabnya adalah weak pullup,
Kak mau tanya, saya secara ceroboh menggunakan pin 0 dan pin 1 sebagai input. Setelah saya gunakan tiba2 Arduino error kemudian Arduino tdk bisa di upload program lagi meskipun kabel jumper sudah di lepas dari pin 0 dan pin 1. Solusinya supaya bisa baik lagi Arduino saya gimana ya kak?
Tidak akan ada masalah dengan pin 0, 1 sebagai GPIO biasa (seperti lainnya), karena antara serial (16u2, ch340/sejenisnya) di batasi oleh resistor 1k ohm.
Jika terjadi masalah, hal yang mungkin bisa dilakukan: