Cara Memperhalus Pembacaan Sensor Pada Arduino Menggunakan Program Smoothing


Halo sob, udah lama gak posting artikel. Oke, pada artikel kali ini kita akan membahas cara memperhalus pembacaan data sensor pada Arduino. Mungkin diantara kita ada yang disulitkan karena hasil pembacaan sensor pada arduino kurang halus dan sering terjadi kesalahan baca sesekali, hal tersebut sebenarnya bisa kita atasi dengan menambahkan sedikit kode program tambahan.

Kode program ini sebenarnya sudah ada pada example bawaan Arduino yaitu pada bagian file>example>analog>smoothing. Walaupun kode program ini pada umumnya digunakan untuk memperhalus pembacaan sinyal analog namun sebenarnya program ini juga bisa kita gunakan untuk memperhalus pembacaan yang sifatnya bukan analog. Terakhir saya menggunakan program ini memperhalus pembacaan sensor ultrasonik HC-SR04.

Memperhalus Pembacaan Sensor Menggunakan Kode Program Smoothing

Cara kerja kode program Smoothing singkatnya adalah dengan merata-ratakan 10 nilai terakhir dari pembacaan sensor. Semakin banyak jumlah data untuk dirata-ratakan maka respon sistem terhadap terhadap perubahan nilai akan semakin lambat namun akan semakin halus. Sebagai percobaan saya akan menggunakan potensio dan Arduino Uno.

Rangkaian

Memperhalus Pembacaan Sensor Menggunakan Kode Program Smoothing
Arduino Uno | Potensio 10KΩ

Kode Program

/*The circuit:
- analog sensor (potentiometer will do) attached to analog input 0

created 22 Apr 2007
by David A. Mellis  <dam@mellis.org>
modified 9 Apr 2012
by Tom Igoe

This example code is in the public domain.

http://www.arduino.cc/en/Tutorial/Smoothing
*/

const int numReadings = 10;
int readings[numReadings];
int readIndex = 0;
int total = 0;
int average = 0;
int inputPin = A0;

void setup()
{
  Serial.begin(9600);
  for (int thisReading = 0; thisReading < numReadings; thisReading++)
  {
    readings[thisReading] = 0;
  }
}

void loop()
{
  total = total - readings[readIndex];
  readings[readIndex] = analogRead(inputPin);
  total = total + readings[readIndex];
  readIndex = readIndex + 1;

  if (readIndex >= numReadings)
  {
    readIndex = 0;
  }

  average = total / numReadings;
  Serial.println(average);
  delay(1);
}

Penjelasan Kode Program

const int numReadings = 10;
int readings[numReadings];
int readIndex = 0;
int total = 0;
int average = 0;
int inputPin = A0;

Baris program di atas berfungsi untuk mendefinisikan variabel beserta nilainya. numReading adalah banyak data yang akan dirata-ratakan. Ubah jika diperlukan, semakin besar nilai semakin halus, namun respon sistem terhadap perubahan data akan lambat.

Serial.begin(9600);

Baris program di atas berfungsi untuk menginisialisasi komunikasi serial menggunakan baudrate 9600.

for (int thisReading = 0; thisReading < numReadings; thisReading++)
{
  readings[thisReading] = 0;
}

Baris program di atas berfungsi untuk memberi nilai 0 pada seluruh isi array.

total = total - readings[readIndex];

Baris program di atas berada pada fungsi loop yang berarti akan terus menerus dieksekusi. Berfungsi untuk mengurangi jumlah 10 data dengan pembacaan terakhir.

readings[readIndex] = analogRead(inputPin);

Baris program di atas berfungsi untuk membaca data analog pada pin A0 (nama pin: inputPin).

total = total + readings[readIndex];

Baris program di atas berfungsi untuk menambahkan data pembacaan ke dalam variabel total.

readIndex = readIndex + 1;

Baris program di atas berfungsi untuk menambah nilai variabel readIndex dengan 1.

if (readIndex >= numReadings)
{
  readIndex = 0;
}

Baris program di atas berfungsi untuk mereset nilai variabel readIndex menjadi 0 apabila nilai varibel readIndex bernilai sama dengan numReading atau lebih.

average = total / numReadings;

Baris program di atas berfungsi untuk mengklakulasi rata-rata nilai pembacaan sensor.

Serial.println(average);

Baris program di atas berfungsi untuk menampilkan nilai variabel average pada serial monitor.

delay(1);

Baris program di atas berfungsi untuk memberikan jeda waktu sebesar 1 ms setiap pembacaan sensor.

Penutup

Akhir kata itulah cara untuk memperhalus pembacaan sensor pada arduino. Kode program di atas bisa digunakan untuk mengatasi pembacaan sensor yang tidak stabil. Untuk mengujinya, amati keluaran nilai melalui serial monitor antara pembacaan sensor tanpa program smoothing dan dengan menggunakan program smoothing. Bantu bagikan ya sob jika informasi ini bermanfaat, sampai jumpa.

Penghobi Elektronika