Connecting an Atlas Scientific Conductivity K 1.0 sensor to an Arduino.

First of all, let me just say that I adore the packaging of the EZO conductivity and power isolation circuit boards.

They arrived in two adorable little cryogenic chambers.

They were a lot smaller than I expected, which is a nice surprise, as it’ll mean a smaller end product once I’ve packaged them all into a box.

The EZO Conductivity Circuit Datasheet is more like a getting started guide, so I followed that first.

Finding a spare breadboard, I wired the EZO board to the voltage isolator (which is optional so that any other devices don’t interfere with the conductivity sensor), and then to an Arduino Mega. I thought it better to test it with a plain Arduino before migrating over to The Things Uno, as I haven’t looked into whether the standard serial pins are still usable or not.

Wiring diagram without the power isolator.
Wiring diagram with the power isolator.
Atlas Scientific Conductivity K 1.0 connected to an EZO board, via a power isolation board, to an Arduino Mega.

With everything connected I uploaded the sample code to the Arduino, opened the serial monitor and out came my first data!

EC:0.00
TDS:
SAL:
GRAV:

Noticing that the TDS (total dissolved solids), SAL (salinity) and GRAV (specific gravity) values were all blank, I followed the guide a little longer to see that they’re all off by default. Setting these to return values is as simple as sending the following commands via the Arduino IDE serial monitor:

// Turn on TDS (capital letter O, capital letters TDS, number 1, separated by commas)
O,TDS,1

// Turn on SAL
O,S,1

// Turn on GRAV
O,SG,1

Once you send a command you should see the return value: *OK

Then the output will look more like this:

EC:0.00
TDS:0
SAL:0.00
GRAV:1.000

Next step is to calibrate the sensor for dry air. To do this, send the command using the Arduino IDE serial monitor:

Cal,dry

The other calibration steps you can do are to check against the supplied samples. My samples are 12,880 uS/cm and 80,000 uS/cm which can be set to low and high calibration settings using the commands:

// Put the sensor in the 12,880 sample, and then send the command:
Cal,low,12880

EC:13580
TDS:7336
SAL:7.83
GRAV:1.007

*OK
EC:13580
TDS:7337
SAL:7.83
GRAV:1.007

// Put the sensor in the 80,000 sample, and then send the command:
Cal,high,80000

EC:82530
TDS:44569
SAL:42.00
GRAV:1.041

*OK
EC:79990
TDS:43195
SAL:42.00
GRAV:1.040

To save the calibration from your device, send:

// Send the export calibration command
Export

// My response
EC:53D44200803F

// If ever you need to import it again, simply type
Import

Now we’re ready for our first water quality sample! I poured a glass of Port Willunga tap water in the 80’s cottage I was staying at, and it gave these values:

EC:601.2
TDS:325
SAL:0.29
GRAV:1.000

EC:602.0
TDS:325
SAL:0.29
GRAV:1.000

EC:602.6
TDS:325
SAL:0.29
GRAV:1.000

EC:602.8
TDS:326
SAL:0.29
GRAV:1.000

EC:603.4
TDS:326
SAL:0.29
GRAV:1.000

EC:603.8
TDS:326
SAL:0.29
GRAV:1.000

EC:604.0
TDS:326
SAL:0.29
GRAV:1.000

EC:604.4
TDS:326
SAL:0.29
GRAV:1.000

EC:604.3
TDS:326
SAL:0.29
GRAV:1.000

So it works! But what do those values mean and how do they compare to reported averages?

From page 56 of this 2013/14 SA Water drinking quality report, here are some water quality Total Dissolved Solids figures from areas nearby in mg/L (which is the same as ppm reported by the sensor):

TownMin TDSMax TDSAve TDS
Myponga320 mg/L410 mg/L353 mg/L
Mount Compass120 mg/L260 mg/L172 mg/L

Port Willunga’s average that I read of 326 mg/L (only a few readings on one day) sits towards the Myponga end of those two readings, which seems to validate the data I just read.

Just out of interest, on page 54 of that report, the “Aesthetic guideline” for water TDS is less than or equal to 600 mg/L. So I think that’s a safe upper limit to compare against for drinking water.

Update: I found that the SA Water “what’s in your water” search returned this 2018 data from South Metro: Average 290 mg/L. So that’s in the same ballpark too which is nice.

Next step is to get it working with I2C on The Things Uno, so that I can push the data to their network.

I might also build a quick iOS Bluetooth app and plug it into my Red Bear BLE Nano so that I can send data to my phone too.

Update: Today I tested some salt water from the beach at Port Willunga 2nd Jan 2019:

-- SENSOR READING
EC:51291
TDS:27697
SAL:33.69
GRAV:1.026

-- SENSOR READING
EC:51341
TDS:27724
SAL:33.73
GRAV:1.026

-- SENSOR READING
EC:51381
TDS:27750
SAL:33.76
GRAV:1.026

-- SENSOR READING
EC:51431
TDS:27775
SAL:33.79
GRAV:1.026

-- SENSOR READING
EC:51481
TDS:27799
SAL:33.83
GRAV:1.026

-- SENSOR READING
EC:51501
TDS:27814
SAL:33.85
GRAV:1.026

-- SENSOR READING
EC:51521
TDS:27826
SAL:33.86
GRAV:1.026

-- SENSOR READING
EC:51561
TDS:27843
SAL:33.89
GRAV:1.026

-- SENSOR READING
EC:51581
TDS:27857
SAL:33.91
GRAV:1.026

-- SENSOR READING
EC:51631
TDS:27881
SAL:33.94
GRAV:1.026

And an average reading from the Adelaide CBD:

// Tap water at an apartment block 2nd Jan 2019
EC:600.4
TDS:324
SAL:0.29
GRAV:1.000

// Tap water at a second apartment block 4th Jan 2019
EC:556.3
TDS:300
SAL:0.27
GRAV:1.000

// Pura tap (2 year old filter)
EC:567.7
TDS:307
SAL:0.28
GRAV:1.000

// Pura tap (6 month old filter)
EC:530.5
TDS:286
SAL:0.26
GRAV:1.000

An average reading from Saint Kilda East in Melbourne:

// Tap water from St Kilda East 6th Jan 2019
EC:61.37
TDS:33
SAL:0.00
GRAV:1.000

// Rain water from St Kilda East 6th Jan 2019
EC:38.91
TDS:21
SAL:0.00
GRAV:1.000

An average reading from a Melbourne CBD apartment (top of the CBD):

// Tap water from Melbourne CBD apartment 10th Jan 2019
EC:117.9
TDS:64
SAL:0.00
GRAV:1.000

Spring water:

// Neverfail spring water (box)
EC:211.6
TDS:114
SAL:0.10
GRAV:1.000

// Mount Franklin spring water (600mL bottle)
EC:162.9
TDS:88
SAL:0.00
GRAV:1.000

// Cool Ridge spring water (600mL bottle)
EC:79.76
TDS:43
SAL:0.00
GRAV:1.000

Join the Conversation

1 Comment

Leave a comment

Your email address will not be published. Required fields are marked *