I have made a classic steam engine, with a big wheel.

I want the rotation of this wheel to move a driving belt and then, apart from the steam engine, the small wheel on a generator.

I've made the belt as a long, thin cube on a path with the curve modifier. And this part work well. If I move belt (cube) on x-axis, it follow the path around the 2 wheels, simulating a drive belt.

How can I transform the rotation of the big wheel to movement on the driving belt, and after that, the moving from the belt to rotation of the small wheel?

  • 2
    $\begingroup$ Related blender.stackexchange.com/questions/68647/… $\endgroup$ – lemon Apr 24 '17 at 14:42
  • $\begingroup$ The belt's speed is the same as the bigger wheels peripheral speed (which is angular_speed(rad/s) * radius). The smaller wheel's angular velocity you get from the wheel's radius ratios (v_smaller(rad/s) = v_bigger(rad/s) * r_bigger / r_smaller). Use drivers. Modulo the belt's location by 2*pi*r_bigger so it does not go too far. $\endgroup$ – Jaroslav Jerryno Novotny Apr 24 '17 at 15:28

You can use a combination of both drivers and Transform Constraints. To synchronise the front and rear wheel, Transformation Constraints are an easy choice, as you can map source and destination value ranges easily using known even values, and just use extrapolate to calculate the rest. I prefer doing this in Armatures, but feel free to also try this on objects.

The constraint between Front and Back wheel could look like this:


The numbers you put in are a relation between the diameter of front and back wheel. So the combination of 5 and 10 is actually arbitrary, it's the relation that matters. 1 and 2 would work just the same.

For the belt, use a Driver instead. Transformation constraint could do the job too, but the issue is, it resets the target bone position after each full revolution of the front sprocket bone. In my case, there was a noticeable popping, so I went for a driver instead:


Note that in my example, the expression is -var, not var, as I had to reverse the bone movement. Thinking about it, I could have also changed the bone roll, and then use Minimum Value instead of Scripted Expression for the driver mode. The expression in my case is only so simple, because the radius of the front wheel is 1.

Final result of this Blend File here:



  • $\begingroup$ Thx! It was a very good answer on my issues. Problem solved :-) $\endgroup$ – Keld Boysen Apr 25 '17 at 16:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.