I mainly used a mixture of the LEGO pieces that I kept from my childhood and the ones my son had accumulated through years of gifts received. Just had to order a LEGO servo motor and two additional power cables to avoid destroying the only cables we had.

Image

Building the drivetrain probably took the longest time in the entire project. Challenges were:

  • I had a limited set of LEGO Technic pieces at hand and didn't want to bother doing a design and ordering pieces and waiting
  • I had a mixture of studded Technic bricks from my childhood and modern studless ones and I had to get creative to reconcile the different connection paradigms and orientations
  • I had to fit a servo and a regular motor in confined space

Ended up building the drivetrain with rack-and-pinion steering -- which in retrospect was a mistake because it gives the robot limited mobility.

We had an IKEA SMILA ladybug children's room lamp lying around and I decided to use it as the enclosure for the circuit as well as a finishing shell. It's not a cockroach, but it's at least a six-legged relative. This is what that product looks like:

Image

I was happy with how it came together. I kept things modular/serviceable. Here's how the robot is dismantled module by module:

Image
Image
Image
Image

And here's a closeup of the drivetrain with two motors laid out perpendicularly:

Image

I don't have any photos of it, but I also put two photodiodes where the eyes are.

The funny thing about this project: I'm a software programmer by profession. That's the part I should have spent the most part to make nice. I ended up spending 70% of the time playing with LEGO, 20% learning about Arduino and electronics and only the remaining 10% on coding. I got bored when I arrived at the last step of working on the code to let the robot actually, properly run away from light. Here's the entire code where the main navigation logic is:

if (maxLight < 0.05) {
    // Happily in the dark. Stop where you are.
    steerCenter();
    stop();
} else if (absLightDelta < 0.05) {
    // Not enough directional light difference to steer away, run backwards.
    steerCenter();
    back(1.0);
} else {
    // Run towards dark.
    if (lightDelta > 0) {
        steerLeft(1.0);
    } else {
        steerRight(1.0);
    }
    forward(1.0);
}

 Here it is in action, awkwardly and inefficiently steering away from light:

 And there's the underbelly:

Soon after, I disassembled the drivetrain to return the LEGO pieces back to my son.