A living room

During the month of December and January, we completely rebuilt the apartment. This means that we tore out all walls, floors and electricity and then rebuilt everything.

Since early February, we have been moving in, and custom-building bookshelves among other things. The living room is now done. Everything in oak was built by me.

Heavy Metal, part 2

Sandblasting and powder coating!

They say that powers coating really needs clean metal, so I decider to sandblast all pieces. Now they all have this beautiful ghostly white color with a subtle glitter. Really beautiful.

Before pulling all of the pieces at risk, I decided to do a test coating on a throw-away piece. Not much to say. I hung it from the trolley, grounded the powder gun and sprayed. Except for the area closest to where it hung from the wire, the powder covered the piece with perfect smoothness.

After some waiting time in the oven, the piece came out with a nice white color. As usual, when you paint something, you immediately see all of the kinds you committed when preparing the piece.

So next time, I might take another pass with the sand blaster just to make sure that all of my pieces are perfect before powder coating them….

Heavy Metal, part 1

So we are rebuilding our apartment from scratch (New walls, floors, ceiling and kitchen) and as a part of that, the kids are getting their own rooms. In their own rooms, they will get raised beds that are attached to the walls in three corners. The fourth corner has to either stand on a post on the floor, or hang from the ceiling. Naturally, I want to make a ceiling mount to keep the floor clear.

This is the general design (But the post has to be about 1 m long):

And after an evening with an angle grinder and a metal bandsaw (10 out of 10 will recommend. It was just as good as it looks on YouTube) I had the upper and lower parts cut out.

Next step is the get solid enough square tubes, drill all of the necessary holes, print plastic inserts to make the bolts easier to attach, paint and assemble.

Fine oak

So back in the game, I have entered a period of working with oak.

First up was a holder for the toothbrush chargers. Having more than one really looks messy, but now they stand in a proper line.

I knew that the makerspace had lots of tiny pieces of high quality wood, mostly oak, so I took all of the tiny pieces, planed them up and glued them together into a block. I put them on a diagonal, just to make things a bit more interesting.

Finally, the CNC made the holes for the chargers, both from above and from below to be able to hide all of the cables.

Table extension

Next up was the dining table. I love our dining table that has a hole in the middle for a stone slab that allows you to put hot things directly on the table without worrying about burn marks. But we purchased a slightly smaller table than standard, at just 120cm, because that is what could fit the way we had the table placed back when we bought it.

Now, we have moved the table further out into the room, and the fact that the table is just 120cm is becoming an irritation. With two very much larger kids now, you simply need bigger plates and bowls of food than we used to need.

So rather than buy a new table (Although we found a really nice round table that can be extended to fit Everybody, at a mere 30 000kr) I decided it was worth trying to add 20cm to its length.

First up, I got to try a new tool, the track saw. Amazing how just a length of aluminium can make a regular hand saw do almost everything that a full-sized table saw can do.

Two oak boards later and the wood really spoke to me. I also used the biscuit joiner, another new tool for me, and together with lots of clamps from every direction I could get all of the pieces to glue up nice and straight.

You will also notice that the edges are not cut flush, but almost a centimeter off. This is part of my new mission to learn how to design things that do not require any tolerances. Better have proper overhangs, and then use the track saw to cut everything straight after the glue has set.

The original table has holes drilled down through the supporting beams, but that requires some precision work and a very robust drill, so I decided to go old-school and fasten the beams with little wooden clamps.

Here they all are fastened together so I could cut them all in one go on the table saw. And mounted holding the beam in place.

And finally, here it is, after hours of sanding…. I am extremely pleased with how the korners came out and the slim band along the long edges that gives a complete frame of new wood around the old wood.

Some linseed oil brings out the gold in the oak…

And finally, back in its old place.

Final touches on the Lego Table

It took a while, and the construction is rather fragile, but the Lego table finally got its internal lighting working. The idea is to make it easier to see the pieces even without pulling the drawers all of the way out.

The result was highly appreciated by the users. 😀

Closing the Hex project for now.

So as we will be moving to Bangalore for a year, and I cannot bring an entire electro-mechanics lab with me, I had a pretty hard deadline to wrap up the hex project one way or another.

So I set myself the goal that I wanted to capture a film of the thing walking. That meant that all of the components had to actually be in place and working together. It took one full day of work, but here it is!

Hex first steps
Hex on the lose!

So yeah, it looks like a drunk dog trying to get home after having been hit by a car….. So not that impressive. But I am still super-happy because I have learned so very much, and I am still super-pleased with the visual design of the robot.


First some super-specific things I learned:

  • CNC-milling in aluminium is HARD! Especially without a tool changer and on an old machine with only a weak mister for chip evacuation.
  • FDM 3d-printing with PLA combined with threaded inserts is awesomely simple and practical.
  • Wire wrapping is also totally practical for prototype boards.
  • Test driven development is the only way to fly in software. Especially on an embedded platform without a debugger.
  • Cogging Torque was a thing I had never heard of, but it is the thing stopping this robot from not looking like it has nerve damage. So always check that when buying a motor.

But seriously

To take a slightly more serious spin, here is a summary of the project in terms of what it cost me and what I gained.

  • I have spent at least 4 hours per week for three years on this project, and probably more. So at least 750 hours in total.
  • I have spent at least 20 000kr just for parts.

I have had to make use of the following skills:

  • Dynamics simulation in Matlab
  • CAD-design in Fusion 360
  • Stress analysis and torque stability simulations
  • CNC milling
  • CNC machine service including replacing the drive screws and motors.
  • Planning order of operations in assembly
  • FDM 3d-printing
  • Laser cutting
  • Plywood and nail gun rapid construction
  • Wire wrapping and soldering
  • Electronic signal analysis
  • Low-level programming
  • Test-Driven Development
  • I2C communications

What would I change next time?

Not much in terms of process. Of course I know more now and would avoid a lot of dead ends, but I have no regrets. But there are some parts of the robot that should be changed if I ever pick up this project again and have lots of money.

  • New large-diameter motors with minimal cogging torque so I can move precisely at slow speeds.
  • Better power connectors as these jammed a lot.
  • Connecting the driver boards with USB so they can all be reprogrammed in a CI/CD workflow.


So with that, it is time to say goodbye to the Hex for now. We had a good run, you and I. I will miss you. 🥰 😢

Two shirts, and a controller board

I am running out of shirts again. So I bought some new ones and I felt I had to add some quotes to them. Dare to be different. Dare to be brave.

I also learned an important lesson about sharp tools (again). The first cutouts of the text refused to properly detatch. So I sat for over an hour with a scalpel trying to detatch the letters one by one. Finally, I gave up and replaced the knife. Fifteen minutes later I was done with both cutouts. Lesson: Keep your tools in good condition.

At the end, I had about an hour to recut my controller board to the right size and move some of the components to actually fit. Fortunately, with a professional heat blaste, desolder and solder iron, I was quick work. I really need to get a more powerful solder iron for my next project.

First successful i2c communication

The robot is build with four independent circuit boards. Three of them are driver boards that power and control one leg pair each. Each driver board contains a dual motor driver and one Arduino. The Arduino is programmed with the low-level logic to drive the legs, including a PID, homing encoder support, etc..

However, the way this robot should walk is that the two opposite tripods walk together. So something needs to sync the three driver boards. This is where the controller board comes in. Right now, it only has a single Arduino on it, but I have space for a Raspberry Pi Zero are well for future expansion.

The idea is that this controller board should send step commands to the driver boards via i2c. The first time I tried to get an Arduino to speak i2c, I got wierd results that I did not understand.

So off to the Makerspace to hook up an oscilloscope and see what was actually going on. It turns out that the pull-up resistors really were necessary to get decent signals, and apparently an i2c master should not send data unless the correct slave acknowledges that it is listening.

Below we see the little Arduino calling out all properly to its slave device, but getting no answer so it falls silent….

Some soldering and wiring later, the controller board was ready and I could hook it up to one of the driver boards. Some coding later, and the two boards can now send data between each other. I believe that the oscillosope display says “Hello World!” 😛

First crawl!!!!

Yeah, so it happened.

First I made an improvised fire-proof charging station. I wonder if the people who cast this pot literally almost 100 years ago could have even fantasized about the kind of battery power we have access to today….

So attaching two legs and the battery, I finally managed to get the thing to walk across the floor…… 😀

… Yeah, I might not exactly have paid the royalties for the music in the background….

High-current batteries

I spent most of February and early March rewriting all of the code to have clean structure and complete unit test coverage. Unfortunately, there are only so many screenshots of code that you can show before it gets boring…. But a small contribution map from GitHub will have to suffice.

Now the code is clean and I have a gait commander that can control each leg individually. Unfortunately, I noticed that one leg was not behaving at all. And then my Makerspace lab access expired and it took a few weeks to get it back.

Finally, I could use the oscilloscope to diagnose the problem. It turns out that the detector pins for one leg were connected in the opposite order as compared to what I had assumed. So the encoder homed on every click of the encoder. Not great. But at least, all of the motors and all of the driver boards are now thoroughly tested and there is no electronic noise or any vague digital signals anywhere in the system.

So from now on, I just have to worry about software and mechanics, which is nice.

Testing all motors and all of the driver boards to ensure that all electronic signals are clean and noise free.

Having reconfigured the pins and reassembled all of the pieces, I decided to let the robot try to crawl forward for the very first time. It bravely started taking a first step. And then all of the microcontrollers reset. My assumption is that the power source simply cannot power the motors under any form of load. The power source I use delivers a maximum power of about 12W. But each motor has a stall power of 60W, so I would not be surprised if there is a voltage dip when two motors push off from the ground that causes the controllers to reboot.

Clearly, I cannot continue development if the robot cannot even take a single step with only 2 motors. So I ordered two 7.5V 1Ah LiPo batteries and a charger. Connecting them together gives me around 15V, which is plenty to power the motors. With a max discharge rate of 25C, I will have access to a peak power of around 375W which should be plenty.

Since the system is now powered by more than 12V, I have to do some limitations in the software to not overheat the motors. But they should survive bursts of more than 12V, which is all that we will see as the legs will not spin at max speed continuously.

My weak soldering iron wasn’t too happy about the massive power leads from these batteries, but with some patience I finally had a serial coupling and could connect the power connector that I use.

I haven’t had the opportunity to test this more than to see that the system boots up when powered by this battery, but I have high hopes.