This instructable will guide you to build a 3D scanner for less than $30, or even $12 if you already have a USB webcam.

Seeing the price tag and limitations of commercial scanners I decided to challenge myself to build my own. It had to be cheaper and easy for anybody to build one using a 3D printer.


The "Sardauscan" is a laser scanner, comparable to other professional laser scanners but for less than 20-30 times the price, and it has twice the number of lasers.

My design principles were:

· Keep it simple

· Keep it low cost

· Make it evolutive

· Provide a complete solution

The scanner is completely open source and open hardware:

· The "Sardauscan" software is written in C# - the full source code is available.

· You can write plugins for your own hardware or for your tasks.

The software allows you to scan, smooth, build meshes and export to various formats.

How does it work?

The principle of a 3D laser scanner is simple.

· A picture of the object is taken without any lasers firing

· One laser is switched on and another picture is taken

· Computing the difference between the two images, a laser trace (profile of the object) is obtained

· By knowing the positions of the camera and laser you can derive the 3D coordinates of all the points on the profile

· You do the same for all the lasers, turn the table and repeat the process until the table has made a full revolution

And there you go, you have a complete point cloud representing your object.

Step 1: What do you need ?

Here is the list of all the parts you need to build the scanner:

· A bunch of M3 (16 and 20 mm)

· A bunch of M4 (12 and 20 mm)

· 1x Arduino nano (Chinese copy, $4) http://www.befr.ebay.be/itm/NEW-Nano-V3-0-ATmega32...

· 1x Chinese Stepper Motor (28BYJ-48) and controller (ULN2003) (5$) http://www.befr.ebay.be/itm/Uln2003-Stepper-Motor...

· 1-4x Line laser 5v ($2.5$ piece) http://www.befr.ebay.be/itm/251688838898?ssPageNa...

· 1x Hercule HD Twist ($15) http://www.befr.ebay.be/itm/Hercules-HD-Twist-5-0...

· 20x20 profile (can be printed : there are plenty of STLs on the net)

