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 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.
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):
Town | Min TDS | Max TDS | Ave TDS |
Myponga | 320 mg/L | 410 mg/L | 353 mg/L |
Mount Compass | 120 mg/L | 260 mg/L | 172 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
// Tap water at first apartment block 3rd July 2021
EC:327.5
TDS:177.0
SAL:0.2
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
Southbank Melbourne:
// Tap water from a Southbank apartment 2nd Feb 2020
EC:80.1
TDS:43
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
Coding & wiring can’t downloaded…please send the link
You should be able to find them in the datasheet.