Virk I – Afterwards

By the end of the year the first unit of Virk I was fully finished, while the other eight units were under construction.

Design, build and make Virk alive was a big venture, a path full of challenges, mistakes and achievements. It was a lot harder than it seemed. Now I have a much more clear view on why 3D printing has revolutionized prototyping; nonetheless I don’t regret the path; I love wood and cnc milling.

I came to the conclusion that Virk I design is clean and solid (for what Virk I is intended), but it’s hard to make; tight tolerances everywhere. If you wish to make just a functional a robot arm… I will recommend you to stick to some open hardware 3D printable design. Unless, of course, you are a bit nuts, you love details and really want a wooden robot arm.

So what’s next?

  • Put some units for sale (check HERE). Maybe I will start a Kickstarter campaign to try to sell them and start Virk II, who knows.
  • Publish Virk I drawings. I need to make them clean and understandable, and that will take some time. I will send current messy drafts by request.
  • Vartra:

So what is Vartra? It’s another crazy wood project I’ve been working on since last month. News about that soon on insta.



It’s been a while. The first unit of Virk I has been finally finished (more than a month ago, indeed). There’s a fourth working axis now and I’ve polished my modified Marlin version.  Currently, I’m working on a simple python program to implement some simple tasks using OpenCV. Here’s the video.

The python software runs on a computer with a webcam, and the perspective transform is used to convert camera coordinates to robot coordinates. This implies a previous calibration process using four points. Eventually all this stuff could be, as far as I know, run on a RPI, thus avoding a full computer on the chain.

I’ve been decided to postpone the Open Hardware thing, as there’s really no interest, probably because the trend today is to 3D print arms, and milling is too overkill for most people.

So what’s next? I’m not sure. Maybe I’ll finish the other units and just try to sell them. Or I could make something else with all those robots. To be honest I will love to open a place with robots and cnc machines, where people can interact with robots and see cnc machines in action. A place to learn and have fun. Or maybe I will start to make and sell just some simple crafts. Who knows.

Currently, I’m competing on several local entrepreneurship contests, searching for a business plan, talking with people to get feedback, etc. In a few words, I’m going outside the shop, into the real world. Any ideas about my new direction now?





Here I disclose my experience using Marlin for my scara robot. I’ve had published the code here:

Please be aware I don’t intent to release a new Marlin “scara” version; this code is just for Virk I. However, maybe it could be useful for someone else.

Current status of scara support

After googling a lot and testing several Marlin versions, I concluded that the “newest” Marlin version with working scara support is 1.0.2. Maybe I missed something, but it’s known that scara support is broken on last versions.

So basically you can use 1.0.2 for a parallel scara 3D printer without modifications. However, Virk isn’t a printer and required some changes.


Changes for Virk

Most of hard work was already done; all I did was some small modifications. Main changes were:

  • Homing setup: I’ve had added minimal and maximal angle for rotary joints, and target angles for homing position.
  • M667 / M668: By default, the scara mode is “left” (like a right human arm), but you can change to “right” arm using M668, and go back to left using M669. I’m aware a smarter approach would be a nice addon, but this works now.
  •  M669: this is a gripper mcode M669 S<servo_pos> P<active_time>. P is optional; default <active_time> is 500. I guess I will change this to receive the size of the target object, instead of the servo position. As I said before, a SFR sensor would be a better way, but it’s out of the scope by now.
  • checkScaraDestinationAngles() check the angles never go outside range.
  • trimCartesianDestination() trims movements outside reachable area; the arm go as close as it can.
  • Forward and inverse kinematic transform: my robot wasn’t a parallel scara, so calculate_SCARA_forward_Transform() and calculate_delta() were changed for “standard” scara (every motor coupled, independently, to its link).
  • Servo disable: a servo is disabled when -1 is passed as parameter. This was required for M669.


Please note I’ve not included standard configuration like lenght of scara links or motor setup, as those are just setup and not my changes.

You can see most of these changes in this commit.


Some hints

  • It’s better to start testing Marlin into non-scara mode. A positive move should result into a counter-clockwise move, in the X  (shoulder) and in the Y axis (elbow). Homing should also work if properly configured. Please dont use jog controls to test here; just use M114 to see current pos, issue a G0 to move some axis, and check again with M114. Then, you can enable scara mode.
  • Finding the right jerk parameters it’s just a trial/error process. Please note my Z axis, unlike rotary joints,  is rigid, hence the z jerk for Virk should be lower (actually 0), otherwise it could miss steps . High jerk values on X and Y seems to help reach higher speeds.
  • My coordinated system: 0, 0 at the robot center, Y towards front, X towards robot right.
  • If you have different motor configuration I can consider to add as an option, if doesn’t involve to much time and its a generic, non specific case.


