ph-logger from cheap ph meter from DX

It's a pity the back is covered with glue.

Back side:

Front without microcontroller:

actually it is written something on the chip, but only kelilong's logo and "www.kelilong.com"

Seems a bit strange that a company selling mostly sensors would design its own microcontrollers. But with such numbers of meters/chips sold, printing the name may just have been part of a contract with the chip factory. It's a pity, but that's all it is.

If you have a multimeter, you can check which voltage the chip uses to send data to the lcd. You won't harm the PH-meter by doing that.

The drawings of Samba can be very helpful.

Check 1, I do guess Black/Red wire (battery) will be gnd and positive voltage, but you've got to be sure.

Second part, check what voltage there may be between black and yellow lines.

Keep in mind there may be no difference in voltage on some yellow lines. Should one of the last two numbers displayed for example be 1, only 2 out of 7 segments will be turned on. To see all lines/segments activated one would need an impossible PH of 18.8.

Any way, once you know which voltage the LCD/segments needs, easiest will probably be to start experimenting with the LCD to check which line triggers which segment.

This is still a bit risky since I still don't know which exact LCD-display was used. I did search on 2.5 displays in the last days though and haven't found one that doesn't use a common pin and a pin per segment yet. The number of IO-lines would also perfectly fit.

Samba, if you still have your LCD, could you test it for this project ?
Looking at the board (&datasheets of other LCDs) you won't need a resistor. If you feel safer using one, each segment draws only a few microAmperes, you probably will be able to trigger a segment using a resistor of 10k or higher.
Once we know which line triggers which segment we can almost start programming.

By the way, one thing that came to mind after seeing the meter without chip is that you may... still be able to read the meter. The PH-sensor itself gives a very small voltage, the opamp translates it to a higher voltage after which it is read by an ADC in the microcontroller and printed on lcd. What we've tried so far is looking at the output of a microcontroller, but you can try to read its input as well.
Arduino has an adc as well. If you can find the right pin, it may be possible to analogread it with your arduino.

Simpson_Jr:
Samba, if you still have your LCD, could you test it for this project ?

Unfortunately I don't have it no more. But one is in the mail from China, so I'll have a new fully working one "soon".

Simpson_Jr:
By the way, one thing that came to mind after seeing the meter without chip is that you may... still be able to read the meter. The PH-sensor itself gives a very small voltage, the opamp translates it to a higher voltage after which it is read by an ADC in the microcontroller and printed on lcd. What we've tried so far is looking at the output of a microcontroller, but you can try to read its input as well.
Arduino has an adc as well. If you can find the right pin, it may be possible to analogread it with your arduino.

The sensor part is removed as well, so I'll just have to wait.

What about OP!
Are you still around?

Edit:
I should learn to use kicad or something and make some "proper" drawing of the circuit

yes i am here, but i hawe also broke apart the sensor... i have the lcd though but i do not know how to test it..... I have no tools, only a multimeter.

has anybody done more on this?

I got mine in the mail, but been busy. Ill try to chop it up soon...

nice

i have just ordered one of these

seems easier than ripping a meter apart! (although not as fun)

:slight_smile:

Femur

yes but i hawe to order a new one :slight_smile:

An easier alternative....

A pH meter is simple a voltmeter with a very high input impedance. The output of a pH probe is around -27mV per pH unit.
An easier way to do this would be a High input impedance amplifier with some gain and offset to suit the 0-5v analog input on the arduinos....

Sorry for taking so long with my update.
I got the new meter open yesterday, it seems to be a little different from the old one.
I got 2.5V on some of the pins that I think go to the LCD.

It looks like it might be possible to solder some wires to the pads in the PCB under the LCD and still get the LCD back on and working.

The micro-controller is ICL7106CM44, I think

http://www.digikey.com/product-detail/en/ICL7106CM44/ICL7106CM44-ND/936120

