#Belajar Arduino : Kesalahan umum perancangan berbasis Arduino #2


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 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()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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.

Gimana Sahabat Indobot ?, apakah artikel ini menjawab kebingungan Sahabat Indobot dalam belajar ardunio ?, Tinggalkan komentarmu ya sahabat Indobot, jika ada pertanyaan .


Like it? Share with your friends!

0

0 Comments

Your email address will not be published.