roka Kirby Wed, 30 Nov 2022 00:00:00 +0100 Randomly ordered chaos. Personal website of Robert Katzki. Lego Duplo Train Remote projects/lego-duplo-train-remote Wed, 30 Nov 2022 00:00:00 +0100

Some time ago I saw instructions for a remote for the Lego Duplo train that comes with Bluetooth onboard. As we have the same train and the kids love to build some tracks (or have me build a nice course 😏), I wanted to build something similar.

What’s inside?

From ebay I got a Fischer old controller for model railroads and removed everything inside it. The board connecting to the train is an Espruino MDBT42Q that can be programmed via JavaScript. I have to say that keeping a connection from the Web IDE to this board was sometimes rough. I think for future projects I’ll prefer boards with a wired connection. Nonetheless, this was my first time tinkering with a microcontroller and I’m really happy with it! 🙌

To be independent from a power outlet, I added an Adafruit USB-C Charger with a battery. For the capacity I looked for what size best fits into my old controller. The 10kΩ potentiometer and a switch I reused from the old controller to turn it on and off add everything we need for functionality.

Light up!

Last minute I added a bright red LED to show when the remote is turned on — this was a great addition as the kids often leave the remote laying around and play somewhere else. Easy to spot with the red light that it’s still turned on. Phew.

It’s fun to drive the train! See yourself:

The inner part while turned on.
Looks quite organized, I’m proud about that. Doubted myself after previous projects…

The code

For completeness, here is the whole code. Taken & optimized from instructables. Thanks ThePlayshed!

var devices;
var gatt;
var connected = false;
var connecting = false;
var DevName="e0:7d:ea:0c:03:29";
var serviceUUID="00001623-1212-efde-1623-785feabcd123";
var characteristicUUID="00001624-1212-efde-1623-785feabcd123";
var Characteristic_store;
pinMode(D31, 'input_pulldown');
var prepval = new Uint8Array([0x0a, 0x00, 0x41, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01]);
var sendvalue;

function connect_train() {
  connecting = true;

  NRF.connect("18:04:ed:f5:cc:be").then(function(g) {
    console.log("Starting connecting2");
    gatt = g;
    return gatt.getPrimaryService("00001623-1212-efde-1623-785feabcd123");
  }).then(function(service) {
    return service.getCharacteristic("00001624-1212-efde-1623-785feabcd123");
  }).then(function(characteristic) {
    Characteristic_store = characteristic;
    return characteristic.readValue();
  }).then(value => {
  }).then(function() {
    console.log("Train Connected");
    connected = true;
    connecting = false;
  }).catch(function(error) {
    console.log('Error', error);

function train_direction(dir_val) {
  sendvalue = new Uint8Array([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0x00]);
  if (dir_val < 100) {
    console.log('ganz schnell rueckwaerts');
    sendvalue = new Uint8Array([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0x9c]);
  } else if (dir_val >= 100 && dir_val < 200) {
    console.log('schneller rueckwaerts');
    sendvalue = new Uint8Array([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0xce]);
  } else if (dir_val >= 200 && dir_val < 300) {
    sendvalue = new Uint8Array([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0xe2]);
  } else if (dir_val >= 300 && dir_val < 400) {
    sendvalue = new Uint8Array([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0x00]);
  } else if (dir_val >= 400 && dir_val < 475) {
    sendvalue = new Uint8Array([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0x1e]);
  } else if (dir_val >= 475 && dir_val < 550) {
    console.log('schneller vorwaerts');
    sendvalue = new Uint8Array([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0x32]);
  } else if (dir_val >= 550) {
    console.log('ganz schnell vorwaerts');
    sendvalue = new Uint8Array([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0x64]);
  Characteristic_store.writeValue(prepval).then(_ => {

setInterval(function() {
  var reading = analogRead(D31);
  if (connected) {
    train_direction(reading * 600);
  } else if (!connecting) {
}, 100);
Volksdorf photos/2022/volksdorf Sat, 19 Nov 2022 00:00:00 +0100
Pommes sind okay photos/2022/pommes-sind-okay Fri, 04 Nov 2022 00:00:00 +0100 ]]> Slovenia photos/2022/slovenia Sun, 11 Sep 2022 00:00:00 +0200

We spent our summer vacation near the coast in Slovenia. There are such lovely coastal towns that have a lot of Venezian charme. Also Ljubljana impressed me a lot — the castle atop the medieval town looks great! Wandering around those narrow streets and going up atop the city was really nice.

What I didn’t expect in advance where the caves. Sure, I knew there are caves, but the size of these was mind blowing. We sure come back for another visit!

Pssst, a few photos are from Triest, Italy. ;)

A Big Mistake posts/a-big-mistake Sun, 04 Sep 2022 00:00:00 +0200 I’ve made a mistake. Many of us did, I think.

Bringing our parents to WhatsApp and Facebook is something we shouldn’t have done. What started out as sharing updates and photos of friends and family turned into sharing conspiracy shit information. It’s sad and disturbing to see intelligent, once open minded people drift into that loophole. It happens like in a textbook and always felt far away when I’ve read about this, happening in other families. Now it happened so close and it’s unbelievable.

The same people that told us as a child to not believe everything on TV now trust any information shared via WhatsApp. TikTok videos are brought up as a source. If they’re still online, I’m told, I can inform myself there. I don’t know what to say. My head cannot proceed with this conflicting information.

I feel like we lost someone.

I feel lost.

Self-made buns posts/buns Thu, 23 Jun 2022 00:00:00 +0200

Some years ago a friend showed us a really simple recipe for buns. As there was quite some interest in the recipe at the Tomorrow office, I thought I’ll share it here, too.

The dough can be prepared in the evening and is ready in the morning. We rarely go to a bakery on weekends now. So delicious!


  • 500g Flour
  • ~400ml Water
  • 1 Packet of dry yeast
  • 2TL Salt
  • 2TL Sugar
  • 2EL Oil or melted butter


Knead everything and put in the refrigerator overnight. If too liquid to form, simply add more flour. Feel free to try different types of flour and mix them! Bake in the morning in a preheated oven at 220°C for 15-20 minutes.

Download a printable version

Surfskate, two years later posts/surfskate-two-years-later Wed, 01 Jun 2022 00:00:00 +0200

I can’t believe I’m only skating since two years — thanks Corona!

I practiced a lot and still love to go out to a skatepark. My favorite is the one in the Inselpark in Wilhelmsburg, Hamburg where you can find me frequently. Last year I got a Yow Aritz Aranburu board which is such a pleasure to ride. A great improvement over my Hydroponic board.

Building a Longboard posts/building-a-longboard Tue, 17 May 2022 00:00:00 +0200

When I left Ubilabs back at the end of 2020, they gifted me a Workshop to build something with wood at Ärmel hoch. I finally decided on what kind of Longboard I want and went to work!

I designed my own shape and got some wide Bear trucks which I already use on my Landyachtz board. They give some nice flex and it’s possible to pump with them. Besides that I wanted some large wheels to have more speed and so I can ride on rough underground, too. My kids like to ride their bikes and I want to follow them even through parks with that board.

After eight hours of gluing, pressing, sawing, grinding and oiling it was ready — what a pity I had to wait a day until it was completely dry. I’m really proud of how good it looks, wouldn’t have expected this good results from building it myself.

On the past weekend I took it for a trip together with the kids and I’m delighted how good it works! Initially I was a bit afraid of wheelbites or stability, but this shape has just the right size. If you want to build the same: my template for this board can be found as Roka at Ärmel hoch. 😃

Featured in an Exhibition posts/featured-in-an-exhibition Fri, 13 May 2022 00:00:00 +0200

My Elbphilharmonie photo is currently displayed as a huge print in an exhibition on women in design. If you happen to be in Orléans in France, make sure to stop at the Frac Centre-Val de Loire!

10 years ago I had one of my photos featured in an Ubuntu release. Since then I frequently post my photos on Unsplash and was suprised to receive my first ever donation from a kind stranger some months ago. Thanks a lot! 💛. With currently more than 95 million views and 700.000 downloads, a lot of people seem to like and use these photos. That makes me really proud.

Back in February I received another surprise: a request from the Frac in Orléans asking for my name and birthday to display my shot to showcase the work of light designer Ulrike Brandi.

I’m honored to be part of this! The exhibition is open until end of July — better hurry up to get there.

Easter (on an) Island photos/2022/easter-on-an-island Tue, 19 Apr 2022 00:00:00 +0200

We spent the whole long easter weekend on Rügen. Lovely! Could’ve stayed longer.