A note about Wangsamas

Wangsamas firmware, Repetier based, has very nice features, and in some of my tests it seemed to outperform Marlin. However, I wasn’t able to solve some issues, so at this moment I will stay with Marlin.


Another options

I guess the best open software for controlling a cnc robot is, actually, linuxcnc. However, Marlin is a great starting point … why kill the ant with a tank. Smoothieware … who knows. Machinekit … looks cool.

And now the most importat question… ¿should I add a 4th axis? (gripper rotation) ¿what do you think?

Virk I – Early 2019 Progress Report

It’s been a while, and here’s my report.


Gripper is almost finished. Making a gripper around a rc servo seems easy at first, but there’s a pitfall: you should avoid stall (that is, signaling the servo to go to a position where it can’t go). Using a servo with metal gears can provide some protection, but stalling should be avoided anyway. Possible ways to manage this:

  • Power the servo for just a short time, long enough for the servo to close or open (something like 500ms). The servo will stall, but for just a small amount of time.
  • Knowing ahead where you should drive you servo depending on the size of the object you wish to grip. Doing this can be a bit tricky, so it could be wise to combine this and previous behavior.
  • Add a pressure sensor. This will increase complexity, but having feedback could allow to adjust servo signal to set a constant pressure and avoid stall, without shutting down the servo.
  • Add some kind of spring-tension to fingers. Even more complex, but not a bad idea at all.



Marlin scara support seems to be broken on current versions. The “newest” version I was able to make it work was 1.0.2. After doing some small modifications and adding some simple gcodes, the whole thing seems to work. I could make a post explaning how to setup Marlin for a scara, if there’s someone interested.

Now, I should say that the first firmware I tried was Wangsamas (Repeteier based), but I left it because of some erratic behavior on some tests. However, now I realize it was just a setup parameter, and indeed movement using Wangsamas firmware was more soft and fast. So, I guess I will try Wangsamas again.


Homing Sensors

I’ve used simple mechanical lever switches for homing, and they seem to work well on Marlin, but on Wangsamas sometimes I got false readings and hence bad homing. I really don’t care too much about this now; I will come back to Wangsamas a fix this later.



Aesthetics enhancements, belt tension adjust, rewiring and a better wood finish.


What’s left

  • I need to add some kinds of bumpers for angular motion links.
  • Gripper need rubber fingertips. I guess I will go without tactile sensors for now.
  • Boards need a support. I will make this out of wood, probably.
  • Pen adapter: This will allow to check path travel. And have fun, of course.
  • Software: I need to upload my Marlin modifications somewhere, forgot about Marlin for a while, and go with Wangsamas. I pretty sure it will work very well.
  • 4th axis? Maybe.

I had put a lot of work on this first prototype (and his brothers). But, to be honest, it’s not clear where this project is actually going. Final price of those units will be probably higher than planned; probably over 3k. It’s not clear if they will sell, but bear in mind I need to sell just a few units, not thousands. Maybe I sold them as hypermodern art. I really wish to be able to fund a new, faster,  larger and cheaper production run… who knows.

And now, a video.



Virk I – Open Hardware Scara robot

This is a Virk I, a project I’ve been working for a long time. It’s A small, slim 3-axis scara wooden desktop robotic arm. It was meant to be a learning tool or hi-tech toy. The design will be open sourced once the first phase be accomplished and all the units on the first lot be sold. The aim is to provide a small, portable, quality and beautiful robotic arm alternative, either for the academic or applied hobbyist.

Current version it’s made of Australian Blackwood (Acacia melanoxylon), acetal, pvc and standard components. Most parts where machined on a cnc mill/router/lathe.

On the shoulder and elbow it has custom design, modular hollow axis rotary joint containing three bearings inside. Two thrust bearings give the joint very low play, allowing soft, low play movements. Being hollow means that you can route the wires inside the robot most of the time, so you don’t end with a mess of wires outside, and get a more cleaner look. On the z axis it has standard 8mm linear bearing rails.

Rotary joints are driven by a nema 17 stepper coupled to custom made 3mm pulleys. Z axis is driven by a nema 11 stepper linked to a 8mm pitch leadscrew. There’s currently no gripper on the end of the arm; gripper design and built will be tackled once the first lot of eight robots be finished.

