Originally, what we call today 3d printer was nothing more than a numeric control machine. The big change came when very chip controllers have been released on the market
and with the introduction of equipment like plastic filaments and hot heads able to create solid figures using special plastic filaments called pla or abs. With the introduction
of controllers like Arduino or raspberry also the usage of the old plc language evolved and the same concept is now expressed into the language that we know as G-code. The G-code
represents exactly the same concept expressed by the plc, so a generic machine, using steps motors is able to move on the 3 axes a mechanism able to do something. In the case
of numeric control hardware is a drill or a specific equipment, in the case of a 3d printer it is a hot end and a steps motor to move the filament (Bowden or not).
So, at the very end, a modern commercial 3d printer is nothing more than a numeric control hardware with a cheapest board and a different mechanism used to create the object from
the precision drill to a plastic hot head manipulator.
The controller (in my case Arduino but you can have different options available on the market) of a 3d printer has a firmware who, open a serial port and communicate with 'someone'
on the other end (we will see later who is on the other side). The communication via serial is made sending g-command which are interpreted by Arduino and then executed using the
available hardware (step motors, hot surface, sensors etc.)
The G-Code is also known as language rs274 and has been invented in 1950. Every G command can implement something on the printer simply moving steps motor or extruding material
or warming up plate and hot end.
Typical actions G-code directs include:
• Changing a pallet
• Rapid movement
• A series of controlled feed moves, resulting in a workpiece cut, a bored hole, or a decorative profile shape
• Controlling feed movement, in an arc or a straight line
• Setting tool information
For example, if you send to a 3d printer the g28 command, you ask it to home all axis. This is an activity that usually you do at the beginning of a print (to align steps motor and
to store in a variable to original starting position) so you will see it sent usually at the beginning of a sequence of G-commands.
This means that if we are able to translate a draw in a Gcode set of instructions, we will be able to print the draw. Print a draw in a 3d environment, obviously, means: 'build the object'.
Another important aspect is that thanks to the makers sharing community, today, in most cases, firmware source code is available to everyone so you can extend or implement some specific
command for your printer directly at home, creating personalized sequences or custom functions (Marlin firmware is an example of open source software that you can extend).
First of all, what we need to draw is the object to print. Draw a 3d object in the past was very hard and expensive. There was very few software available requiring significant training
periods before to be able to draw something useful. The cost of these software was really high and such kind of activity was just limited to big company or to professionals.
However, the concept introduced was a revolution moving us into the Vectorial era. A draw was not just a table of pixel but a dimensional reality into a 3-dimensional space made of polygonal elements.
If you create a file telling just that your picture is a rectangle starting from point x,y,z with a side of dimension 2 cm ending at x1,y1,z1 and a side of dimension 3 cm ending at x2,y2,z2, then you can
represent the same rectangle scaling the dimensions, moving the point of view, interpolating it with another object or increasing the depth etc. This is the vectorial concept (you cannot obtain such similar
results using just pixels colored on a screen) and thanks to this concept we have been able to map the reality into a file manipulating it with algorithm and software based on math formulas.
Enhancing technology, and thanks to the sharing economy (the same reason why I am writing this article) has been the right occasion to enhance that software making them available and understandable by everyone.
Today we have available on the market software like 123 Autodesk or sketch up which are available to map simple geometrical objects in complex 3d draws, creating the reality that you can print with a 3d printer or with any cnc machine.
So, the first thing to do, if you want to print a 3d object is to draw your object using one of this two tools. Personally, I prefer Sketch up, so, download it from google, it is free (the basic version) and easy to learn.
Search on google the word: ‘download sketchup' and proceed with the installation.
Once installed you need a basic training just to start building your first object. Also in this case, you can proceed using tutorials available on sketch up site or using YouTube. In one hour or in 30 mins you can start
building something basic but already 'printable' like my sail Curtain holders.
Now the next step is to make this draw readable from a 3d printer. This is not yet possible because the sketchup software doesn't know which kind of printer you have (delta or xyz or other). It doesn't know it's dimension, the hot hand you have
(if multicolor or black and white) doesn't know witch material you want to use and so on. 2d printers use OS drivers but this is not our case.
For this reason, we need to export the draw in a generic format which can be evaluated by the software who 'knows' your printer (just to give you a better view consider a sort of personalized driver). This format is the stl format.
STL (STereo Lithography interface format) is a file format who can be both binary or ASCII. It has been designed for cad software and it is used to rapidly prototype object using CAD software.
STL file represents a solid object with all surfaces reduced to triangles. If you open the ascii version of an stl file you will see triple of coordinates x, y,z repeated for each of the 3 vertices of a triangle followed by a vector to describe
the orientation of the surface (the vector is perpendicular to the surface).
One of the big advantage of an STL structure is the simplicity so it results really easy to process and to generate, obviously, the disadvantage is that the structure has some approximations. Also in case of simple figure you can have different
vertex overlapping each other different times.
However, the STL format is the most common used format in 3d printing technology because simple and portable.
The software interface connected to a 3d printer must be a software interface able to understand exactly all printer characteristics and, based on these information, must be able to produce the Gcode to drive its steps motors, sensors and any other
printing component. So this software must be able take as input a generic draw format (stl is perfect for this scope), a printer configuration and produce as output the gcode.
The gcode is then sent to the Arduino (in our case) firmware via the serial port connected to the printer.
This is usually done using two different software working together. I will call them 'draw driver' and an 'object producer' software. There are different software that can be used to do this. What I've used since now is repetier host as printer driver
and slicer as object producer software. The two software can work together. One of the advantage of repetier hits is just that it can run slicer inside its application partition, sending it the sty code and passing to the printer automatically the gcode produced by slicer.
In different conditions you should, in two separate steps, produce the gcode and then send it to the printer using the sd card or another software.
Using repetier host you need first of all configure the printer settings for the communication and for any basic printer activity, then you need to configure slicer in order to understand all printer’s characteristics. Those characteristics will be used by the algorithm to generate
the gcode when requested.
Slicer (like any other object producer software) needs to know all printer details. In order to achieve good results, we need to be really detailed during the slicer configuration because more details you will add at this level, better results you will achieve printing your object.
Now, just to recap, draw your object using a 3d cad like sketchup, export an stl file from sketchup and open it using repetier host. From repetier host, using the slicer extension, produce the g-code and send it to the printer still using repetier host. The ways to send g-code to a printer
are different, you can use different applications to communicate via serial port with your printer (like porterage described in the section dedicated to 'printerina') or you can simply store the gcode on an SD card and put the ds card in your printer. Almost all the firmware and the controllers
available today have the option to read the gcode from an SD card installed directly on board.
So, at the very beginning of an object production there is an stl file. Not all drawing programs are able to produce stl files. Sketchup, for example has not this function available in the basic version. The stl export (or import) function is available in an extension that you can install
for free using the extension manager tool.
If you don't want to build your stl alone, or, if you simply want to search for an existing stl file, you can count on different web sites which can share and provide you thousands of stl ready to be built. My favorite one is thing verse (You will find also some stl files shared by me).
Giving a look at some object found on thingiverse you will note that it is better to split the final object in different components to link together at the end of the print. This is useful because during a print it is very easy to find a problem and a problem during a print means to lose the object.
A 3d print is something that is very hard to restart, first of all because the software doesn't remember always the head position so it cannot restart from an old position (this could be caused by a loss of steps in the motor) and second because a cold layer cannot be easily connected with a new hot layer
(it could be done but the result is not the same so you could need some external support like glue or any other 'extended' material). 3d printing is still something empiric so you cannot compare the print on a piece of paper with a print of an object. If you print 100 pages of the same picture, in 90 % of
cases you will have no problems and will have the same results, if you print 100 objects you will have surely some fine tune and adjustment to do during the print and you will surely lose some objects and will need to print them again and again. Probably more expensive printers are more accurate and generate
different results but, in that case, we are not talking of sharing community, open source software, Arduino and, more in general, maker’s community.