Sub 30$ 3D laser scanner Open harware/software project

by Ferretti, published

Sub 30$ 3D laser scanner Open harware/software project by Ferretti Feb 28, 2015


Design Tools

123D Design Michrosoft Visual studio Arduino IDE

Use This Project

Give a Shout Out

If you print this Thing and display it in public proudly give attribution by printing and displaying this tag.

Print Thing Tag

Thing Statistics

129886Views 17532Downloads Found in 3D Printing


French calibration available on github https://github.com/Sardau/Sardauscan

i've adden a instructable to explain how to build, calibrate and use the sardauscan.

update: V0.0.0.4 out : (much) faster better stronger

Sardauscan is a open source Sub 30$ 3D laser scanner that you can easely print yourself.

Even 12$ if you already have a hercule HD twist. I think we can say it's "the cheaper 3d scaner on earth"

you just need a arduino nano, 1 to 4 line laser and a micro geared stepper (28BYJ-48)
(see instruction for BOM)

no external power needed. just 2 free usb port on your pc : one for the webcam the other for the rest.

I’m proud to announce you the release of the open source Software for the “cheapest 3d scanner on earth” the 30$ DIY Sardauscan.

The software Is written in C# and allow you to compose your Scan task by drag and drop.

Recommended Process is composed from these scan
“Scan” => “IrQ filter” => “merge laser” (if you use more than one laser) => “Build Mesh by interpolation “ => “Save STL”.

But if you are not satisfied with the build-in processing task, or if you prefer use another heavy but powerful software to work with your point clouds like meslab or other,

you can just “Scan” => “Save Ply” and import them in your preferred application.

While the software come with a building support of the Sardauscan hardware, and usb camera. You can easely write your own Hardware proxy via plugins.

You can event build your own task to insert in your scan process.

Source Code : https://github.com/Sardau/Sardauscan

real time scan video : https://www.youtube.com/watch?v=TPb-gEVkBYo
postprocessing start @ 1:50, if you want to see the speed of post processing (smooth, mesh reconstruct, and stl generation )

French discussion : http://talk.smartfri.odns.fr/index.php?topic=368.0



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.

What do you need ?

· 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.


At this point all you need to complete the hardware part is to upload the firmware to the Arduino. You will need the Arduino IDE or another sketch editor.

The firmware (a regular Arduino sketch) is available at: https://github.com/Sardau/Sardauscan

You will also need to install the AccelStepper library in order to compile it: https://github.com/adafruit/AccelStepper

· Edit configuration.h to match your wiring.

· Upload it to your Arduino

Now that the hardware is ready, test it!

· Connect to your Arduino with your IDE

· Type “Sardauscan” – the Arduino should answer “yes”

· Try the stepper: type “T R 100” – your table should turn 100 steps

· Try the laser: type “L 0 1” for the first (0) laser to fire (1) – the first laser should light up

If something doesn’t work, check your wiring and configuration.h – it should match.

Software and Calibration

To install the Sardauscan software, go to github (see link above) and download the latest binary version. Extract it and launch the executable.

In the main interface, you will see 3 red icons – one for the table, one for the lasers and one for the camera. Click on them to connect to the hardware (right click to disconnect).

If you use the standard Sardauscan firmware the table and the laser switches are linked.

Now that the hardware is ready and the software connects to it, here comes the tricky part: calibration.

The calibration takes 3 steps:

· A manual calibration

· The build dimension

· The "Adjust" correction

Be careful during the calibration: the result quality directly depends on it.

To calibrate:

· Click the target icon and the ‘Physical’ button.

· Move your camera so that the vertical in the preview window crosses the exact center of the table.

· Click on the center of the table in the preview window. The lines will help you align the calibration object.

· Place the calibration object (see STL on Thingiverse) on the table, flat area facing the camera – use the horizontal line for help.

· Click on the first laser icon on top to light up the first laser. Align the laser line to the vertical line in the preview window.

· Repeat for all your lasers.

Build dimension:

· Click on the “build dimension” button and enter your build dimension.


· As a perfect calibration is difficult to achieve, especially with a higher number of lasers, the correction step will help you correct the previous errors.

· Place your calibration object on the center of the table and click “quick scan”.

· When the scan is completed you will see a top view of it. Each color corresponds to a different laser.

· The goal is to superimpose as best as possible the different laser scans: select a laser in the combo box and rotate (left mouse button), scale (middle mouse button) and pan (right mouse button) the scan.

Congratulations , your calibration is done!

Dafuq is this interface ?

To be evolutive the software is designed around tasks and processes.

When you open the program you will see to the left a list of available tasks – you can drag them to the process list on the right then press the ‘Play’ icon at the bottom.

Here is a non-exhaustive list of the available tasks:

· Scan: scan an object

· Grab Pictures: take pictures of the object for use in a photogrammetry program

· Filter IQR: remove noise from the data with an interquartile range filter

· Filter median: remove noise from the data with a median filter

· Angle: merge laser scan by angle – smooth the scan and filter noise

· Bezier: smooth the data by fitting a Bezier curve

· Surface: smooth the data with a Laplace surface smooth

· Save ply: save a PLY file to use with MeshLab or any other point cloud software

· Save stl: save the STL file

Developer Corner : Evolution ? Own hardware ? Plugins ?

As mentionned the software is not linked to the Sardauscan build – it is made to be evolutive.

You can do almost whatever you want with plugins.

You have a magical algorithm?

Do a plugin for it !

You have a custom image acquisition hardware ?

Do a plugin !

You want to use your own hardware firmware for the table or the laser ?

Do a plugin !

You can look at the github repository, there are some plugins samples. It is really simple to code.

To use the plugin, just copy then in the "plugin" subdirectory.

Happy scanning !

More from 3D Printing

view more

All Apps

Auto-magically prepare your 3D models for 3D printing. A cloud based 3D models Preparing and Healing solution for 3D Printing, MakePrintable provides features for model repairing, wall thickness...

App Info Launch App

Kiri:Moto is an integrated cloud-based slicer and tool-path generator for 3D Printing, CAM / CNC and Laser cutting. *** 3D printing mode provides model slicing and GCode output using built-in...

App Info Launch App
KiriMoto Thing App

With 3D Slash, you can edit 3d models like a stonecutter. A unique interface: as fun as a building game! The perfect tool for non-designers and children to create in 3D.

App Info Launch App
Comments deleted.

Would a go pro camera work. or would the fish eye be bad?

it won't work.

it won't work.

Liking the Evangelion color scheme

I was trying to convert this to Solidworks so that I could change the camera mount to fit another version. Opened the 123D design file and managed to convert it to Fusion 360 and from there to a step file that I imported to SW. Now when I look at all the parts I realise that the 123D Design file you included isn't the complete one? The arms for example are missing holes etc.

Any chance you could save the individual files as step or some other format that I could import?

you must do a boolean operation to remove the all the red parts:

ps: i prefere to do it this way : i find it easyer for modifications.

Ahh, I thought those were placeholders for screws :D

One more question, I noticed in the upper and lower camera mount that you have made a round hole to fit over the 20x20 profile. Wouldn't it be better to make that cut to fit exactly in the profile instead with a nut on the back? That way you can rise or lower the camera as needed?

that was my first version,
but with the print precision and the tolerance of the part, the camera can be a little bit off center. (0.1 mm in the support can mean 1mm off at the center of the table: is a realy huge error)

problem when uploading to board
I can not understand where the problem
I seek help
Windows 7 64bit
FTDI - CDM v2.12.18 WHQL Certified

maybee your com port or board type is incorect in the arduino ide

The cost of the camera has increased apparently. Cheapest on amazon is $38USD + shipping. Anyone had success with a different webcam?

would you be willing to sell one assembled?

no sorry. but i think it will be by smartfriendz (they contact me a while ago, and i give them the permission to sell it although the license is non commercial)

oh is that a website?

Hi, I built this scanner a few months ago and the Arduino sketch worked very well. However, when I came back to it today it told me that invalid libraries found in the previous location where I installed them. Do I need to update something in order to get it fixed? Thanks.

the firmware have not change since the begining. so the problem must be on your pc/arduino/libraries configuration.

can the camera position be set in the software? Because I want to make a holder for Logitech C270 rotated by 90 degrees.

Great work keep it on !

camera position yes, rotation no ( i've already started to add this feature in a future version, but i don't have time to finish it now)

i already have an arduino uno, can i use it for this project?

do i have to have that exact camera and if not what do i need to look for in one

Aug 20, 2016 - Modified Aug 20, 2016
Ferretti - in reply to p3flyer


read the thing description :

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

Comments deleted.


I find this project very cool. I have printed all the parts last week. Before printed i testing motor, lasers with nano & uno in combination with serial monitor. All the stuf works well. I assembled and starting sardauscan.exe. The camera works, the icons of the lasers and turntable stay red. By clicking on one of this icons then the window for the com port coming on the screen. Every time i clicking on the little usb icon i see on my uno the tx en rx leds blinking. Baudrate also ok. With a nano just the same problems. Do you have any idea whats wrong.



it is hard to know. it is a problem i've investigate but didn't find the reason ( if some one know, i will be greatfull)

on some pc or with some arduino, the connection is painfull. the arduino don't respond in 5 sec. and the timeout trigger.

I dunno why, i think it is something in the c# serial class, but i don't know what.

the only workaround i've found is that you mus click on the usb icon several times, and finaly, magicaly the arduino respond under the 5 sec.

after that, the problem seems gone. when you restart the application, the software automaticaly try to reconnect to the previous com port. and at the restart the arduino respond under the 5 sec. (it is the same code for the 2 case)

if someone have a idea of the problem and how to correct it, it will be greatly apreciated.

I'm having problems getting all 4 lasers calibrated, especially with the thresholding-- is there an easy way to only use one laser and take 4x as long to scan?

Where can I find info about thresholding? I only get a weird deformed blob.

you can use only one laser by configuring your firmware ( define num laser) .

or you can click on the little gear next to the "Scan" task, and choose there witch laser you want to use.
(if you edit in the left, you edit the default, on the right column, yopu only edit the config for the curent process).

I did that but end up with some really odd as a result. I adjusted Z after measuring and got the same weird result, do I need to adjust X? This was a Pepsi can with one laser.


I solved all previous problems just replacing the arduino nano with an arduino UNO ! (Chinese copy just 5€)
But i have i minor issue now, the problem is : the motor turns ok also in degrees but mounted under plate seems to not have enough power to rotate it smoothly. What can i do?

Has someone this scanner working?

Hello Feretti

I am having trouble with turning the stepper motor. When i want to turn the motor the leds on the stepper driver flash and the stepper motor is vibrating but not turning. It goes maybe 1mm to the right and then 1mm to the left a lot of times. I have changed the step revolution and half step. Before i changed anything on the code it did not do anything. but when i change the halfstep to 4 it will vibrate like i have explained. When i change the step revolution nothing changes still vibrating.

the stepper motor is working i have tested it with some simple code and it turns.

The stepper is a M35SP-9 from mitsumi


It sounds like you need to adjust the motors current on the stepstick.

Sep 14, 2016 - Modified Sep 14, 2016
jartz - in reply to Macflame

There's no stepstick in this project, my friend. Just a simple ULN2003 style driver running at full current. The motor being rated for 5v is what limits the current.
Here's what is used by this project: http://www.ebay.com/itm/331848426074

If the motor is vibrating, the pinouts are different than the motor/driver board that Feretti used, and you just have to figure out the right sequence. You can do that in the firmware, or more easily (imho) by swapping the IN 1/2/3/4 pins until it works properly. It may be that just pins 2 & 3 need to be swapped. You can test your motor with a multimeter pretty easily.
I've got to run out, but if you don't figure it out, I can help later. ;-)

I have the same issue! I tried with another Nano, another motor, another driver but still it only vibrate...
And my other issue is: if i connect the nano with driver+motor the software connects to it
But if i connect also 1/4 lasers the sw can't connect anymore like there isn't enough power to make them work.
So i connected to the nano an external power 5v 1A (last two pins : VIN - GND) but still nothing.
Where i'm mistaking?

