Go Down

Topic: Multimeter SD data logger (Read 5477 times) previous topic - next topic


Any interest in a multimeter to SD data logging program?

I have been playing with a cheap, $30, multimeter with an RS232 interface.  It even includes a k type thermocouple.



The included PC software did not function with my Win7 machine so I decided to try building an Arduino SD logger.

I found the meter's serial protocol http://www.multimeterwarehouse.com/TP4000ZC/TP4000ZC_serial_protocol.pdf.

I discovered that the RS232 cable is just two wires connected to an opto-isolator.  I built a simple cable for the Arduino using a 10k resistor and a 3.5mm stereo plug.

I am able to read the meter's serial data using the Software Serial library and decode the data using the above specification for the meter chip.

Here are some sample records from a debug session.


24 -006.4 m V
35 01.17 n F
66 032.8   C
72 -001.3 u A
157 120.9   V AC
211 40.84   Hz
364 354.6 k Ohms
366 1.460 M Ohms

The first number is the time in seconds, the second number is the value on the meter's display.

The third column is the multiplier (n = 1e-9, u = 1e-6, m = 1e-3, blank = 1, k = 1e3, M = 1e6).

The fourth column is the unit (F = farad, C = degrees Celsius, A = amps, V = volts, Hz, or Ohms).

The fifth column contains AC or is blank.

I plan to write CSV files and write the multiplier as a number.

Several other meters use this chip.


I can hardly believe what I'm reading here......

I have two datalogging multimeters. The reason I have two is that the first one I bought has crappy software. It turns out that the second has crappy software too. They were bought to replace a dongle that actually has good software but is unreliable. I was only wondering under the shower a couple of nights ago, that I might be able to put this stuff to better use by way of an Arduino.

It looks like this is possible.

Karma to you.

The meter to I have to hand is a UT61C. It cost me a lot more than $30 but looks much the same as yours. It has two opto eyes under a sliding cover.

Are you essentially just using a 10k in series to connect the meter to a digital pin? I have just pulled the D9 plug apart. There is a lot of wiring there but it doesn't mean it is all used at the other end.


The UT61C sends 14 byte packets and several websites have the protocol.  The protocol is in the file UT61BCD.LOG on this site.


Here is the meter chip datasheet http://www.ic-fortune.com/upload/Download/FS9922-DMM4-DS-11_EN.pdf.

Making an interface cable is a bit tricky.  These meters have opto-isolators and use tricks to generate RS232 with power from control lines driven by the PC serial interface.

I was able to use 5V and a resistor to generate TTL serial from the output of the opto-isolator.

I don't know how the UT61C does it's serial.


I have posted a sketch for logging data from a TekPower TP4000ZC or Digitek DT4000ZC multimeter as TP4000ZC20130427.zip code.google.com/p/beta-lib/downloads/list.

Instructions for interfacing the meter to an Arduino are included.  The interface consists of a standard audio cable with 3.5 mm plugs, a 3.5 mm socket, and a 10k resistor.

Here is the readme file:

The sketch TP4000ZC.ino is a data logger for TekPower TP4000ZC and
Digitek DT4000ZC multimeters.

This sketch requires the SdFat library located here:


An Arduino interface for the meter is described in interface.txt.

logger.jpg shows my debug setup.

The meter protocol is defined in TP4000ZC_serial_protocol.pdf.

Links to other meter info are in meter_info_url.txt.

The sketch was debugged with an Adafruit Data Logging Shield but
any SD module/shield should work.

Data is logged to a file named DMMLOGnn.CSV where nn is a number 00-99.

The csv log file has three or four columns depending on the value of

For MULTIPLIER_FORMAT = 1 the format is:
<time in seconds from boot>,<value with multiplier>,<units and other info>

For MULTIPLIER_FORMAT = 2 the format is:
<time in seconds from boot>,<value>,<multiplier number>,<units and other info>

For MULTIPLIER_FORMAT = 3 the format is:
<time in seconds from boot>,<value>,<multiplier character>,<units and other info>
possible multiplier characters are

'n' - nano
'u' - micro
'm' - milli
' ' - multiplier of one
'k' - kilo
'M' - Mega

The following are configuration parameters:

const uint8_t DMM_RX_PIN = A0;   // DMM connected to analog pin 0.
const uint8_t DMM_TX_PIN = A1;   // Analog pin 1, not used.
const uint8_t SD_CS_PIN = SS;    // SD chip select pin.

// Options for multiplier format are 1, 2, 3

// If ECHO_TO_SERIAL is nonzero, print record to Serial.
#define ECHO_TO_SERIAL 1


I do appreciate that this is an old post. However, I wanted tie this thread to question I raised recently.

I was unable to replicate fat16lib attempt, I quote: "I discovered that the RS232 cable is just two wires connected to an opto-isolator.  I built a simple cable for the Arduino using a 10k resistor and a 3.5mm stereo plug."

My new thread: http://forum.arduino.cc/index.php?topic=395457.0

Go Up