book collections email follower instructable user

Hi everyone. I had always wanted a device that would help me in leveling my 3D printer bed and some other device that would help me get an approximate length of a curved surface so that I could easily cut out the right length of sticker to apply on that surface and thus preventing wastage. So I thought why not combine both ideas and make a single gadget that can do both. At last, I ended up building a device that can not only measure curved lines and surface levelness but can also measure straight line distances and angle of a line. So basically this gadget works as an all in one digital level+ruler+protractor+roll-measure. The device is tiny enough to fit inside a pocket and its batteries can be easily recharged using a phone charger.

This device uses an accelerometer and gyroscope sensor to accurately measure surface levelness and angle, a sharp IR sensor to measure the linear length in a non-contact way and an encoder with a wheel which can be rolled over a curved surface or a curved line to get its length.

Navigation through the device modes and features is done using 3 touch buttons marked as M (mode), U (unit) and 0 (zero)

M - To choose between different types of measurements

U - To choose between the units mm, cm, inches, and meter

0 - To reset the measured values to 0 after measuring a distance or angle.

The reason for using touch buttons is to gently navigate through the modes and units without disturbing the position of the device while measuring.

The device has a neodymium magnet embedded into its base so that it won't slip or slide off the metal surface being measured.

The casing is designed to make the device as compact as possible and also to be 3D printed easily.



The components were chosen keeping in mind that this device is built to fit inside a pocket. So the smallest of the display, battery, and sensors which I could find were used.

1. 3d printed case

2. Sharp GP2Y0A41SK0F IR distance sensor X 1 (Aliexpress)

3. MPU6050 accelerometer/gyroscope module X 1 (Aliexpress)

4. Boost+charging module X 1 (Aliexpress)

5. Grove Mouse encoder X 1 (Aliexpress)

6. 128 X 32 OLED display X 1 (Aliexpress)

7. Arduino pro mini ATMEGA328 5V / 16MHz X 1 (Aliexpress)

8. 12 mm buzzer X 1 (Aliexpress)

9. 3.7v, 1000mah lipo battery X 1 (Aliexpress)

10. TTP223 touch button module X 3 (Aliexpress)

11. 20x10x2mm neodymium magnet X 1 (Aliexpress)

12. CP2102 USB to UART TTL module X 1 (Aliexpress)

13. Enamelled copper wire (Aliexpress)

14. 10K resistors X 2

15. 19(length)X2(dia) mm steel axle X 1

16. 3mm led X 1

17. Any vinyl sticker roll (Aliexpress)

18. Micro USB cable


MPU6050 is a mems device which consists of a 3 axis accelerometer and a 3 axis gyroscope in it. This helps us to measure acceleration, velocity, orientation, and displacement. This is an I2C based device that runs on 3.3 to 5v.In this project, MPU6050 is used to measure if a surface is level or not and also to measure the angle of a line.


This is a mechanical incremental rotary encoder with feedback data of rotary direction and rotary speed. I used this encoder because its the smallest encoder I could find and the programming part of it was also easy. This encoder has 24 steps per rotation. Using this we can calculate the distance moved by the wheel on the encoder if the wheel diameter is known. Calculations on how to do this are discussed in the later steps of this instructable. This project uses the encoder to measure curved lines distances.


This is an analog sensor which gives a variable voltage as output based on the distance of the object from the sensor. Unlike other IR modules, the color of the object being detected will not affect the output of the sensor. There are many versions of sharp sensors but the one we are using has a range of 4 - 30 cm. The sensor operates a voltage between 4.5 to 5.5 volts and draws just 12 mA of current. The red(+) and black(-) wires are the power wires and the 3rd wire (either white or yellow) is the analog output wire. The sensor is used in this project to measure linear distances without contact.

Really one of the best and practical projects done on instructables. Great and detailed job.
patrick panikulam (author)  FadiJ7 hours ago
Thankyou :)

!!!!!!! WOW !!!!!!!

This is AMAZING - Well Done !!!!!!!

totally blown away man !

Secondly, a tip that you could use Liquid-Electrical Tape for the roller for providing you the grip or 'PlastiDip' if youre able to acquire it, but i think liquid-electrical-tape is easier to obtain depending on which country youre in, PlastiDip i think is a UK product but has worldwide shipping and is a very VERY Good Product with a LONG Lasting shelf life, usually comes in metal tins.

Truly Amazing amalgamation of tech and i just LOVE those Proximity Buttons, a very clever use for them - You are AWESOME DUDE !!!!

Keep it up and thank you so very much for making your project open-source so that us mere mortals may also try to replicate your awesome work or day to day useful artwork-tool !!

- Brilliant !!!
kindest regards :)

