PPM Meter

From ProjectWiki
Jump to: navigation, search

EC/TDS/PPM Meter On Limited Budget


You may also be interested in the pH_Meter meter page.

Design Goal

Make a EC/TDS/PPM meter thats nice and quite accurate while costing me little or at least next to nothing that i can connect to a microprocessor or voltmeter.

This is a wiki'd version of the original document so it can be updated and corrected more easily. :D Please check out the original (and clicky the adverts at bottom for me!!) if your curious.

Measuring PPM/EC/TDS

TDS is the measuring of the amount of salts in a solution. For alot of applications the amount of salt is indicitive of the levels of other stuff in a solution. TDS/PPM meters sold for gardening and aquariums figure the amount of salt in Parts Per Million by measuring the Electrical Conductivity of the solution under test. So a PPM/TDS meter is a EC meter that converts the EC value into PPM values. There are alot of descriptions online about why and how to measure PPM/TDS or EC so google for them if you want alot more details.

EC is a measure of Electrical Conductivity from two probes 1cm apart. 1 EC is = 1 microsiemens, to convert from EC to siemens multiply by 1E-6. EC can be converted to PPM by multiplying by 500. PPM can be converted to EC by dividing by 500. To convert from siemens to Ohms is s=1/ohms, you can also go the other way and do ohm=1/s for siemens to ohms. Siemens is also known as Mhos, which comes from ohm written backward.

The number 500 used to convert between PPM and EC is called the Conversion Factor. Different salts will have different conversion factors because some conduct better or worse than others. NaCl's is 500, this seems to be the most common standard used, and is what was used for the calibration solutions.

If EC/PPM is just measuring the Conductance (or resistance) then why not use a volt/ohm meter directly?? Because they pass DC current thru the probes and you cannot measure conductivity of salts with DC current because it will rip the molecules apart, and since the molecules are what conducts the electricity you get a constantly changing reading that is useless. Overcome this by using an AC signal. If the frequency is high enough (>1khz it seems) the molecules dont have time to move apart before they are pulled in the opposite direction. Sort of like how high AC current will throw a person off of it, where as DC forces them to hold on and get shocked to death or something.

MW-DCscreenshot.jpg MW-ACscreenshot.jpg
DC Molecular Workbench model AC Molecular Workbench model

The screenshots above are from Molecular Workbench (its free!!) and show what happens to NaCl and H2O molecules when exposed to AC and DC fields. If you download the models you can press play and watch the atoms move around. Normally the molecules look about the same as in the AC simulation staying in about the same spot. When AC is applied they just shake back and forth. With the DC simulation you can see the sodium and chloride atoms are attracted to the simulated charged plates at top + and bottom - of the model container.


Measured Conductivity at different Temperatures
EC Temp C
3.43 13.72
4.16 22
4.73 30

Something very important, temperature will effect the conductivity! The chart on the right shows the same solution measured at 3 different temperatures. If your connecting this to a microprocessor you can use a thermistor to compensate. If not then make sure the calibration solution is about the same temperature as the solution to be tested. One way this can be done taking a sample from the fish tank or whatever and letting it set until its room temperature. If your temperature will vary by only a few degrees then it may not even be a problem.

If your looking for more information you can probably find it on the Cole Parmer site on EC meters.

How to properly compensate for temperature can be found on the Temperature_probe page. I've not tried it yet but looks very promising!

How to Make Calibration Solutions


Needing something to calibrate the meter, a friend suggested i measure out salt by weight, and put that into a measured volume of water. Most calibration solutions have a mixuture of 2 or more types of salts such as sodium chloride (NaCl) and potassium chloride (KCl). However all i have around the house is NaCl table salt so...

Looking around the net, i found that 1mg of solute per 1L of water would equal 1ppm. So to get a 2Kppm solution would need to put 2g of salt into 1L of purified water.. or just put 1g of salt into .5L of purified water. The water MUST be purified, pure water has allmost no conductivity, compared to tap water which has all sorts of contamination (tapwater here reads about 80ppm). So get some distilled water for this.

Once you have the 2K solution from 1g into .5L, you can put some of that in a jar, the pour out the rest till you have only 250ml, pour in purified water till you get 500ml again, then you have 1000ppm! Keep doing this if you want to create a range of solutions, just be carefull to measure perfect and STIR IT UP WELL.

Thats about all the stuff you need to know to start building a ppm/ec meter. Now for....

