Digital Calipers

👉If you find any of this information useful, please be sure to subscribe to the Making Stuff channel. It doesn't cost you anything but a click! Click Here.

Update 05/17/2016

It has been confirmed today that the 3D printed connector is too big for some Harbor Freight and Pittsburgh calipers. The port on these calipers is smaller and does not have a grove for the plug to slide into.

An extra line of code was posted in the source on Github. The fix has already been applied. If you downloaded code before the fix, there is an invalid line that trys to set the digital pin called triggerPin to INPUT. Just remove this line or download new version from

The video failed to mention the pin outs. If you are viewing the calipers from the front, the pin outs are from left to right GND, DAT, CLK, VCC. The VCC pin is not used. If you notice in the video only 3 pins are on the connector. These pins are GND, DAT, CLK. The VCC pin is useless for this application, because the calipers are 1.5V and the Arduino is going to be 3.3V or 5V.

Fun With Digital Calipers Part 1

For this project, a 3D printed plug is used to make a cable to obtain the measurements from a set of digital calipers. The leads cut from through hole solder parts was used for the conductive parts of the cable plug. The 3D print files can be obtained from here.

Fun With Digital Calipers Part 2

The logic level from the calipers is 1.5v. This had to be converted to a higher voltage so that the Arduino will be able to tell when a pin is HIGH or LOW. This is a simple circuit that uses 2 NPN transistors and 4 10K Ohm resistors.

The source code uses interrupts instead of blocking while loops to read the pulses from the digital calipers. This is a faster way to read the values but it does have a caveat. The Arduino will only execute one Interrupt Service Routine (ISR) at a time. Anything that also uses interrupts may interfere with reading the calipers, such as extensive use of Serial.print. Just keep that in mind if you plan on using the code for a bigger project. To minimize the use of Serial.print in the example code, the value is only output to the serial port if it has changed. This was just for ease of reading the values. This routine should work fine if serial.print is called on each loop.

The source code can be found on the Making Stuff Github.