Easily transfer measurements from Clockwise Tools calipers to your computer for applications like measurement logging, CAD modeling, or manufacturing workflows.
This project is a reverse-engineered version of the Clockwise Tools DTCR-02 RS232 Data Cable for Clockwise tools DCLR-XX05 calipers. And given the similarity to liba2k's VINCA Reader it seems likely that this Data Interface will work with VINCA series calipers as well.
![]() |
|---|
| Data Interface connected to a iPhone running Excel. |
This project improves on the DTCR-02 Data Cable with enhanced features and flexibility:
- Emulates a generic USB keyboard, compatible with Linux, Windows, macOS, iOS1, Android1, and really anything that supports USB keyboards.
- Captures and transfers the caliper measurement to any program, such as Excel or CAD software.
- Multiple ways to trigger measurement transfer:
- Built-in push button.
- External remote push button or foot pedal (via a 2-pin JST connector).
- Custom USB cable with a button near the calipers (see schematics for details).
- DIP switch configurable options:
CTRL + Ato overwrite previous measurements.- Append units (mm/in) to measurements (e.g., 1.23 mm).
- Add newline, tab, comma, or space after measurements.
- Enable a buzzer to provide audible feedback when a measurement is sent.
- Enable the trigger input on the USB ports VBUS pin (see schematics for details).
- Open source allowing full customizability for advanced use cases.
![]() |
![]() |
|---|
Most Arduino's should be able to read the data stream from the calipers, as the clock rate is relatively slow.
However, in order to emulate a USB keyboard, the Arduino must support native USB communication (Micro, Pro Micro, Leonardo, etc.), or you must use something like HoodLoader2 (See the Arduino HID Project for compatibility).
As part of the KiCad schematic, there is an example through-hole layout for a double-sided perfboard, as seen in the images above.
KiCad does not support making proper perfboard layouts, so the board is laid out as a PCB, but with components positioned on a 2.54 mm grid. If you intend fabricate an actual PCB, then you probably should not base it off of this.
3D models are also included for the case and the custom USB cable. The case was designed to fit these 30x70 mm perfboards from Amazon, using the board layout provided in the schematic.
The USB cable was designed to fit a 6x6 mm tactile push-button and a power only Micro-USB connector that I cut open to use the data pins.
In both cases, you will likely have to make some modification to the 3D models to suit your own components.
![]() |
|---|
| Custom designed USB cable end with integrated trigger button |
Clockwise Tools describes the communication as "RS232," but it uses synchronous serial communication over the USB D+ and D- pins. This is effectively equivalent to SPI.
- Clock signal: USB D- pin, ~0.4 ms per cycle, SPI Mode 3 equivalent.
- Data signal: USB D+ pin, 24-bit (3 x 8-bit) packets, transmitted every ~150 ms.
- +1.5 V: USB VBUS pin, constant 1.5 V supply.
- All pins operate at 1.5 V.
- Clock and data are inverted due to the transistors used for level shifting. So SPI Mode 1 is used in software, and the serial data is inverted.
- Data is transmitted regardless of if the calipers are turned on or not.
Warning
The calipers exhibit weird behavior when too much current is drawn over the USB port. This can cause measurements to fluctuate significantly, or the screen to dim. Anything connected to the calipers USB port must not draw over ~0.3 mA of current from all of its pins combined. This means that the parallel resistance between VBUS, D+, and D- to GND of the USB connector must be at least ~5 kΩ, but preferably well above that.
As far as I can tell, there is no way to communicate from the host device to the calipers, as they are constantly transmitting on D+ and D-, and due to the above, pulling VBUS low causes the calipers to lose power.
- First 4 bits are flags:
- Unit: Millimeters if 0, Inches if 1.
- (Unknown use)
- (Unknown use)
- Sign: Positive if 0, Negative if 1.
- Last 20 bits are fixed point measurement data:
- In either hundredths of a millimeter, or
- 1/2 thousandths of an inch.
The full details are laid out in this article: Harbor Freight Caliper Data Format.
The calipers will send whatever unit is currently selected on the display. Note that the fraction mode is sent exactly the same as inches. However, it sends updates less often in fractions mode, presumably since it has to do additional processing for the fractional conversion.
The full implementation of decoding and converting the 24-bit packets can be seen in ClockwiseCaliper.cpp.
I designed the schematics and built the device using parts that I had lying around. Mostly used parts taken from laser printers, coffee makers, and power supplies. So, given access to the right parts, there are some improvements that can be made to the design.
-
The three transistors used to do the voltage level shifting (Q1, Q2, and Q3 in the schematic) should be replaced by MOSFETs. The resistors for those transistors should be changed to around 1 kΩ. And pull-down resistors for the MOSFETs should be added, with values around 100 kΩ. This is because of the maximum current requirement as outlined above.
-
The calipers can not source over 0.3 mA of current from all of its pins, however, I have not tested how much current (if any) it can sink. This may be the preferred method for connecting if it works.
-
The program could technically use the hardware SPI interface of the Arduino. However, without proper timing of the slave select signal, it can cause the data to get out of sync on the first byte. This could be solved by controlling the SPI slave select input using another output pin. Then activating it on the initial clock pulse, and deactivating it on the last clock pulse. However, ensure that the slave select pin is accessible, as Arduino Pro Micro's use that pin for an onboard LED.
iOS devices will complain if the USB device reports that it draws more than 100 mA over the USB port. By default, most Arduino's report their bMaxPower USB configuration descriptor to be 500 mA.
To change the bMaxPower descriptor you have to change the line #define USB_CONFIG_POWER (500) to be 100 or less in USBCore.h of the Arduino core files.
Note that for iDevices with a lightning port, a Lightning to USB Camera Adapter (the one with only a USB port) will allow connecting the device, so long as it reports a lower power consumption.
Instead, I have heard that the Lightning to USB 3 Camera Adapter (the one with both a USB port and a lightning port) MAY allow devices that report more than 100 mA to work, so long as a charging cable is plugged in.
I have not tested any Android devices with the Data Interface, but I would assume that with the right adapter, and potentially the iOS bMaxPower tweak above that it would work.



