A 3d model of the Mine Loader

I have been busy. My last post was about the alternate model I built with the 42009 set. One of the pictures of the gripper I made with the Lego Digital Designer, Lego’s CAD tool. I decided to make a 3D file of the entire model. It took me a little over a day to finish the model. A lot of extra time went into finding workarounds for bugs in the software I encountered.


If you would like to build it yourself, here is a link to the 3d model file. You can view it in Lego Digital Designer and easily generate building instructions from there.


The Mine Loader

I don’t own the set, but I was wondering if I could build it with the parts I already had. So the challenge was to build model 42049, the mine loader, with only parts from set 42009. I think I did a great job.


Mine Loader build with parts from set 42009

Most parts I needed I had, albeit in a different color, or I could simply replace it with a part that could make exactly the same conections. The real challenge was making the gripper work without the track rods to convey rotating motion between perpendicular planes. But more on that later. First let’s have a look at the original model:


Original Lego Technic model 42049

Changes to the body

Let me start with the body of the vehicle. On the back segment I replaced the beam I-frame with a 3×3 T-beam (A) and a 2m beam (B). Together they perform the same function. The turntable used in set 42049 slightly differs from the one I have in my donor set 42009. The geared connection between it and the double connical wheel Z12 will not work  under a 90 degree angle. I solved it by not gearing under an angle at all and instead use two small gears in the same plane to let the axle drive the steering (C). The “Technic Panel Curved and Bent 6 x 3”, that basicly are the eye candy of the set and form the wheel casings for the front wheels, I replaced with the 3×7 panels from my donor set (D).


Back segment

On the back end, near the engine, there is an antenna (E) and an exhaust pipe (F). In the original set they are both nice molded lego parts. However I had to replace them with something different and some imagination.


Antenna and exhaust pipe

The robust bumper section uses two of the aforementioned “Technic Panel Curved and Bent 6 x 3”. I build my own panel from one 3×5 and two 2×4 90 degree angle beams.It obviously does not look as nice as the original design.


Changes to the bumper

The side of the driver’s cabin is left quite open in the original design and where my model lacks the right wheel casing (D) it also has some improvement. I think that the use of the 3×5 panel from my donor set to form the bottom half of the drivers cabin (H) is visually a lot more attractive than envisioned by the lego designer. I also put one on the right side of the vehicle. Just because I could.


Side panel driver’s cabin

As you can see from the bottom up there are three universal joints needed. My donor set only has two. I solved this by making connection 3 a geared connection. This works just fine, but a universal joint is the better solution.


Bottom view

The gripper

I redesigned the gripper quite a bit. Below on the left is the original gripper from set 42029. The essential part I did not have in my donor set was the track rod (K) which allows to convey rotating motion between perpendicular planes. I build upon the original design, using the auger, the z24 gear and two triangles: I turned it 90 degrees along the axle of the auger and mirrored it. Now all the rotating motion to open and close the gripper occurs in the same plane making it easy to use a cross axle and two angle elements (L) to replace the track rod. The whole thing fits the same way onto the arm of the mine loader. It is just one ‘hole’ longer and quite a bit heavier. Nevertheless I am quite pleased with the result.


The old and the new gripper

Adding a linear actuator

Because my donor set 42009 had lots of linear actuators I thought why not improve on the primitive lifting design of the original mine loader and add a linear actuator. After all, in real life it would most certainly be hydrolics. It took me a while to figure it out. I would really have liked to be able to drive the actuator from a wheel on the back of the vehicle. Much like the gripper open and close is operated. It being a low profile articulated vehicle proved not enough room to do a proper job. I settled on wheel on top of the front side to operate the actuator only to find that it was too big and in the way. It was not an improvement at all. So I changed it back to the more pragmatic original design which simply looked better and handled better.


Adding a linear actuator

Thoughts about the 42009 B model


As with the A model I find the boom extremely heavy compared to the rest of the model. It is very densely build with many reinforcements. And of course it should be or else it would come apart when it is extended or takes some weight. It makes one worry the linear actuators will break.
The lorry looks like it is imagined together from the collection of parts is left over after building the container grabber. But it works. It has four wheel steering and a nice locking system to secure the container. It is a shame there is no engine. The designer could easily have opted to not put a V8 in the container grabber, but instead make it a four cilinder so there would be parts left to build an engine for the lorry.
On the end of the boom there is the actual device that grabs the container and it is of beautiful design. Small arms help align the grabber to the container and four pins move in to both short sides of  the container and ‘hook’  in. This is one of the power functions. 
I enjoyed building it. But it will not be a display item.


Half way building the 42009 B model


42009 B model

It took me some time to ‘unbuild’ the crane model. I am using that word purposely because it takes some smarts and a lot of patience to take it apart without having to resort to the use of tools that should remain in the toolbox. I am into day two of the new build and this is what I’ve got so far. It will be a telehandler with a prop to pick up containers.  The container and a lorry to load it on are also part of the build. As with most sets the A model is by far superior. But it’s nice enough.  I like the way the cabin can be raised and lowered. Execution of this idea however is very poor.  The black gear on the front is connected to the gearing that raises and lowers the cabin via a long axle. There is too much resistance to use this without twisting and permantently disforming the axle. Maybe some more gearing down would do the trick.


Dismantling my mobile crane model


Lego Technic Mobile Crane MK II 42009

So I will be dismantling my Lego Technic Mobile Crane MK II today. I build it last year and it has been sitting on a bookshelf for week now. It’s time to take it apart and build the B model. Notice the small modification I made on top of the cabin. There actually was no proper rest for the boom in the original building instructions.  There were however some extra parts.  I fashioned them into this grey boom rest. Now it sits more stable during ‘transport’ and it’s much more clear for the operator when the boom is all the way down (and that’s easier on the gears).
Anyway, it is coming apart!


Lego Technic Mobile Crane MK II in four pieces

So what does the caret operator do?

In my previous two posts I was squaring in a tedious way. Something like this : self.size*self.size. There is nothing wrong with it, but how to cope when I would have to calculate x to the power of 12. My code would definetly become unreadable. Of course, coming from a BASIC background I first tried using the caret operator (‘^’).  But the caret operator is used in different languages for very different things.  I already knew that and just couldn’t be bothered looking it up and just used the definition of a square. But here it is: a**b gives a to the power b in Python. But if the ** operator is used to raise a number to a power, what does the caret do? It does do something because Python says:

>> 2^2
>>> 2^3
>>> 2^4

And that certainly has nothing to do with any exponent of anything..

The caret operator is a bitwise XOR operator. It only returns true (1) if exactly one of the operands is true.

(bits)  (int)

0010    2
0010    2
——    (xor)
0000    0

0010    2
0011    3
——   (xor)
0001    1

0010    2
0100    4
——    (xor)
0110    6

It actually works the same in JavaScript.


Pythagoras Tree [2]

I tried the object approach on my Pythagoras Tree. When a Tree object is created it initially shows nothing on the screen but a blank canvas. Each time the method grow() is called on the Tree object it grows a ‘generation’. Much like a real tree would grow a bit each year.


The program actually looks a lot like my earlier version. You might notice these differences:

  • Each recursive call to create a ‘tree’ gets its own turtle (1024+1 turtles for n=10)
  • I need the position of the current turtle and give them as arguments to a new Tree object I create. I use the Turtle’s xcor() and ycor() methods to retrieve the x and y coordinates and pass them to the constructor.
  • I use a helper method set_start_rightbranch() to offset the starting point to right place for the drawing of the right branch.
  • To help decide a branch if it has yet to grow I introduced the property ‘grown’ to the Tree object. At creation it is set to False and after growing the grow method sets it to True.
  • I set the turtle speed to fastest (and that’s still pretty slow)
  • I have chosen to hide the turtles (it was unsetteling to see that many turtles on the screen)


import math
import turtle

class Tree:
    def __init__(self, x, y, size, angle):
        self.grown = False
        self.x = x
        self.y = y
        self.size = size
        self.angle = angle
        self.t = turtle.Pen()
        self.t.goto(x, y)
    def grow(self):
        if not self.grown:
            self.leftbranch = Tree(self.t.xcor(), self.t.ycor(), \
                             math.sqrt((self.size*self.size)/2), self.angle-45)
            self.rightbranch = Tree(self.t.xcor(), self.t.ycor(), \
                             math.sqrt((self.size*self.size)/2), self.angle+45)            
            self.grown = True

    def set_start_rightbranch(self):

tree = Tree(-50, -200, 100, 0)

for i in range(0, 10):