Sensor-sensor analog dibaca oleh arduino melalui pin analog menggunakan adc. Agar pembacaan adc oleh arduino memiliki presisi yang baik diperlukan perlakuan (treatment) sisi hardware diantaranya:
- Jika impedansi keluaran (output) sensor besar (>10 kΩ) maka perbesar sampling and hold time (s/h) dengan cara mengganti nilai ADCSRA,
- Gunakan tegangan referensi yang sesuai dengan tegangan maksimal keluaran sensor menggunakan perintah analogReference(),
- Gunakan kabel sependek mungkin antara pin output sensor dan pin adc arduino dan terselubung ground,
- Jauhkan kabel dan sensor dari komponen yang bisa menimbulkan interferensi elektromagnetik,
- Jika menggunakan tegangan referensi luar, tambakan dengan filter LC,
- Pin-pin analog yang tidak digunakan sebaiknya tidak dioperasikan saat proses pembacaan sensor.
- Tegangan power supply yang stabil dan terproteksi dari gangguan luar.
Pada sisi software bisa dilakukan peningkatan presisi diataranya menggunakan metode rata-rata seperti Mean, Trimmed Mean, Truncated mean, Winsorizing, Interquartile mean dan sebagainya.
Berikut contoh penggunaan metode Trimmed Mean untuk meningkatkan presisi pembacaan sensor analog :
#define faktorTrim 0.2 //20% #define jumlahSampel 10 #define pinSensor A0 int buffer[jumlahSampel], temp, rataRata; void setup() { Serial.begin(9600); Serial.println(F("Meningkatkan presisi pembacaan sensor analog dengan metode Trimmed Mean")); Serial.println(F("https://www.project.semesin.com")); Serial.println(); } void loop() { for (int i = 0; i < jumlahSampel; i++) { buffer[i] = analogRead(pinSensor); delay(10); } //proses pengurutan (sorting) for (int i = 0; i < jumlahSampel - 1; i++) { for (int j = i + 1; j < jumlahSampel; j++) { if (buffer[i] > buffer[j]) { temp = buffer[i]; buffer[i] = buffer[j]; buffer[j] = temp; } } } //rata-rata (trimmed mean) rataRata = 0; for (int i = jumlahSampel * faktorTrim; i < jumlahSampel * (1 - faktorTrim); i++) { rataRata += buffer[i]; } rataRata /= jumlahSampel * (1- (faktorTrim*2)); Serial.print("sensor = "); Serial.println(rataRata); delay(500); }
Permisi mas, apakah metode diatas bisa diaplikasikan untuk pembacaan sensor arus ina219, sehingga lebih presisi dan stabil. Atau adakah rekomendasi lain paling tidak hasil pembacaan sensor bisa mendekati hasil pengukuran multimeter. Terimakasih sebelumnya.
Metode ini bisa digunakan di sisi sortware/firmware
meningkatkan presisinya akan lebih signifikan dengan memperbaiki hardware-nya