Laser Spirograph Using Arduino


Introduction: Laser Spirograph Using Arduino

I was fascinated with Quackmaster Dan's "Four Motor Laser Spirograph" so I decided to build one. The pictures represent about a year and a half of procrastination, and late nights, all in all it probably took me about 80hr. to build as I had to go through a couple revisions of the electrical system, and it was totally worth it.

If you have any questions about components or fabrication, leave them in the comments and I will gladly answer.

Update 2013-10-12:

I am currently working on an updated version of this and plan to have it done by late January 2014 (I will write a full ible for it). In the process of planning that build I found my old arduino code that ran this spirograph, it is very basic, but I might be useful to those working on similar projects:


AF_DCMotor motor1(1, MOTOR12_64KHZ);  // create motor #1, 64KHz pwm
AF_DCMotor motor2(2, MOTOR12_64KHZ);
AF_DCMotor motor3(3, MOTOR34_1KHZ);
AF_DCMotor motor4(4, MOTOR34_1KHZ);

int PotPin1 = 5;                      // Analog Input from Potentiometers
int PotPin2 = 4;
int PotPin3 = 3;
int PotPin4 = 2;

int Rate1 = 0;                       
int Rate2 = 0;
int Rate3 = 0;
int Rate4 = 0;

void setup() {
  Serial.begin(9600);               // set up Serial communication at 9600 bps
  Serial.println("Spirograph!");;              // Set all fans to run forward. They will not run backwards;;;


void loop() {
  //Read and Map AI to Rate#
  Rate1 = analogRead(PotPin1);
  if( Rate1 != 0 ) {
    Rate1 = map(Rate1, 1, 1023, 20, 255);
  Rate2 = analogRead(PotPin2);
  if( Rate2 != 0 ) {
    Rate2 = map(Rate2, 0, 1023, 20, 255);
  Rate3 = analogRead(PotPin3);
  if( Rate3 != 0 ) {
    Rate3 = map(Rate3, 0, 1023, 60, 255);
  Rate4 = analogRead(PotPin4);
  if( Rate4 != 0 ) {
    Rate4 = map(Rate4, 0, 1023, 60, 255);
  output(Rate1, Rate2, Rate3, Rate4);
  if( Rate1 == 255 && Rate2 == 255 && Rate3 == 255 && Rate4 == 255){
    for(int a=0; a < 255; a+=10){
      output(180, 100+a, 250, 0);
    for(int b=0; b < 155; b+=10){
      output(180, 0, 0, 100+b);

void output(int m1, int m2, int m3, int m4) {
  Serial.print("Motor Speeds\t");



    • Make it Move Contest

      Make it Move Contest
    • Planter Challenge

      Planter Challenge
    • Woodworking Contest

      Woodworking Contest

    We have a be nice policy.
    Please be positive and constructive.




    Very nicely done! and awesome enclosure... where did you get it?

    1 reply

    An aerospace machinist I used to work with gave it to me. Based on the tags and what we dug out from inside of it we were pretty sure it was a parachute sequencer for a launch vehicle.

    The reason I didn't post an instructable is because the basic theory of operation is no different that the other spirograph instructables. The only difference with mine is that I map the values from the potentiometers to the motor speeds using an arduino microcontroller.

    As for a list of components here you go:

    4x 1k Potentiometers
    1x Arduino
    1x Motor Shield
    4x Motors (I chose 12V DC Fan motors because they were cheap and already had mounting holes.
    1x laser (as bright as you want)
    4x Round mirrors (Check hobby and craft stores)

    Hi, i´m spanish. congratulations. Where I can find any documentation of the project? I want to build one like this.

    do you have a list of components i an wanting this to take to my next festival also can i make this portable?

    And ... Where is the instructable?
    It look great, but we miss the instructions to replicate it!

    Do you have pictures or a video of it in action, the images it creates? I'd love to see it. your set up looks great.