The Circuit

There were alot of design considerations such as needing to pass a minimum amount of current and voltage thru the solution while keeping a good s/n ratio. But most most important it had to use stuff i had laying around the house and be pretty accurate.

The circuit outputs a DC voltage equal to the EC value of the solution being tested. So like 4v on the meter means an EC of 4, 2v means EC of 2, .5V = .5 EC blah blah. To convert EC value to PPM just multiply by 500, so like 4 EC = 2000PPM, .5 EC = 250PPM. Also the output can be connected to an A/D converter without alot much grrrrr.

Schematic diagram of functional EC meter


Click here for the full more readable schematic and notes

gEDA schematic Eagle schematic Eagle board

There are three main parts to the circuit. The sine wave oscillator, the gain loop, and the AC to DC converter.

The Oscillator: As i hopefully already explained you must use an AC signal to measure conductance of salts in a solution so you realize the need for the oscillator to generate a nice clean sine wave (See Photo). The oscillator circuit used here is a very common Wien bridge design.

Nice Pretty Sine Wave

Part substitution: You can change around the part values in the oscillator a good bit just remember to make sure the output frequency is above 1Khz, lower freqs seem to give more unstable readings. Adjusting V1 will change the output level a bit but its not recommended, best to change the value of D1 and D2 to a zener with lower Zv. I just used 5.1V zeners because its what i had and they worked well running from regulated +/- 12v supply. If you are planning to use with 9V batteries use lower values for sure.

The Gain Loop: This is where all fun stuff occurs. To measure conductance i looked at it as an unknown resistance. The probe makes up one leg of the voltage divider across the op-amp's gain loop. So long as there is no conductance between the probes, the op-amp's output will equal whatever is on the + input pin 5. As conductance increases the amount of negative feedback (which is what determines op-amp gain) decreases because some of the signal is being sinked to ground via the probe. Less feedback means more gain and more amplification.

The advantage of using the feedback loop is it doesn't take nearly as much current to pass thru the solution and you get a large variation in output. If the probe was just part of a simple voltage divider without being in a gain loop would need to pass about 100 times more current thru the solution, or else pass a smaller signal and then you have noise issues. The disadvantage is that there is ALWAYS at least a gain of +1 in a non-inverting amp that must be nulled out later. Also sucky is that uneven changes between the + and - supply voltages will cause a small amount of offset drift. This offset issue bothers me :(, feel could have done it better but whatever this works and took a few days already blah.

Part substitution: Changing the value of R7 is yet another, and probably the best, way to compensate for different probes. If readings are too high lower the resistance, if they are too low raise R7's value a bit.

AC to DC converter: Lastly there is the AC to DC converter. You can just measure the output of the gain-loop stage then do alot of math to figure out EC/PPM, but it would be ALOT nicer if the output was zeroed, scaled, and stuff. The first op-amp is configured to convert the AC signal level into a DC voltage with adjustable gain for scale. You cannot just use a diode or even a bridge rectifier alone because of the constant voltage drop of .7v or so creates alot of problems. The solution is to put a bridge into a feedback loop, as the input voltage changes so does the current across the resistor (R8) connected to the DC side of the bridge. With current change comes a proportional DC voltage change that can be measured across the resistor.

Differential Output

Problem with voltage across the bridge is that its differential, there is still a sine wave present when measured with ground as a reference. The Differential Output picture shows a scope connected to the +/- terminals of the bridge. A DC meter across the bridge will measure the difference between the two wave forms. In the picture you can see there is a consistent difference between the top and bottom wave form of about 2 of the little grid squares. Scope is set up where each grid square equals 1 volt, so a meter on the bridge would see a constant difference of and display 2V.

This would almost work by itself except you need an offset and most A/D converters do not have differential inputs and require a input referenced to ground. So the final part of the circuit is a simple differential amp, also here is where the offset it adjusted. The output is now ready to go to a volt meter or to an A/D input! A note about the offset, blah it really needs to be compensated for earlier because as the gain adjustment of previous stage changes so does the offset just a little bit.


There are 3 pots in the circuit needing attention. To adjust the first V1 hook a meter or better yet a scope up between ground and pin 1 on op-amp. Adjust V1 till there is no output, then slowly turn the opposite direction untill oscillation occurs and the meter reads something while in AC mode or the scope has a nice pretty sine wave. If you adjust it too far the wave will be ugly looking, so do it slowly!

