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
Post a Comment