Any ideas what I should now do?
Remove the LCD and try to solder wires to the pads?
But what if I don't get the LCD back on. How do I compare the input on my arduino to the pH, if I cant see it on a LCD?

The ICL7106CM44 is not a micro controller - it's an voltmeter chip

The voltage on it's input can be read by the Arduino analog input.

// Per.

Zapro:
The ICL7106CM44 is not a micro controller - it's an voltmeter chip

The voltage on it's input can be read by the Arduino analog input.

// Per.

Anyone made this work?

Just a word of warning regarding LCDs - they do NOT use DC current like an LED display, so there is little point in measuring voltages on the LCD pins. An LCD actually use AC voltage for the activation of the segments. The common is a phase driver, and it will alternate between 0 and Vcc, while the segments alternate on a reversed phase when they are lit, and the same phase when they aren't. The frequency is usually 30-60 Hz, depending on the specifics of the LCD. Applying DC voltage to an LCD segment for a prolonged time, will result in it fading and not being useable.

Hello everyone,

long time ago I bought this meter, before this thread was abandoned.
but I made it work. ]:smiley:

some notes :

  1. before you yell at me, I have no idea what im doing so if you see I did something wrong please share your knowlage
  2. sorry for my English :roll_eyes:

what I did:
Samba posted the chip name and datasheet, and guynaor said that LCD's drives on AC, and he was right.
After I cracked the case open, I dumped the switch and battaries and connected it to 5VDC.
Mesured the voltage that drives the LCD and it was about 4.6 VAC.
using the datasheet and some tracing with a multimeter I determined that there are 2 full digits used and a half a digit which is the 1, and of course the dot, because I don't care about the dot.
and the conclusion:
Pin BP/GND - its like the common ground for the LCD
Pin AB4 - Drives the "1" first digit
Pins A3-G3 - Drives the second letter
Pins A2-G2 - Drives the third letter (the first after the decimal)
Pins A1-G1 - Not in use (but if you want higher resolution for the pH metering you get it here) I won't be using it

its 15 pins for all segments and one ground
I soldered to each pin a wire (soldering to the LCD pads would be much easier but I wanted it on for debugging)

I took 16 Diodes (1N4001 - this is what I had) and "rectified" the currents, resulting in signals that are about 2.5-2.6 VDC peak
second part is two shift registers (CD2041BE) linked together, every shift register has 8 inputs, so its 16 total.
each input lead connected to ground with a 100K pullup resistor (I think 10K will be enough) and each signal connected to different input pin
Inputs 1-7 -> A3-G3
Input 8 -> AB4
Second chip:
Inputs 1-7 -> A2-G2

made some calculations and matched binary codes to the digits that are showing.
I have used this : http://www.arduino.cc/en/Tutorial/ShiftIn A-LOT, thank you Carlyn Maw
Threw some codes together and got it working :

// Stuffs by AlexShu

int latchPin = 3;
int dataPin = 4;
int clockPin = 2;
int pH_1=0;
float pH_2=0;
float pH=0;

byte switchVar1 = 0;
byte switchVar2 = 0;

void setup() {
  Serial.begin(9600);

  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT); 
  pinMode(dataPin, INPUT);

}

