Robotics and CNC

Recommendations for CNC machines

If you need advice on search engines to use, mechanical components or how to assemble them and buy them, Please contact Fabio di Arezzo which in recent years has gathered a lot of experience on CNC milling and engraving machines with lasers.

In upcoming pictures you can see some of his achievements. Clicking the images get bigger and you may notice that are combined machines, that is, that you can mount either a laser that a cutter.

CNC machine CNC machine CNC with laser

Write to Fabio for recommendations, to buy together components or to make you procure from him of the kits of components. Or you might even agree to build parts or complete machines.

Fabio di Arezzo – Civitella in Val di Chiana (AR) –

Radar and robotic arms

This is the first sonar das Riboni, l ’ application ThereminoRadar was born from this prototype. We thank Mauro, for keeping us involved and for insisting, up to get it to work.
Download ThereminoRadar here: /downloads/automation * radar and information on sensors here: /hardware/inputs/sensors # usound

– – – – – – –

Mauro Radan is also experimenting with different versions of parallel grippers. His mechanics are designed very well. This is a version with high power servo. These servos are not suitable to write because of their dead band, but are great for catching and lifting objects. The two servo at the base and the very robust construction, heavy enough to lift objects.

– – – – – – –

One of the first prototypes of ThereminoArm. This version was still a Master and a Slave, because the first Master did not have configurable PIN. Now you do everything with just Master and advance even two pins. The April update 2017: the new firmware of the Master, increases the number of pins to 6 to 12, so now they advance eight pins for general purposes. Also new firmware may also drive the stepper motors.

You can then build very precise robot arms using small stepper motors and belts. I recommend using a very high reduction ratio, at least five but better if you manage to get to ten. In this way the 200 steps per revolution will become 2000 steps per revolution and you can get an accuracy of 0.7 mm with half-meter long arms. Accuracy that will increase to about one-tenth of mm and above using the microstep.

– – – – – – –

A Robot is not necessarily an articulated arm. With a little’ fancy, You can compose simple and efficient machines.

A robot “instructional” built by students of the Institute ’, C. of Corniglio

The Institute's proposal, motivation i.c. Corniglio is: “…join the digital world with the real world and concrete” and that's precisely why is born on system Theremino. A warm thanks for your research!

Sketch and Firmware

Many after learning the language Arduino sketch, they wrote that they would like to use it, for Theremino. Unfortunately the language sketch was thought, only dell processors ’ Arduino and transplanting it on other “micro”, would become so different, to lose any possibility, Exchange programs between the two.

Our PIC programming in C or C++, using an IDE standard and standard compilers, We use GNU Compiler, It is Open Source.

As far as the huge popularity of Arduino, It can make us look “several”, in fact quite the opposite is true, is Arduino using a nonstandard language, made especially for Arduino and valid only for Arduino.

Sketches are not true firmware programming, but a simple programming, that hides all the “outline”. With the sketch, l ’ efficiency is the ability to maneuver, are limited.

In addition to a didactic deformation sketches, you learn to use an abstraction of micro, instead of the micro itself. To learn how to use a micro, You should consider the data sheet of the manufacturer, not the instructions of Arduino.

That being said, Luckily, the system firmware Theremino, requires no programming. We are in 20xx and supposedly the InOut a PC, as well as the firmware of a mobile phone, or a washing machine, are working. “How are”, without having to re-schedule every time, Depending on whether you want to wash shirts, or blue jeans.

Shift of perspective

The shift of perspective, between Arduino and Theremino is in fact, move the ’ intelligence from the firmware to the software. This shift multiplies per thousand the available speed, the computing power, the memory, and the ease of programming.

