nilai rata-rata dan median dari pembacaan sensor Ultrasonic (Hc-sr04) -- (Arduino)


Assalamulaikum warahmatullahi wabarakatuh

       sensor ultrasonic difungsikan untuk mengukur jarak suatu objek, sensor ultrasonic dilengkapi dengan pemancar dan penerima gelombang. Pada saat diimplementasikan terkadang terdapat error pembacaan mungkin dikarenakan gelombang lain atau apalah itu hehehe. Errornya seperti: terdeteksi objek padahal tidak ada objek didepan sensor dan lain-lain. Maka dari itu untuk meminimalisir error pembacaan maka diperlukan filter pembacaan pada tutorial kali ini mencontohkan dua filter: yang pertama rata-rata yang kedua median atau nilai tengah.


Rata – rata:

#define trigPin 6
#define echiPin 7

#defing max 200

void setup(){
   Serial.begin(9600);
   pinMode(trigPin, OUTPUT);
   pinMode(echoPin, INPUT);
}

void loop(){
   int cek = 0;
   float rataRata;

   for(int i = 0; i < 10; i++){
      cek+= jarak_cm();
     delay(50);
   }
   rataRata = cek/10;

  Serial.println(rataRata);
  delay(100);
}

int jarak_cm(){
   long duration, cm;
   digitalWrite(pinTrig, LOW);
   delayMicroseconds(2);
   digitalWrite(pinTrig, HIGH);
   delayMicroseconds(20);
   digitalWrite(pinTrig, LOW);
   duration = pulseIn(pinEcho, HIGH);
   cm = duration / 59;
   if ((cm < 4) || (cm > max)) return false;
   return cm;
}

Median atau nilai tengah

Pertama kita harus terlebih dahulu mengurutkan data dari yang terkecil ke besar atau dari yang besar ke kecil. Pada pencarian median ada dua cara yaitu:

- data ganjil rumusnya 1/2(n+1)
n adalah banyak data

> misal data ada 7 ( n = 7)
1/2(7+1) = 4 maka mediannya adalah data ke 4 yang telah diurutkan dari kecil kebesar maupun dari besar ke kecil.

- data genap ( X(n/2)+X(n/2+1) ) / 2
n adalah banyak data
X adalah datum ke- atau data yang ke-



Program Median Ganjil.

Program ini kita coba pakai library newping mungin librarynya bisa ambil disini.
Penggunaan library untuk memudahkan kita menyingkat program.

#include <NewPing.h>

#define TRIGGER_PIN 6
#define ECHO_PIN 7
#define MAX_DISTANCE 200 .

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

int temp;

void setup() {
  Serial.begin(9600);
}

void loop() {
  //baca sensor
  for (int a = 0 ; a < 7; a++) {
    jarak[a] = sonar.ping_cm();
    delay(50);
  }

//urutkan dari besar ke kecil
  for (int i = 0; i < 7; i++) {
    for (int j = 0; j < 7; j++) {
      if (jarak[i] < jarak[j]) {
      temp = jarak[i];
      jarak[i] = jarak[j];
      jarak[j] = temp;
      }
    }
  }

//print nilai yang telah di urut
  for (int b = 0 ; b < 7; b++) {
    Serial.print(jarak[b]);
    delay(10);
  }

//print median
  Serial.println("");
  Serial.print("data median: ");
  Serial.println(jarak[3]);

  delay(100);
}

        Program diatas mungkin teman ada yang bertanya kenapa “jarak[3]” yang median kenapa tidak jarak[4] jawabanya karena array di mulai dari 0 jadi kalau kita urutkan 1-7 maka sebetulnya kalau di array 0-6 maka nilai tengahnya adalah 3….sip kan

Program Median Genap.

#include <NewPing.h>

#define TRIGGER_PIN 6
#define ECHO_PIN 7
#define MAX_DISTANCE 200 .

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

int median, temp;

void setup() {
  Serial.begin(9600);
}

void loop() {
//baca sensor
  for (int a = 0 ; a < 8; a++) {
    jarak[a] = sonar.ping_cm();
    delay(50);
  }

//urutkan dari kecil ke besar
  for (int i = 0; i < 8; i++) {
    for (int j = 0; j < 8; j++) {
      if (jarak[i] > jarak[j]) {
      temp = jarak[i];
      jarak[i] = jarak[j];
      jarak[j] = temp;
      }
    }
  }

//print nilai yang telah di urut
  for (int b = 0 ; b < 8; b++) {
    Serial.print(jarak[b]);
    delay(10);
  }

//print median
  median = (jarak[3]+jarak[4])/2;
  Serial.println("");
  Serial.print("data median: ");
  Serial.println(median);

  delay(100);
}

semoga dapat dipahami…..




Comments

Popular posts from this blog

Menggunakan Driver Motor IBT-2 BTS7960 dengan arduino

Register-Register pada CPU--> Arsitektur komputer

Komunikasi Serial pada Arduino