Thankyou soo much :) .
GiancarloV816 days ago
Adding tachometer functions to this would only require software changes.
amazing project bro. but which 3d printer r u using here?
Thanks Bro , I am using a customised TEVO Tarantula 3D printer
Wow nice!
It's beautiful. The "wood case" look doesn't hurt, either. Bravo.
patrick panikulam (author)  erana_reborn19 days ago
Thanks for the tip, I was actually planning to coat the curved surface of the wheel with a thin layer of rubber-based adhesive so that when it dries it gives grip. This also makes sure that the diameter of the wheel doesn't change much.
patrick panikulam (author)  erana_reborn20 days ago
Thankyou :)
frarugi8720 days ago
Great work... I like it
Just a tip; the wheel seems made of plastic. This sometimes slip. You can use a small rubber band around it to increase the grip (if the case has enough clearance)
indoorgeek22 days ago
Great idea, perfectly executed!
patrick panikulam (author)  indoorgeek22 days ago
Thankyou :)
AlphaOmega122 days ago
Interesting project, Well done.
Did you think to keep your calibration values in flash? Simply read them in during boot. Your calibration option can auto save them without needing to reprogram.
This function could be extended to have a secondary offset used for repeating angles, showing zero when correct or else the difference from the required angle.
JeremySCook24 days ago
Nice device. I hope the letters you cut out on the laser weren't made with vinyl. Supposedly that can release poisonous gas.
patrick panikulam (author)  JeremySCook24 days ago
Ohh, I didn't know that. Thankyou for this important information .I guess I'll use scissors next time :)
NP. You could use a CNC knife setup too.
AnandM5423 days ago
Wow..... Lots of informations ... Great instructable..
patrick panikulam (author)  AnandM5423 days ago
Thankyou :)
TraceyP3123 days ago
very nice project. good work.
patrick panikulam (author)  TraceyP3123 days ago
Thankyou :) :) glad you liked it
Sean079523 days ago
What a great little device! Got my Vote!!!
patrick panikulam (author)  Sean079523 days ago
Thankyou so much:)
doncore24 days ago
Now add a temperature (BME) and a LED-Light to it :)

Thank you very much. I'll build this (sooner or later...) Got my vote.
patrick panikulam (author)  doncore24 days ago
I am working on version 2 with more features like what you suggested .

Really looking forward to see the one you are going to build :)
raddevus24 days ago
This is a really great project. Very interesting and details the creation of a very handy tool. Well written and nicely supported with your additional comments. Thanks for writing this great instructable.
patrick panikulam (author)  raddevus24 days ago
Thankyou so much for your words
SpikeSmall24 days ago
This is the best project I've ever seen on instructables
patrick panikulam (author)  SpikeSmall24 days ago
Thankyou soo much :)
Hi Patrick, you did an amazing job with this unique device. You truly engineered, coded, debugged, tested, documented and presented a marketable product. I will be following your feed to see all your creations come to life. I also voted for you...good luck; I think you have a winner! I would like to see the laser engraver details if possible.
Thanks, I compiled the sketch successfully - Now I'll try the hardware.
patrick panikulam (author)  RenzoG124 days ago
Great to hear that:)
patrick panikulam (author)  Build_it_Bob25 days ago
Thankyou so much .and thankyou for the vote . I will be posting an instructable on the laser engraver as soon as possible .
In short, it's a completely custom designed and 3d printed laser engraver with a work area of 160x190 mm . It has a magnetic modular laser which can be easily detached and replaced with other tool modules like a pen or marker if you want to draw a design on paper . The connection between the laser engraver and computer is made wireless using Bluetooth . The most interesting thing about my engraver is that it can run on a 5 volts 2 amp power supply (ie. a phone charger ) even when the laser is at full power .
w00dman6224 days ago
Great project but never could find the full circuit diagram. or a link to it.
patrick panikulam (author)  w00dman6224 days ago
The circuit full circuit diagram is given in step 5 : CIRCUIT DIAGRAMS (second picture)
And all the pin connection are written as well

Thankyou for asking :)
RenzoG124 days ago
The project is very fine, but the instruction ;int distancecm=SharpIR.distance(); gives this error;<'class SharpIR' has no member named 'distance'>

What to do?
Thanks Renzo
patrick panikulam (author)  RenzoG124 days ago
Thankyou for asking and sorry about the problem you are facing . It seems like the SharpIR Library isn't functioning properly in your IDE.Can you pleas reinstall this library and try again , do let me know the result so that I can try helping you further.
I put SharpIR-master Version : 1.0 : Guillaume Rico in a my directory <Multi_tester>, the same of your final-code.
But also the file example SharpSensorCm has the same error.
patrick panikulam (author)  RenzoG124 days ago
There is an alternative way to calculate the distance of the sharp it module without using libraries. If you saw my code carefully you must have noticed that I used both the formula as well as a library . I did this so that people seeing the code can understand what's going on inside the library .

So to fix your problem use:

int distancecm=13*pow(volts,-1);