Ultra Low Cost 3D Scanner




About: University student in Hong Kong, the only developer of IMUS Project. I love making something no one has thought of. If you like making things that seems not possible, send me a message to share your ideas wi...

Recently, I build myself a 3D scanner that works sort of ok, but due to its cheap cost, it was very slow and low quality. However, it is a fun project to do though.

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Pre-Version

This is a pre-version of the 3D Scanner. As you can see, it contain a mount for Ultrasound Sensor, a straw that make the sensor move up and down. I personally not recommend you to use this one because it require a fairly high skills to make those 3D printed parts. That means, if your 3d printer is not accurate enough, I highly recommend you to go with the 2nd version.

3D printed parts are as follow:

Baser : The rotating platform which object is placed on it for scanning (5V stepper required)

Roller ver 2: This can be ignored if your Ultrasound Sensor moving quite smoothly without vibration

Roller: This unit is connected to the 2nd 3D scanner which used to pull up the Ultrasound Sensor

Side Grapper: This also can be ignored if your Ultrasound Sensor moving smoothly without vibration

Slider: This is the back side of the Ultrasound Sensor Holder which is used to attach itself to the straw for up down movement

Top Pully: Place on the top of the structure for smooth movement

Ultrasound Sensor Holder: Holder for the ultrasound Sensor

Up goer: Used to hold the two paper plate on both side, this can be ignored if you use other harder materials.

As my 3D printer has failed to make the Ultrasound Sensor Move smoothly because of my printer's accuracy, I re-design the whole thing again and name it as V2. You can make V1 though if you have enough confident with your 3D printer's accuracy.

Step 2: Gathering Material

In the v2, things become much more simple.

Here are the material you need.

  • 5V Stepper Motor x2
  • Arduino nano x1
  • Ultrasound sensor x1

Here are the tool you need

  • 3D Printer
  • Hot Glue gun

Step 3: Wiring

The wiring is simple.

  1. Plug the 2 stepper motor into the arduino directly. It is NOT NECESSARY for a UNL2003 board for power supply.
  2. For the stepper under the rotation platform, plug it into pin D2 to D6, where D2 is vcc
  3. For the stepper on top of the tower, plug it into pin D8 to D12, where D8 is vcc
  4. For the Ultra Sound Sensor, plug the vcc to A0, GND to A3, echo to A2 and trig to A1

Step 4: 3D Printed Parts (Main)

3D Printed parts is much more complicated than the one before. Hence, I split it into two parts.


You need not to use any screws, just hot glue them together.

Step 5: 3D Printed Parts (Optional)

These are OPTIONAL 3D printed parts for reinforcement or making it more stable etc.

I personally like the stepper Wheel 2 instead of the Stepper wheel in the Main Page. There is 2 hole on the stepper wheel 2 for you to tie your string on it. But Stepper Wheel (1) works just fine.

Step 6: Connect the String From the Stepper Wheel to the Ultrasound Sensor Unit

Install all stepper into their suitable place as picture above,

Then, Install the ultrasound sensor and straws to make a rail for its up down movement.

Next, position the center of the Scanning Disk at a distance of 5.5 cm in front of the tip of Ultrasound Sensor.

Step 7: Arduino Code

I assumed that you know how to write program into arduino nano, and here is the code for the scanner to work.

And yes, I modified it from an example, but it works, right?

You might need slightly modify if your setup is different from mine.

P.S Autodesk Inventor generated stl files always got scaling problem. I need to scale it up to 10 times in order for it to work on my computer.

Step 8: Backstage Processing

In here, I use the VB.net to write the backstage processing program.

The scanning data was receive from serial in a format of

(d, r, h) where d is the distance measured, r is the steps that the scanning platform rotated and h is the height of the Ultrasound Sensor moved up in steps

To convert them back into x y z value, we need the following code

Dim data() As String
Dim tempspliter() As String

Dim x As Double

Dim y As Double

Dim z As Double

Dim r As Double 'radius

Dim p As Double 'angle from center

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

On Error Resume Next

data = TextBox1.Text.Split(vbNewLine)

Dim rawdata As String

For Each rawdata In data

tempspliter = rawdata.Split(" ")

'Put the right value into the right place

x = tempspliter(0)

y = tempspliter(1)

z = tempspliter(2)

'Data Analysis and sorting

z = z / 22 'Convert z from steps to cm

r = 65 - x 'Radius from center of rotating platform to object edge

p = y / 2048 * 360 ' Convert angle from step to degree

x = r * Math.Cos(p)

y = r * Math.Sin(p)

TextBox2.AppendText(x & " " & y & " " & z & vbNewLine)


End Sub

Step 9: Copy and Paste

Copy the converted coordinate from textbox2 to a new file with a file extension as "asc"

This is a point cloud format that allow MESHLAB to read

Lastly, Open the file with MESHLAB and you will see your scanned data presented in a form of 3D coordinates.

Step 10: You Are Now Finished!

Now, start your Serial and connect your arduino to an USB port

Copy all the data returned from serial to VB.net application.

Press convert , copy and paste the converted data to a new asc format file,

then, you have successfully scanned an object!

Step 11: Question?

If you have any question, feel free to post it here or comment below.


This instructable was created in IMUS LAB which is a cooler name for my bedroom workshop.

3D Printing Contest 2016

Participated in the
3D Printing Contest 2016



    • Indoor Lighting Contest

      Indoor Lighting Contest
    • Metal Contest

      Metal Contest
    • Make It Fly Challenge

      Make It Fly Challenge

    16 Discussions


    7 months ago

    Merhaba ! Paylaştığınız bilgiler için çok teşekkür ederim. Seri porttan elde ettiğimiz verileri taradıktan sonra farklı bir yolla 3B verisine dönüştürebilir miyiz? Teşekkürler


    1 year ago

    Wow thats interesting! But how to convert points that you have imported into Mesh Lab to stl?


    2 years ago

    hi , can i ask for your assistance for the query on how your 3 values made up the 3d object? thanks:)


    3 years ago

    David laser scanner software, a $5 laser level and a cheap Web cam will get you here cheaper, faster and with less complications.

    1 reply

    Reply 3 years ago

    true, but this scanner can scan glossy items without a problem


    3 years ago

    Astonishing! I can scan myself and print a 1:1 肥宅 model of myself later! Great work!


    3 years ago

    This is awesome! Definitely making one of these soon.


    3 years ago

    looks great! do you have any scanned samples?

    1 reply

    Reply 3 years ago

    Here are the test scan files. including the RAW file (which the rotating platform was scanned) and Modified Version (Where the platform has been removed)



    3 years ago

    What about trying to use a cheap digital laser distance meter instead of the ultra sonic sensor. For 30$ you could find one with a uart serial output port to connect it to your arduino and process data with exactly same way. You should get a better precision.

    1 reply

    Reply 3 years ago

    Thanks bro, that is a good idea, I will have a try on that soon :)


    3 years ago

    Amazing! One of the best instructables ever!


    3 years ago

    Great project!.. You are a very resourceful and capable person to make this with what you had..


    3 years ago

    Which they havn't updated in ages, and does not work with the Nexus 5X or 6P, since they're too lazy to update the api to latest aosp. I know, because I tried it yesterday.


    3 years ago

    That is a 3d scanning app not a scanner. Though, you need a smart phone to do so.