ITTT - Cat Laser




Introduction: ITTT - Cat Laser

Heey my name is Rens Kuilman. For a school project (If This Then That) we had to make something using the Arduino. After a few misses I decided to make a random laser, which I a lazy cat owner could use the get his lazy cat to move.


  • Arduino Uno [1x]
  • SG90 Mini Servo [2x]
  • Pinwires [6x]
  • Red Laser Module 5V 650nm [1x]

Step 1: Mistakes Were Made

At first I wanted to make a small moveable robot like machine. But I quickly realized that something like this wasn't that doable with the skill level I was on (and still are on). It kind of felt like banging my head against a rock.

I did have more images and video's of this process, but 1 broken phone and moving house later and lost most of it.

I played around with sound/pitch and even made a prototype using lego.

I also tried working on a controller for a game, but scrapped it because it wasn't what they wanted us to make for a project like this.

It also turned out pretty boring and was just the same as already excisting controllers

Eventually I decided to just make something. Something I would enjoy working on, and so I did...

Step 2: First Prototype

Using a cardboard box and some beer coasters I quickly put together a prototype. The pen was a temporarily replacement for the laser module.


#include <Servo.h>

Servo servoOne;
Servo servoTwo;

void setup() {



void loop() {

// Uncomment these lines to align servo's

// Give servo's random angle
servoOne.write(random(0, 30), random(30, 80));
servoTwo.write(random(20, 160), random(30, 80));


As you can see in the video. The servo's move way to quickly. The cat wouldn't even see the laser pointer before it moved again.

Step 3: Second Prototype

The problem in the previous step was that you can't adjust the speed of a servo. This would lead to almost instant movement.

Luckily someone made a library that gives servo's a little bit more controllability.


Using this I could add random speeds to the servo's every time they move.


#include <VarSpeedServo.h>

VarSpeedServo servoOne;
VarSpeedServo servoTwo;

void setup() {


void loop() {

// Uncomment these lines to align servo's

// Random angle, random speed.
servoOne.slowmove(random(0, 30), random(30, 80));
servoTwo.slowmove(random(20, 160), random(30, 80));

Step 4: Design/Print Case

Because I used coasters for the paper prototype, I already had a good idea of how I wanted it to look.

With some help of my brother who has a 3D printen and also has waaaay more experience using one, we made a case for my project.

The top part has not been printed yet at the time of writing this.

Step 5: Assembling

Test assembly.

Fully assembled and soldered (missing cap, not yet printed)

Step 6: Wire Assembly

Be the First to Share


    • Crayons Challenge

      Crayons Challenge
    • Fandom Contest

      Fandom Contest
    • Teach With Tinkercad Contest

      Teach With Tinkercad Contest