Next put V2 in the middle and adjust V3 so the output @ ECv (pin 14) is 0vdc. Wipe off the probe with a paper towel then put it into a 2Kppm calibration solution. Adjust V2 so that meter reads 4vdc. Again dry and wipe probe and repeat the adjustment of V3 back to 0vdc. You will need to go back and forth (about 3 or 4 times here) between adjusting these two pots before it scales properly. Should read 4vdc (meaning 4 EC) with 2Kppm solution and 0vdc with the probe dried off. If your unable to get it to scale properly you probably need to change the value of R7 as described in the schematic because your probe is too different from mine. Mine reads within about .05 EC of what i am expecting with clean probes.

The Probe


This was a bit tricky. At first i tried copper wire, push pins and various other things. With these experiments i determined that you need to expose a small and consistant amount of the probes to the solution at a consistant distance. I accomplished this by using alot of hot glue and/or insulation on the wire so that only the tips of the wires would touch the water. Then I realized that the stupid readings drift like crazy untill you clean the probe again, and even cleaning the probe sometimes didnt help because probably some chemical reaction with the stuff in the solutions. I kept trying to think of something that would be a great conductor without corroding in the solution, and came up with GOLD! I used a few types of gold plated audio connectors before i found some bananna jacks that seemed to work best. I covered them so again only the tips are exposed to the solution at about 1cm apart and was able to get consistant readings over and over especially if i cleaned the tip before and after each test.

So, use gold plated probes, make sure a small and consistant amount of probe touches the solution, and clean the probes after and before each use. Using these guidelines should get you a nice reliable probe, I had wanted to find a nice premade and ez to find connector that i could suggest, but nothing laying around here is very common. Gold plated RCA plugs seem to be the worst probably because these cheep things are only plated enough to look gold colored. Was looking for a nice gold plated 1/8" phone jack or something but nothing was laying about here blah. If the meter cannot seem to be adjusted right (is allways too high a reading) try increasing the spacing of the probe or changing values of R7. If reading too low try moving probes closer or exposing more probe material.

Here are a few probes I tried (picture at top of section). The part you measure with on all probes are facing bottom of picture. From Left to Right: 12AWG house wire with ground removed, sewing pins surrounded by hot glue except the tips (this was WORST of all), gold plated RCA jack with center filled in by glue (was not very stable, i think very thin gold plating), and finally the best of the whole lot is the two gold plated bananna jacks covered with heat shrink and hot glue exposing only the tips.

I've been asked about and have considered myself just leaving the probe submerged and possibly reading it constantly. This seems a bad idea, allthough probably with experimentation you could make it work. The main problem would be from the probe corroding which would occure faster with the circuit in operation. Maybe you could get a nice gold probe and have a circuit to either power up or connect the probe only when needed? Dunno really. For observations on this topic see updates below.

Newer probe design featuring enclosed electrodes

Since writing the above paragraph have used the same probe for nearly 2 years, it worked fine with occasional cleaning. ^^

Reader suggestions have included using nickle, and graphite. Both of which seem good suggestions. See the discussion pages for more information.

New and Improved Probe Design


Another view of newer probe design

Recently decided to create a new probe because in an attempt to fix0r some problems with the old one. The contacts (formally gold plated) were still in excellent condition, but the main problem was the reading would often change depending on how close the probe was to the edges of a particular container. To new probe design solves these problems by surrounding the probe's electrodes within a plastic container.

The probe was made using the end of a syringe however the ends of a fat marker or other similar items may work as well. Two wires emerge from from the top and were soldered onto two 1cm square pieces of copper (with sticky stuff on the reverse). The top of the probe where wires entered is sealed with hot glue (prolly silicone would work better). Two small holes were drilled near the top, without them air pockets are created that may screw up readings. u_u

Note the syringe itself is marked in cubic centimeters, and remember that commercial probes measure the conductivity between two 1cm square probes in a 1cubic centimeter chamber. ^^ This probe is (probably) very much likely close to a commercial probe in its readings. Cannot test this exactly because don't have a real factory made probe to compare with.

Tests using the probe seemed very successful. \^_^/ For one thing no matter where in the test samples the probe was placed the readings were all the same! This is a great improvement over the previous design. The circuit itself needs a bit of adjustment because of course with a different probe. As mentioned in the circuit section the feedback resistor on the gain stage needs changing due to the newer probe having larger surface area. Have not yet actually done this >_> but will when i make next batch of changes to the probe. Which should also include the lovely temperature compensation circuit proposed on the talk page. (thank you!)


