Laser distance meter hack

 ➡ Before you connect any hardware to the LCD bus of the laser distance meter make sure it runs at 3V signal levels! The Arduino Mini by default is not! Solutions are either level converters or, what I did, simply exchange the linear voltage regulator IC1 on the Arduino Mini board to an 3V version.

Running the Arduino Mini at 3V brings also the advantage that you can power the device main board directly from the Arduino Mini. Doing so requires an additional capacitor of at least 1000uF/6.3V connected to the power input (where the battery wires were connected) to buffer any power surge when the device and laser will be switched on.

Next I coded a quick and dirty sketch for a Arduino Mini board. It uses the circular buffer library from https://github.com/rlogiacco/CircularBuffer.

This code reads two frames then sends them via serial interface. It ignores the very first short pulse leading each data byte. The result looks like this:

10 00 C0 00 00 0A 00 02 00 00 05 58 00 00 00 00 00 10 01 C0 00 00 06 00 02 00 00 03 F0 00 00 00 00 00 10 02 C0 00 00 02 00 02 C0 00 C5 70 00 00 40 00 00 10 03 C0 00 00 00 00 42 00 00 07 58 60 00 06 00 00 
10 00 C0 00 00 0A 00 02 00 00 05 58 00 00 00 00 00 10 01 C0 00 00 06 00 02 00 00 03 F0 00 00 00 00 00 10 02 C0 00 00 02 00 06 C0 00 C5 70 00 00 40 00 00 10 03 C0 00 00 00 00 42 00 00 07 50 60 00 06 00 00 
10 00 C0 00 00 0A 00 02 00 00 05 58 00 00 00 00 00 10 01 C0 00 00 06 00 02 00 00 03 F0 00 00 00 00 00 10 02 C0 00 00 02 00 02 C0 00 C5 70 00 00 40 00 00 10 03 C0 00 00 00 00 42 00 00 07 58 60 00 06 00 00

Each 68 bytes frame contains 4 sub-frames of 17 bytes starting with:

10 00 C0
10 01 C0
10 02 C0
10 03 C0

These are command bytes (first bit = 0) while the remaining 14 bytes are LCD data (first bit = 1). This bus is driving the LCD.

2F 34 B1 1E B2 0F 14 A0 94 68 3D 88 88 88 88 60 E3 
10 00 C0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 10 01 C0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 10 02 C0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 10 03 C0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 
10 00 C0 FF FF FF DF FF FF FF FF FF FF FF FF FF FF 10 01 C0 FF FF FF F7 FF FF FF FF FF FF FF FF FF FF 10 02 C0 FF FF FF FB FF FF FF FF FF FF FF FF FF FF 10 03 C0 FF FF FF F3 FF FF FF FF FF FF FF FF FF FF

First line is configuration data for the LCD driver while the two lines with all byte 0xFF are showing all the LCD segments and symbols that we can see for a short moment on the power on screen.

The following sub-frames are showing all symbols of the lowest LCD line, where the actual measured distance is shown including its unit.

10 00 C0 00 00 00 00 00 00 00 FF FF 00 00 00 00 00
10 01 C0 00 00 00 00 00 00 00 FF FF 00 00 00 00 00
10 02 C0 00 00 00 00 00 00 00 FF FF 00 00 00 00 00
10 03 C0 00 00 00 00 00 00 00 FF FF 00 00 00 00 00

So we can break down the distance look-up process into 2 bytes per sub-frame, 8 bytes in total or 64 bit. The look-up table for each number per digit, sign and unit is available for download below.

Lookup Table LCD Last Line (67.2 KB)

This Arduino code will simply read out the distance and sends via serial interface.

16 thoughts on “Laser distance meter hack

  1. It’s so lucky when my Laser Rangefinder was almost like yours (mine was SW-M40). Due to the different, can you help me point out where are the 3 SPI pins in my board? Thank you very much!
    This is the picture of the board
    https://photos.google.com/share/AF1QipOz-SHu2ons81yMIHJ0usprKw2ipbXHM48_K5_R-fGEPUnDD4OujcCK2X6KtnvRvw/photo/AF1QipPVkwGT-talzFGjLetJ5Vk1fEg8AA3hBGyb_Y5f?key=OUVYaGwxZzBJeENzWmJUaXdWanZDeWxlandCZTRR
    Again, thank you very much! So lucky when I got the laser module same as yours.

    • Looks similar. Can you provide a picture from back side of this board?
      In case you have a oscilloscope probe each pin on the LCD connector to find the SPI signals.

      • Here is the picture of back side of the board:
        https://photos.app.goo.gl/ZVhLUGbIYl3oGnKG2
        I lived in Viet Nam, where GDP per person just about 2100 USD/year so an oscilloscope for weekend hobby was expensive.
        I’m also trying to connect the board via TX-RX connector but there was no luck yet :).
        Thank you!

    • Your first picture, the LCD connector pins counting left to right would be:
      5 = Clock CLK
      6 = Data DTA
      8 = Chip Select CS

      I hope the LCD pinout is the same as mine. If it doesn’t work for you than very probably the pinout is different, even when it looks equal.

      • Thank you,
        I will test on tomorrow but I think 80% it will work.
        I will inform you the result.

        • Waiting for your feedback. Make sure your Arduino board operates at 3.3V, this is what the LCD signals require.

        • I don’t wonder. There are obviously so many board variants existing of these laser distance meters that very probably the LCD type varies also. All my working units have an LCD that reads DFG0071 and a date on the back side.

          • ok, I’ll study my circuit better.
            Another quick question: you say “Before you connect any hardware to the LCD bus of the laser distance meter make sure it runs at 3V signal levels!” this is true, but a regular 5 V arduino can read properly a 3V digital signal, right? You fry the telemeter only if you send 5V signal to it.
            Thank you

          • 5V Arduino board might be 3V compatible for reading. But why taking a risk?

  2. hi good job! I have question…… How do you have connected LCD pinout to the arduino? they are so small
    Thank you

    • Using very thin wire from an old coil. Yes, soldering that stuff requires some skills. 😉

      • I have the same device of Khoi Nguyen Phan. I’ m trying to connect it to my arduino uno. Can you post some pictures of those precise soldering?
        Thank you again!

  3. Hi! After reading your article I bought the same range finder you own (on Amazon). I disassembled it, I did all three soldering (data, cs, clock) but it doesn’t print anything similar to your to my serial port. I noticed a slight different lcd pinout as you can see in my photos. I’m using a 5V (it only read signals) arduino with GND connected to – of batteries. If necessary I also have this 3V board http://wiki.stm32duino.com/index.php?title=File:Bluepillpinout.gif
    This are the pictures https://imgur.com/a/LOJMDlt
    What’s wrong? Please help me, I need to read measure remotely
    Thanks

    • You already noticed a different LCD pinout. So maybe the LCD is different, so is the internal controller and hence the LCD protocol. My code works with LCD’s marked DFG0071 on the backside. Anything else is probably different and not believed to work. This project and code is a proof of concept. To make it work with other devices requires additional efforts in reverse engineering.

Leave a Reply

Your email address will not be published. Required fields are marked *

Comments will be moderated! Spam deleted immediately!
Before you submit form:
Human test by Not Captcha