Halo Sahabat Indobot, mari kita lanjutkan kembali untuk belajar ardunio , pada kesempatan kali ini, kita akan belajar tentang Pengetahuan Dasar Bahasa C pada Arduino. nah untuk kalian yang belum tahu tentang dasar dasar pengetahuan pemograman, kalian bisa cek Postingan ini .
Melanjutkan Postingan tentang kesalahan umum perancangan berbasis arduino pertama kemarin. kita lanjutkan untuk kesalahan selanjutnya yuk.
Arduino kekurangan power
Nah Sahabt Indobot, Arduino memiliki internal regulator tegangan 5V dan 3.3V, dengan kemampuan arus 0.8-1A. keluaran dari regulator ini di gunakan oleh Arduino sendiri dan sisanya melalui pin power. Jika sumber tegangan ini juga di gunakan oleh modul-modul di luar arduino, maka pastikan itu mencukupi (sesuai spesifikasi) untuk memperoleh kinerja maksimal.
Baca Juga : #Belajar Arduino : Kesalahan umum perancangan berbasis Arduino #1
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 di hindari.
- 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 (di bulatkan).
Baca Juga : #Belajar Dasar Memperbaiki : Compile Arduino yang Lambat
kondisi if..else tidak bekerja di dalam loop()
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
void setup() {
|
dari sketch di atas kita mengharapkan ketika tombol di pin 12 di tekan maka LED akan hidup terus, dan ketika di lepas LED akan hidup selama 1 detik kemudian mati.
Namun setelah di running ternyata LED terus hidup dan tidak pernah mati. kondisi ini di sebut dengan “false loop”, karena sebenarnya kondisi dalam blok else selalu di jalakan karena berada di dalam 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 di batalkan (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 di hitung 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 di baca oleh baris program reguler untuk dieksekusi lebih lanjut.
Variabel tidak berubah didalam blok interupsi
Apabila interupsi di gunakan untuk merubah keadaan/nilai sebuah variabel, maka variabel tersebut harus di deklarasikan 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 di perhitungkan).
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 di hasilkan 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 di seluruh rangkaian nya. - Kontak listrik, berlaku seperti saklar (switch) di mana semakin besar arus beban yang di putus/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 di lengkapi 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 di utamakan.
- 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 di gunakan untuk keperluan lain dapat di pastikan akan terjadi interferensi data.
- Gangguan juga bisa di timbulkan oleh komponen/modul lain yang bekerja/berubah keadaan dan menyebabkan tegangan tidak stabil.
- Port Serial di PC/laptop di gunakan oleh program lain seperti processing, putty atau serial monitor dari arduino IDE yang tidak se-gruop.
Gimana Sahabat Indobot ?, apakah artikel ini menjawab kebingungan Sahabat Indobot dalam belajar ardunio ?, Tinggalkan komentarmu ya sahabat Indobot, jika ada pertanyaan .