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.

Supplies

  • 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.

Code:

#include <Servo.h>

Servo servoOne;
Servo servoTwo;

void setup() {

Serial.begin(9600);

servoOne.attach(3);
servoTwo.attach(2);
}

void loop() {

// Uncomment these lines to align servo's
//servoOne.write(0);
//servoTwo.write(0);

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

delay(1000);
}

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.

VarSpeedServo

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

Code

#include <VarSpeedServo.h>

VarSpeedServo servoOne;
VarSpeedServo servoTwo;

void setup() {

Serial.begin(9600);
servoOne.attach(3);
servoTwo.attach(2);
}

void loop() {

// Uncomment these lines to align servo's
//servoOne.write(0);
//servoTwo.write(0);

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

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.

https://puu.sh/FVWaX/b145786331.png

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.

https://puu.sh/FVW8g/b6a29556fd.jpg

https://puu.sh/FVWcw/a6a0ae5251.jpg

https://puu.sh/FVWgp/d716158663.png

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