Currently, it’s driven by RAMPS 1.4 electronics. As far as I know there’s no open source 3D printer firmware able to drive a scara robot, and it’s outside the scope of this project to make such a development, so final owners will have a challenge making this thing work. Of course you can use something like grbl to test the robot movements, but to be useful you need a firmware containing scara kinematic support. Maybe this marlin based parallel scara source could be a starting point.

I’m currently starting to test the first working unit and solving some final design issues, so the very first units to be sold will be available, very likely, at then end of this month (September).

You can find more info here.

Video here.

Update: It has been pointed out here and at hackaday that there are several platforms already supporting scara  kinematics:

  • Smoothieware: Morgan-scara: not single arm scara, but close.
  • Machinekit: According to the documentation, it has scara (single arm scara) support.
  • Reprap-helios:  That seems to be a similar arm, so I guess the same firmware could drive Virk I (I haven’t checked current status of this project).
  • Marlin for single arm scara: This seems to be a suitable option. I will test this at some point.

I would love to hear about someone experiences using those platforms to drive a scara robot.

Wood clamping

I’ve been making a lot of wood parts lately. Here, I show the three main ways I use to clamp the wood.

Long stick on vise

This is easy.

Pros: Low setup time, great for series.

Cons: Final cut-off should be carefully planned.

Disposable wood support

This is my favorite. You  just glue a piece of “decently” squared wood to the base of your blank, and use it to clamp to the vise. After machining the top and the sides, you cut away the base block and machine the underneath.

Pros: “Indexable”: you can use a vise stop so you can put your part on exactly the same position several times. So, if you have a lot of parts, you can make a round, use one tool on every part, and do another round with another tool. Of course this only have sense if you don’t have an automatic toolchanger.

Cons: Setup time: you need to cut a piece of wood squared enough, and glue to your wood. Also, if you make “rounds”, re-clamping can time consuming and, depending on your setup, prone to positioning errors.

Base block and screws

Here you machine a piece of wood and use some screws from below to secure the part. The block itself should be bolted to the tooling plate (or held on the vise). If your part has some straight holes you can look for a wood screw that thread on that hole without damaging it. I use this method for a second step on some parts clamped on previous ways (you can see the remaining of the disposable block on the back of the picture). This is the method I’ve used on my last video.

Pros: You can get a very precise positioning with the proper setup (e.g. using index pins). You can also clamp several parts at time.

Cons: Making the base block can be time-consuming. Also, you need holes where you screw can attach to, or you would need to make some holes on your part if you don’t have enough or appropriate ones.

As a final note: wood is a nice stuff to work with, but you should be careful and plan ahead your cuts to avoid tear out.


It’s been about a year since I move all my stuff to a new location. I’ve been doing, silently, a lot of things: machine tunning, fixtures, furnishing, prototype design, components procurement, coding, etc. And I’ve been working hard on my latest project in the past months (there will be another post about that).

I’m not good at social media; I’ve been publishing just some instagram pics from time to time last year. But it’s time to start to publish content again, and will change to from now.

So what we have here is the final step in making a PVC, 70 tooth HTD3M pulley. Grooves where made using the Sherline rotary table and a custom tool bit, in a the same way as on my old “making gears” post.

3040 Frame

I’ve got this chinese 3040 CNC frame some time ago from  RATTM MOTOR CNC on aliexpress, for just US $ 536.07, shipping included. This is not a ready-to-use machine; you should put your own chains, steppers, stepper mounts, controller, etc.

IMG_2350IMG_2351IMG_2359This frame looks pretty good to me; It comes almost fully assembled and every axis has a pretty good sliding action. Of course you should clean the whole thing and re-grease linear bearings and ballscrews before use. Please note I did choose the version with detachable spindle bracket, so I can install whatever spindle I wish.

I’ve just finished installing wire chains, steppers and tested the whole thing. Next step would be to make an adapter to mount my 12.000rpm DC spindle.





Proof-of-concept prototype

I’ve been lazy. This thing has been gathering dust on my desk for several weeks. Desgined to be cheap, lightweight and cute. Powered by Arduino and GRBL.

IMG_2298Will this cut anything? or would be just a piece of modern art? Of couse, if this doesn’t work, I would say it was just a learning exercise, and use it as a paperweight.

Don’t ask for plans, this isn’t the diy cnc machine you wish to build. And I know, I need a better spindle.

CNC Lathe making chips and choosing a video editor

I guess I should have chosen a curvy part instead of this boring one… maybe the next time.

Now some words about my search for a decent linux video editor. I did my previous video using OpenShot; It was a bit crashy and I really don’t like the way it handles titles. So after checking some reviews and doing some tests, I finally settle on Kdenlive, which is really nice.