/*
 Monitor przewodności wody
 Szkic dla gadżetu na bazie Arduino mierzącego przewodność elektryczną wody.
 Ten przykładowy kod jest dostępny publicznie.
 */

const float ArduinoVoltage = 5.00; // Tę wartość należy zmienić dla płytek Arduino z napięciem 3,3 V na pinie zasilania


const float ArduinoResolution = ArduinoVoltage / 1024;


const float resistorValue = 10000.0;
int threshold = 3;


int inputPin = A0;
int ouputPin = A5;

void setup()
{
  Serial.begin(9600);
  pinMode(ouputPin, OUTPUT);
  pinMode(inputPin, INPUT);
}

void loop()
{
  int analogValue=0;
  int oldAnalogValue=1000;
  float returnVoltage=0.0;
  float resistance=0.0;
  double Siemens;
  float TDS=0.0;

  while(((oldAnalogValue-analogValue)>threshold) || (oldAnalogValue<50))
  {
    oldAnalogValue = analogValue;
    digitalWrite( ouputPin, HIGH );
    delay(10); // włącza sondę na 10 milisekund
    analogValue = analogRead( inputPin );
    digitalWrite( ouputPin, LOW );
  }

  Serial.print("Wykryte napięcie: ");
  returnVoltage = analogValue *ArduinoResolution; 
  Serial.print(returnVoltage);
  Serial.println(" woltów");


  Serial.print("Ta wartość odpowiada oporności równej ");
  resistance = ((5.00 * resistorValue) / returnVoltage) - resistorValue;
  Serial.print(resistance);
  Serial.println(" omów.");


  Serial.print("Oznacza to, że przewodność cieczy wynosi ");
  Siemens = 1.0/(resistance/1000000);
  Serial.print(Siemens);
  Serial.println(" mikrosimensów.");
  Serial.print("Całkowita zawartość rozpuszczonych substancji stałych (TDS) wynosi w przybliżeniu ");
  TDS = 500 * (Siemens/1000);
  Serial.print(TDS);
  Serial.println(" ppm.");
  if (returnVoltage>4.9) Serial.println("Czy to na pewno nie metal?");


  delay(5000);
}