· optional 3x 4mm roller ($0.3 piece) (624 bearings

Total: from $26.5 (1 laser) to $35 (4 lasers)

About the 2020 lengths: this is not really important. The only constraint is to have the camera seeing the whole table.

For example, here are the lengths I used for my build:

· 2 x 140mm

· 1 x 120mm

· 1 x 250mm

What to print

All the STL files can be found on Thingiverse:


· 1 x arm_left.stl

· 1x box.stl

· 1x box_door.stl

· 1x box_arduino_clamp.stl

· 1x arm_right.stl

· 1x CORNER.stl

· 1x MOTOR_MOUNT.stl

· 1 to 4 x laser_holder.stl


· 1x Camera_HOLDER_UPPER_PART.stl

· 1x center_axe_MINIMAL.stl OR 1x table_AXLE.stl (OPTIONAL)

· 3x roller_baseV2.stl

· you can print 12x M4_tslot_nut.stl if you use a 20x20 profile and you don't have any


· The 2020 profiles are just here for ease of use. You can use whatever you have: wood, metal, …

· If you want to use another camera, you will need to adapt “Camera_HOLDER_UPPER_PART” to match it

· The bearing are optional. They are only necessary if you want to scan heavy objects or don't have a perfectly flat table

· The build is simple, just look at the pictures. You can't do it wrong

· Put the motor at the center, place the 3 profiles around and screw them. Place the corner, screw, put the arms, screw, …

· There is a hole for each screw, you can’t get it wrong.

· For the wiring, please refer to the diagram.


<p>Hope it will helps : A French student named Hugo Benoit-Jannin have made a calibration tutorial, i hope it will help.</p><p><a href="https://github.com/Sardau/Sardauscan/blob/master/Tutoriel.Sardauscan3d.pdf" rel="nofollow">https://github.com/Sardau/Sardauscan/blob/master/T...</a></p>
<p>hi starting this build</p><p>are bearing size ? </p><p>624ZZ: ID 4mm OD 13mm Width 5mm ?</p>
<p>i tried to calibrate anyhow on myself for over a month now but still my head wont understand different things and to be honest i have the &quot;schnauze voll&quot; </p><p>when i start the correction matrix what should sit on the table? </p><p>beforethat at first i turn the lasers to little thing in the middle with flat surface to camera. making the lasers match with vertical line in the middle. if i understand right should the correction matrix show me the shape of scanned thingi but my results are weird. all 4 lasers show different crap....</p>
OK, before I attempt to make this I have a few questions.<br>1) Does this kind of thing have enough accuracy to get exact angles for things like prototyping that everything has to fit?<br>2) The extra two lasers are for improved accuracy right?<br>3) Do you know if getting a better camera would improve shape accuracy, or is it purely for color or whatever?
<p>How hard would it be to scale up the project to capture point cloud data of the interiors of buildings?</p>
<p>Now gonna try to calibrate ....</p>
<p>Now gonna try to calibrate ....</p>
<p>greetings, from Papua New Guinea.</p><p>I made the scanner, got it working. However when I scan I don't get a visualisation of the object on the right-hand side of the display. It goes through scan etc.... I can save the STL file and load it in an other 3D imaging program. What am I missing. I am running Sarduascan on Window 7</p>
opengl i think
<p>Hi, Sardau, this is my scan, please show me how to adjust. Thanks</p>
first you z of the camera is incorect by at least 30mm ( the object is not on the table)<br><br>a reflective table is not a good idea, the stange form for under the object is probably the relect of the laser. (but if your camera z is correct, it will be clipped)
<p>I have changed Y , so object is on table. I try to change Z cm by cm over +/- 30cm but not get the good image. I feel it is good just for some first slices, the distant of slices to the center not equal. Is there any way to adjust Z exactly? Please show me what is and how to correct matrix. Thanks</p>
<p>oups, i was talking about the Y not the Z sorry.</p><p>i don't understand what you mean by &quot;show me what is and how to correct matrix.&quot;. see adjust in step 3</p><p>go to correction matrix, </p><p>place the calibration object on the center of the table.</p><p>click &quot;quick scan&quot;. (each laser specific scan is in a specific color.)</p><p>use the mouse to perfectly superpose all the scans (all the different color, must be the same).</p><p>FYI: one square is 10x10 mm</p>
<p>Hi Sardau, i have made a Sardau scan acylic version, i do not underatand matrix calibrate, cannot type angle ( it auto generate random value). Is there any calibrate instruction in english ( i found a French, cannot traslate). Thanks Sardau.</p>
nice build !.<br><br>the angle is not random he is only &quot;rounded&quot; to a close radian value (converted to radian, and from radian to degree, to match the xyz position).<br><br>Sorry there is no english calibration document.
<p>Hello, fist of all i want to say that i love the product, it took me about 6 days to make because of all the shipping and making parts. Everything about it is awesome to me being a 15 year old learner. This project has helped me boost my ability's to the next level of fabrication and engineering. But here comes the annoying part, i need a bit of help... I have scrolled through almost all of the comments and haven't found a definitive answer to my question; which is, all of my lasers during the calibration process are generally doing fine accept laser 1... This laser during the correction matrix falls to the bottom left of the screen and when i scan with only that one it makes a fairly large and flatter version of what i was trying to scan. I have triple checked the angle of the laser in physical calibration and have made sure that the laser is aligned to the center. Any ideas would be a great help. Thanks, Gregory Redlon</p><p>Matrix laser 1 laser 0</p>
It i very strange:<br><br>if you are sure your physical and your build dimentions are totaly correct.<br><br>go to the corection matrix, click &quot;clear all lasers&quot; an redo the corrections.<br><br>scale rottate and translate all the laser scan to match each other.<br><br>FYI: for the scale, a square is 10mm by 10mm
<p>Hello, So what you said earlier worked very well,thank you for that. sadly, I have a few more purtinate questions. One being, is there a good way to get rid of the knife edges, i have only tried using the two filters because of how long it takes to make a quality scan each time and then having to make a new one if you don't like that one. Also, going with the previous question, is there a way to apply the &quot;filters&quot; for lack of better grammar, to the object without having to scan the whole thing over again? this would make things go a lot faster. And lastly, the scanner image that is made resembles the scanned object mostly, witch is great, but there is one thing that i doesn't exactly make sense, witch is when i scan my object the thing that comes out on my computer is kind of stretched, similar to the way putty would in the sense that the outside compresses a little and the height (the measurement going up if i have my grammar mixed up) becomes extended. the preview of the camera shows that it is not due to my camera, my only thought is something is wrong in the build dimensions some how even though every thing else still works fine as is. Best regards, Gregory Redlon</p><p>Scanned object is a girl wearing a large dress with her hands folded in her lap and she is wearing a hat. In the pic she is looking left FYI. also i am not sure how to remove the fuzz in front of, and behind of her, when i make it into a mash it makes these jagad, sharp spikes.</p><p><a href="http://www.instructables.com/files/deriv/F3M/YU7C/IQ14YCT3/F3MYU7CIQ14YCT3.LARGE.jpg" rel="nofollow"></a></p>
<p> you can do a process &quot;scan&quot;+&quot;Save Sar&quot;.</p><p>to scan the raw data. then you clear the tasks</p><p>and then &quot;load sar&quot;+ whatever filter you want. this way you dont have to rescan.</p><p>if your objects are stretched : you can use the scale task or you can scale it via the correction matrix view(but laser by laser)</p>
Ok so how do you use the scale task, when I open it its x,1 y,1 z,1. And when you say, laser by laser, do you mean like enlarge the top view to make it bigger, because I need the total z or height dimension to be shorter.
<p>it you set x:2 for example, the resulting x will be 2 time larger. if you set y:0.5 y size will be half, etc...</p>
Ok thank you so much for the help, I really appreciate it. Love the scanner, it's such an awesome project. Gregory Redlon
<p>is there a way to make the degrees that the stepper motor changes to a smaller quantity to make a slower but more &quot;full&quot; scan so it wont have the large gaps and odd dips and dives? also i was wondering what settings you used with the kitty print because i can get nothing near as nice as that scan with the settings i am using. another thing how did you make the actual colors of the scan to come out instead of the basic Ruby, gold, emerald,etc... colors?</p>
<p>I don't remember exaclty. bu i think i've scan in 800x600 with a precision of 75 or 85. </p><p>angle filter of 3&deg; (i change that with the precision), then &quot;surface&quot; task, (but i don't remember the settings).</p><p>but the most important is that my scanner was correctly calibrated/configured.</p>
<p>select &quot;texture&quot; in the 3D viewer.</p>
it is the &quot;precision&quot; in the scan task settings ( litle gears icons on the task row)
<p>Has anyone made a troubleshooting guide for calibration/tuning?</p><p>Quite a long list of comments to go through.</p>
I am having an issue with the build dimensions. I guess I'm not understanding how to find those measurements like the angles of the 4 lasers, and X,Y,Z axis. I did rough measurements of the bed height and distance from center of bed to where the camera sits(LifeCam HD5001) but my test scans are all over the place. Any help would be greatly appreciated. I searched back quite a ways and didn't see anything that would help me.
<p>see the capture : in red this is the angle. but if you are more confortable with x y z position, you can set it directly.</p><p>pay attention at the angle sign. (the minus and plus, show you the sign)</p><p>note that 1mm is a huge value.</p>
<p>ok thanks, I think I got that part fixed. Now I'm having an issue with the laser picking up things in the background. Is there a way to limit where the laser light ends at the top of the model, or to tell the program to ignore anything above/beyond the scanner plate?</p>
<p>play in the tune page (and exposure of the camera) to remove noise in laser detection.</p><p>and you can set the table height and diameter in the config file ( button in the title bar)</p>
<p>I'm having some calibration issues with this. I have aligned the lasers, centered the camera, and yet when I scan, I get a pretty clear view of the table, the table support, and a massive random cloud where the calibration teardrop should be. Anyone point me to a forum for some more info?</p><p>If it helps, I've tried dropping to one single laser, only succeeded in turning the table support into a total screw up as well (from what the camera sees), I've made sure the laser is vertical and centered, and the camera is a 720p logitech. I've tried a couple tables, one glossy, the rest matte. The correciton step, once I do a quick scan, looks like a misformed star, and when I had four lasers operating, none of them were even similar. All were random with spikes and dips. I have no idea what I'm doing wrong, but it's driving me crazy.</p>
<br><br>First of all in the tune view, you mist get a clean line in the last view.<br>if you get one. it can be a problem of triangulations. this mean the compatiation are incorect, due to wrong position entered for camera or laser (buid dimention view).<br>havent you inverted the sign for the lasers ? (+xx&deg; instead of -xx&deg;)<br>
<p>Thank you so much for responding!</p><p>Double checked my dimensions, they're accurate to within a few millimeters. Tried inverting (going + instead of -), same issue. The only thing I'm curious about, does it matter that my camera sits about 20-25 mm higher than the lasers?</p>
<p>the height of your camera is not imporant, if the height is correct in the build page (btw 1 or 2 mm is a great deal for the precision !)</p><p>have you a clean red line in the &quot;tune page&quot; ? if not, the laser line is not well detected. and you can get huge error due to noise. (play with teh theshold principaly, or the camera exposure. these 2 give the best result)</p>
<p>Hello Sardau,</p><p>I build the Scanner and I can use the Serial Monitor to turn the Laser's on and off, I also can turn the table. </p><p>Now my Problem is, that the Programm &quot;Sardauscan&quot; isn't able to use my Arduino Uno. The Camera works but I can't add the Laser's and the Table.. Everytime I choose my Arduino Uno on COM 3 the &quot;ok&quot;-Button stay's gray. (as you can see in the screenshot). Clicking on the little blue Plug on the right side didn't change anything (I've been clicking that thing for hours..) </p><p>btw: the tutorial from Hugo Benoit haven't help.. </p><p>Hope you can help.. It is very important :S</p><p>Sorry if you don't get whats my problem is (probably caused of bad english ^^)</p><p>Greetings from Germany! :)</p>
<p>(the procedure at this moment is realy simple : i create a standart .net SerialPort, send &quot;Sardauscan?&quot; and wait for a &quot;yes&quot;. if i don't get it, the ok button stay grey)</p><p>the Sardauscan software doesn't allow to change the baudrate for now. have tou cange the baudrate in the firmware ?</p><p>ps: i got some problem with chineese nano clone, i must click severa time to actualy connect (maybee a com link initialisation problem, i dunno)</p>
<p>The funny part is, when i tiped &quot;sardauscan&quot; in th serial monitor it returned &quot;yes&quot;.</p><p>Now after trying some stuff (changing the baudrate, changing the COM-Port, etc.), it suddenly worked. I think the problem was, i had the serial monitor running, while i was trying to connect sardauscan with the Arduino. Maybe the Arduino was just overfloatet with tasks and informations. So I closed the serial monitor and it just worked.</p><p>Maybe some people had the same issue and now they can fix it ^^.</p><p>But thank you for the answer.</p><p>Btw. awesome project!</p>
<p>Sardau</p><p>i have the same problem. with table and laser. the baudrate is ok, com-port also.</p><p>I started Sardauscan.exe, table and laser not working?</p><p>If i click on the usb icon the leds blinked on the arduino.</p><p>What i do it wrong</p><p>pcbakker </p>
<p>I have the same problem with table and laser, what should I do, please???</p>
<p>you can have only one connection to a serial port. (one application at a time)</p>
<p>yeah I already knew that, but I haven't thought that it is a different serial port ^^</p><p>Thanks for the help! :)</p>
Hello -Sardau I have a problem is the stepper motor does not move this what is the problem?But Stepper controller is working Lights is flashing?
<p>hello,</p><p>read the readme in the firmware.(or the comment in the configuration.h)</p><p>or just 5-6 comment below </p>
<p>Hello,</p><p>I can't find any hercules hd twist in Romania.</p><p>Can I use Canyon CNR-WCAM43G camera or MS Lifecam VX-2000? If not, can you suggest me a good one?</p><p>Thanks</p>
<p>as said before :</p><p>&quot;if you redo a upper holder, you can use whathever webcam you want except wide angle one. just be sure that your camera is vertical, no tilt, pan or yaw.&quot;</p>
<p>how did you find the co-ordinates (x,y,z) of the laser line?can you please attach the code you have used to find the co-ordinates.</p>
hello, <br>by trianglulation.<br><br>all the code is in the gitup link.given in the instructable: see the task &quot;scan&quot; in source.
<p>actually i didnt understand the highlighted part in the code.</p><p>how did you convert the pixel distance into real world values?</p><p>thnx :)</p>
<p>this code is to rotate the 3d points : when the table have turn, your object is rotated, your coordinate have change. so you must do the inverse rotation of the points to get the all in the same coordinate...</p>

About This Instructable




More by Sardau:Build a 30$ laser Scanner Sardauscan sub-30$ Opensource 3d laser scanner 
Add instructable to: