Ciclop 3D Scanner (BQ & Horus)




Introduction: Ciclop 3D Scanner (BQ & Horus)

About: I am an electronics engineer working in telecommunications in the UK. Generally I work on chip design for digital radio receivers. I like all things arty and consider chip design a bit arty :) Basically I h…

Good day everyone,

Little bit of an introduction and background:

My name is Dave and I am from Bristol in the UK. Late last year I took the plunge and after much research and question asking I bought myself a 3D printer. The printer I opted for was the Lulzbot TAZ5. This printer is a product of Aleph Objects Inc which are based in Colorado USA - I point out now I have no connection with the company at all other than buying one of their printers. I have found the printer to be excellent, very reliable and a joy to use. As important as the printer the customer support from Lulzbot has been amazing, no in fact exceptional !

For anyone interested here is a little video I made going through the printer unboxing and set up:

I have been using the printer to print all sorts of things from artistic sculptures to brackets for bikes. A while ago I came across the open source Ciclop 3D scanner project and thought I had to build the design.

The Ciclop 3D scanner is an open source project that anyone who wants to invest some time can build. So all the designs for the component parts, the hardware, the software and the firmware are available on-line. Therefore, this instructable is not my design but instead a description of how I went about building the Ciclop scanner. I have made some small modifications here and there to the printable parts to better suit my particular 3D printer. These modifications are specifically to the support structures required to print overhangs.

Most of this instructable consists of lots of photographs, screen shots and some video showing the progress I made building the Ciclop and hopefully will help anyone else who may want to have a crack at building one.

Step 1: Ciclop 3D Scanner - the Basics

The Ciclop 3D scanner allows any object of a suitable size to be scanned in thee dimensions ultimately resulting in a model that after post processing can be edited, manipulated and reproduced using a 3D printer.

The object of choice is placed on a rotating platform. As the object is rotated two line lasers illuminate the object from two different angles. A camera then scans the illuminated object at each rotational position. The data from the camera is then used to build a 3D point cloud of the object.

The Ciclop scanner is constructed from the following basic building blocks:

- A series of plastic components which can be produced using a domestic 3D printer

- A series of threaded connecting rods which hold the plastic parts in position

- A microprocessor control system & firmware used to locally control the platform motor & lasers

- A good quality camera used to capture the lined scanned data

- A PC based software application used to perform calibration, invoke/control scanning and assemble the result

Over the following instructable steps I will go through the above basic component parts in order to share my experience of the build.

Step 2: The Ciclop Plastic Component Parts (Lulzbot TAZ5 Printed Using HIPS)

Shown above are most of the Ciclop plastic component parts, all these components were printed on my TAZ5 3D printer using red HIPS 3mm printing filament, an extruder temperature of 240C and a print bed temperature of 110C.

The models for the components were downloaded from thingiverse:

Here is the pattern and pattern holder:

I personally found that the support material used on the camera holder and motor holder did not print particularly well or provide adequate support. I subsequently imported the designs into Meshmixer and removed the support. I then imported the support free models into Simplify3D and added my own custom support structures. Unfortunately, it is not possible to output the models including the support structures from Simplify3D in an STL or OBJ format. The models including support can be exported from Simplify3D but only using the tool's own factory file format. So the upshot is I can only share the models including support with other Simplify3D users or provide the ready to print Gcode. The Gcode option may be ok if you are using a TAZ5 3D printer but may not print as well on other brands of printer.

There are links to other aspects of the project on the thingiverse link. However, I did find more useful links to the required project parts which will be detailed in subsequent steps.

The following steps simply show photographs of the results of my printing and the Ciclop mechanics assembled.

Step 3: Ciclop Framework Excluding the Motor and Platform

Step 4: Camera Holder Base

Step 5: Motor Holder Base

Step 6: Camera Holder With Camera

Step 7: Platform Holder Including the Bearing & Clips

Step 8: Platform Holder, Bearing & Clips, Calibration Card Holder and Shaft Coupling

Step 9: Laser Holder

Step 10: Motor Mounted Into Motor Holder Top/bottom

Step 11: Bearing Mounted in Holder and Bolted to the Platform

Step 12: On-board Motor & Laser Control System

The on-board motor and laser control systems is based around an Arduino UNO ATmega328P control board. I don't generally use the Arduino system for my other microprocessor based projects preferring to build bis-spoke based control systems around a PIC microprocessor best suited to the application. However, the Ciclop project is not my design and so I ventured into the world of Arduino.

Although I was going to spend money on the Ciclop project I was prepared to cut a few corners and get the price down a bit. To this end I first decided to buy a cheap Arduino clone board from Ebay for the unbelievable price of £3.99 delivered. The Arduino control board is the blue board pictured at the head of this step. The board is based around the ATmega328P microprocessor. The board has a simple linear power supply, a clock source for the micro, a reset button and a few leds. The idea behind the Arduino system is that you take you basic control board and then plug what is termed a shield on top. The shield is an application specific hardware board that acts as an interface between the microprocessor and whatever it is you want to control. This is a simple but very powerful system. The basic control board is generic and mass produced at very low cost. It is then left to the community of developers and anyone else for that matter to go on to produce a staggering range of shields to perform just about any task you care to think of. For example last year I built a quadcopter using a flight control system that is essentially an Arduino platform with an integrated flight control shield. Mounted on my quadcopter I have a two axis stabilized camera gimbal - again an Arduino core with an application specific integrated shield. For the quadcopter it made more sense for the shields to be integrated. However, for the Ciclop the shield is a more traditional piggy back interface board. The Ciclop shield provides the hardware interface control for the bipolar stepper motor and also for the line laser control. In the case of the Ciclop shield the integration is taken one step further and a stand alone bipolar stepper motor driver module is used as these modules are used extensively in the 3D printer and home CNC market and are very inexpensive.

In order to save money I chose to buy my Arduino Ciclop shield as a kit.

The Arduino shield kit I purchased from eBay here :

Support from this supplier was VERY good and the kit is sourced from the UK.

Step 13: Downloading the Firmware to the Arduino Platform

In this step we will go over the process of downloading or programming the Arduino platform with the firmware.

Firmware in this context is essentially the code that runs on the Arduino ATmega328P microprocessor. The board is supplied already programmed up with the bootloader so all that is necessary is to use the Arduino Integrated Design Environment or IDE to program the board with the Ciclop firmware.

The process is as follows :

- Install the Arduino IDE after downloading from the internet

- Download the latest version of the firmware, you need the horus-fw.ino sketch file

- Download & install the CH340G driver if you have a clone version of the Arduino board. I will elaborate slightly on this point. Authentic (non clone) Arduino control boards are fitted exclusively (as far as I am aware) with FTDI USB to serial interface devices and therefore require the appropriate FTDI software driver. However, for various reasons outside the scope of this instructable most of the clone boards are now fitted with a different type of interface device that requires a different driver (CH340G). In my experience once this driver is installed the board appears as a COM port and everything else operates as expected.

- Connect the IDE to the board via the appropriate COM port (look in the Windows device driver list to determine the correct COM port) (see screen shot)

- Select the board type (see screen shot)

- Select the programmer (see screen shot)

- Load the firmware sketch (see screen shot)

- Upload the sketch to the board

One thing that is worth trying if you are new to all this Arduino business is to up load an example sketch first just to give you the confidence that everything is working correctly. Under the IDE file menu there are a bunch of example sketches - one of which is simply called blink. This sketch once uploaded just flashes an LED on the Arduino UNO board. So you don't need the Ciclop shield fitted at this stage just upload blink and sanity check that the board LED is flashing. Once happy you can go onto load up the Ciclop sketch and program the board. The entire programming process for the Ciclop firmware takes just a few seconds.

Step 14: The Camera Connection and Driver

The camera used is a Logitech C270 HD webcam, sourced from eBay. Once you have your camera you need to install the camera driver.

I downloaded the driver from here :

The camera simply slots snuggly into the top of the camera holder. The USB cable runs down through the camera holder and out of the base.

Step 15: Using the Arduino IDE to Select the COM Port

Note the COM port in MY case was COM12. However, for you it may (probably will be) different. Under the Windows control panel open the device manager and check which COM port has been allocated.

Step 16: Using the Arduino IDE to Select the Board Type

Step 17: Using the Arduino IDE to Select the Programmer Type

Step 18: Using the Arduino IDE to Select the Sketch (Ciclop Firmware)

Once the firmware has been successfully programmed you can plug the laser/motor control shield onto the Arduino board - the controller is now ready for integration into the Ciclop scanner.

Step 19: Arduino UNO and Laser/motor Control Sheild Fitted Together

This series of images show the Arduino UNO control board and the laser/motor control board fitted together.

This is a good point to issue a word of WARNING as there is a possible issue with the shield / Arduino combination if you do not take the advice of the shield supplier. In the eBay description of the shield it quite clearly states that ideally the Arduino UNO board used should be fitted with a mini USB connector. This is because an UNO board fitted with the larger type USB connector will foul the 12V power connector fitted to the shield - you can see this issue in the photographs. I did not heed the advice given and as a result had to file the solder profile down under the power connector and used a double layer of Kapton tape to prevent a short.

For a more suitable Arduino UNO board I would search for "Arduino UNO mini USB" on eBay.

The shield worked perfectly first time and is by far the best value for money currently available - and you get to build it which adds to the fun !

Step 20: The Motor Connection

I think it is worth just going over the motor connection to the laser/motor control shield. I bought my motor from eBay and it was supplied with a header connection on the side and a plug with about 1m of cable - very nice. However, it may not be obvious how the four connections of the motor connect to the motor controller. I do quite a bit of work with stepper motors and it never ceases to amaze me how much misinformation there is on the internet regarding their connections. There are two main types of stepper motor Unipolar and Bipolar - this particular motor is a Bipolar type with four wires. Essentially inside the motor are two coils with two wires connected to each coil - hence a four wire interface.

The laser/motor control shield has a four pin header labelled 2B 2A 1A 1B

Pins 1A & 1B connect to one of the motor coils and 2A & 2B connect to the second motor coil.

Looking at the attached image for the particular motor I have the connections are as follows :

1A - Black

1B - Green

2A - Red

2B - Blue

This connection ensures the motor runs correctly and also rotates in the correct direction.

The motor I used is a Nema 17 type labelled : JK42HS40-1704-13A

Step 21: The Lasers

The lasers used in the project were 5mW focusable line lasers, again sourced from eBay. Each laser has a rotatable diffraction lens mounted on the front which projects a laser line and by rotating allows the laser line to be focused.

The laser holder plastic parts as printed were obviously intended for a laser with a smaller diameter body and so my lasers didn't fit. I could have imported the laser holder model and modified it and then re-printed ..... it was late by that stage so I just drilled out the plastic to 12mm and popped the lasers inside.

I extended the fly leads to each laser with spare red/black wire that was left over after cutting the motor lead to length. All leads were soldered and then made secure with a heat shrinkable covering.

The two lasers connect to the laser/motor control shield as follows :

Left laser connection port 1

Right laser connection port 2

The red lead connects to the inner most pin closest to the motor controller, the black lead connects to the outer most pin closest to the board edge.

Here is a link to the lasers I used:

Step 22: Mechanical Construction

The mechanical construction of the scanner is reasonably obvious. However, there is an excellent video available showing everything in detail :

Step 23: Horus Application Software and Documentation

The PC/Linux Horus application software can be found here :

I didn't see much point in explaining the software operation in detail when all the documentation has already been done so well.

In order to get good results I would suggest reading all the documentation rather than just diving in. There is not that much to read and after ten minutes you will be better equipt to get a good result.

Step 24: Finished Ciclop Scanner Quick Video Look Around

This video is just a quick look over the finished scanner prior to performing calibration.

Step 25: Ciclop Scanner Calibration Workbench

After reading the documentation I decided to use the set up wizard and simply follow the steps. Once the calibration grid has been put into the platform the first thing.

This video shows the calibration sequence if not using the wizard.

Step 26: Ciclop Scanner Scanning Workbench

This video shows the scanning operation.

Step 27: Post Processing the Results in Meshlab

Once you have successfully scanned an object what you have is called a point cloud. This point cloud is not something you can just load up and 3D print. As the name suggests it is simply a cloud of scanned point and not a printable closed 3D mesh.

I am sure there are lots of ways and tools to turn the point cloud into a 3D closed printable mesh but my tool of choice is Meshlab which is free, open source and truly excellent :

I would not admit to using or fully understanding every aspect of Meshlab and it can be quite daunting when you first start using it. I use the bits I need and try and understand as much as possible.

So I thought I would include a step at the end of this instructable showing how I use MeshLab to convert the point cloud obtained from the scanner into a solid printable mesh and also transfer colour texture information from the scanned point cloud onto the mesh. Transferring the colour maybe not be that useful if you are going to 3D print the scanned object but you might want to use the scan for some other purpose where colour from the original point cloud scan would be nice to have.

I have uploaded the results of the scan and post processing to my web space, feel free to download and have a look.

Download :

The ZIP file contains three files:

The point cloud scan obtained directly from the Ciclop : can_scan.ply

The mesh created from the point cloud : can_scan_mesh.stl

The mesh plus colour created from the point cloud : can_scan_mesh.ply

Step 28: Ciclop 3D Scanner Project - Conclusion

This has been a great deal of fun to build and I think I have learn some new things which is the whole point. It is a good project as it covers many different areas - 3D printing, electronics, mechanics, optics, software, firmware, microprocessor control, 3D image manipulation and post processing.

I am not sure how much I will use the scanner and for what purpose but that is not the point. The point is to buy cool stuff, put it all together in order to learn new things and gain a few more skills.

Please point out any inaccuracies or errors, I will correct. Also please fire away with any comments or input as I would be very keen to hear what people think.

Remember ....... build and have fun !

2 People Made This Project!


  • One Board Contest

    One Board Contest
  • Fix It Speed Challenge

    Fix It Speed Challenge
  • Anything Goes Contest 2021

    Anything Goes Contest 2021



Question 4 days ago

Can any one help me with scanner settinngs? My "cloud" is always scrambled like this. I have tried many brightness, contrast, and "exposure" settings. Calibration seems to work. Any ideas?