Since most of the parts for this were scavenged from old junk there is not much point in discussing construction techniques in depth (That and I'm getting tired of writing sooo much). Construction is not critical so long as all the wires go the the right spot it should work.

These pictures show the prototype and the 'finished' module squeezed onto a small piece of perferated board. Eventually this one will go into a box with PSU, microcontroller, and a bunch of other I/O. So put on a .156" connector for the power/ouput and a RCA jack for the probe so it could be removed easily.

Protocircuit.jpg Circuitcloserup.jpg
Prototyped version More permanent version


After Calibrating with the 2Kppm (4 EC) solution, tested with the 1K (2 EC) solution. Also tried it with a few other values down to 250ppm, seemed to worked well. Btw, you may notice my meter is falling apart, if you feel this information is of use and have a spare meter or something please send thanks.

Reading 2000PPM
Reading 1000PPM

There are other ways to do this. For instance if the probe were to be connected across or in place of R1 or R2 the frequency of the oscilator will vary a bit depending on conductivity of the solution and the values of C1, C2, etc. Connecting the oscilator output to a microcontroller will allow you to determine the conductivity by the frequency without the need for the other 3 op-amp stages.

This is not done at all, ill post more as its completed.

Long Term Observations

2006-09-22-Observations: I've been using this thing for about 5 months now, keeping the probe submerged all of the time. This worked great for a few weeks, but slowly it started to get cruddy every 3-4 days and readings were off by up to 100ppm. Wiping off the probe gets it back to within about +/-40ppm but before I take a critical reading (like when refilling the tank it's monitoring) will allways clean and recalibrate. Looking at it, the probe's once smooth and shiney gold surface now seems dull, cruddy, and pited.

The probe is holding up alot better than i first thought it would being constantly submerged. If used intermittently it would probably stay stable without recalibration longer.

Found places that sell just the ppm probe itself and i have a feeling using one of these will increase the meter's accuracy and stability greatly. Also an email from someone who has worked at places where EC meters were manufactured suggested that i use nickle instead of gold. But i've not had a chance to check either of these.


Someone hinted to me that this could be an even more useful circuit if only it would operate off a single polarity power source. I need another one of these so in the process of building it may make a few mods.

Also, to make things easier and alot more ereet I have installed the circuit in this box and connected it to the adc input of a microcontroller. By doing this i can zero/calibrate it using software simply pushing a few buttons. It has a rs-232 port, and USB too so can connect it to a computer for loging or possibly automating some process. I'll put up more documentation on this part of things soon. Note: The display is reading ppm on the left and ph on the right, with the probes in calibration solutions.

Microcontroller Code

Here is a snippet of the meter's code. (Rest of the code is here) These command functions are called via the shell or assigned to button presses and use fixed point maths:

/* zeroppm command */
int c_zeroPpm(int  argc,char **args) {
	m_cfg.ppmoset=readADC(ADC_CH0); //Read ADC channel 0, store as offset
	meterSave(m_cfg); //Save settings to eeprom
/* scaleppm command, if argument calibrates to ARG1 ppm, otherwise defaults to 1000 */
int c_scalePpm(int  argc,char **args) {
	if(argc==1) {
		printf("usage: calibppm PPM\r\n");
	if(argc==0) { // calcuate scale using CALIBPPM/(ADC-offset)
	if(argc==2) { //same but with arg1 as calib, note the *100 for fixed point
	meterSave(m_cfg); //Save settings to eeprom
/* readppm */
int c_readPpm(int  argc,char **args) {
	long ppm;
	//display the results
	printf("PPM: %04i\r\n",(int)ppm); //print upper 4 digits of ppm value (/100)

Other Stuff

Thanks to all u pplz who've emailed me! Part of motivation for wikifing was all the great suggestions and good questions wish i coulda easily thrown in, not to mention the Talk:PPM_Meter page! \^_^/!!

This article was originally written late 2005/early 2006..


Good Luck! Be carefull, dont do anything stupid and shock yourself to death.

Disclaimer: I am not responsible for what you do.

Experiment, learn, improvise, take what is otherwise junk from your enviroment and making of it something more.

Personal tools
irssi scripts
eggdrop scripts