Verify that your motor are not 12V and that the driver is not configured for 12V (jumper)

or connect your external power diretly to the driver board.

Jun 4, 2016 - Modified Jun 4, 2016
Electro85 - in reply to Ferretti

My motor / stepper arte these https://www.ebay.it/itm/262009808506 So they are 5v. I will try to connect the power directly to the driver (what Pins? )

P.s. There is a link in the item description in ebay on how to operate and a a certain point it says:
The crucial things I learned from Stan's posting were:

The 28BYJ-48 needs to be operated in half-step mode, ie an 8 pulse sequence - the standard Arduino Stepper library can't do this.
The 28BYJ-48 coils need to be energised in the pin sequence 1,3,2,4, rather than the standard 1,2,3,4 sequence

Jun 4, 2016 - Modified Jun 4, 2016
Ferretti - in reply to Electro85


here is the pinout of the driver board

ps: i you thing you need different connection, change the configuration.h values to match your needs.

I solved all previous problems just replacing the arduino nano with an arduino UNO ! (Chinese copy just 5€)
But i have i minor issue now, the problem is : the motor turns ok also in degrees but mounted under plate seems to not have enough power to rotate it smoothly. What can i do?


if your stepper work with another code. it pobably means that your configuration of the firmware is incorect.

Verify the wiring,
look in your other code wich pins are used and look if the AccellStepper declaration is the same.

ps: you can also hack the firmware to use your own code that work instead of the accellstepper one.the firmware is realy simple.


Mine stepper motor is turning now.

The declaration of the stepper motor was this:
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

But for mine motor it should be:
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin2, motorPin3, motorPin4);

Because the pinout of mine stepper motor is different.

Now mine is spinning to fast. It is doing one complete turn instead of a small step when scanning.

May 27, 2016 - Modified May 27, 2016

I'm currently printing the parts for this. Just to notice the BOM has 5mW lazers, these are restricted in AU, is there any chance of using say a 1mW on the same wave length?

Example : http://www.ebay.com.au/itm/1pc-1mW-650nm-3-5VDC-Focusable-Red-Laser-Diode-Dot-Modules-6x18mm-EU-Standard-/381148296821

Edit: Never mind, this law only applies to complete lazers not modules / labbys

Comments deleted.

I've just finished getting this built, wired up and calibrated, but now I'm having problems with the scan software producing heavily warped scan data. Specifically, details that SHOULD be straight are coming out bent on the scan.

I scanned a simple box as a test, the results are below.

http://i.imgur.com/0Zxe7mL.jpg <- Photo of the box used for the scan
http://i.imgur.com/ctzkjAX.png <- Top down view. You can see how the sides (which should be perfectly straight) are bowed inwards at the centre.
http://i.imgur.com/gKJHLuA.png <- Side view. You can see how the lid ridge is badly deformed along its entire length, the top of the model is bent upwards, and the entire scan is badly stretched in the vertical axis.

I'm VERY confused as to why it's coming out like this, since I spent almost an entire day painstakingly ensuring that the machine was calibrated and aligned properly. Without knowing how the scan data is assembled from the raw image, I'm not sure which setting to change or tweak to make to correct the issue (I had a look through the source, but image processing and machine vision isn't my area of expertise)

Any help or advice you could offer?

if you look at one laser (look one color) the forms does not seems bend.

the problem is that scans from different lasers are twisted. (to convice you try with only one laser)

this can be; wrong laser/camera position in the physical build window. (i'm pretty sure it is that)
the lasers does not cross exactly the center of rotation of the table.

if you are sure a 200% that these valus and positions are correct at a precision of 0.001 mm (;) ) you can align indidualy each laser in the correction matrix window.

Actually, scanning with an individual laser produces the same distortion as seen in the 4-laser scan. The full scan just produces the illusion that it's misalignment since the extreme-right and extreme-left laser miss some details and leave voids in the point cloud.

http://i.imgur.com/Ikba66F.png <- Top-down view, Laser 0. You can see a dramatic bend on the left hand side and the right hand side doesn't line up with the bottommost edge.
http://i.imgur.com/RMaM5rf.png <- Side view, Laser 0. The model is visibly and dramatically warped upwards in the centre (top of model isn't flat, lid ridge isn't flat, and there's a visible gap at the bottom-middle which I suspect is where the model meets the table)
http://i.imgur.com/2Hg3gRl.png <- Top view, Laser 2. You can see the same bowing at the base as was visible on Laser 0.
http://i.imgur.com/3V1LlH3.png <- Side view, Laser 2. It's somewhat harder to see from this shot due to the lines obscuring some details, but you can make out the lid ridge and how it's heavily bowed upwards, and that the top of the model isn't flat.

I tried adjusting the values listed in the build dimension area, but none of them helped the issue. The lasers are correctly focused and aligned both vertically and on the bed rotation centre.

May 24, 2016 - Modified May 24, 2016
Ferretti - in reply to Arania

i don't understand : are you using a hd twist or another camera? wide angle ?

if you are sure that all is perfectly calibrated, it can be a different sensor/focal on your webcam.

you can try to change the sensor width/height and focal length in the source code. (the values entered is the value given by the hercule technical support)

ps: i can't see your last images, imgur is blocked by my workplace firewall.

It is a Hercules HD Twist, yes. This one, specifically - http://www.ebay.com.au/itm/Hercules-HD-Twist-Webcam-Range-of-colours-HD-Video-Flexible-Design-/121711036453?var=&hash=item1c568b0825:m:mWNSwYk6hONJ2M55LOyMQ-g

It's marked 'Wide-angle', 'f/2.0' and 'HD720p' on the front.

What units are the sensor width/height and focal length in, so I have an idea of what to set them to? Where specifically did you get your reference values from?

in cm if i remember well (it is more than a year and a half that i've develop it).

for the values i've asked them to the hercule tech support.

try to change the focal length first , i think it must be a bit higher , maybee between .5 and .6

ps: my hd cam have also the "wide angle". but in reality, it is not a wide angle camera, it is a "wide screen resolution" : (a 16:9 resolution sensor) : the hercule marketting team don't seem to understand the difference ;)

Where did you find the hercules twist for $15? The cheapest price I can find is like $40 with shipping.

May 17, 2016 - Modified May 17, 2016
Ferretti - in reply to bemojo

the price are going up since one year : but you can find it cheaper than 40$
for exemple here at 20€ on amazon https://www.amazon.fr/gp/offer-listing/B006ZJ4H2M/ref=sr_1_1_olp?ie=UTF8&qid=1463460016&sr=8-1&keywords=hd+twist+hercule&condition=new

ps: if you redo the camera holder, you can use any non-wide webcam.

May 12, 2016 - Modified May 13, 2016

So, the camera that is mounted on the 120mm 2020 profile is taller than the one in the picture on thingiverse.. Are you using a lower 2020 profile?

you can slide it in the corner to make it taller or shorter. (it tilt a little bit the scanner, but no big deal)

May 12, 2016 - Modified May 12, 2016

What are you guys using as table?
And also, are you just sticking the 2020 profile up in the hole under the camera mount?

i use a round mirror of 200mm diameter paint in black.

i made it
wired it, loaded the firmware, downloaded the software
but the plate won't turn
i also loaded the firmware on another nano and used another driver and motor but none...

Same with me. Tried the firmware trick, used external power. I also bought everything twice. Lasers are working.
How can I check the motor? What voltage can I put on pin IN1-4 to check it without arduino? (+5V?, ground?).
Thanks for your work. Awesome.

Thx for the awesome pack. Will build my own when T-Slot-Rails arrive. Just tried the Firmware, compiles flawlessly, right out of the box on Arduino IDE 1.6.6, tried to run Sardauscan binary on Win 10 64bit, also started up without problems. Everything what i am able to test right now is working. Thank you for this great development.

thank you, it's feel good to hear that it work:
Generaly people only contact me when it does not work ;)

Yeah, read all of the comments and most are complaining about errors instead of looking by themselves and try it on other Machine / OS / IDE. sorry to say, but some need to do their homework before... will try to make an instruction on my blog (only in german, sorry). how to set it up. Tried to read the french pdf, however i don't speak french, most parts are self explaining. Will use it as basic for my (german) howto, if its ok...

that will be nice. contact me when you have done it, i will link it in the readme if it is ok for you.

will do :-)

So build is completed, first scans are... ok ugly, but one came out pretty well. Now i have to figure out what the best settings are. Is there a way to exclude 2 scanners from calibration, so that i only use 2 of them? Is there a description which settings, especially for the camera will make which changes? For example min and max width? what do they exactly do? And also the treshold?

One more Question: i have done the correction for all lasers, but there is much "jitter", also ist not possible to do the allignment in size, because the size adjustment of the different lasers is very coarse, is it possible to make the resize-change per mousewheel-move smaller?Maybe 1mm per mouse wheel movement or so? And is there a description for the different filters and their Settings?

What correction?

Too bad the software is windows based.

any help for porting it to linux/mac will be appreciated. personnaly i don't have the technical knoledge to do it (i don't own a mac )

the part to rewrite are the com port enumeration and the camera enumeration and the image capture procedure.
the interface seems to work in mono.

Awesome project!
I've printed most of the parts but I'm struggling to find the 20x20 aluminium extrusion. How long should the extrusion be anyway?
is there any recommended length?


all your ask is in the description :

20x20 profile ( can be printed : for exemple http://www.thingiverse.com/thing:280318)
2020 lengths of my build (but you can use whatever you want, just make sure the camera can see all the scan area)
2x 140mm
1x 120mm
1x 250mm

Misumi aluminum extrusion 2020 profile

I think I have the right stepper, but it only makes minute steps when instructed to move 90deg. A scan just doesn't happen, although I get something that looks like the table. Any ideas?

try the trick in the firmware. (in the readme).

your stepper probably need more power. if it don't work, try with a exterrnal power on the driver board.

Thankyou, great work

now could all this be done with a raspberry pi

Where can we get the image? Pi one, Pi B or Pi 3?

Oh I was asking if could be done cuz seen on youtube a guy using a kinect and a raspberry pi but I was curious if it could be with the lasers and pi


there is already a solution on raspberry,

Freelss but it use more expensive hardware (but not so much).

My windows code was originaly based on the freelss code, but it evolve a lot.

you are not the first with this error, i dunno why it append on some machine.

A corection is to rebuild the program on your machine.

with which block you have the mount "camera holder" and the "Corner" part?

I have the same question. The lower camera holder has a round hole but the 120mm profile has a square size. No picture shows how to mount those together.

the round hole is around the 2020 and screwed from the top. it allow you to turn the camera horizontally to align it with the table.

Hi, is there anyone who has had problems installing the program "SardauscanV004" ?
I can't install it because it crush. I've Windows 7

is there any other version? or someone knows how can i solve ?


Mar 1, 2016 - Modified Mar 1, 2016
Ferretti - in reply to Sammy76

what's the error message ? have you dotnet 4.5 ans opengl install ?

ps: you can try to rebuild it on your machine.

Mar 1, 2016 - Modified Mar 1, 2016
Sammy76 - in reply to Ferretti

Error Message and framework's version and graphic are here:


Graphic board: Nvidia Geoforce Go7300

Thank you vero much for your time.

as i see in your first image, the sardauscan software start, but the 3D control crash. so i think it is a opengl problem.

Mar 1, 2016 - Modified Mar 1, 2016
Sammy76 - in reply to Ferretti

Ok and do you think can i do something ?
I use also cad 3d and i've not problem...

how many ram needs Sardauscan?

Feb 25, 2016 - Modified Feb 25, 2016

I printed all plastic parts, i bought the lasers and the motor and i'm waiting for the micro arduino. I tryed the scanner with arduino UNO but the results are very bad (much lines but nothing body).The next week will arrive the Micro arduino and I'll try the exactly project, in the waiting who can send me a stl file for the plate (190 mm) with the support for the motor? thanks

'much lines but nothing body'
be very very precise when you calibrate your lasers, build dimention: 1 mm of error give a unusable scanner.

also start with only one laser.

if you have many isolated points accros the lines, go to "tune" page of the sardauscan.

Thanks Fabio for your reply and compliment for your work. For the calibration I must take the distance from the camera (I use a Microsoft Life Cam HD-3000) with the center of support mounted upon the motor or the distance from the camera with the object on the support ?
Another question , my lasers have a dial to adjust the beam width, and I have observed that with the laser light beam off the laser's intensity is less powerful than with the small bundle , which I have to use?
I hope I explained well, I'm Italian and I do not speak English well

for the mesurement, you can see in the build dimention page "what are correspondig to what". (see the instructable for more)


all the dimentions are relative to the intersection of the rotation axle of the table and the surface of the table.

for the laser, the "thinner line the better". (the software must find the center of the beam to triangulate the 3d points )

In your wiring diagram is the top laser laser 0? and the bottom 3? I'm trying to figure out why my scanner will not function correctly I've double checked the build dimensions. the only thing I can think of it my lasers are firing in the right order. On the app when you manually turn the 4 lasers on is the one on the left laser 0? and the one on the right laser 3? or does the 4 lasers right to left on the app coincide with the lasers as they are seen right to left?

it is defined in configuration.h :
define LASER_PIN_1 A1 //yellow
define LASER_PIN_2 A2 //orange
define LASER_PIN_3 A3 //green
define LASER_PIN_4 13 //blue

and in the firmware.ino
int getLaserPin(int laserIndex)
return LASER_PIN_1;
else if(laserIndex==1)
return LASER_PIN_2;
else if(laserIndex==2)
return LASER_PIN_3;
else if(laserIndex==3)
return LASER_PIN_4;
return (-1);

laser 0 is A1
laser 1 is A2
laser 2 is A3
laser 4 is 13

Any reason why you didn't use A4 pin for laser 4?

Feb 27, 2016 - Modified Feb 27, 2016
NickJallday - in reply to Ferretti

I got it now still not successful scans though I was just trying to verify their physical order.

Did you try with one laser ?

Did you inverse the position in your laser dimentions ? (ie negative angle instead of positive)

can you show a quickscan in the correction matrix page ?

you can check if your laser are in the right order :
if you click on a laser icon, the corresponding must ligth on. (for reference, you are posted behind the camera)


hi ferretti - so now i have scan subject correct height to table , but the scan is tall and thin , all squashed up if you like - what do i change to change this , anyone ??? danny

Feb 18, 2016 - Modified Feb 18, 2016
Ferretti - in reply to Paramotor

it is due to your laser (or your camera) not crossing EXACTLY the center of rotation of the table. (or the laser or camera position wrong)

Hi- fantastic project, and have finally got mine up an running,
Getting really good quality , but although the camera is showing all of the object in the preview window , only the top half of the object is showing up when scanned, what am doing wrong- danny

maybee it is your camera Z position in the build dimention page that is incorect

Too high or to low? My camera is 30mm above turn table

too low i think, but i don't see your scans ....

Try it lower and higher, it don't take much time to test.

I'd like use different material i've already at home to build the scanner.
Then i have to reproject and print the holder for cam and Arduino, but i don't want change the dimension and focal point:

If isn't a problem Could you post a assembly STEP or IGES please?

I don't have theses files : i use 123d design, and the 123dx file is given in the github and in the files here.

Hi Ferretti good project!
But i don't understand one thing: with arduino you control the plate, the laser, but the camera is only connetted to the pc?!
In wich way the camera is sincronized with the arduino's action?
In wich way the camera choose the time to shot the photo? In wich way arduino comunicacates with pc and with the software that creates the scan?

The arduino is used to control the stepper motor that turns the table and to turn the lasers on and off, via commands from the PC.
So the software on the PC does the coordination of everything. It's not a standalone scanner.

Ok Thanks!
Then arduino and the Cam are connected to the pc and the scan's software dectect them and coordinate the action..

Now is clear.
Thanks a lot.

Hi Ferretti :)

Only does it can operate with just Hercules twist cam?
Can't I use other webcam?
If it can, I'll use wide screeen webcam made by Logitech.

Thanks for sharing those awesome inventions!

Feb 4, 2016 - Modified Feb 4, 2016
Ferretti - in reply to oogicar45

yes and no (the response is 5 comment below ;) )

you can use another camera, but not a wide angle ( but if you modify the code you can edit the code to change the focal et height/width proportion)

but for the camera, you must make your own suport. (verify that is is a non wide angle)"

Thanks for answering. :)

You are so brilliant!

Hi Ferretti.

The wiring diagram has shown on my pc from the download page just shows the wires but not from where they came. I now know they are from the lasers.
I found the full wiring diagram elsewhere and now your post shows the full wiring system.

many thanks and I am sorry if I was confusing on my earlier post.

regards Stuart

Ha ok ;)

that's the preview of thinkinverse, they clip the image to a format that suit they layout.

to see the full image, you must click on the "four arrow icon" in the upper right corner.

hi there

Really enjoying this build got the brain working. this is not really a comment just trying to understand the wiring.
Can you assist me in that how do the laser wires connect to the arduino board.
I am sorry if this seems obvious to some but to me its not.

Many thanks stuart

i don't understand your question about the wiring of the lazers : is this image not enough ?

just plug the + and - (red and black) of your laser as in the picture.

away you could provide the scad upper and lower brackets so that we could modify them a bit easier for which ever camera we decide to use?

i don't use openscad, i use 123D design.

the source 123Dx file is provided in the file section and on the github.

What's the max scan area? Is it possible to extend it out easily? I want to build this and scan a full headlight to import it into another model and design around it.

yes you can. you decide the size of your build.

the arbitrary limit in the software for the distance of the camera is 5 meter.

This look good?

Parts List:

17885 - Metric machine screws, 4mm x 0.7mm x 12mm. Each 20
17871 - Metric machine screws, 3mm x 0.5mm x 16mm. Each 20
17872 - Metric machine screws, 3mm x 0.5mm x 20mm. Each 20
17887 - Metric machine screws, 4mm x 0.7mm x 16mm. Each 20
4784 - Metric hex nuts, 4mm x 0.7mm. Box(100)
4783 - Metric hex nuts, 3mm x 0.5mm. Box(100)

650nm 5mW 5v Red Laser Line Module Focus Glass Lens Focusable

Assorted Dupont connectors

Ardunio Nano ATmega328P CH340G

TeckNet C016 Camera

624ZZ Bearings



but for the camera, you must make your own suport. (verify that is is a non wide angle)

Are you sure? The "Hercules HD Twist 5.0 MP 720p" you listed is a wide-angle camera? It says wide-angle on your pictures too?

not a wide camera.

I'm sorry, but I don't understand.

I've ordered a "Hercules HD Twist 5.0 MP 720p" now from eBay, but every offer I found said those are "wide angle" lenses. In the 4th picture your camera also says "wide angle" on the black ring?

don"t trust the description and the marketting stuffs :)

the hd twist is not a real wide angle camera.

here are the hd twist spec (given by hercule customer services)

Sensor :
Package dimension: 4325 um x 3515 um
Image area: 2300 um x 1400 um
Pixel size: 1.75 um x 1.75 um
Active array size: 1296 x 808
Effective array size: 1280 x 720
Effective Focal Length: 1.863mm
Fn°: 2.0
Back Focal Length: 0.6 mm

Just double checked the camera is not wide angle it's fixed focus 5MP 1280x720p just like the Hercules. I'm probably going to take the camera & board out of it's housing and make a new housing for it so it's not in the round one it currently is and in know it's straight.

For the Scan bed did you just print a big circle a few mm's thick? and if so how about did you find it's center and attach it to the rotating stand?

for the table i've used a round miror paint in black. for the center... many mesurement.

May 1, 2016 - Modified May 1, 2016
mcsemeister - in reply to Ferretti

Hi Ferretti,
if someone needs to print a table. I just published a very easy one. http://www.thingiverse.com/thing:1532992

Table for Sub 30$ 3D laser scanner
Dec 15, 2015 - Modified Dec 15, 2015
NickJallday - in reply to Ferretti

That's what I figured thank you! I'll let you know how it turns out just ordered all the parts! I was wondering about printing a bed 200m diameter bed attached to your simple axis so when you place the bed & mount as one part on the stepper motor you know where the center is. thoughts?

Dec 16, 2015 - Modified Dec 16, 2015
NickJallday - in reply to NickJallday

I'll give printing the bed attached to the axle a try and report back when the parts come in. Should be a few weeks mail going to a military overseas address takes forever.

So how does this compare to the ciclops 3d scanner?

Hi Ferreti,

Everything looks to work ok (at least the hardware and the scan). When I try the GRAB PICTURES I get an error: Error: A generic error occurred in GDI+.

Any idea what this might be?


sorry, "generic error in gdi+" is a totaly generic error in the graphic library of windows, it can be bitmap empty manipulation, wrong gdi pen/brush/ressource, insuficient graphic memory, etc... it can be anything, it don't help to understand a problem. the only way of finding the problem is to debug.

Hi Ferreti,

One more question please: I am using only one laser. The program takes the default number of images (I think they are 44 or something near that number). The laser every specific number of flushes (6) or doesn't switch-on or switches-on for a very short period and it doesn't show in the image. It is not the laser itself because it wouldn't happen every specific number. Is there anything else that I can look at so I can short out this problem?

Thank you,


i'm not sure what you explain, but you can increase the "laser fade delay" in the settings. it will wait longer between the "switch on" of the laser and the picture grabbing.
I hope it help

Nov 30, 2015 - Modified Nov 30, 2015
georgei - in reply to Ferretti

Thanks Ferreti,

Apparently when I changed the scan precision to 100 this effect had disappeared. Now the laser switches on correctly.


another idea

Maybee it is a problem of power :

if when you switch on a laser, and you send command to turn the table, your laser fade from time to time. it is because @ certain "angle" , your motor consume more power ( more coils used @ certain angle).

You can try the tips in the readme of the firmware, it's also help with the power lost during rotation.

I think it is a combination of both (power and delay). I have increase the delay a little bit and now it is working ok in all settings.

Also my table turns anticlockwise when it scans. Can I change that from the software?

Nov 29, 2015 - Modified Nov 29, 2015
georgei - in reply to georgei

To answer to my own question: you can change the sequence in configuration.h
reverse the sequence of the motorPins.
This will reverse the rotation of the motor.

Nov 29, 2015 - Modified Nov 29, 2015

Hi Ferretti,

Thank you for the previous replies. Very informative.

I have a question regarding the calibration.

In the instructions for the built calibration of the laser the dimensions x, y and z what are they referring too?
Are they distances of the laser from where? I have also notice that as I change the built height of the camera the value of the laser built angle changes. How these two are related?
I made a different mount for the camera and the laser so my setup might be a little different from the programs default.

Thank you,


the 0,0,0 is the intersection of the axis rotation and the table. (ie center of the table if your table is perfetly centered)

How do i need to add theaccelstepper in the firmware?

in the readme you get the link to download it :

and on the accellstepper github, in the readme, they explain how to install it.

As i already tell you un mp, please read the comments (here and on instructable), it is already explained.


One more question: I am going to use one laser. Does it has to go to a specific location and if yes at what position?


it is not realy important. if the position is well set in the dimention page.

But i recommend you to use a external position. the best position i've found for a laser is between 15 and 30° (best is for 30°).

Hi Ferretti,
Excellent project. I have almost finish my built but I have a question regarding the webcam. I will use a logitech c270 since I couldn't find the recommended one in a logical price. I want to mount the camera vertical because it is easier to mount it that way. That means that the images of the feed will be turned (x will be y and y will be x). Will it work as it is or I will have to change something in the software.

Thank you.

Nov 24, 2015 - Modified Nov 24, 2015
Ferretti - in reply to georgei


It will not work as the axis of rotation is not the same as it is intended. It don't work for know but

I'm trying to use a genius 1024p webcam , vertical, so i'm changing the code to allow the configuration of the orientation of the camera. It will be available in a future version ( when i find time).

in the mean time, you can do quick change in the code : Search for The Icamera proxy implementation (NetCameraProxy.cs), switch all width/height (for image and sensor). and replace this function by this one

    public Bitmap AcquireImage()
        Bitmap bmp = _Camera.SnapshotSourceImage();
        bmp.RotateFlip(/* your rotation enum*/);
        return bmp;}

this will rotate the image, : not yet tested, but it should work.

if someone is still looking for a hercules cam, i have a spare one, intrested? send me a message

how much??? for my to buy one in canada it approx 90$ -_-

Hi. The Arduino Sketch just worked. However I had to interact with it in order to turn on/off the laser as well as the step motor. May I ask is that what the sketch originally like? If I want it more automatically or intelligent, do I need to program by myself?

Go there and click to view full file, you will download the software as zip.


I built mine about a month ago, but didn't have the Hercules HD Twist Webcam, and was trying to use a Logitech camera to no avail.. I just couldn't get it to calibrate at all... (Even with 1 laser)

So I bought a real Hercules camera - $34.99 here in the US (the only one I found in the US on eBay) -- and we'll see if that fixes all my issues when it arrives. ;-) My guess is that the difference in lenses/focal length/etc between the two cameras is just too much for the software to account for. Or at least, to my extent of 'tweaking'.

I'll post some pics of my make - It currently has the Logitech camera zip-tied in place, but once the HD Twist arrives, it will be going in it's proper place, and hopefully calibration will be very quick afterwards. ;-)

Nov 5, 2015 - Modified Nov 5, 2015
Ferretti - in reply to jartz

if your logitech is not a wide angle, it should work.

the key to the calibration is to find the perfect center of rotation of the table. once you get it it become the center of your world.

All must pass there and be absolutely vertical. the line in the calibration camera preview, your lasers etc. Be aware that your camera can't have any tilt. roll or yaw.

the calibration object is perhaps not the best object. it is preferable to have a object with vertcal edge (to see if a laser is not perfectly vertical) and that you can easely recongie the orientation if you see it from above ( to see if one laser need a rotation)

for the calibration of the lasers, i use the thin crate in the calibration object.
i place it exatly at the center of the table,
i turn the table so the object so it is parralel to the camera.
then i light each laser and adjust it to pass exactly to these crate.
i repeat for each laser.
then i verify if all the laser are correct by ligthing them all together: you must have only one thin line.

Once you get that, enter the correct dimentions (verrrry precise).

then and only then you can go to the correction windows and move lightly until the laser contour in your quick scan match perfectly each other.

some tips in this page :
if one contour is smaller than the other, the corresponding laser does not pass exactly in the center.
if one contour is composed of several lines => the laser is not perfectly vertical.
if one laser need a rotation => the angle (or position) for this laser is probably wrong

I hope it's help.

ps: i know the calibration is realy realy hard, i've try several methode but i didn't find one that work 100%. I'm researching on a way to do a automatic calibration , but i'm stuck for now. perhaps someone in the community will help me to reach this goal. (i was hoping more support from the community, i didn't get any real help until now and i'm a little bit discouraged)

Nov 6, 2015 - Modified Nov 6, 2015
jartz - in reply to Ferretti

Thanks Ferretti - I hope I didn't come across as ungrateful - I'm very grateful for you sharing your scanner with the world! ;-) You've done an awesome job on this. ;-)

And yes, my Logitech camera is a widescreen 1080P camera... So that's probably a huge part of the issue... I could get a scan that had somewhat of a representation of the scanned object on part of the scan, but even then, there was lots of 'noise' in the scans, resulting in the scan not looking like much of anything. (Some was from the background, some was kinda random, etc. Nothing super-consistent.)

So even though I don't have it working right just yet, here's a couple of things that I've learned so far that may help others... ;-)
1) I used plastic '2020 Extrusions' that I printed on my Delta. And no matter how strong they seem to a human (Me), I discovered that they have quite a bit of torsional flex to them. This isn't so good for this project (at least for the 'legs' - as they flex quite a bit.
2) As you've said, it's hard to calibrate, even with just 1 laser. I think a big part of it is somewhat obvious -- Let's be honest - We're using 3D printed PLASTIC parts, so they are not that rigid. Moving one of the lasers even a tiny bit tends to knock everything out a little bit. So I'm pretty sure that's one of the reasons it's so hard to get it calibrated. I'm thinking of possibilities to stiffen it up a bit, and maybe even 'engineering' a screw-style adjuster for find adjustment of the lasers... We'll see if I come up with anything worthwhile on that. ;-) I'll share it if I do! All of my parts are printed in PLA, so they're pretty tough, but again, this is just plastic. ;-)

So PLEASE don't take my comments as negative or criticism of you or this design - I personally feel that it's a stroke of GENIUS! And I'm pretty confident that once I receive the Hercules Twist camera (that you designed this for) that I will be able to calibrate it. ;-) And at that point, I'll look into buying some real Aluminum 2020 rails as soon as I have the money. I'm sure it will only get even more accurate at that time...

So again, THANK YOU for sharing this project!!!

thank you. i didn't find your post as ungrateful.

Concerning the noise in the scan :
play with the exposition of you camera (camera settings) and the threshold (tune page) until you get a beautifull red profile of your object in the preview window. (the min and max havn't much impact)

be aware that the laser detection is made on the red layer. so a red object is difficult to analyse. a black one too. be aware that shiny object relect on himself the laser introducing some noise.

another important tips, is to scan in a place where the light don't change. personnaly my scanner is under my desk ;)

for the table a black mat paint is optimal.

For the noise there are also several noise reduction filter (median filter, iqr, "angle" that helps). you can also use a better mesh reconstruction program as meshlab. there are several pointcloud cleaning tool.

Even if you don't have the good calibration and/or camera, you can scan with another technique.
You can use the "Grab Picture" task to take several pictures of a object (with a clean background). and use a photogammetry program to recompose the object ( like 123d catch for exemple).

ps: for the strengt, i made the choice to make the design in many small part so poeple print on a small printer and can scale the build by choosing the size of the 20x20 to match they needs, but the cost of this decision is the rigidity.

Ok, the Hercules Twist came in, and I was able to at least get some recognizable scans! ;-)
My camera is up too high to scan objects bigger than about 2" round as the bottom gets cut off in the camera. So I'll have to shorten my "Z" axis by about 20mm or so...
But is is very encouraging to see a scan come out that resembles what you are actually scanning. ;-) I'll add a couple of snapshots to my Make. ;-)
Getting closer... but I may not have time to work on it again until next week as I'll be away for the weekend. ;-)

Comments deleted.

I bought all of the pieces and wired it all up and the stepper motor does not turn when I give the command to The lasers turn on, and it replies yes when I say sardauscan. is it the stepper motor itself? Or do you think it is the program?

Ferretti - in reply to

sometimes the controler doesn't get enough power.

there are 2 solutions:
1) use another power source for the stepper driver.
2) (from Mark Benson)
"If anyone else is having problems with a BYJ48 stepper not doing anything, change the HALFSTEP value to 4 & REVOLUTION_STEP to 2048 in configuration.h."

@Gfco - I had the same issue - and had to do option #2 that Feretti posted above. It works fine now. ;-) (Now I just have to wait for my Hercules Twist to be able to use it right...) ;-)

Comments deleted.

from the video i saw it didnt look like it did a good capture at all. is that your normal results

@mclambglass - That video was a very quick, low-res capture. It can be configured to capture at a MUCH higher resolution... That was just an example of a quick scan to prove that it works.

wich capture ?

Hi, could you possibly post the source files for the printed components? I'd like to make some modifications for myself like using M5 for mounting and 625 bearings.

hello the source are already present : it a 123d Design file ( Sardauscan.123dx )

Do I also need to import configuration.h and SerialCommand.h files as libraries?

Oct 30, 2015 - Modified Oct 31, 2015

Hi, I am doing a research based on your project. As for the programming step, I downloaded the two libraries required, the configuration file and SerialCommand file and imported them into Arduino IDE. When I uploaded the firmware.ino and tried to compile it, it could not recognize anything from the library. Is there anything I did wrong?

and how is the camera connected to the circuit? I know it is a USB driving camera.

heu, it is a bit disapointing. once the accel library installed, open just the firmware.ino in the arduino ide and compile/upload should work.

the camera is not connected to the system, it is connected to the pc. it is the sardauscan software that take the pictures.

Hi, I've tryed to make it one. I've assembled all the plastic parts, I've wired all the cables as in the picture and have bought (just for use as scanner) a Microsoft HD3000 webcam (fortunately only 16 euros in Amazon) and finally I've setted the sizes in the software.
The result of my scanning is very very different from the reality. It's just a set of points and lines placed randomly.
Wich is my problem? Are there videos or guides to set the right parameters? I'm really sad and a bit angry for this issue...

Oct 31, 2015 - Modified Oct 31, 2015
Ferretti - in reply to cesc85

the calibration is a realy realy sensible part: it determine the quality of your scan, an error of 2-3 mm is dramatic. the physical calibration is even more important..

Think as the center of rotation of the table as the center of the world. all muss pass there lasers and vertical center line of the camera.

All mus be perfectly vertical: laser lines and camera.

But even knowing that, the calibration is hard. the best advice i can give is, start with only one laser. the calibration difficulty is exponential with the number of lasers.

Oct 25, 2015 - Modified Oct 26, 2015

Could you tell me what section in the programming it is in and I research into it? The problem is I bought a set of green lasers.

i think it is only in the imageprocessor.SubProcess function

How would I do that? ( sorry I am new to this thing)

you must be fluent with c# programming.

the easiest way is to use red line laser ;)

Does that mean I cannot use green ones?

no you can't unless you modify the code to use the green channel.

Can all of the lasers be red,or do they have to be different colors?

all must be red: the laserr detection is made on the red channel only

for Windows 10 with .Net 4.6 do I need .Net 4.5?

nope. 4.6 is compatible with 4.5

Hey, I'm having trouble finding a place to buy the HD flex camera. Is there a different camera I can use, or can someone point out a place for me to get one? Thanks! Can't wait to get this thing working.

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.

i cannot get this to calibrate. no shapes end up like they are supposed to, and it also thinks the platform is a part that its scanning

you must be very precise to do the calibration, follow the instructable procedure. : there are tons of informations in the comment too.
Also use only one laser, it is easyer to understand where your calibration is wrong.

what do i need to change to use just 1 laser? any settings change?

you have 2 ways of doing it :

  • select only one laser in the scan task properties.
  • or edit the configuration.h in the firmware ( change #define LASER_COUNT to 1) and recompile and upload the firmware to the arduino.

Have you considered implemeting the BQ Horus firmware with you scanner? (https://github.com/snhack/horus-fw/tree/master/Marlin) Seems like it wouldn't be all that difficult to add a couple MOSFETs to drive the lasers.

my goal was to made the simpliest and most cheap scanner. a scanner don't need any other hardware to work.

the Horus/cyclop was released in the same time. i've not used they firmware. i've considered try to make the firmware compatible to take advantage of the auto-calibration of the cyclop software. but i found the firmware way way too complex for the simple task of rotating a table and light some laser. (a contrario : the code of they cyclop software, is clean, celver and elegant)

Got all the parts and ready to print. The box lid has errors in Slic3r, so it doesn't work. I've not seen an other mention of it though.

Thank Ferretti for this Great project!.
I scanned a bottle cap but the surface was very rough .Please find the attached photos and give your advise. Sorry I don't know how to upload the photo.

it can be many thinks:

  • make sure to go to the tune page, you must have a clean red line in the last picture. (additionnaly you can check if your laser focis is set thi the thinnest in the scanner surface range. you can also reduce the exposition in the camera settings, it's help a lot)
  • if you are sure that your build and physical calibration are correct, try the correction page.
  • use the "laser" or "angle" task to help reduce the artifacts of laser mis-alignment, position detection errors.
Jul 28, 2015 - Modified Jul 28, 2015

I am having an issue with the Sardauscan software recognizing my arduino. I am using a micro rather than a non because I had a spare on on me.

What works:
Compiled and uploaded
Responds to commands such as L 0 1 and T R 100 just fine
When I type Sardauscan it responds "Hun?"

Sardauscan sees Arduino Micro in drop down
When I select the ok button is gray and does not allow me to proceed
This is the same issue for both the table and the lazers


there is a connect button : the little "usb plug"

Jul 29, 2015 - Modified Jul 29, 2015
Simonpackman1 - in reply to Ferretti

I actually clicked that and the OK button stays grey. When I exit it, the lazer icon stays red.

Somethime you must click several times (when you click, the program send a "Sardauscan" command and wait to receave a "hun?")

If it does not work, it is because the program didn't receave the response. maybee you've change the baudrate in thefirmware?
maybee you can change the laser 0µ from pin (use another than 13).

i don't own the same arduino as you, so i can't test.

I'm guessing it's the baudrate. I'll change it and make sure I try multiple times. Thanks for the help! I'm really excited to start scanning!

Where are the legs? and the piece that connects the camera to the scanner table? 123D crashes every time I try to delete anything. I suggest you use openscad or sketch up. Its much better software with industry standard export options for professional cad software.

as explained in the instructions theses parts are 2020 profiles.

if you want to print them, you can use these things : http://www.thingiverse.com/thing:280318

and scale them to your needs.

i'm sorry if 123D don't suit you and crash for you, but i realy like the ease of use of this program..

Misumi aluminum extrusion 2020 profile


no need to apologize, just most people use programs that can export to all cad software. If you plan on sharing cad software with other people you might want to consider other software. If you are a student you can get 3 year licenses for free with autodesk. There are also many free cad programs like sketchup which allow for easier collaboration in the sense that the majority of designers use software that is not compatible with 123D.

thank you! super fun build. all is good but one. motor only hums, doesnt rotate. i have tried other half steps... nothing. bad motor?

wrong wiring or not corresponding to you configuration.h in the firmware or
maybee your arduino can't deliver enough current, (try external power supply for the motor).

I have to ask. The Bottom Cam Mount and A 20/20 rail meet to form the neck yes? My 20/20 rail does not fit but everything else does perfectly. Did i miss a part?

yes the bottom cam mount is "around the 2020" and there is a screw in the upper cam mount that goes verticaly i the center of the 2020.

Jul 23, 2015 - Modified Jul 24, 2015

Hi, It can be used better camera and a bit stronger laser to get better quality of scan ? Thanks for an answer

Jul 24, 2015 - Modified Jul 24, 2015
Ferretti - in reply to amdpit

it can always be better.

but in my opinion, a a camera with higher resolution is only interesting with better laser (with thinner line).

the ideal situation is a conjuction of laser and camera is when the laser is bright and exactly one pixel wide.

Hi, I achieved this project. at this time I have some issues with calibration, but after reading all your comments I think I will make it work properly . I know it takes time but I would really appreciate a PDF manual for sardauscan software. Anyway I begin to have a more precise idea how to use settings correctly .
thanks again for this great project.

i know, but i'm realy buzy at work for now.

I've put the pdf in my "TODO list" but the list is already huge.

Hi, amazing project!
I'll build one ASAP :D

I'm a kind of noob, what should i search here on thingiverse to find a 20x20 profile?

Misumi aluminum extrusion 2020 profile

Thank you very much!

And what size should I print? (150mm, 200mm, and so on...)

look the instructions all the size are there

look the instructions all the size are there

May 15, 2015 - Modified May 15, 2015

Thanks Ferretti for an amazing project, i can see you have put a great amount of time into it even down to the smoothed corners on the stl's, 3 days of print and build time got me up and running using recycled builders level lasers and a uno

1 of my computers crashes trying to run Sardauscan in windows 7, its a compaq atom quad core with Intel 82945G graphics and no opengl, Prusa's problem I think.

The calibration is still confusing me along with a few other questions, please help.

1:- which direction should the turntable turn looking down onto the table ?

2:- which position are the lasers in laser, left to right or right to left ? (a colour code on the picture in the software would be nice)

3:- where is x in the x,y,z build dimensions? (another simple graphic please)

4:- why when i input 30 degrees into the laser position does it change when i try to enter anything else ?

5:- should there be no tilt at all on the camera?

6:- why does my point cloud look like it exploded

I wish there was a simple build PDF instead of trawling multiple websites gleaning small bits of info on each.

Thanks again for bringing this to the public for free and I'm wishing you good Karma


you need net 4.5 and opengl 2.1 to make the software work ( it use opentk a opengl wrapper and sadly it need opengl2.1 even if you only use opengl 1.0 functions).

1/ the table must turn clockwise while it scan .

2/ when you face the camera, the laser is 1 to 4 from left to right. (i will surely add color on laser in each interface in a future version)

3/ all the position ares from the center of the table. the x direction in from left to right when you look from the camera to the center of the table. the y is from bottom to up and Z is from the center of the table to the camera.

4/ it is due to the fact that the angle is only there for ease of definition, the program work with x y z position. when you enter 30° it convert that to x-y-z position, and the value displayed they are converted from x y-z to angle : there are some minor precision error. thets why the 30° is usualy displayed as 29.xxxxx or so.

5/ no, absolutely no tilt is allowed in the current state of implementation.

6/ it is difficult to say without seeing a image. but if separate laser scan does not match each other : it is a problem of calibration (build size or physical misaligment). if the lines are noisy. it is a laser detection problem. for that it is the "tune" interface (and the camera settings). try to play with the thresold value to get a good continuous line.( you can also change the camera exposure in the settings).

i wish i had time to do the PDF or some videos for the build, but sadly there is only 24h in a day and i don't have enough time. If i see that the scanner become popular, i will certainly make a wiki as soon as i find time.
I was hoping that i get some help from the community, but i get almost none so far, and it is a huge work for one person alone ( i barely have the time to respond to every questions i get).

Hi Feretti - if you find time to start a Wiki page, I'd be glad to contribute to it. Like you, I don't have tons of time, but can spend a few minutes here and there helping to build it up a little bit at a time... ;-)

i'm in contact with the guys from smatfriendz. they are the guys behind the smartrap and smartcore printer, they are enthousiast maker and they are completely in the same opensource mind as me. ( http://www.thingiverse.com/smartfriendz/designs )

they will certainly sold the scanner parts as a kit and help me make the scanner more accessible by doing a manual and support.

Comments deleted.

It should work on xp.

sardauscan need .net 4.0 and it use opentk that need opengl 2.1.

your problem is not there, it is a serialisation problem used in saving configuration of tasks/process or in pluggins.

ps: oups for the version number : i've surely forgot to update the assembly version when i've uploaded ;)

Comments deleted.

i don't understand what you ask. could you elaborate please ?

Comments deleted.

Did you have .net 4.5 framework ?

Did you have opengl 2.1 ?

did you try to remove all files in the [user]/documents/ sardaukan directory ?

Did you have remove the plugins directory (subdirectory in your sardauscan instalation) ?

Can you give me the full stack trace (all the text in the crash windows) ?

Comments deleted.

Did you have opengl 2.1 ?

Did you have remove the plugins directory (subdirectory in your sardauscan instalation) ?

Can you give me the full stack trace (all the text in the crash windows) ?

Comments deleted.

Did you have dot net 4.0 ?

Did you have remove the plugins directory (subdirectory in your sardauscan instalation) ?

the stack trace tell me that's a ressource that can be load, but i dunno why it only append to you.
according to google, it seem to be a program with mixed net 2.0 and net 4.0 :

can you try to recompile the code (with visual studio express) and tell me exactly where it crash (more information you can give)

If you cant, i can't help you.

ps: please be more exaustive in your response, it is realy time consuming to have to ask information 3-4 times to get the full response. if everybody do half response like you, i will never be able to help anyone.

Comments deleted.
May 16, 2015 - Modified May 16, 2015
Ferretti - in reply to scv36

press F5, this is a "first chance exception" in the load of opentk, the crash must be later.

Can you respond to all the questions please. all my questions. (opengl, plugin dir, etc, etc)

I don't wan't to spend my WE asking you the same question again and again.

Comments deleted.

i don't know why your system cant use the main window icon.

to remove it .

in visual studio, double click on the gui/mainForm.Resx

select the $this.icon and remove it

rebuild and try.

Comments deleted.

i dunno why your system canr deserialise icons,
you can try to remove all of thems from ressource to try.
But i think it is due to a bigger problem in your system. but i dunnowitch one.

yea "a bigger problem in my System", all Installed Prog of my System not Crashes ,you Prog Crashes with "Fatal error"

Win7 debuging error "the prog read/write in the Security Memory on Win 7" - AccessViolationExecption

the part that crash is part on the winforms framework, it crash when the windows icon is read from the ressource. I can"t do anything about it as it is dotnet that manage that. So the only explanation i see is that there is something different on your system. (the same exe work on many other user computer ).

I can't reproduce the problem, i can't debug on your machine, so sorry you are on your own. try to rebuild the source and debug yourself i can't do it myself.


I extract the Propertis Drawer new and copy in the Target ,run debug and the Prog no Crash.

ok - thangs for the help,great Project.

if after expaining the problem in 3 word you start talking german, i will not be able to help you. Sorry i only speak french or English. i don't understand geman.

If you want me to help you, i need a minimum of cooperation and informations.


Can you scroll to see all the call stack ?

it is the serialisation that crash, the serialisation is used to store the tasks settings or can be used in plugins.

Can you delete your plugin directory (next the exe file) and all your user directory ([user]/document/sardauscan) to see if it crash whitout any user file or pluggins ?

Regarding calibration:

Reading the posts below, for removing lasers simply click on the Scan task Settings -> Laser Selection and you will see all 4 lasers starting from 0 to 3, in my design I kept only 0 and 3, rest of it remove it.

I have several questions for Ferretti, first of all I saw that last images from this is from a previous version maybe 003, I saw this after Y field for lasers which is not updatable any more, because lasers should be at the same height with the camera you said, and adding new fields such as FADE_DELAY.

Any how after playing some time with your software, of course on another laptop, I see that at tune tab there are 3 parameters that are directly involved in laser points reading, what are they meaning, also value for height of your table is 150, from where did you measure it, and so on.

Also what is the meaning for all task, what does each other, something like tutorial for using patterns in Repetier-Host program.

Where do I find a description of most important fields meaning to help me configure the 3d scanner, because you made this only for a fix design, but if I want to customize I will lose another time until I find the perfect match.


May 7, 2015 - Modified May 7, 2015
Ferretti - in reply to 005

many questions there ;)

i will try to answer as best as i can.

the y of the laser is not important because it is a straight vertical line. so if your laser is a bit upper or lower, the line is the same. So i fix it to simplify the build calibration part.

With the (mutch faster) new version of image capture, the time for the laser to fade off and on is becoming critical : Fade_Delay is for configuring this delay. lower Fade_delay => scan is quicker, but there is a risk that the laser is not completly on or off when the next picture is taken.
All the other delays in the settings are for the host/firmware communication/actions

for the laser tune :
Min and Max are the minimum and maximum width of the laser. if at a certain height your laser is wider or thinner, it is ignored.
Theshord is the minimum value of red intensity for the laser, it is the most important tune value.

Table Diameter and heigth in the settings are the build volume: they are used to clip noise outside the cylinder.

ther many different types of task : to help to quickly identify a type of tasks they are identified with a combinaison of 3 icons the left icon is a icon for the input type.
the middle icon is for the function (or type of task).
the right icon is for the result or output type.

input/output type are (left/right icon)
"nothing" like the scan,
"scanlines" like "IQR" for example
"Meshes" like imput of "save STL"

the function or type of task (center icon)
Input, (like Scan)
Filter, (like IQR)
Transform, (like SCALE)
Smooth, (like bezier or surface)
MeshBuild, ( like mesh build)
Color, (like Texture adjust)
IO (like save STL)

Here is a quick description of the tasks
input task :
"grab picture" : you select a directory and it will take a picture at each rotation (if you want to use photogametry program like 123 catch)
Scan ... Start a scan

Filter Tasks:
Filter IQR : remove noise with a IQR filter
Filter Median : remove noise with a Median filter

Transform :
Scale : do a scale ( x,yz)

Smooth :
Angle : merge (average) all scan line within a angle range.
Laser : merge (average) laser X to all nearest laser Y (y is all laser other than X)
Bezier : do a besier aprowimation of each scan lines.
Surface : make a smooth by a simplified Laplace algorithm on the surface.

Texture Adjust : adjust the brigthness, contrast and gamma of the texture.

Load Sar load a sar file
Save xxx Save a xxx file.

the output file type
PLY and XYZ are there if you prefere to use a better program for the pointcloud , like meshlab or another.
STL / OBJ for you slicing program (the obj can also be imported in most of the 3d software like blender, 3dsmax )

Concerning settings of tasks:

If you edit the settings by clicking in the left column => you edit the default settings

if you edit the settings of a task in the right column => you edit the settings only for the current process.

Custom build :
the most important values are present in the interface: it is the size of the build.
If you whant to customise : keep in mind the center of the table is the center of the world;
the only thing you must take care of is that all the laser, camera must point to the center of the turn table with no tilt.
All the size is relative to the center of the table.

Rem: another important value for wide angle camera is the focal height/width of the camera sensor. i must find a way to edit these settings and to keep it for a specific hardware. it is in my todo list, just next the calibration improvement (i wait community feedback, idea, help for that)

005 - in reply to Ferretti

Yes, now is more clearly.
One more question regarding table, I saw that are 44 to 46 stops before rotation is fully complete,
where can I change this, lets say I want more scan lines to read.

Ferretti - in reply to 005

it is the precision parameter in the scan task settings :
1 => 15° rotation (but it was 15, the angle between lasers for debug purpose, i will change it to 5° or so)
100 => minimum rotation of the turntable.

May 6, 2015 - Modified May 6, 2015

Great project! adding structured light and two cameras would increase accuracy and speed

and price :)

I am optimistic now, however for 3drag I had some more problems
with the abs while the pla I resolved shortly.
Thanks as always!

Thanks again to the explanations, but unfortunately also with the correct distances
I can not do any kind of calibration.
Actually I did not clear it may be a problem of laser or light or the object of calibration.
The last attempt I wanted to do is to start with 1 or 2 laser but even here I can not understand the concept, I disable physically or by those who do not use software can tell the program to use only 2? (Configuration.h).
Also by the various post I noticed that no one has experienced this type of problem or at least it would seem easily overcome ....
It took less time in the assembly and calibration of my 3drag that It seemed to be impossible with all the variations of temperature, material, zero, heated plate, nozzle, engine belts and switch ...

It is probably the simplest solution, but I can not see it.


Thank you very much for feedback !
bye Ciao

Comments deleted.

when i see you "Calibrazione" image, you lasers don't seems to cross exatly at the center of the table.
(and not perfectly perpendifular to the table)

if you are certain they are well centered, there is a problem in your build size. (the center of the table does not correspond to the center computed from your build)

generaly speaking when you see in "correction" interface :
all color must superpose as close as possible.

  • a smaller or bigger color than the others => the corresponding laser is off the center.
  • many different contour for one color => the corresponding laser is not perpendicular to the table (or you camera).

rem :

  • each square in the correction preview window is 10x10 mm
  • you can try to put something bigger, with vertical contours like a mug, a box, etc (not red, it may help reduce noise) centered on the table for the "correction" part. it don't have to be the calibration object.

To use only one laser, you can edit the firmware configuration.h file(#define LASER_COUNT 1 ) to return only one laser. or click on the gear of the scan task in the software and select only one laser there.

ps2: i 've calibrate my 3drag in 4 weeks, to get the resolution and speed i wanted, good job if your calibrate yours in less time ;)

Thanks ! Unfortunately, I tried to start with measures defined by the images that I saw on the various projects.
I try with the reference measurements that you provided me, thanks again.
The measure "x" as is taken? (from the center of the laser axis y?)
Regards Paul

all the measure is from the center of turn table.

for lasers, it is easier to do it by angle. with the rference build, the angle are 30, 15, -15, -30

Excellent project, unfortunately I can not in any way to make the calibration of the laser.
Light is essential but also perfectly following the directions on how to get the calibration results.
There is a video that allows you to follow the procedure?
I post the link with some pictures (zip) of my tests.
I hope to complete a scan ....
Thank you anyway for your kindness.
Hello, Ciao


I encourage you to start with only one/two laser.

I think your build dimension isn't correct.
-> 31mm for y seems very low to me (i have 65-75mm).
-> -25° for the laser 0 and 250mm for the z seems incorect. as with 270mm for z i have almost -30°. (and your Z for the laser 0 is more than the z of your camera)

Don't forget to set the size of all the lasers ?.

you must have all the laser to superpose in the correction page (you can rotate,pan,zoom with the mouse, but the lasers must be almost correct before).

Well, I've got EVERYTHING almost sorted out. However, I'm using the Arduino Micro instead of the Nano. Which apparently doesn't reset when the serial connection is opened. I'm guessing the Arduino Nano does reset, because that appears to be the only time the firmware version is printed. And I think that's the only thing preventing my scanner from working. Everything looks right running it in Serial Monitor.

I'm trying to modify the firmware to detect a serial close and reprint the version number when it opens again, but so far, no luck.

it don't realy have to reset.

the firmware only have to resond to "sardauscan" command.

For whatever reason, it works if I send commands via the Serial Monitor, but not if I use the host software. But it does work for me if I use an Uno instead.

My stepper doesn't work... I already changed the half step to "4"... Do you have any help? :(

does your stepper move without any load ? ( remove the table)

if it doesn't move

  • have you verify your wiring and the pins value in the configuration.h ?
  • didn't you have a 12v stepper ?
  • your stepper of controler may be defect.

if it move

  • try to reduce the pressure on teh bearings.
  • remove the bearings an they support (but you only will
  • add a external power to your stepper driver.

Brilliant. Thank You for sharing. Have just got the Laser holders to make. Will post some pictures when assembled.

Hi, I can not see clearly from your pictures the connection between corner and lower and upper parts for camera, because corner use a 2020 profile and inside of the parts there is a round hole.

Because light is very important, maybe it is better to add a vertical black screen behind the table,
and what do you think if I turn the light off and use a flashlight up to the camera.

Issue: Sardauscan stopping for working immediate when I open it, having .Net 4.5 and Direct X 11

Thanks for your great job, already print major parts.

can you give the stacktrace of the crash ?

ps: no light needed, for better result reduce the camera exposure if the laser is not well detected.

it is the light/image stability that is important, don't place the scanner in a place where the light change or where the camera see moving things (like in front of a windows, etc)

here you an see how the corner/top goes : http://www.thingiverse.com/make:127347 http://www.thingiverse.com/make:127690

Sub 30$ 3D laser scanner Open harware/software project
Sub 30$ 3D laser scanner Open harware/software project
by scvette

there is no error message, I copy files from 004 dir to sardauscan and try to run executable.

You can see screenshots here, expires in 10 days:


I didn't connect any camera or arduino, I only want for now to open the program.

i have some troubble with your 'installation". you got source + binary in the same directory.

did you compile the code ? do you use the binary ?

the error you show is not in my code (i got special error message). it didn't give me nay information. it is probably a directx or dotnet problem.

try to copy only the binary version in a directory where "everyone" has full access. and try it. if it don"t work, try to run it with administrator rights.

I only tried to run Sardauscan.exe file, because I dont have installed Visual C#.

In Settings.settings file there is a link http://schemas.microsoft.com/VisualStudio/2004/01/settings but it fails when click on it.

Also I couldn't find config.xml file mentioned in Program.cs

Finnaly I will try to get Visual C# to compile the project.

the configxml is located in [user]\document\sardauscan but you don't need to edit the config.xml directly ( if not present the program will create it, when he start)

try to extract the binary (only) in a new directory where everyone has full access. and try there. if you get the same error, look in your event log, maybee there is a error that will help resolve the issue on your computer.

I tested on another computers, with video card better than mine and works fine,
so it seems that I have to change my hardware configuration.

Do you have a list of hardware and software requirements?

there is no harware limitiation that i know of.
i've run it on a old acer aspire one (notebook), it is slow but it work.

005 - in reply to Ferretti

After installing VS2013 and build the solution, when I click on Start, I get next messages:

'Sardauscan.vshost.exe' (CLR v4.0.30319: Sardauscan.vshost.exe): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Serialization\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Serialization.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
A first chance exception of type 'System.AccessViolationException' occurred in OpenTK.dll
An unhandled exception of type 'System.AccessViolationException' occurred in OpenTK.dll
Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

The program '[2184] Sardauscan.vshost.exe' has exited with code 0 (0x0).

005 - in reply to 005

After I made a test next messages appears:

------ Discover test started ------
Test run will use DLL(s) built for framework Framework45 and platform X86. Following DLL(s) will not be part of run:
OpenCVPluggin.dll is built for Framework Framework45 and Platform X64.
SamplePlugin.dll is built for Framework Framework40 and Platform X64.

Could be this the cause for not running sardauscan on my laptop?, and if yes what should I do.
Mention that I use WIN 7 on 32 bit with an integrated graphics card Intel Chipset 965

Ferretti - in reply to 005

I don't think so : it's the compile of the sample pluggin. there is a mismatch between the build of the opencvpluggin and sample plugin. you can remove them from the solution if you wish. they are not necessary.

to be sure remove the files in the plugin subdirectory of you laptop. but i don't think it is that.

My count on costs is:

202 Meters (ABS) = $18.70 + $32.04 in parts = 50.74. (actual costs so far)
I will be adding in quick connectors for the lasers, some wire and other minor parts.
Current cost includes bearings; but not connectors and wire.
113 hours to produce all of the parts on an XYZ Da Vinci 1.0 printer.
Producing 90% fill @ .1 layer on slow speed.
Modification from 200mm 20/20 to 195mm due to print volume issue.
I am closely tracking the whole project for cost and time.

On the lower camera mount; I am working on a re-mix with the 20/20 as a socket instead of the round hole. Also a modification for using a GoPro as well as the web cam. part 2 of the remix

I see there are changes to the STL files. (Is there something that has changed?)

only the door.

I have everything printed and it seems I am missing the connection from the corner to the camera holder. I'm sure this is a silly oversight on my part but I really cant figure out what piece goes into the camera holder part. Anyone have some pictures or insight?

the camera mount goes directly on the 2020 that come from the corner. (with a vertical screw in the middle of the 2020)

Would this work with a first gen kinect?

no the kinect isn't the same technology it work diferently.
the kinect has a normal camera, a ir camera and a 'ir projector'.

it poject a constellation of ir points and triagulate them with the ir camera.

with this scanner all you can do with a kinect is to use it as a normal webcam. (and i may be wrong but i think the kinect can't work at close range)

The kinect normally won't work at close range, but I had bought a special lens designed to shorten its range by half. But if it won't work then oh well.

I know people are using it as a scanner somehow, I just need to figure out how. lol

i'm not sure, but i think it is with "scanect"

I found this after I read your comment. I knew i'd seen some connect scans or scanners on thingiverse.


Just wondering what print settings people are using. I printed with .3mm layers and 90% on ABS. It's ok but does look as good as other people's pictures. I am logging all of the costs so far. I am at $30.27 (without including the cost of the filament). My printer has the settings of .1 .2 .3 .4 layers, slow med fast print, and density. In ABS are there any recommendations or should this be PLA?

i've print it with cura.
30% infill
speed 60mm/s

i've print it in pla, (green on a 3DRag the rest on a Maxi Kossel)

I dunno for abs, but ask im the used ABS : http://www.thingiverse.com/make:127690

Sub 30$ 3D laser scanner Open harware/software project
by scvette

Also, the PS3 Eye is not recognized, I am using the Twist HD as suggested in the original design, but would love to switch to the PS3 Eye.

did you try the version with the new camera hardware proxy ?

ps: correct me if i'm wrong, but the ps3 eye is only 640x480. the only good feature i see is the 60hrz. but it will not realy increase the scan speed as the bootleneck is the laser fade in/out time.

You can print a turntable 170mm or more across, 5mm thick.

This scanner is amazing! I was able to compile the software and run my first scan. Looks like a Picasso version of the small wooden figurine, but I haven't seriously calibrated the thing...

Thanks again for developing this amazing device!!!

What did you use for the turn table ? Is it printed ?

you can use whatever you want : printed, wood, hard paper, acrylic, plexyglass, cake plate, personnaly i used a old 200mm round mirror paint in black.

I am about 80% complete with printing parts and getting the shipment of parts in. (Still missing the Stepper Motor). It must be on a separate boat from china. The price of Hercules WebCam has nearly doubled in 2 weeks to 29$ or so. Is any web cam workable? if (720P). So far no real road blocks. I am hoping to have all of the pieces complete and parts in by next Friday.

Apr 3, 2015 - Modified Apr 3, 2015
Ferretti - in reply to cbitterfield

Hi Fabio,

I installed your Sardauscan software on my computer to learn how it works, but at first spot, there are far too much buttons
and functions. Is there a document or tutorial available for introduction ?

no sorry . i've not the time for now to do it.

here is what the button are for

After configuration
To do someting, you drag the corresponding task 'scan, merge, etc) to the right listbox, and you click "play" button.

No issue, I will continue trying.
I looked into the source code provided to get an idea, how it is working.
In firmware I could not find the code, which instructs the stepper library to turn or the lasers to switch on.
On Visual C side I could not yet get an idea, how your scanner can combine the result from 4 scanners into one result.
Maybe i can get a clue soon.

it is not realy 4 scanner, it is 4 times the same with different laser position.

the principe is take a picture all laser off, light one laser.
then the image processor make a "difference" of the 2 images. then it determine wich position per line correspond to the center of the laser (2D) .
then a pixel locator do the geometry from camera field of vision and laser position (or laser plane). it give a " semi profile" in 3D relative to center of table.
in the code it give me a "ScanLine",it is like a collection of point on a" meridian".
i do it for each laser, then i rotate the table and continue.

a "ScanData" is a collection of "ScanLines". if you take all the points in all the scanlines, it give you the pointcloud.

all the other task, do simple things on points (smooth, average, filter ets,).

on the firmware side, it is realy simple, search for the "stepper" variable to see how i use it, the on/of laser is just a DigitalWrite on the laser corresponding pin.

how much time does it take to make this?

I think my total print time was around 8-10 hours, but I definitely agree the shipping on the parts is what is going slow this project down.

dunno exactly because i've not done it in 1 time, i've remoade many part before getting the right ones.
But maybee someone who has made it can tell you.

As quick as you can gather the parts. Shipping from China for the lasers took the longest for me.

I can't find the camera linked to. Any alternatives? Or can you use a standard Logitec web cam?

yoou can use whatever camera you want, but you must redo the camera holder part

I am in the process of building one. The parts are coming in slowly.

Can you post a link or a better description of what this roller is "optionnal 3x 4mm roller (0.3$ piece)"

Also; can you post a specific number of M4 M3 screws in the BOM.

Mar 27, 2015 - Modified Mar 27, 2015
Ferretti - in reply to cbitterfield

you can see here the roller (bearings), they are there to support the table, but if your table is light and well attach to the motor axle and you only scan light object, it is not necessary.

for the m3, m4 count, by memory


3 * M4 to attach the provile to the center

3 * M4 for the roller (bearing) base

3 * M4 for the bearings

2 * M4 to attach the electronic box

4 * M4 to secure the corner

1 * M4 to secure the camera


2 * M3 to attach the motor

2 * M3 to attach the electronics

2 * M3 for the door of the electronic box

1 to 4 * M3 to attach the lasers to the arms

1 to 4 * M3 for the laser clamp

2 * M3 to attach the arm to the camera holder.

Still working on the bearings. There should be 3 number 4mm x 4mm x 9mm or a number like 605zz

i've used 624 bearing, but it can have a diameter a bit smaller or bigger,

This is the best design if seen ..good job :)
I'm printing one now
Is there a schematic for the wiring .?

yes see the picture.

yup thanks :)

I've done everything, but something happens because the program constantly crashes when i try to calibrate it or adjust the camera, please help.

can you tell what's the call stack when it crash ?

Shortly after opening the program It crahes especially when I press the button to calibrate the computer displays a message that says "The program stopped working windows will close it".
I thought it was a problem with my the laptop so concerned with the desk top but the result was the same, both are running Win7 and Iam using v.003 version.
I'm not very skilled with the open source thing so I apologize in advance.

that's realy strange because i only use managed code (for now). and i intercept all the program exception. you should have a more detailled message.

The only thing i can think of is a dot net or directx problem. can you try to reinstall "net 4.5 framework" and directx ?

I have reinstalled the two apps and though I could not test it thoroughly what little I've done still gives me the same message (well in spanish but the traslation is as Follows)
"Sardauscan has stopped working"
"Windows will close the program ·"
As soon as I can do more testing should I communicate.
Thank you very much and eventhough not get it to work yet, I'm convinced it's the best design I've seen.
best regards

i don't know what it is because it is a unmanadged error (not dot net). if you have a managed error, you got a window with more info for me.

the unmanadged code is only for the camera via directX. so i think it is a dx problem, maybee there is a driver for your camera.

i'm working on the 0004 version with new camera proxy, that support more camera/resolution.
maybee it will work.

  • the V4 is also much faster (2 to 3 time faster for the scan, but i got some problem as the laser didn't "fade out" quick enough)
  • i must also hide less inportant task to simplify the utilisation.

So i have some work to do to release the V4, but it will be soon.

v0.0.0.4 is out, try it.
ps: what's the brand and model of you camera ? (and windows version)

thanks for your answer:
The camera is logitech model C615 and operating system is windows 7ultimate. I will try it an I will imform you what happened

Today I tried it a little and no longer the program hangs, plus I was able to select my camera and see that works. but above all it no longer hangs.
As soon as I have more time I finish assembling it and start calibration.

cool ! happy scanning ! :)

Software and Firmware compile well, and can be uploaded to the nano (clone). I work under Windoze in VMWARE box on a Mac and hope to get the Software compiled under Mono to run on the Mac.

The wiring Diagram is a bit off, or my Arduino clone I need to connect the lasers to D13 and A0, A1, A2 instead of what looks like D13 and A1,A2,A3 in the diagram. Once corrected, I can switch all 4 lasers on and off.

Also, my Stepper motor did not make a single move until I applied the Mark Benson patch "HALFSTEP value to 4 & REVOLUTION_STEP to 2048 in configuration.h"

Okay I have a silly question. How do you start a scan? I have my electronics all wired up, my lasers fire, the table rotates (I had to use the settings recommended by Mark Benson "HALFSTEP value to 4 & REVOLUTION_STEP to 2048 in configuration.h"), I can see through the camera, I can do the physical calibration, the correction matrix, and I have double checked the build dimensions, I just can't figure out how to actually start a scan. I'm using V0.0.0.3 of the software if it makes a difference. Thank you in advance!

Mar 21, 2015 - Modified Mar 21, 2015
Ferretti - in reply to damauk

in the main interface, ( http://thingiverse-production-new.s3.amazonaws.com/renders/21/8e/82/fe/51/Untitled-1_preview_featured.jpg )
you have all the available task on the left listbox .

you drag/drop the scan task to the right list box (the gears icon is for configuration of task).

rem : by default a scan task save a "last.sar" file. ( a Sar file is a "scan result",)

you can add as many task as you want.. the left list box only show task thant you can insert in the right listbox a this moment.

when your task selection is done click the "play" icon at the bottom of the right listbox..

when you are happy with a process (collection of task) you can save it for furter use.

Here is how i generaly use it.

I select 2 task : "scan" and "Save point" : this process do a scan and save a Sar file.

then i click the "trash" icon, and load a process i've made for the mesh reconstruction.

my process for mesh reconstruction is made of theses task : a "load file", a "merge angle" a "surface smooth" and a "save STL".

Thank you. I knew it was going to be something obvious. It took me 20 minutes to figure out how to get the horizontal line in the physical calibration oriented properly. I was about to give up when I though "maybe I can move the line" of course it was the most obvious.
I can't thank you enough for sharing this amazing project. I'm going to my local maker space today to show off my scanner and I'm going to try to convince someone there to make one too.

cool! share your build. and give me feedback on soft, so i can try to make it better !

Hello MarkBenson:
The trick worked for me. Thanks it was driving me crazy

Comments deleted.
Mar 19, 2015 - Modified Mar 19, 2015

If anyone else is having problems with a BYJ48 stepper not doing anything, change the HALFSTEP value to 4 & REVOLUTION_STEP to 2048 in configuration.h. That works with my setup.

thx for the tips ;)

you can maybe change your STEP_BY_MINMOVE to 2 to keep the same rotation precision.

STEP_BY_MINMOVE is there to avoid power loss for laser between steps (laser does not light enough between steps)

Mar 20, 2015 - Modified Mar 20, 2015
MarkBenson - in reply to Ferretti

I did try changing that a few times, thinking it would fix the stuttering I was seeing in the stepper movement. Didn't seem to make any difference, but I think that is an issue in the gearbox when turning slowly. If the setting is there to ensure the lasers remain on then I guess it wouldn't affect the stepper movement... (I don't have any lasers attached at the moment - still waiting for parts to arrive)

these setting is just there to ensure the motor stop at a position where it didn't use too much current.
Whitout this, when the motor step beween steps, it consume power and the laser wasn't brith enough.
I didn't whant to disable the motor at each snapshot, and i found that 0.3° is already a good precision, so i move by 2 steps at a time.

I was thinking that the outputs driving the lasers need transistors as they probably draw a bit more current than the outputs are rated for. That might fix the dimming issue. I'll have to wait until my lasers turn up to try it.

thanks agian for the tips, i've add it in the README.TXT of the firmware.

Comments deleted.

How does the piece of calibration is used?. Thanks.

there are little instruction in the calibration part of the interface.

i've lready explained here but basicaly you put it on the center of the table, and you amnualy allign all laser and the camera to cross at the center of the table (the thin line in the piece is to get your laser vertical).

then you go to the 3rd page and move/rotate/scale the scan from each laser in the "correction matrix" interface. it is a top view of the scans, each laser has his own color. all the laser scan must superpose each other as much as possible. the better you do that, the better the result scan.

logitech cam c920 and c270 doesn't works. detected but can't make them work.

sorry i can't test it, i don't own one of them. did you have any crash or message so i can investigate ?

Sutpid question, but did you click on the'usb plug" icon next to the resolution combobox ? (it is not clear i know)

ps: pay attention that not all the resolution listed works, for exemple 800x600 don't work with the HD twist, the rest do, Dunno why, maybe due to native resolution?

What is the accuracy of the scan? Lets say I scan a 20mm cube, How close to 20mm will it come out?

hard to tell, the precision depend of your build, your calibration, the camera resolution, spread of lasers, the surface your scanning, the light environnement, the task you use in your process. etc etc etc. All these can infuence the result.

So i can't give numbers. but i can tell you that every one who says it get a "x micron" precision with this type of scanner is a lyar ;) cause perfect calibration and perfect condition is impossible.

but if it is the size that matter to you, you can add a "scale" task in your process to correct the size of the output to compensate the errors inherent of your configuration/build/calibration.

But be aware that it is not a professionnal scanner, with industial or chirugical build precision.
it is build by you with your precision.

Comments deleted.

it is strange.i will look at it.
it seems to me that you got very stange values in your config.xml file you have 111759 for a XY or Z position for a laser or your camera, the maximum is 5meter.
Can you send it to me in private message ( user/document/sardauscan/config.xml).

in the mean time, you can edit your values via a 'settings' button in the caption bar to edit the config.xml file (next to minimise):
try to put your XYZ for your camera and laser there first (in mm, relative to center of the table).

And then you surely can go to the calibration.

i will certainly upload a new release of the software on gitub tonight : with surface smooth, correction of previous bug, and other thinks.

This project is amazing! I have been wanting to get a scanner for awhile now, but I haven't found any that would fit in my budget. At the moment excluding the cost of plastic and the M3 and M4 hardware my total cost is about $60.00. I could have saved probably $15-20 by shopping around more but I was so anxious I order the parts as soon as I found them.I have already printed the parts and I am just waiting for the items from China to arrive and I haven't figured out what I want to use for my table. I do have a few questions.

1) Can you make an STL of a scan available to see what the output looks like?
2) How does the calibration object work? I assume the software uses it for calibration but I am not sure.
3) Is the software capable of scanning an object multiple times and combining the point clouds? By this I mean can I scan an object standing up and then lay it on its side and scan again, or would I need to save the point clouds and combine them in some other software?