ciclops 011522 20220114_190942.jpg

6 weeks ago

Good creation Dave, the mention of the problem with the Arduino Uno Board and the common USB case (suggesting the ""mini USB" version) was a probe of real world unexpected punches that you found and avoided to others with your suggestion..
Honestly I only found an important not mentioned part THE BEARING. Yes it appears with the plastic parts image, but I don't think you suggest building it in plastic.
So I add the info that would help a builder with limited money to spend (as me) : the STEEL bearing for this device is a 16014 sized 70x110x13 mm , and the cheapest price I found was £15 delivered from AliExpress web.
The bill of materials is important, especially considering that THIS BEARING can be the second most expensive part after the Logitech CAM , but unlike the cam (that could be found surplus below £15) this rare bearing I seriously have doubts it can be found in the real world surplus, becoming so in practice the MOST EXPENSIVE PART of the full bill of materials.


4 months ago

Hi ! for step 18, i have issue in uploading the sketch. there's error message status 1. how do i solve that problem ?

Adalberto Scarlati
Adalberto Scarlati

Question 12 months ago on Step 25

Desculpem, sou leigo no assunto e preciso de ajuda. Segui todos os passos para a montagem do Scanner Ciclop 3D e cheguei até a calibração, porém o Horus não consegue detectar o motor. Pesquisando pela internet percebi que tem placas Zun Scan que vem acompanhada com uma placa de driver A4988. A minha não tem. Será esse meu problema?


12 months ago

Good day. Interesting project. Built by scanner, I downloaded the Horus 0.2.rc1 software and installed it without any problems. If the program does not start at all. I do not know where is the problem. Computer with Windows 10 64 bit, 32BG RAM, 8 CORE INTEL CELERON. I will ask for advice. Well thank you. Navoy


1 year ago

Has anyone found working Horus soft/firmware for the Ciclop scanner to work on a MacBook pro I cannot seem to find it anywhere . please advise.


Reply 1 year ago

Hello, I am from Vietnam. Could you help me fix this problem?


Reply 1 year ago

Hi there,
Yes the motor has to run in the correct direction - clockwise I think. Silly question but have you gone to the software preferences and reversed the motor as the error message suggests ? The other option is that you can reverse any two of the motor wires and the direction will reverse.

Jonnie Cache
Jonnie Cache

1 year ago

Has anyone gotten the software to actually run? The instructions at no longer have valid links to executables for Mac or Windows. GitHub doesn't have any compiled releases either. I have tried and tried to get this to compile on my Mac, but I can't figure out all the dependencies. Admittedly, I'm not that familiar with Python, but I can't get it to compile. Does anyone have a Mac version of Horus compiled? I would even take a Windows version as I can always run that in a VM on my Mac if need be.

Any help is appreciated!


2 years ago

are there any other programs to run cyclops 3d scanner besides Horus? Horus SUCKS I have tries a million wont see the image to calibrate anything.the next step is the garage.


2 years ago

I search for the horus-fw.ino file, but when i open it it says:
/* *//* Hack file to use Arduino IDE *//* */
How do i "hack" the file? which file?


Question 2 years ago

I have problem with scanning. After scanning an ordinary block, the result was a "milky way of pixels". I don't use a logitech C270 camera but another one. Could there be a problem? Thanks.


Question 2 years ago

hi. someone know when Horus software will be available for Mac Mojave 10.14? thx


2 years ago

Dave, First thanks for this site. It has helped in the construction of my
ciclop scanner. I do however need help in how the jumpers are supposed to be set. Any help with this from you or others is appreciated. Thank you in advance.


Question 2 years ago

J'ai un problème lors du démarrage du scanner ,je n'arrive pas à configurer la caméra donc le scanner ne fonctionne pas défaut au annoncé "flux vidéo non valide" déconnecté puis reconnecté le câble USB de votre caméra.
Merci pour votre aide


2 years ago

I know it's 3 years late, but this is a great project, and I'm getting ready to build one. I figured others might be, too.

To all those unanswered queries regarding the bearings, it's a 16014 70x110x13mm Deep Groove Ball Bearing, available here:

This information comes from Page 3 of the build instructions for CICLOP stored at

The rest of the stuff appears to be readily available on Amazon as well. Here's my shopping list:
Logitech Camera:
Zum Scan Shield for Arduino:
Stepper motor:
Red line lasers (12 mm, like Dave's - the original project doc I found just says "lasers", unfortunately. I plan you adjust the .stl for the holders to accommodate 12mm cylinders):
10 Uno R3 boards (Cheap! Having 9 spares will be handy!):

My apologies for not getting involved with 3d printing, and, therefor, not getting interested in this 'ible sooner :)


2 years ago on Step 20

Hi, during the scanning ,table rotates for 3 full rotation. Please help me to rectify this problem


3 years ago

What threaded Rods are being used in this build?