Skip to content

Instantly share code, notes, and snippets.

@mdmunir
Created September 7, 2017 16:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mdmunir/70cc30241b83c5f877c8746fa280bf2a to your computer and use it in GitHub Desktop.
Save mdmunir/70cc30241b83c5f877c8746fa280bf2a to your computer and use it in GitHub Desktop.
#define TDS_SOURCE_1 2
#define TDS_SOURCE_2 3
float getTds() {
// konstanta diperoleh dari percobaan. Hasil dari fungsi ini dibandingkan dengan tds meter standar. Hasilnya diregresikan
// Baca README.md
float C1 = 27.0, C2 = 61.4; // <- dari regresi linier, mungkin berbeda tergantung nilai R yg dipakai. R=1K8 ohm
float x1, x2, ec;
int i;
// inisialisasi probe;
/* dari pengalaman. kalau probe yang dicelupkan ke air diberi arus searah terus menerus akan terjadi elektrolisis
sehinggah nilai pengukuran akan berubah.
Karena itu sebelum pensamplingan nilai, probe terlebih dahulu diberi arus bolak-balik
*/
for (i = 0; i < 4; i++) {
digitalWrite(TDS_SOURCE_1, i % 2 == 0);
digitalWrite(TDS_SOURCE_2, i % 2 == 1);
}
// sampling 1 -> PIN1 high, PIN2 low
digitalWrite(TDS_SOURCE_1, HIGH);
digitalWrite(TDS_SOURCE_2, LOW);
x1 = analogRead(A0) / 1023.0;
for (i = 0; i < 4; i++) {
digitalWrite(TDS_SOURCE_1, i % 2 == 1);
digitalWrite(TDS_SOURCE_2, i % 2 == 0);
}
// sampling 2 -> PIN1 low, PIN2 high
digitalWrite(TDS_SOURCE_2, HIGH);
digitalWrite(TDS_SOURCE_1, LOW);
x2 = analogRead(A0) / 1023.0;
// konversi ke ec
ec = 0.5 * (x1 / (1 - x1) + (1 - x2) / x2);
// idle
digitalWrite(TDS_SOURCE_1, LOW);
digitalWrite(TDS_SOURCE_2, LOW);
return C1 + C2 * ec;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment