Kamis, 14 September 2023

Menghitung rerata (rata-rata) berdasarkan data yang masuk

Jika datanya tak terhingga dan terus menerus masuk, Anda perlu menggunakan pendekatan yang berkelanjutan untuk menghitung rata-rata secara real-time. Kita dapat menggunakan konsep moving average atau rata-rata bergerak untuk menangani situasi seperti ini. Moving average adalah teknik yang digunakan untuk menghitung rata-rata dari sejumlah data terbaru, dan data yang lebih lama akan terus digantikan oleh data yang baru.


Berikut adalah contoh implementasi rata-rata bergerak (moving average) menggunakan Arduino untuk menghitung rata-rata dari data sensor yang masuk terus menerus:


  1. const int sensorPin = A0;   // Pin tempat sensor terhubung
  2. const int jumlahData = 10;  // Jumlah data yang akan dihitung rata-ratanya
  3. int data[jumlahData];       // Array untuk menyimpan data
  4. int indeks = 0;             // Indeks saat ini dalam array data
  5. float rataRata = 0;         // Variabel untuk menyimpan rata-rata

  6. void setup() {
  7.   Serial.begin(9600);  // Inisialisasi komunikasi serial
  8.   for (int i = 0; i < jumlahData; i++) {
  9.     data[i] = 0;  // Inisialisasi data dengan nilai 0
  10.   }
  11. }

  12. void loop() {
  13.   // Baca nilai dari sensor A0
  14.   int nilaiSensor = analogRead(sensorPin);

  15.   // Update nilai dalam array data
  16.   data[indeks] = nilaiSensor;

  17.   // Hitung rata-rata dari data dalam array
  18.   rataRata = hitungRataBergerak(data, jumlahData);

  19.   // Tampilkan nilai sensor dan rata-rata di monitor serial
  20.   Serial.print("Nilai Sensor: ");
  21.   Serial.print(nilaiSensor);
  22.   Serial.print(" Rata-rata: ");
  23.   Serial.println(rataRata);

  24.   // Pindah ke indeks berikutnya dalam array data
  25.   indeks = (indeks + 1) % jumlahData;

  26.   // Tunda sebentar sebelum membaca data sensor berikutnya
  27.   delay(1000);  // Tunggu 1 detik
  28. }

  29. float hitungRataBergerak(int data[], int jumlahData) {
  30.   int total = 0;
  31.   for (int i = 0; i < jumlahData; i++) {
  32.     total += data[i];
  33.   }
  34.   return (float)total / jumlahData;
  35. }

Dalam contoh ini, kita menggunakan array untuk menyimpan sejumlah data terbaru dari sensor. Saat data baru masuk, data yang paling lama akan digantikan oleh data yang baru. Ini memungkinkan perhitungan rata-rata bergerak yang terus diperbarui secara real-time.