TRIMMED MEAN, MEAN , MOVING AVERAGE

Reading Data On ADC Arduino 




Example Project  MEAN (Rata-rata)

Mean adalah salah satu ukuran gejala pusat. Mean dapat dikatakan sebagai wakil kumpulan data. Menentukan mean dapat dilakukan dengan cara menjumlahkan seluruh nilai data, kemudian membaginya dengan banyaknya data.

Jumlah seluruh data: banyak data

atau, dapat dirumuskan dengan:
𝑥̅ = ∑ x / n

Keterangan:
𝑥̅ = rerata atau mean
n = banyaknya data
∑ x = jumlah seluruh data

Example PROGRAM MEAN

We try use Skin Sensor for Temperature with 10 samples



#include <Thermistor.h>
#include <NTC_Thermistor.h>

#define REFERENCE_RESISTANCE   8000//1300
#define NOMINAL_RESISTANCE     4015//1675
#define NOMINAL_TEMPERATURE    25
#define B_VALUE                3047//3647
#define ANALOG_RESOLUTION      1023
Thermistor* thermistor;
float cel;
const int SENSOR_PIN=A5;
void setup() {

  // open serial connection
    Serial.begin(9600);
    thermistor = new NTC_Thermistor(
   // adcFilter2.filter(SENSOR_PIN),
    SENSOR_PIN,
    REFERENCE_RESISTANCE,
    NOMINAL_RESISTANCE,
    NOMINAL_TEMPERATURE,
    B_VALUE,
    ANALOG_RESOLUTION
  );
  // define 2 rows: first named "Counter", second named "millis"
    Serial.println("CLEARDATA");
    Serial.println("LABEL,Time,Suhu,millis");
}

void loop() {
 
   for(int ul2=0;ul2<10;ul2++){
      const double celsius = thermistor->readCelsius();
     

     cel=cel+celsius ;

    }
   cel=cel/10;
 
  // simple print out of number and millis
  // output "DATA,TIME,4711,13374"
    Serial.print("DATA,TIME,");
    Serial.print(cel); Serial.print(",");
    Serial.println(millis());
    delay(1000);
}



Example Project TRIMMED MEAN


Berikut adalah beberapa catatan tentang cara menskalakan dan membaca nilai analog dengan benar; kode Arduino di sebelah kanan digunakan sebagai contoh dan diambil dari sketsa pengujian yang saya tulis untuk mencoba beberapa sensor tekanan MPXV7025.


  1. 1023 atau 1024? cara saya biasanya menskalakan pembacaan adc adalah (adcvalue+.5)/1024)*Vref, di mana Vref adalah tegangan referensi analog dan adcvalue adalah pembacaan 0 hingga 1023 dari Arduino Uno 10 bit ADC. Perhatikan bahwa dalam hal ini program bekerja dengan float.

  2. Beberapa sampel diambil dan rata-rata terpotong sederhana dihitung untuk menyaring beberapa kebisingan: siklus for digunakan untuk mengumpulkan total, dalam hal ini, 7 pembacaan dan membandingkannya secara rekursif untuk menyimpan nilai tertinggi dan terendah yang tercatat ( saya harus melakukan ini untuk mengurangi beberapa fluktuasi periodik).

  3. Baris trimmedmean=(trimmedmean-mi-ma)/(samples-2) akhirnya menghitung rata-rata nilai dan mengecualikan nilai min dan maks yang disebutkan.

  4. Terakhir, fungsi transfer sensor digunakan untuk mengeluarkan nilai tekanan dalam kPa (-0,298 hanyalah fitur zeroing untuk sensor tipe diferensial).


Example PROGRAM TRIMMED MEAN



#define samples 7

#define adcchannel A0

#define del 2

#define s_offset -.298

 

int adc=0;

int mi=0;

int ma=0;

uint8_t cnt=0;

float trimmedmean;

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

void loop() {

mi=2000;

ma=0;

trimmedmean=0 

for (cnt=0; cnt<samples; cnt++){

adc=analogRead(adcchannel);

mi=min(mi,adc);

ma=max(ma,adc);

trimmedmean=trimmedmean+adc;

delay(del);}

trimmedmean=(trimmedmean-mi-ma)/(samples-2); 

Serial.print("                  ");

Serial.println((((trimmedmean+0.5)/1024.0)-0.5)/0.018 + s_offset ,3);

}



Example Project MOVING AVERAGE



#define samples_no 7

#define analog_ch 0

#define readings_delay 50

#define baudrate 9600

#define ref_select INTERNAL

#define ref_voltage 1.1

#define precision 3

#define sensor1_samples_no 7

#define sensor1_ch 0

#define sensor1_delay 50

int sample_buf[samples_no];

 

void setup() {

analogReference(ref_select);  

Serial.begin(baudrate);}

 

void loop() {

update_buf(sample_buf,samples_no,analog_ch);

Serial.println(read_mv(sample_buf,samples_no), precision);

delay(readings_delay);}

 

void update_buf(int buf[], int smpls, uint8_t ch) {

for (int cnt=0; cnt<smpls-1; cnt++) {buf[cnt]=buf[cnt+1];}

buf[smpls-1]=analogRead(ch);

}

 

float read_mv(int buf[], int smpls) {

float mean=0;

for (uint8_t cnt=0; cnt<smpls; cnt++) {mean=mean+sample_buf[cnt];}

mean=mean/samples_no; 

return ((mean+0.5)/1024)*ref_voltage;

}



Or kalian dapat menggunakan library arduino untuk MA milik Jack Christensen
dokumentasi milik Jack Christensen https://github.com/JChristensen/movingAvg



Documentasi untuk reading ke Excel Disini



0 Comments