void loop() {

  digitalWrite(latchPin,1);
  delayMicroseconds(20);
  digitalWrite(latchPin,0);

  switchVar1 = shiftIn(dataPin, clockPin);
  switchVar2 = shiftIn(dataPin, clockPin);

 // Serial.println(switchVar1, BIN);
//Serial.println(switchVar2, BIN);

// Translating the first two digits
  switch (switchVar1) {
  case B00000110:
    pH_1=1;
    break;
  case B01011011:
    pH_1=2;
    break;
  case B01001111:
    pH_1=3;
    break;
  case B01100110:
    pH_1=4;
    break;    
  case B01101101:
    pH_1=5;
    break;        
  case B01111101:
    pH_1=6;
    break;     
  case B00000111:
    pH_1=7;
    break;     
    case B01111111:
    pH_1=8;
    break;     
    case B01101111:
    pH_1=9;
    break;     
    case B00111111:
    pH_1=0;
    break;     
        case B10111111:
    pH_1=10;
    break;  
      case B10000110:
    pH_1=11;
    break;
  case B11011011:
    pH_1=12;
    break;
  case B11001111:
    pH_1=13;
    break;
  case B11100110:
    pH_1=14;
    break;    
  case B11101101:
    pH_1=15;
    break;        
  case B11111101:
    pH_1=16;
    break;     
  case B10000111:
    pH_1=17;
    break;     
    case B11111111:
    pH_1=18;
    break;     
    case B11101111:
    pH_1=19;
  default: 
    pH_1=-1;
  }

// Translating the digit after the decimal
 switch (switchVar2) {
    case B00000110:
    pH_2=0.1;
    break;
  case B01011011:
    pH_2=0.2;
    break;
  case B01001111:
    pH_2=0.3;
    break;
  case B01100110:
    pH_2=0.4;
    break;    
  case B01101101:
    pH_2=0.5;
    break;        
  case B01111101:
    pH_2=0.6;
    break;     
  case B00000111:
    pH_2=0.7;
    break;     
    case B01111111:
    pH_2=0.8;
    break;     
    case B01101111:
    pH_2=0.9;
    break;     
    case B00111111:
    pH_2=0.0;
    break;  
  default: 
    pH_2=-1;
  }
  
// Calculating pH  
pH = pH_1+pH_2;
// Avoiding garbage
if (pH>0){
Serial.println(pH);
} else {
  pH = 0;
}


byte shiftIn(int myDataPin, int myClockPin) { 
  int i;
  int temp = 0;
  int pinState;
  byte myDataIn = 0;

  pinMode(myClockPin, OUTPUT);
  pinMode(myDataPin, INPUT);

  for (i=7; i>=0; i--)
  {
    digitalWrite(myClockPin, 0);
   delayMicroseconds(10);
    temp = digitalRead(myDataPin);
    if (temp) {
      pinState = 1;
      myDataIn = myDataIn | (1 << i);
    }
    else {
      pinState = 0;
    }
    digitalWrite(myClockPin, 1);
  }
  return myDataIn;
}

Next plan:

  1. listen to you yelling at me knowing nothing about electronics
  2. get some advice on how to make it better
  3. tidy it up
  4. use it in my project

Aftermath notes:

  1. I don't really know it all those diodes are necessary (but I guess its protecting both sides of the equipment)
  2. Messiest job I ever did, looks like a parallel flux capacitor :stuck_out_tongue_closed_eyes:

some pictures attached, have more, just tell if you need.
I plan to make full description on my blog soon if anybody interested talk to me.
oh, total cost is 11$ for everything, 8$ for the meter (cheapest one is currently 8.25$)

3$ for shift registers diodes and resistors every other thing is scrap i'm sure everyone has

Thank you :slight_smile:

Very nice post AlexShu. Congratulations!

Since it is known that the chip driving the LCD is a ICL7106CM44 why not build a buffer circuit with an Op-Amp which would provide a high impedance input to apply the signals coming from the In-High and In-Low pins (from the datasheet) and read the output of the buffer using the Arduino's ADC, or an external ADC if you want higher resolution.

Don't get me wrong I applaud AlexShu's solution as he did some very fine work of decoding the output of the LCD driving chip I am just thinking about starting at the other end, the input side of the ICL7106CM44.

wade

ph meter using microcontroller pic16F877A ????

Hi guys, this is great job and great thanks from me :slight_smile:
Now I’m thinking how to reincarnate my dried and don’t working portable pH metr. The solution proposed by AlexShu is very elegant, but what about the reading of the output of the buffer using the Arduino's ADC as proposed by wwbrown, does this chip really have an analog output, which could be read by Arduino?
Thanks
Igor