0) thank you ;)

1) yes i will upload a STL, not edited with any other programs ( used task scan => merge by angle => surface mooth=> save stl)

2) the calibration is one of the problem i didn't solve completely, i'm trying to make it easier.
For the moment there are 3 different interface in the soft,
=> one to enter the size of your build,
=> one help you to align your lasers ( you place a object on the middle of the table, you manualy align your camera and your laser to superpose each other in the center of the table)
=> as the previous step is never perfect, i've added a third interface, that allow you to tweak the scan of each laser: in the interface you can rotate/translate/scale each laser result to supperpose them.

2.5) i've try ICP to match automaticaly the point cloud of each laser, but it was not concluent.

3) no you can't (for now ? dunno yet, maybee if i found a better technique than ICP). but you can "scan" => "save " and import in other soft like meshlab to do whatever you want.

sample uploaded

Maybe a silly question: What material do you use as the disk/platform that is being rotated, or am I just not seeing it in the BOM?

you can use whatever you want : wood, plastic, acrylic, plexyglass, carton, pie board, etc.

personnaly i use a spare 200mm round mirror paint in black mat.

You can print one disc too.

I just ordered all the parts, except of the webcam...
I understand everything except of how to compile the software and how to calibrate the scanner. Any hints on this would be appreciated!

Nice work!
Thank you,

Mar 16, 2015 - Modified Mar 16, 2015
Ferretti - in reply to TheZippyMan

there are help tool in the software to calibrate. (not perfect but hey it's better than nothing ;) )

for the compilation
just download and install visual 2013 express for desktop.
doubleclick the sln file.
And click "build" in the menu.

or you can just use the already binary in the zip file of github.

Thank you very much! I am looking forward to complete my 3D scanner! Do you have any experience with the 3D printed 20x20 profile? Is the strength enough?

no i don't. but there is verry little strength in play here.

Ok thank you!

If anyone gets this going, would you please take the time and document this properly for the, not so smart, rest of us. A clear wiring diagram would be nice. I'm out till then.

Mar 16, 2015 - Modified Mar 16, 2015
Ferretti - in reply to madmike8

will do, but i need some time

meanwhile here is my previous comment on that question

refere you to http://thingiverse-production-new.s3.amazonaws.com/renders/98/12/0a/3b/9d/DSC_0304_preview_featured.jpg

here from the firmware configuration.h

for the motor // Motor definitions
(green,yellow,orange,red on top/left of picture)
define motorPin1 2 // IN1 on the ULN2003 driver

define motorPin2 3 // IN2 on the ULN2003 driver

define motorPin3 4 // IN3 on the ULN2003 driver

define motorPin4 5 // IN4 on the ULN2003 driver

5v to 5v pin of the arduino and - to grnd pin (red/black on bottom/left of picture)
for laser, here are the + of laser (the - on grnd pin black on top/left)

(bottom/right of picture)
define LASER_PIN_1 A0 //yellow

define LASER_PIN_2 A1 //orange

define LASER_PIN_3 A2 //green

define LASER_PIN_4 13 //blue

thats all

wiring image added

Thank You!!!

Hi Ferreti,

I was able to compile the Firmware.
But, it seems that the software is not communicating with the stepper motor.
When I use your table tool inside the client.

any suggestion?

I followed your wiring diagram below.

define motorPin1 2 // IN1 on the ULN2003 driver
define motorPin2 3 // IN2 on the ULN2003 driver
define motorPin3 4 // IN3 on the ULN2003 driver
define motorPin4 5 // IN4 on the ULN2003 driver

to check if your motor is well wired,
try it in the arduino serial monitor window (set the same baudrate that the one in your configuration.h, #define SERIAL_BAUD 115200)

try to send for exemple "T R 200" to see if your table is rotating. if it is not turning, your wiring is probably wrong (did you forget to set the 5V/GRND from arduino to stepper controller? it append to me ;) )

Would you be willing to update the BOM to include the 3D printed parts so we know how many of each to make without checking the pictures? Also, could you include instructions for setting everything up? It doesn't have to be detailed. I'm just not sure how to start with the project.

i've updated instructions

The Bill of Materials (BOM.txt) is empty. I have all of the parts except screws. Looking for a count on that.

Mar 14, 2015 - Modified Mar 14, 2015

got all my parts printed and ordered. compile failed.

Error Log.

Arduino: 1.5.6-r2 (Windows 7), Board: "Arduino Nano, ATmega328"

Build options changed, rebuilding all

FirmWare:31: error: 'AccelStepper' does not name a type

FirmWare.ino: In function 'void TableCommand()':

FirmWare:62: error: 'stepper1' was not declared in this scope

FirmWare:73: error: 'stepper1' was not declared in this scope

FirmWare:88: error: 'stepper1' was not declared in this scope

FirmWare:101: error: 'stepper1' was not declared in this scope

FirmWare.ino: In function 'void setup()':

FirmWare:163: error: 'stepper1' was not declared in this scope

This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.

Hello you must install the accellstepper library in arduino


(forgot to mention in the readme, sorry my bad)

My goof. I didn't rename the AccelStepper folder correctly.


Just tried to compile the firmware to my nano and it gave me this error.

"FirmWare.ino:2:26: fatal error: AccelStepper.h: No such file or directory
compilation terminated."

Did anybody successfully able to program the nano with the firmware?

Sorry, im new to this arduino programming.

thanks for the help

Hello you must install the accellstepper library in arduino


(forgot to mention in the readme, sorry my bad)

Is it possible to use my DLSR camera for this if I hook up the DSLR to work as a webcam?

I think so (if your DLSR camera work with Directshow)
But pay attention, Acquiring images and Computing/processing on extremely big resolution will take long time and vast memory.

for exemple a 640*480 scan with 1-2° between earch sample generate pointclouds of 500k points.

Thanks! I'll give it a shot

Mar 10, 2015 - Modified Mar 10, 2015

Not realy needed, it's so simple :
here from the firmware configuration.h

for the motor
// Motor definitions

define motorPin1 2 // IN1 on the ULN2003 driver

define motorPin2 3 // IN2 on the ULN2003 driver

define motorPin3 4 // IN3 on the ULN2003 driver

define motorPin4 5 // IN4 on the ULN2003 driver

  • 5v to 5v pin of the arduino and - to grnd pin

for laser, here are the + of laser (the - on grnd pin)

define LASER_PIN_1 A0 //yellow

define LASER_PIN_2 A1 //orange

define LASER_PIN_3 A2 //green

define LASER_PIN_4 13 //blue

thats all

thank you budy...

hi, can you upload a wiring diagram for the arduino w/ stepper motor an laser??? thanks

printing my parts now!

how long are the extrusion pieces?

the lengths are in the instruction page, but is not so important. all you have to care is that your camera see all your object, especialy the top part.

i saw that right after i posted..thanks cant wait to try my first scan

What are you using as the plate?

you can use whatever you want. wood, plastic, glass, cake plate....

Personnaly i use a spare round mirror buyed in a pack when i wass building a 3dr simple. painted in black mat

What are you using as the plate?

Would this work with an arduino uno?

On github it looks like all you have is the source, no compiled executable yet?

i just put one, but i didn't have any installer, copy the zip content in a directory where you have admin rights ( it create sub durectory). all the user file are in the [user]/documents/sardauscan/...

ps: don't forget to upload your arduino ( and adapt the firmware/configuration.h to match your wiring)

Do you plan on releasing a compiled version of the software when you are satisfied with the stability of the program?
I'd love to play with it but don't have a compiler for C#.
I promise not to complain if it catches my computer on fire. :-)

Comments deleted.
Mar 8, 2015 - Modified Mar 8, 2015

Nice work.

Can you provide the source files (aka the STEP) of the camera mount section? That way folks can mod it to accommodate other USB Camera's they already have.


Mar 8, 2015 - Modified Mar 8, 2015
Ferretti - in reply to ymilord

Sorry but 123d design only save 123dx and stl

the 123design file has been add.

The 123dx file is fine. I can convert that.

How is converting the 123dx file a significantly different experience than importing the STL and working with that? When converting is any editing information retained?

You can't edit STL's (And keep the model parameteric). Converting the 123dx to STEP (Or anything else) does.

I guess I'd just have to see it in action. It seems to me that the process of converting bakes any parameters into the model.

Mar 8, 2015 - Modified Mar 9, 2015

the top bracket is made for a Hercule HD twist. 1200px cheap webcam.

All usb webcam should work.

If your Camera is not supported, there is a pluggins system. maybee someone will do one for your camera.

What kind of camera will be needed ? Can a cheap webcam, or a gopro do the job ?

I guess I can start my printer soon :-)

the program is not yet release, i'm working hard on it.

for the future fonctionnement, in the main window, you will be able to make "process" by drag and drom task.

a task is "scan", or any other operation.

a typical task will be "scan"=> "save XYZ" if you want to use the result with another soft.

or if you want to use the build in task you can "task" => "remove noise" => "build mesh" => "save STL" if you want to get a STL

there are also help for calibration, tuning of laser detection, camera settings etc.

Love the project im printing it asap but can you please help i dont understand the software / how to usse or even open it

Thank you
oups i forgeo the lengths.

i set my length in the instructions (sorry i forgot)

but you can use any lenght you want. "the bigger length" the "bigger the volume" (but precision will decrease). All you need is the Camera to see all the turn table .

why 4 lasers?
The more you got the more samples you take ;)
(but the calibration difficulty increase with the number of laser)

For a scan sample, you must take 1 picture whitout laser and one for with each laser on.

So for exemple with 3 lasers you take 4 Picture.
it will be 2 times longer than 1 laser, but you got 3 times more scanlines.

the application will allow you to chose how many laser to use for a scan ( and wich ones too).

Mar 4, 2015 - Modified Mar 5, 2015


What is the 20x20 profile Lenght ? ( just saw , you add the info into the description ) tks

Why it s better use 4 laser's line than 1 or 2 ?

Great Job , my printer is running ;)

i'm too ashamed of the code to put it now on github ;)

i need to clean it a little bit
put some comment to help others to understand the code.
and put all the credit of the open source i've used/modified for my program.

but i will, i dunno if it will be github, but i will.make it avalable in a near future.

yes it will be available but i have many thinks to make ( increase the stability, find better noise filter, better data smoothing, better mesh construction, rework the interface, make calibration Helper/tester and find a way to load/save process with task settings, etc)

the firmware is realy minimal and basic:
it only respond to command for lasers and rotation (ex "L 0 1" to set the laser 0 pin to HIGH, "T R 200" to rotate the table from 200 step).
I can post it but has nearly zero interest without the application.

if you put it out there (Github?) others may be able to help.

This looks like an amazing project!!! Can the software be downloaded as well, where do we find the firmware, even if it still in progress?

Apr 4, 2015 - Modified Apr 4, 2015
robertoreis - in reply to Ferretti

Any Chance of compile for mac computers?