For this approach, You must be permanently connected to a PC (or a NetBook, a eeeBox, a Tablet, an embedded PC or a Raspberry Pi, as explained here: blog/standalone-applications#standalone, and also here: downloads/notes-on-software # computers)

Many devices, like printers, monitors and mice, they are constantly connected to the PC and all they find “normal”. Yet many people think that a “device”, such as a robotic arm, or a 3D printer, should be autonomous, and probably a pile…

Robotic arms and intelligence

We do l ’ example, watch case, a “robotic arm”. Many manufacturers of robotic arms Arduinici, they realized that their arm “battery powered standalone”, in the end he always does the same thing. What he's missing? Communication and software, powerful algorithms that keep in touch 3D data, with the outside world, sensors, Webcams, microphones, understand the GCode, and communicate with other applications, in real time.

Micro are not designed to handle 3D files, or decode audio signals, do not have adequate power, to play midi files, or decode the video of a WebCam. And even if they are forced to do so, the hurt. Said with other words: “The appropriate place for the brain, It's not close to the muscles”

Another reason, that makes it very smart, connect firmly the arms and 3D printers to your PC, is that you have to supply them power. When you exceed the phase toy, power needs, become too heavy, for batteries.

How are the professional robotic arms ?

  • Have big cables, that carry power and data.
  • Communicate constantly with a hub PC.
  • Contain only the firmware, intelligent algorithms, they're all on PC.

Click on the image, for a better look.

Which language to use?

Once you have decided to move the ’ intelligence, from the firmware to a high-level language, which is the best language to learn?

Here is a matter of taste, Some say that only exists on C++, and treat with contempt, every other language.

Other, like us, think that C++ is a language older, that requires much more time and energy, recent languages. And they also think that C++ and similar (C, Java and all languages with the semicolon to each row) formal languages are poorly structured and poorly, that invite you to write, so “dirty” and confused. In these languages, you can write, things acceptable by the compiler, but absolutely unreadable, for humans.

We prefer more structured languages, that help to write well, and to minimize errors. This process of gradual estrangement, from machine language, is underway for fifty ’ years and with each new step, c ’ is anyone who complains and complains about the old languages. But the process will continue, and eventually we'll get to program, in human language. Currently the human language is VbNet.

As the modern languages (VBNET and C #), they have a power and impressive speed, because their basic functions, are not rewritten every time from scratch, but are instead ready in “Runtime” and written with optimized algorithms, and adapted to the operating system.

A second advantage of modern languages, is to be independent of the operating system. An application written in C # or Visual Basic, runs without changing a comma even on Mac, Linux and Unix. (This in theory… in practice only on Windows works fine, While on other operating systems, implementations are incomplete and full of errors)

In conclusion we We suggest using VbNet or C # (very similar to each other) Almost all applications, of the Theremino System, are written in VbNet, because we find it more “Human”, but you can easily switch from one language all ’ more, using SharpDevelop to translate.

To install the developer tools, Read here: downloads/notes-on-software # instruments

  1. Luke says:

    good morning to you.
    I bought a Theremino StepperDriver card that will serve to replace the electronic original file of a Chinese cnc I use to produce PCBs. I saw that that schedule can also manage in addition to engines 2 power lines with mosfet, so I imagine that you can also connect an electric. But I did not find detailed instructions on what the ports to handle it and the images that I find on the net, I still have some doubts. You also know if there is a pdf file with all the details for schedaStepperDriver?
    I thank you in advance for your answer.

    • Livio says:

      Usually the spindles operate at mains voltage, so the mosfet of this card can not fly it. These MOSFETs are designed to adjust the PWM heating elements of 3D printers.

      To turn on and off the spindle should use a mechanical relay or our Optotriac (but bearable attention to power and cooling of the Triac). To adjust the spindle speed should send Pwm from a master output and having a PWM adapter that can withstand the power. Or the spindle itself should accept a PWM signal.

      The Stepper Driver tab is explained on this page:

      The pin and slot to be used are explained in the documentation of the CNC application (Slots to use are on page 43).

      For general concepts about the operation of slot you should also read the documentation of HAL application and Master modules.


      If you need more ask, He explains in detail what it is not clear, so we can focus on what you need.

  2. Marco says:

    Some time ago I asked for advice on how to Livio produce a gcode for Theremino CNC with Eagle and Fastgcode.ulp. If you remember gcode product was limited to the circuit holes “printed” and not draw the slopes. I also made screenshots of the Fastgcode configuration page to get help. Eventually I gave up for time and had used other software to the gcode. Yesterday, though, I finally solved my problem and everything works perfectly with your Fastgcode 7.9, it was necessary to set at least two depth step on the Z, in any of the boxes (I did it for milling contour of the board). Thanks again for your availability

    • Livio says:

      Thank you for your evidence.
      FastGcode is a little-used application and some operations are difficult to understand or even worse.

      And’ advisable to also try older versions, they had not the first drilling. Latest Versions, with drilling beginning, They have been recently tested and may have faults.

  3. Luke says:

    Good morning,these three years I use Theremino master to operate a three-axis milling machine for wood with excellent results. Now I tried to drive a plasma torch to cut metal but I quickly encountered difficulties because when you turn on the torch many times you stop usb communication and HAL goes wrong. I am using a cheap plasma cutting with contact starting because machines designed for cnc cost thousands of euro. I took a shielded usb cable but I have improved things a lot. I wanted to know if there are any filters or protection to prevent electromagnetic interference. The departure of the cut is handled by a pin of the master which activates an SSR that an electromechanical relay in its turn activates to 220 volts which closes the start button on the torch circuit(I did so’ to use the outputs 220 volts controlled by the master vac and spindle).
    Thank you , Luca Auctions

    • Anonymous says:

      It is not the USB cable to pick disorders, but the wires that go from the Master to the stepper motor driver and to the switches (manual buttons and switches).

      Disconnect from all wires Master (precisely from the Master Card not on the other side).
      It also disconnects the ground wires that go to the drivers and sensors.
      The Master will then only connected to the USB.

      Also check that you have the bulk of the PC connected to the electrical system ground.

      Under these conditions, try turning on and off several times flashlight and communication should never come off.

      Then connect only one of the sensors and try again

      Then connect only one stepper motor and try again.

      Once identified by which wire (or from which wires) interference can be the Master, we will focus on him and add resistors to completely eliminate the problem.

      For the limit switches and the manual buttons disturbances are eliminated completely by adding two resistors as explained here:

      If the noise come from the stepper driver, then they should be connected to the electrical system ground also the negative of the power supplies of the stepper driver.

      • Luke says:

        Thank you, I will do these tests and then I tell you!

        • Luke says:

          I finally got to rehearse. From the information that I have found the ignition system is not high frequency but has a coil that sends the high-voltage discharges(a little’ like an old lighter). I unplugged everything from the master but,by starting the ignition after two or three times skips the USB communication and the program is interrupted cnc. I connected the land of the cutting table in the center of the plant lands (remembering the advice on grounding)but the problem has come back. I ran the plasma in a nearby room under a’ but other line,if I get close to one meter from the computer and I start turning,jumps back communication. If I put the cutting machine next to the computer, but I'm away with the torch then I can turn on what I want and there is no interferenza.Poi I noticed that I can get with the torch to the computer running the ignition without causing interruptions only if I hold in vicinity of the torch lead to the mass that sticks to the metal to be cut(?!!) This would make me think that maybe placing a copper screen to the torch cable and connecting it to the ground may improve things…. What do you think?Thank you , Luke

          • Livio says:

            Since you talk about high voltage, I imagine that the current passing along the torch cable is very small, then an electric screen (thin aluminum or copper) They should totally shield the disorders.

            So you could try to wrap the cord of the torch with a kitchen foil (at least for test, Then if it works you study better).

            At the start of the torch cable should wrap, around aluminum, a little’ of bare wire coils and then connect this wire to earth.

            Then maybe you should also shield the torch itself.

            Check then also that the box from which comes the cable is metal and grounded. Please try the tester, not trust you. After many years I used it, I discovered that my bench power supply, the box had not grounded. In fact, every time I lit, and I turned off the generated noise. I stripped the paint below the ground screw and fell into place.

            If not then there are magnetic couplings, for example between the transformer which generates the high voltage (but it should be done badly and have standards are applied losses), and USB cable.

            I'm pretty amazed that it is possible to lose communication to the bare Master, no wire connected to Pin. Maybe try again but with no USB cable lying (all crowded in “S”, near the PC and the Master over). This way you'll check if the USB cable to capture the trouble.

            Continue with the evidence, only you proceed step by step and methodically, as you've done so far, you'll understand what's going on. And, for pleasure, when you understand what and where mates, enter it here. What I'm really curious to see how it happens.

            • Luke says:

              Thanks for the idea of ​​the screen. Also I'll check the grounding of the plasma box that is metallica.Poi'll let you know. I also saw the security update to the input pin with the capacitor as well as the two resistors. I'll try that too as the only protection with resistors was not enough and I had to disconnect all switches because’ I would stop the usb communication (even with the cutter)

              • Livio says:

                You had put the protection resistor 330k near the Master ?

                If so then you have some really huge noise induced on wires, hundreds of volts. If it happens with all grounded, then there is something very odd and you should find out what.

                • Luca Auctions says:

                  Finally I managed to make new tests with plasma. I added a screen in copper mesh on the torch lead ,I added a emi filter incoming plasma cutting and a feeding-control computer ,I've run a gcode and I continued to ignite the plasma arc and everything works!

  4. Livio says:

    Leo asked us

    In the HAL application of the stepper motors are adjustments in “mm per minute”, “mm per second per second” and “Steps for mm”. That makes me hard to do the math when I want to use millimeters instead of the engine speed, or grades.


    We used millimeters because the majority of readers have a stepper motor that moves a cutter every lap of a millimeter, or of two millimeters. So in these cases it becomes easy to deal.
    – The engine 200 steps per revolution
    – If every lap is a millimeter I am then 200 step for mm

    Then here are easily derived other cases:
    – If any did turn would then be only two mm 100 step for mm
    – And if I set the driver with microstep to 8, then they would 800 mm steps.

    In some cases (rarely) it might be useful to think in different units of measure from mm. For example in inches, or in degrees, or in revolutions of the engine. In these cases, simply replace mm with the new unit and always proceed in the same way.

    Wishing you could also open the file for the language you use and change the text you want to appear in Label_MaxSpeed, Label_MaxAcc e Label_StepsPerMillim. We do not recommend doing this because it's uncomfortable and it is not even said he wants all engines with the same unit of measure.

    So just where it says “mm”, you do realize that there is written “meters”, “degrees”, “inch”, “RPM”, or any other unit of linear or circular measure.

    But be careful that when you then send data to the engine must be on the same drive that is used to write in the HAL boxes.


    As just two examples is how they make a decision, reasoning in engine revolutions or degrees to the place that in mm.

    The next two examples answer the question:
    “Considering that the Master has a maximum output frequency of Step 65 KHz”
    “And considering having an engine driver set to 256 microstep”
    “Which is the maximum speed of the engine output pin, in degrees and in revolutions per minute?”

    Max Speed in “degree”
    (for a stepper motor with 200 step per tourn and 256 microsteps)
    Motor = 200 steps / tourn
    Motor with microsteps = 200 x 256 = 51200 steps / tourn
    The same in degree = 51200 / 360 = 142.22 steps / degree

    Master max pulse frequency = 65500 pulses per second
    Motor max speed = 65500 / 142.22 = 461 degree / SEC (approx)
    Motor max speed = 461 x 60 sec = 27660 degree / min (approx)

    Max Speed in “tourns”
    (for a stepper motor with 200 step per tourn and 256 microsteps)
    Motor = 200 steps / tourn
    Motor with microsteps = 200 x 256 = 51200 steps / tourn

    Master max pulse frequency = 65500 pulses per second
    Motor max speed = 65500 / 51200 = 1.28 tourns / SEC (approx)
    Motor max speed = 1.28 x 60 sec = 76.8 tourns / min (approx)

  5. Luke says:

    I'm Luca : on my milling machine controlled by the master wanted to have the opportunity to start the spindle motor, connected through a ssr to an output pin, manually via a button to do the work with manual shifts. If I you connect this button to a separate power supply and the entry of the same ssr provocherei interference with the master?

    • Livio says:

      Add a 10k resistor in series with the output of the Master and then connecting to the opposite side (that goes toward the motor control) you can do what you want. However, suppose that the control of the motor driving both high impedance, if it is not you will need to lower the resistor a bit ', trance 1k.

      Or you should add two diodes.

      Difficult to better advise without knowing the components you use and how to connect them.

  6. Joseph says:

    Hello Livio, I ask you some information about the driving stepper and brushless.
    1) to drive a single stepper motor, for example a positioned king, how could I do? Do I have to use Theremino CNC? how could I send a command?
    2) They are holding a big brushless motor, as’ is a servant must always use in addition to the driver (type intended for Turnigy) also true servant card?
    3) if so where can I buy it? I do not think I saw it on store-ino.

    Thanks again for everything

    • Livio says:

      1) To fly one STEPPER you must use the master module and the application HAL. Then with any application you write a target value in millimeters (or degrees of rotation) in its Slot, and the stepper accelerates to top speed you've set HAL, then it slows down and stops at its destination. You could set destinations, and change even while the motor moves, writing a few lines in the application Theremino_Automation.

      2) The brushless motors are piloting the ESC board (for example Turnigy) and the Master Module. Then you have to open the HAL and set the output as Servant 16. Finally, it will move by changing the number in its slot by 0 to 1000.

      3) You do not use a card “servant” but a master module. The Master you find it on eBay (venditore maxtheremino), that of STORE-INO

  7. Joseph says:

    Thank you very much…. Chiarissimo as always.
    Good job

  8. Luke says:

    Hi, I'm Luca. I wanted to use to reset the axes of the inductive sensors. What kind of sensor should I take NPN or PNP? I have seen that feed with voltages from 6 to 30 volts and so I think the connection to the pins is not immediate… I wanted to know if the site there was a pattern of how to connect this type of sensor. Thank you

    • Livio says:

      You could use magnetic sensors (elements HALL) and calamitine.
      There are also going to 3.3 volts, for example,:
      – A1319
      – A1318
      – A1318
      – DRV5056
      – DRV5055

      There are others who go to 5 volts but then could be overcome with the signal i 3.3 volt of the inputs of Master and liquids should Add them a series resistor from 33k or a divider. here they are:
      In reality, even if made to 5 volts are also fine if you feed them with 3.3 Volt Master.


      Or you should write the theme song of the sensors you want to use, we investigate some’ and most likely also they work by feeding 5 volts. Or you look for someone to go 5 volts, There are for sure.

      • Luke says:

        Grazie.Sempre accurate and fast.

        • Anonymous says:

          Hello,I'm Luca. I took the Hall sensors to Arduino and even feeding them with work 3.3 Volts. My problem is how to connect between them the two sensors to reset the x and y axes which can be reset is done in a single operation. The slot for the reset is 33 but I can only attribute it to a pin.
          Thanks Luca

          • Livio says:

            It takes two 1N4148 diodes and a resistor 10k, to be placed close to all Master.

            The diodes must be in series with the signals of the two sensors and combine the input of the PIN associated with the slot 33, configured as DigIn.

            Then you have to figure out if the sensor signals go to zero volts when it will go arrivals, or if they go to 3.3 volts.

            IF YOU GO TO ZERO VOLT
            – The ties of the two diodes are turned to the sensors
            – The resistor is connected between the PIN entry and +3.3 volts (or you may configure the input as DigIn_PU and eliminate resistor).

            IF YOU ARE A 3.3 VOLT
            – The ties of the two diodes are turned to the point of union that goes PIN
            – The resistor is connected between the PIN input and GND
            – The Slot signal 33 It is changed by switching the values ​​of its MaxValue boxes and MinValue sull'HAL (MaxValue = 0 e MinValue = 1000)

            If you can not write here yet, or call on Skype or phone.

            • Luke says:

              Thank you,I procure the diodes and try

              • Luke says:

                Hello,I made the connections but I had problems with the type of sensor,meaning that the sensor does not take so “clean” but oscillates the pin value on-off thus tricking the zeroing procedure. I used the’ digital output of the sensor but does the same so… the sensor is this
                By controlling the output voltage value changes as the magnet approaches the central point

                • Livio says:

                  If you use a DigIN input should work and take to 1000 (or to zero) when you approach beyond a certain point. And the process of CNC application once heard him should stop.

                  Maybe you're working on the contrary. Check (with SlotViewer) that the slot of the signal 33 I'm going to go to zero when end of stroke both with an axis with the other, and returns to 1000 when both of them away from the end of stroke.

                  You should also try to get precise shots, changing the arrangement of the magnets and sensors.

                  And you should also avoid going to slam on the sensor if the truck does not stop immediately. To achieve this should not make them work but approaching from the side.

                  And you should also rotate the magnet in the best location and the best distance, until the switching is good and well repeatable. By moving the hand truck engines off, or the JOG CNC, and looking at the signal with the SlotViewer or SignalScope.

                  • Luke says:

                    I gave up the hall sensors because I have trouble regolarli.Pensavo use of mechanical sensors like the ones I made for Switches. I've wired normally open in parallel on a pin configured dig in writing on slot 33 setting val min 1000 val max 0 but when the sensor comes into contact does not stop( only manually reopening the contact snaps calibration). The calibration sequence would occur in a correct putting val max 1000 e val min 0 but in this case by starting the calibration carts go towards positive values( I did this test by manually trigger the sensors).Luke

                    • Luke says:

                      Im very sorry. I tried again and now everything funziona.Non know what a mess I had done before .Spero not I wasted time. Thank you. Luke

  9. lean fabrizio says:

    Hello Livio
    I would like to ask you if there is a way to control the stepper motors for using a cnc CNC Theremino and master above except as L298N driver, who need 4 inputs for controlling the motors instead of just step and dir. I ask this because I have different drivers of this advanced type and wanted to exploit them to do tests on the stepper.
    Thank you

    • Livio says:

      No, I'm sorry, but L298N are made for engines in continuous and can not drive the Stepper motors.

      • lean fabrizio says:

        Ok, Arduino was wondering why you can not fly it, however, using precisely 4 Pin… Li also sell for stepper up to second but in fact lacking the complementary l298 is difficult commandeered.
        Thanks for the quick reply as always.

        • Livio says:

          The problem is not fly it, that maybe in some way you could also make, but that module you can not connect to a stepper motor. That module is an H-bridge and serves to drive continuously engines, No stepper motors.


          I went to see better and in fact to that module can also be connected stepper motor but using them as if they were constantly engines, that is, adjusting them in speed and direction, but NOT in place.

          Copio from the module characteristics:

          “This motor control board is based on Dual H-Bridge driver L298N and allows to drive with two DC motors simplicity or a bipolar stepper motor with an operating voltage in the range between 5V and 35V, controlling the speed and direction.”

          In practice, with those cards you would turn a stepping motor with adjustable speed, but you lose the main characteristic of stepper motors, that is, the ability to always know how many steps you've done and then the exact location. And without the exact location of the CNC machines can not work.

          • lean fabrizio says:

            Explanation as always impeccable! Thank you!
            Leaving so by the CNC control for these drivers, Use only wanting to prove a stepping motor, specifically to make the twisting force testing (the classic test with the weight attached to get to test the real strength of a given voltage and motor current or even just to see if a motor is running or not), It would be difficult to run them with the master module or a simple thing you can do without hacking a day?
            My basic idea was to see if you could do to form the work that the driver performs the appropriate integrated L297, which takes note of the dir and step signals and handles them in order to drive the h bridge l298…
            These small cheap as drivers are widespread and perhaps may also be of interest to others to use them with this purpose, I do not know.
            Thanks again to availability

            • Livio says:

              “These small cheap as driver…”
              It does not seem just like that, There are drivers for steppers that cost about the same as the L298.
              And by spending just a little’ There are more drivers for stepper from 4 amperes in the L298 are compared ciofeche, look at this example:

              In the next email I write how to link them to the Master, even if what you get is crap compared to a true stepper driver.

              • lean fabrizio says:

                true, I also use it on my cnc driver 4 TB6560 axes, which now replace the new cnc with tb6600, but before I did I had used the couple L297 / l298
                The fact is that these had taken them a long time ago in support of another type material paying € 1.5 each, I took a dozen to keep them…I certainly do not recommend them even for cnc, you are definitely right

  10. Livio says:

    To drive the L298N say…

    Enabling pin 6, if we give logic as:
    Pin5=high, pin7 = low, motor A will start turning clockwise.
    Pin5=low, pin7 = high, motor A will start turning anticlockwise

    Pin5=high, pin7 = high, motor A will stop
    Pin5=low, pin7 = low, motor A will stop

    Enabling pin 11, if we give logic as:
    Pin10=high, pin12 = low, motor B will start turning clockwise
    Pin10=low, pin12 = high, motor B will start turning anticlockwise

    Pin10=high, pin12 = high, motor B will stop
    Pin10=low, pin12 = low, motor B will stop

    So you should fly it with a Master:

    – Enable Pin 6 the L298N with a Master Output Pin
    – Use a Master Output Pin connected to Pin 5 to determine the direction of the L298N
    – Use a Master Output Pin connected to Pin 7 the L298N to run it (with the PWM will change the speed)

    – Enable Pin 11 the L298N with a Master Output Pin
    – Use a Master Output Pin connected to Pin 10 to determine the direction of the L298N
    – Use a Master Output Pin connected to Pin 12 the L298N to run it (with the PWM will change the speed)

    Then the whole thing would not be controlled by the CNC application, but you'd need a special software to raise and lower the six pin of the Master in the right combinations out.

    How do you see the whole thing would become extremely complex and commit six of the Master PIN when using a normal driver it takes two. And in the end you would not even monitoring the position.

    So I would not waste my time.

    • lean fabrizio says:

      Ok, I got it, I trust your opinion. I give up and if anything, I use them, just to prove engines, Arduino just making him do movements preset in the sketch. Thanks again

  11. GIANNI CARRARO says:

    Hello Livio and happy Easter to all the staff.
    question: Possibly (in the cnc source program) change the return of one millimeter from the automatic zero setting of the z axis ?
    I made myself an optical reset device that errs by a few thousandths when probing .. With a 3d resin printer and an optical sensor .
    the problem is that the return would take longer because of the stroke I have of the feeler.
    possibly where should I edit this function with visual express?
    P.S in programming helps me a friend of mine…in all the rest I arrangio.arrriciao everyone and thank you

    • Livio says:

      Hello, you should press the button “Settings” (the last one on the bottom right) and then change the value “Compensation (mm)” of the panel “Calibrate Z”.

      If this does not solve the problem, write us another message explaining better what you are missing.

      Or you can modify the software to your liking with Visual Studio 2008 Express, but it won't be easy because the CNC application is very complex.

      • GIANNI CARRARO says:

        the compensation is used to reset the zero piece with respect to the fixed zero;I do the zero with compensation mm 0 on the probe-axis z touch and return of “1 mm” and it gives me a measure 1 mm.(-I wish I could increase that return to (ES 10 mm) and it gives me size 10.-this is because the testator's run is +- 10 mm, and if I immediately move the x y axes, I scrape the tool on the probe).then I go to touch the piece,I read the measure,I write it in compensation and you're done…every time I change the tool and go to touch it, then it always goes to the actual zero of the piece, regardless of the length of the tool.
        if you give me a tip where I can change that return mm,I try to edit with visual basic. grazieeee livio

        • Livio says:

          I have no idea how to modify the software to follow what you need, also because I can't understand what you need.

          Have you tried pressing the "Settings" button (the last one on the bottom right) and then change the value "Compensation (mm)”Of the“ Calibrate Z ”panel?

          Doing as I wrote to you doesn't work?

  12. GIANNI CARRARO says:

    and,works, edit me ” the zero of the piece zero correctly” but when the tool touches the sensor, it retracts by one millimeter… I would like to change that millimeter to 10 mm

    • GIANNI CARRARO says:

      I specify that the compensation I do in the negative + 1 mm( what retracts after probing

  13. Livio says:

    The variable you need is “CNC_CalFinalClearance”
    and is declared and initialized in the form “Module_CNC” to the line 173

    Here is how it is written:
    Friend CNC_CalFinalClearance As Single = 1 ‘ final movement fixed = 1 mm

    If you change it with 10 will move out of 10 mm.
    Too bad that the variable is also used for X, Y, A and B which will also move ten mm from the zero sensor.

    If you don't like it then you should declare a specific variable for the Z axis immediately after the other, as in the following example:

    Friend CNC_CalFinalClearance As Single = 1 ‘ final movement fixed = 1 mm
    Friend CNC_CalFinalClearanceZ As Single = 10 ‘ final movement fixed for Z axis = 10 mm

    And then replace it in two lines in the form “Module_ExecutionThread”

    – The line 546 that will become so
    CNC_Dest.z + = CNC_CalFinalClearanceZ * CalZDirectionPositiveNegative()

    – The line 650 that will become so
    CNC_Tip.z = CNC_CalZCompensation + CNC_CalFinalClearanceZ

    If you can't, write to us again

    • GIANNI CARRARO says:

      THANK YOU LIVIO.. you are always a security.. I envy you a lot .. so I always congratulate you.
      hello to all the staf and thanks

      • GIANNI CARRARO says:

        perfect.. I have changed all the lines you have indicated to me and everything works as you expected… grazieeeeee

  14. GIANNI CARRARO says:

    I try to put photos of my CNC

  15. Alexander says:

    Good morning
    My name is Alessandro thanks to you I immersed myself in this world.
    I am using theramino CNC with a 3 axes and I am very happy.
    Now I would have liked to try and build a robotic arm, but I note that on Robot Arm1 the maximum work area is 1000 x 500 mm.
    Ditto the LenZ settings are limited to 99 mm.
    It is possible to increase the working range.
    Thanks in advance for your kind attention

    • Livio says:

      To go beyond the 500 mm it would take motors from over 500 euro each, ie these:

      With normal servants you already have exaggerated rocking alone 30 cm. Inaccuracies of centimeters and rocking with a tendency to oscillations. By extending the arms a little more, everything oscillates and never stops.

      We are looking for suitable motors at reasonable prices and have also completely changed direction, we have totally eliminated 3D calculations and therefore also the RobotARM application. It was too difficult to adjust the parameters and if you use it you will know for yourself.

      So we're using a different system now, give positions manually, position by position, without any parameters to adjust and without 3D calculations.

      When we have obtained useful results we will publish them on this page:

      In the following video you can see the current experiments of an arm “Collaborative” con SmartMotors FeeTech:

      Programming is considerably easier than with the RobotArm application, you no longer have to adjust the parameters and angles of the arm (which was very difficult), but on the other hand it is no longer possible to follow a GCode or draw, just define positions one after the other.

      However, even with these motors the maximum arm length cannot go beyond 50 cm.
      We are looking for engines that can do more without costing insane amounts, if we find them we will publish them on the Smart Motors page

  16. Alexander says:

    But with stepper motors and a reduction of at least 1:10 you can't get anything a little bit’ more precise.
    I was thinking of 4 no 34 with M5 toothed belts to reduce play.
    So if I wanted to increase the limits of theremino Arm, you can't.

    • Livio says:

      If you use steppers with belts then you can do something more, but over a meter is practically impossible because steppers weigh a lot and those that are on the elbow and tip you should lift them with an exaggerated lever. Say “one meter” it's easy but try to do it and then you will realize what a meter actually is.

      When you have assembled it (and if he can lift his own weight) in two minutes we will change the maximum limit of the MaxViewArea box from 1000 mm to 10000 mm and the LenZ from 99 to 9999

  17. Anonymous says:

    Ok thank you

  18. Vincenzo says:

    Hello Livio, I tried Theremino ImgGreyscaleToGcode.
    The spindle speed appears to be fixed at 20000. It would be convenient to be able to set it up.
    Then I would write it before the M3 to give the spindle time to pick up speed.

    • Livio says:

      Sorry, we don't have time to tweak all the small apps for details like this. There are sources on purpose and anyone could do it.

      However, to fix your problem immediately, just set “Speed locked” in the CNC application and then adjust the Speed ​​box as you like. Or edit the Gcode and change the 20000 in whatever you want and then save it (you can do it directly with the CNC application in a snap).

  19. Anonymous says:

    No problem ,so already done.
    It can serve others as a help.

  20. Andrea says:

    Good evening, a couple of years ago i built a small cnc 3 axes controlled by theremino.
    Now I would like to replace the cutter with a laser module. How should I connect it to the system?.
    I can use the tb6560 driver that controls the Z axis?

    • Livio says:

      For laser modules, the stepper motor driver is not needed.

      You must only:
      – connect GND of the Master to GND of the laser module
      – connect the master PIN output signal to the laser start signal
      – configure the output of the PIN used as DigOut (lit / turned off)
      – or as Pwm16 (to adjust the power)

      Normally lasers operate with a command signal from 3.3 like ours and they can also work in PWM but not necessarily all are like this.

      If you have any doubts, ask the manufacturer or search the internet what signal your laser module wants.

      If you have any doubts, do not connect it and do not give voltage, Power lasers are expensive and delicate. They can break in a microsecond even just because it's Thursday and they've woken up badly.

  21. Luca Auctions says:

    Hi, I'm Luca. For four years now I use Theremino cnc with a cutter 3 axes plus rotary axis. I have always updated software versions. I tried the latest version 5.3 and it goes really well even on circular milling where the previous versions, especially at high speed, deviated from the set path. The problem I've encountered is that if I open the Hal screen to make speed or acceleration adjustments,as soon as I click on the list of pins to enter the adjustment menu I hear the engines taking ghost steps. And’ the first time it happens to me. Hal's screen is also a bit strange ,in the sense that it has transparent parts that let you see the screen of Thereminocnc. I use Windows 7. I used the version before 5.0 but I had to put an older version of the’ Hal why’ I had the same problem.

    • Livio says:

      Really strange, we haven't changed anything in the HAL that can do these things..
      You could call me on Skype (you can look for me as livio_enrico) and we see it together?
      Or, if you don't use Skype, write here again and I will send you my phone.

      • Luca Auctions says:

        Hello,I don't use Skype,but today I managed to make a video where you can see the problem. I can send it to you by mail? What I noticed (and that does not happen with previous versions ) is that when I click on the pin list to open the adjustment panels the fps repeat locks (without giving error) and then it starts again and it is at that moment there’ that the motor of the axis on which I had clicked takes steps. Thank you

  22. Hello Livio,
    I introduce myself, my name is Davide Lorusso, I would like to congratulate you on this project!!!
    I state that I already have’ a cnc 3 axes and I've been through for a while’ from linux cnc to your system, and I applied theremino automation to replace an old telemecanique plc.
    I'm making an automation for the eyewear industry, I should interface a small cnc system 3 planks with a hinge drowning system (it looks complicated but it is two cylinders and a heating system);
    and’ possible , after carrying out a drilling or milling operation, start an automatic work cycle (in my case move the sled to the drowning position and perform it)?
    Thank you

    • theremino says:

      I think you should use axes A and B
      We will meditate a little’ and do various tests.
      I should understand what you move the sled with (other steppers ?)
      But two other engines (A and B) you'll be enough?

      If you do not succeed with the only CNC application we have ready a new version of Theremino CNC (that we will publish shortly) controllable with commands from other applications. So you could have all the functions of a real procedural program (Theremino Automation), read sensors, move other engines, piloting solenoids, pronounce messages, perform functions on voice commands, read Barcode or QRcode, perform timings, Loop, counts and controls of all kinds. And then at the right times guide the application Theremino CNC with all its functions as if you did it manually, and also load different GCodes and run them from the beginning or run individual lines.

      Eventually if you need we will also feel for Skype or by phone, Hello.

      • Thank you for your quick reply!!
        I move the slide with a pneumatic cylinder without a stem, in essence the cycle would be this:press start, Theremino cnc performs drilling, the holes or cmq the seat for the hinge in milling (depends on the shape of the anchor);
        the cnc goes into position of “Home” active theremino Automation that starts me the drowning cycle:forward-cylinder slide drowning down-cooling-cylinder drowning on (obviously there are the various sensors (Fc,proxy etc)).
        I think that from the description the new theremino cnc will be’ the top for this application.. you have a version “Beta” to be anticipated in order to test it?
        Thanks again

        • Livio says:

          Yes I can send you the version now 5.4.6 which we will then publish as a Version 5.4

          You should search for me on Skype as livio_enrico
          With Skype, transferring programs is easy, otherwise the mail deletes them. And it does even if you compress them in ZIP. They open ZIPps and delete everything that contains executable programs.

          Or you could go to this section, read my phone number and call me (from 09 at 19 including holidays)

          I point out, however, that to use the commands from the outside you should then program in the simple language of our application Theremino Automation:

          If you have a little’ of experience in programming will be easy for you, otherwise you should find someone who can help you.

  23. Maximum says:

    Hello Livio, First of all congratulations for your project, I, who am a miserable mechanic who throws himself into automation, remain more fascinated every day.
    Let's move on to the point: We would like to make a CNC milling cutter like the one in this link using Theremino cnc. The problem is that out of Theremino CNC I have X-Y coordinates while I should command 3 Motors with corresponding coordinates. How do I do it?, or better, in what program file of thremino, I can enter the transformation equations to control the stepper motors connected to the wheels?
    Forgive the maybe stupid question but in programming they are at very basic levels!
    Thank you very much for your help!

    • theremino says:

      I'm sorry but it would be a very long job.
      The easiest way would be to disassemble ThereminoCNC, so that you have at least the part that reads and executes the GCode, and then write down everything you need to control the machine. And it would be a really long job even for an expert in DotNet and our CNC application, many months at least working hard.

      Then I had a doubt… but this machine is controllable by other software than its ? So I went to see here:

      And I didn't find even a hint of the possibility of controlling the machine with external controls, They only talk about their software “Slingshot”, if I'm wrong write it…


      I realized only after that you would not want to check that machine but make a similar one, so in addition to modifying the CNC app you should also do all the hardware and I can't imagine how long it would take…

      • Maximum says:

        Sorry Livio, I explained myself badly.
        I already have the hardware and I have already done some tests but with 4 wheels (I would send you some photos but I do not know how to do in this chat). Two-wheel control with one pin, that move the X, and two wheels with another pin, that move the Y. The problem of 4 wheels is that if the machine moves on planes not level enough a wheel is lifted, I lose position and have a rotation that I don't want, instead with three wheels I'm sure they always touch all three, the problem is to command them.
        The idea is that I have output from Theremino CNC the X and Y from two slots. I have to transform these two outputs and transmit to three more slots (one for each wheel) the relative command, which in theory is very simple but I do not know how to do it. If the three wheels are at, b, c, I :
        I put these outputs to the three pins of the motors and I'm okay.
        But how do I do it??

        • Livio says:

          It gets too complicated for this chat.
          Call me on Slype as livio_enrico and we will find a solution.
          And in the future you will publish the conclusions here, so that they can also be convenient for others.
          I also write you an email with my phone in case I can't use Skype.

          I also announce that there is an additional problem that you have not considered, or rather maybe two:
          1) In the CNC app, you must also send back information about the position reached moment by moment for each axis. And they must not be motor positions but X positions, Y, Z on the countertop, And here we come to the second problem…

          2) You also built encoders with wires that measure position? Without encoders the position would be subject to inaccuracies due to wheel rolling and you would have errors of centimeters or even decimeters if the work is long and complex

          • Livio says:

            Hello, Since you didn't call I write the guidelines here (Don't try) on how one should proceed in order to help others in the construction of machines similar to this.

            1) First of all we call the motors a / b / c / z

            2) Connect the four stepper motors to the Master to the PINs from 1 to 8 and set their SLOTS from 101 to 108:
            ‘ 101 = Stepper Motor A
            ‘ 102 = Distance A
            ‘ 103 = Stepper Motor B
            ‘ 104 = Distance B
            ‘ 105 = Stepper Motor C
            ‘ 106 = Distance C
            ‘ 107 = Stepper Motor Z
            ‘ 108 = Distance D
            (note that PINs 102, 104, 106 and 108 contain the “distances from the destination calculated by the Master moment by moment and that the values 2, 4 and 6 must be recalculated in reverse and given to Theremino_CNC in the relative Slots, where do you expect the “Distances from destination” of x, y and z)

            3) You prepare a folder with Theremino_Automation.exe and with an APPS subfolder where you put the parent folder that contains everything Theremino_CNC

            4) In the first lines of automation you write:
            Load “Theremino_cnc.exe”
            so that it is opened and closed when starting the automation program and closing automation.

            5) You place on the Desktop a link to the Theremino_Automation.exe file that will be used to start everything and also to reach the project folders when needed.

            6) You write a Loop in automation that always runs at maximum speed, No pauses or calls to functions that can slow it down.

            7) In the loop you write the following lines:

            ' ------------------ X, Y, Z from Theremino_CNC
            PosX = Slot(1)
            PosY = Slot(3)
            PosZ = Slot(5)
            ' ------------------ A, B, C rotations from X and Y
            RotA = PosX * 0.585
            RotB = -PosX * 0.293 + PosY * 0.293
            RotC = -PosX * 0.293 - PosY * 0.293
            ' ------------------ A, B, C, Z to Stepper Motors
            Slot 101 = RotA
            Slot 103 = RotB
            Slot 105 = RotC
            Slot 107 = PosZ
            ' ------------------ Prepare "Distances to destination"
            DistA = Slot(102)
            DistB = Slot(104)
            DistC = Slot(106)
            DistZ = Slot(108)
            DistX = DistA / 0.585 - DistB / 0.293 - DistC / 0.293
            DistY = DistA / 0.585 + DistB / 0.293 - DistC / 0.293
            ' ------------------ "Dist. to dest." to Theremino CNC
            Slot 2 = DistX
            Slot 4 = DistY
            Slot 6 = DistZ

            8) The lines of the reverse calculation have been checked and should be right. They should recalculate backwards the “Distances from destination” for the X and Y axes so that the CNC application does not notice all the mathematical complications and understands that it has reached the destinations, as if there were two normal Stepper X and Y motors. Correct and write corrections in comments.

            9) Try it…. and should work apart from huge errors due to wheel slip.

            You can download the complete program to upload to Theremino_Automation, with this link:

            And you can also download the following file that contains Automation, SlotViewer and the SlotNames file ready to test how conversions work.

            • Livio says:

              If someone completes this part write it and we will also take the next step, i.e. position control.

              Measuring position with wires is terribly crude and uncomfortable. In addition, making the spools that wrap the wires would require difficult mechanics, inaccurate and unstable. Just let the thread roll up a little’ bad and accuracy is lost.

              You could think of doing it with ultrasound using some Arduino Nano and starting from our program for ultrasonic sensors… but I don't know how many Nano it will take and when to start the various ultrasound pulses.

              There is also a second problem, It is not enough to measure the distance to two fixed points, It will also be necessary to find a way to measure the rotation of the car and keep it absolutely stable with rotation of zero degrees. And I don't know how this could be done..

              Finally, provided you have two very precise distance measurements and one rotation measurement, you could do the last step which would be to add two fixes deltax and deltay to the program presented in the previous message.

              And these corrections will have to be made with a PID because otherwise either you do not correct enough or the whole thing starts to swing like a drunk around the position to be reached and does not stop anymore.

  24. Maurizio says:

    Hello Livio.
    As usual, When I see something interesting I participate, within the time limits available.
    I took a look at the cutter, and I believe that the logic of movement management can be extrapolated from that for the control of a Delta robotic arm, keeping the Z position constant. Obviously, the movement must be corrected in real time with position sensors, whereas the wheels slide to the side during translation.
    As for the location of the position on the plane, In theory it could be done using a single wire linear sensor mounted on a rotation sensor. This system exists on the market and is sold to detect measurements on site, and also reads the Z axis. Unfortunately, the accuracy required to read the angular position makes the sensor very expensive..
    The two-sensor linear solution adopted by the manufacturers of the sample cutter is simple and effective, and economical.
    Commercial wire sensors have excellent measurement accuracy and repeatability, but they are obviously quite expensive, in the order of 400-700 euro each.
    Not even I could figure out for sure how they can read the rotation of the machine on the X axis, but they certainly know exactly. In fact, The machine has the cutter on one side, and during the movements it rotates on itself, so that you always have the wheels inside the worktop, even when operating on the edges of the sheet. This implies a correction of the position of the machine independent of the position of the cutter, to be added to the part of the program that deals with the movement of the cutter.
    My opinion is that the yellow bottom hook for the triangulation wire, place on top of the machine, is connected to an angle reading system inside the machine itself.
    See what it does, and the fact that the software is included, the cost of sale seems to me to be relatively low, such as to discourage self-construction for professional purposes.
    However, There are constructive simplifications that can make life easier for the self-builder.
    First of all,, you can think of making the machine work with a constant orientation, sacrificing a part of the work plan.
    Then, Sensors can be built flush using a spool composed of two large washers side by side, as far apart as the diameter of the wire, in such a way as to force it to wrap itself on a radial spiral, then measure the angular position with a multiturn potentiometer and correct the data taking into account the constant relative to the thickness of the wire for each turn of the spool. This system has its limit in the size of the spool, and in the search for the right contrast spring. You could think of a second spool mounted on the same axis, connected to a wire that goes up to a pulley and goes down connected to a weight. Bulky and crude, but much easier than finding a suitable spiral spring.

    As always, I hope I contributed, if not with decisive ideas, at least with some ideas that may be useful.


    • Livio says:

      Thanks Maurizio, good ideas.
      Instead of the multi-turn potentiometer it would be better to use a rotary encoder, that the Master reads easily.
      Regarding pulleys with weights you should have an exaggerated height to work at a distance of meters but fortunately you could make the wire rise and fall on multiple spools (In boating they call them multiple sketches) And so with little height you could cover many meters.

      As expected, the calculations I had published were wrong, I am correcting them and then I will correct the messages to leave no errors around.

  25. Livio says:

    I fixed the Automation program and now it should do the right calculations.
    I corrected the previous message and also added a link to download a folder with Automation, SlotViewer and all other useful files to try.

  26. Maurizio says:

    Hello Livio.
    I had also thought about the encoder. Though, every time you restart the system you have to redo the zeros. However, it is a classic of many machine tools., so it's not that bad. On the other hand, It is certainly much more accurate than the potentiometer.
    Among other things, from what I saw in the videos, I think they also use this system.

    The hoist with multiple blocks is an interesting idea, I hadn't thought. And since it allows you to shorten the race a lot (It depends on how many referrals you make), you can think of putting a normal linear spring instead of weights. In case of many postponements, though, The friction of the pulleys on the pins and the flexibility of the wire can create noteworthy friction, and must be considered.

  27. Livio says:

    Conversation moved here from the NEWS page.

    Gordon Denman says:
    08/04/2023 at 12:05 (Edit)
    Good day,
    I am 75 years old and built myself a 3 axis wood cnc router. 5 years ago. TPC had Windows XP installed, but the hard drive crashed. I have reinstalled XP with all the service packs and have reconnected everything, but am unable to get my machine to work. there are 3 Nema 17 stepper motors installed. Theremino works in the simulation mode and the stepper motors are getting warm while I try and figure out what is going on. I have opened the HAL config file and asked it to recognise the installation and validated it. Still nothing happens. I presume that the HAL has to be configured for the Nema Motors to be recognised. Unfortunately the examples shown don’t make sense to me. Is there an example of this setup available that I can copy.
    Thank you for an excellent piece of software.
    Best regards
    Gordon Denman

    Livio says:
    08/04/2023 at 14:58 (Edit)
    Theremino works in the simulation mode ?
    The application Theremino CNC on Windows XP ?
    Since many years we use it only on Windows 10 and I do not know if it can work on XP.

    You do not have your old configuration file for the HAL ?

    A simple configuration could be as shown at page 29 of the Help file you can download from here:

    But you must also set the right “StepPerMM” for each stepper in the HAL application.
    In the CNC Help file all is explained.

    In any case the motor warming can not be produced by an erroneous configuration or by a lack of configuration. If they are warming too much then the drivers are set with too much current. If the motors are (for example) 2 ampere max you should use not more than 500 mA ( a quarter of the max current of the motors).

    Gordon Denman says:
    09/04/2023 at 14:06 (Edit)
    Good day Livio,
    Many thanks for your quick reply. I shall do as you recommend and see what the result is. Possibly i need to update to win 10 to see if that does not solve the problem.
    Keep up the good work.
    Regards Gordon

  28. Aiman devify says:

    This post is a treasure trove of advice for anyone venturing into the world of CNC machines! I love how it simplifies complex concepts, making learning an enjoyable adventure. Thank you for making this technology accessible and making it so intriguing!

Leave a Reply

Your email address will not be published.