Introduction: Rangoli Making Robot | Sand-Art Making Robot | Arduino Drawing Robot | 2-DOF | Servo Motor Robot | Arduino Writing Machine | Pen Plotter

What is your project about?

This project is about a robot that can draw and write on rangoli. It has two servo motors that are controlled by an Atmega328p microcontroller mounted on an Arduino Uno prototyping board.

Supplies

  • Arduino UNO
  • SG90 Micro-servo motor x 2
  • Breadboard (generic)
  • Jumper wires (generic)

Step 1: Why Did You Decide to Make It?

The reason for making this robot is to draw any shapes on the rangoli. The rangoli is being drawn by hand. And I am not good at making rangoli. So, I decided to make a robot. That can make rangoli for me instead.

Step 2: How Does It Work?

It has two servo motors that are controlled by an Atmega328p microcontroller mounted on an Arduino Uno prototyping board. It works in the principle of inverse kinematics. The outline coordinates of the image to be drawn are stored in an array in Arduino code.

Step 3: CADDesing

This is the cad design of the robot. Here, we can see, two motors, two links & a pencil. The first motor is placed on the ground. A link is connected from its shaft. The second motor is mounted on that shaft. Another link is connected to the shaft of the second motor. A pencil is attached at the end of the link. The tip of the pencil is the point to be reached. When both the motors rotate, anything can be drawn, with the help of the pencil on the ground.

Step 4: Real Design

This is the real robot, with 2 motors, 2 links & a pen as the end effector to trace.

Step 5: Working Envelop

The first motor will cover this area. But, to reach a particular point.

Step 6:

We require another motor. This is the working envelop of the robot. Any point within this area can be reached by the robot.

Step 7: Images That Can Be Drawn by the Robot

We will be drawing these images. They are 2 dimensional or flat images. We will trace its outline, with the robot.

Step 8: Image to Coordinates Conversion

To get the coordinates from the image. We will take help from this website. Here we just need to upload the image. Whose coordinates we require. The image will appear below. Click on the edges of the figure. The corresponding coordinates will be generated. All the coordinates will be displayed below. Copy them & then store them in an array in Arduino code.

Step 9: Conversion Issue

But the servo motors take an angle as input. And rotates to the angle provided. So, we have to convert the cartesian coordinates to spherical coordinates. With the help of trigonometry.

Step 10: Inverse Kinematics for the Robot

Here is the point to be reached. Both the links are of the same length. So, calculating the distance, D. Of the point from the origin. And the height, H. We can easily calculate all the angles.

Step 11:

We just need to say go to (8, 8) or (7, 12) or (12, 10). And in the code, all the angles are calculated and sent to the motors, to reach that point.

Step 12: No So Accurate

The accuracy is not great. Due to wobbly structure & cheap plastic servos.

Step 13: Inadequate Sampling

This drawing is not good, because of inadequate sampling of coordinates.

Step 14:

After increasing the number of coordinates, the quality gets better.

Step 15: Reason for Drawing on Rangoli

We are not drawing on paper with a pen. Because the setup is not strong & robust. It is not able to apply adequate pressure on the paper.

But, we successfully made some drawings. They were not good, but we are happy with the results.

Robotics EveryDay!!!

Step 16: Rangoli Making Robot Code

#include <Servo.h>



Servo m1,m2;



float d,h,l,phi;

float theta1,theta2;

int i,j;



int dly=80;



void setup() {

  m1.attach(11);

  m2.attach(10);

  



}



void go(float x, float y){

  

  l = 8; //length of link, l= 8cm

  

  d = sqrt((x*x)+(y*y)); //distace between origin left and (x,y) point



  phi = atan2(y,x)*180/3.14; // phi, angle between d and x axis  

  

  h = sqrt((l*l)-((d/2)*(d/2))); //height of the triangle

  

  theta1 = atan2(h,(d/2))*180/3.14; // phi 1, angle between d and axis

  

  theta2 = (90 - theta1)*2; // angle between l and l





  theta1+=phi;

  

  if ((theta1>0 && theta2>0) && (theta1<180 && theta2<180)){

    m1.writeMicroseconds((int)((theta1/180)*1500+700));

    m2.writeMicroseconds((int)((theta2/180)*1500+700));

    

  }

  

}



void coverage(){

  for (i=0;i<180;i+=1){

    m1.write(i);  

    delay(25);

  }  



  for (j=10;j<180;j+=1){

    m2.write(j);

    delay(25);

  }

  

  for (i=180;i>0;i-=1){

    m1.write(i);  

    delay(25);

  }  



  

  for (j=180;j>10;j-=1){

    m2.write(j);

    delay(25);

  }

}



void human(){

  int l= 100;

  float x[l]={1.92, 2.33, 2.75, 3.17, 2.25, 1.33, 0.83, 0.5, 0.25, 0.25, 0.33, 0.83, 1.25, 1.75, 2.33, 2.92, 3.5, 3.25, 3.0, 2.83, 2.75, 2.83, 2.92, 3.25, 3.5, 3.92, 4.33, 4.92, 5.33, 5.83, 6.25, 6.5, 6.67, 6.75, 6.75, 6.75, 6.67, 6.5, 6.33, 6.25, 6.67, 7.0, 7.5, 8.0, 8.33, 8.67, 9.0, 9.0, 9.0, 9.0, 8.83, 8.5, 8.0, 7.5, 7.0, 6.5, 6.08, 6.25, 6.42, 6.58, 6.75, 6.92, 7.17, 7.33, 7.5, 7.67, 8.08, 8.42, 8.83, 8.75, 8.67, 8.42, 8.0, 7.42, 6.92, 6.42, 5.92, 5.67, 5.42, 5.17, 4.92, 4.75, 4.5, 4.25, 4.0, 3.67, 3.5, 2.92, 2.25, 1.67, 1.25, 0.92, 0.58, 0.5, 0.5, 0.67, 1.0, 1.42, 1.58, 1.92};

  float y[l]={8.92, 8.33, 7.5, 6.58, 6.67, 6.75, 6.67, 6.33, 5.92, 5.33, 4.83, 4.5, 4.33, 4.25, 4.17, 4.17, 4.17, 3.83, 3.5, 3.08, 2.58, 2.0, 1.5, 1.17, 0.83, 0.5, 0.25, 0.25, 0.42, 0.58, 0.83, 1.25, 1.58, 2.0, 2.42, 2.92, 3.25, 3.58, 3.92, 4.0, 4.25, 4.25, 4.25, 4.42, 4.5, 4.67, 4.92, 5.25, 5.67, 5.92, 6.33, 6.58, 6.67, 6.67, 6.67, 6.5, 6.5, 6.83, 7.17, 7.5, 7.92, 8.25, 8.58, 8.92, 9.25, 9.33, 9.42, 9.58, 9.92, 10.33, 10.83, 11.25, 11.42, 11.42, 11.58, 11.5, 11.25, 11.0, 10.67, 10.42, 10.17, 9.92, 10.0, 10.42, 10.83, 11.0, 11.33, 11.5, 11.5, 11.58, 11.33, 11.08, 10.83, 10.33, 9.92, 9.58, 9.42, 9.5, 9.33, 8.92};

  

  for(i=0;i<l;i+=1){

    go(x[i],y[i]+2);  

    delay(dly);

  }

  

}



void star(){

  int l=99;

  float x[l] = {3.8333, 3.9167, 4.0, 4.1667, 4.25, 4.3333, 4.4167, 4.5, 4.6667, 4.25, 3.9167, 3.5833, 3.25, 2.8333, 2.5833, 2.6667, 2.9167, 3.1667, 3.5, 3.75, 4.0, 4.3333, 4.6667, 4.9167, 5.25, 5.25, 5.4167, 5.5, 5.6667, 5.75, 5.8333, 5.9167, 6.0, 6.1667, 6.1667, 6.25, 6.3333, 6.4167, 6.4167, 6.5, 6.5833, 6.6667, 6.6667, 6.75, 6.8333, 6.8333, 7.0, 7.0833, 7.3333, 7.5, 7.75, 7.9167, 8.0833, 8.25, 8.5, 8.75, 9.0, 9.1667, 9.0833, 8.75, 8.5, 8.25, 8.0, 7.8333, 7.6667, 7.4167, 7.25, 7.3333, 7.4167, 7.5833, 7.5833, 7.6667, 7.75, 7.8333, 7.9167, 8.0833, 8.1667, 8.0, 7.8333, 7.5, 7.1667, 7.0, 6.8333, 6.5, 6.25, 6.0, 5.75, 5.5833, 5.5, 5.1667, 5.0833, 4.8333, 4.6667, 4.5, 4.3333, 4.0833, 3.9167, 3.8333, 3.6667};

  float y[l] = {8.75, 8.4167, 8.0833, 7.75, 7.4167, 7.0833, 6.75, 6.5, 6.1667, 6.0, 5.75, 5.5, 5.25, 5.0833, 4.8333, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.75, 4.4167, 4.0833, 3.75, 3.5, 3.1667, 2.8333, 2.5833, 2.3333, 2.5, 2.6667, 2.8333, 3.0833, 3.25, 3.4167, 3.5833, 3.75, 4.0, 4.1667, 4.3333, 4.4167, 4.5833, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.8333, 5.0, 5.1667, 5.3333, 5.5, 5.75, 5.8333, 6.0, 6.1667, 6.4167, 6.5, 6.8333, 7.0833, 7.3333, 7.5, 7.8333, 8.0833, 8.25, 8.5833, 8.3333, 8.1667, 8.0833, 7.9167, 7.6667, 7.5, 7.25, 7.0833, 7.0, 7.0833, 7.25, 7.4167, 7.5833, 7.75, 7.9167, 8.0833, 8.1667, 8.25, 8.4167, 8.5833, 8.75, 8.8333};



  for(i=0;i<l;i+=1){

    go(x[i],y[i]);  

    delay(dly);

  }

}



void hand(){

  int l=55;

  float x[l] ={3.5833, 3.5, 3.75, 4.1667, 4.25, 4.25, 4.5833, 4.5833, 4.5833, 4.5833, 4.9167, 5.25, 5.3333, 5.3333, 5.4167, 5.4167, 5.6667, 5.75, 5.75, 5.6667, 5.9167, 6.25, 6.5833, 6.5833, 6.5833, 6.5833, 6.5833, 6.8333, 6.9167, 7.0, 7.0, 7.25, 7.6667, 7.6667, 7.75, 7.75, 7.75, 7.75, 8.1667, 8.5, 9.0, 9.3333, 9.0, 8.5, 8.0, 7.5, 6.8333, 6.0833, 5.1667, 4.5833, 4.0833, 3.6667, 3.5833, 3.5, 3.5833};

  float y[l] ={6.5, 4.1667, 3.9167, 3.9167, 4.5, 5.9167, 5.8333, 4.9167, 3.5, 2.9167, 2.5833, 2.5833, 2.8333, 3.3333, 5.25, 5.75, 5.6667, 4.9167, 3.9167, 2.5833, 2.1667, 2.25, 2.3333, 2.9167, 3.9167, 5.0, 5.5, 5.5833, 4.5833, 3.6667, 3.1667, 2.8333, 2.9167, 3.5, 4.5833, 5.3333, 6.0833, 7.1667, 6.5833, 5.9167, 5.8333, 6.1667, 6.6667, 8.0, 8.9167, 9.4167, 9.75, 9.8333, 9.8333, 9.5, 9.0, 8.3333, 7.5833, 6.9167, 6.5};



  for(i=0;i<l;i+=1){

    go(x[i],y[i]);  

    delay(dly);

  }

}



void head(){

  int l=128;

  float x[l] ={7.0, 6.92, 6.92, 7.0, 7.0, 7.08, 7.08, 7.17, 7.17, 7.33, 7.5, 7.58, 8.17, 8.25, 8.42, 8.5, 8.67, 8.83, 8.83, 8.75, 8.75, 8.92, 8.92, 8.83, 8.75, 8.75, 8.83, 8.92, 9.0, 8.92, 8.92, 9.08, 9.17, 9.25, 9.33, 9.42, 9.25, 9.25, 9.08, 9.08, 9.0, 9.0, 8.83, 8.83, 8.75, 8.75, 8.67, 8.67, 8.75, 8.75, 8.67, 8.67, 8.58, 8.58, 8.5, 8.5, 8.33, 8.33, 8.17, 8.17, 7.75, 7.67, 7.42, 7.33, 7.25, 7.17, 7.08, 7.0, 6.92, 6.75, 6.67, 6.5, 6.42, 6.17, 6.08, 4.67, 4.58, 4.33, 4.25, 4.08, 4.0, 3.83, 3.75, 3.67, 3.5, 3.42, 2.92, 2.92, 2.75, 2.75, 2.67, 2.67, 2.58, 2.58, 2.5, 2.5, 2.58, 2.58, 2.67, 2.67, 2.75, 2.75, 2.83, 2.83, 2.92, 2.92, 3.08, 3.08, 3.17, 3.17, 3.33, 3.33, 3.42, 3.42, 3.5, 3.5, 3.58, 3.58, 3.67, 3.67, 3.58, 3.58, 3.5, 3.5, 3.42, 3.42, 3.33, 3.25};

  float y[l] ={10.08, 10.0, 9.92, 9.83, 9.5, 9.42, 9.25, 9.17, 9.08, 8.92, 8.92, 9.0, 9.0, 9.08, 9.08, 9.0, 9.0, 8.83, 8.33, 8.25, 8.08, 7.92, 7.75, 7.75, 7.67, 7.58, 7.5, 7.5, 7.42, 7.33, 6.92, 6.75, 6.75, 6.67, 6.67, 6.58, 6.42, 6.33, 6.17, 6.08, 6.0, 5.92, 5.75, 5.67, 5.58, 5.5, 5.42, 5.25, 5.17, 4.67, 4.58, 4.25, 4.17, 4.0, 3.92, 3.75, 3.58, 3.5, 3.33, 3.25, 2.83, 2.83, 2.58, 2.58, 2.5, 2.5, 2.42, 2.42, 2.33, 2.33, 2.25, 2.25, 2.17, 2.17, 2.08, 2.08, 2.17, 2.17, 2.25, 2.25, 2.33, 2.33, 2.42, 2.42, 2.58, 2.58, 3.08, 3.17, 3.33, 3.5, 3.58, 3.75, 3.83, 4.17, 4.25, 4.83, 4.92, 5.42, 5.5, 5.75, 5.83, 6.0, 6.08, 6.25, 6.33, 6.42, 6.58, 6.67, 6.75, 6.83, 7.0, 7.08, 7.17, 7.25, 7.33, 7.42, 7.5, 7.75, 7.83, 9.0, 9.08, 9.42, 9.5, 9.75, 9.83, 9.92, 10.0, 10.0};



  for(i=0;i<l;i+=1){

    go(x[i],y[i]+1);  

    delay(dly);

  }

}



void heart(){

  int l=65;

  float x[l] ={5.92, 6.25, 6.58, 6.92, 7.17, 7.58, 7.92, 8.42, 9.0, 9.5, 10.0, 10.42, 10.83, 11.33, 11.58, 11.83, 11.92, 11.92, 11.75, 11.5, 11.25, 10.83, 10.42, 9.83, 9.17, 8.58, 8.0, 7.42, 7.08, 6.67, 6.42, 6.0, 5.5, 5.0, 4.42, 3.92, 3.42, 3.0, 2.5, 2.0, 1.67, 1.33, 1.0, 0.58, 0.33, 0.08, 0.08, 0.17, 0.42, 0.75, 1.17, 1.58, 2.0, 2.58, 3.08, 3.5, 3.83, 4.33, 4.75, 5.0, 5.25, 5.58, 5.67, 5.83, 6.0};

  float y[l] ={2.25, 1.92, 1.5, 1.0, 0.67, 0.5, 0.33, 0.25, 0.17, 0.17, 0.33, 0.5, 0.83, 1.17, 1.67, 2.42, 3.33, 4.0, 4.58, 5.33, 5.83, 6.5, 7.33, 8.08, 8.83, 9.5, 10.17, 10.67, 11.08, 11.33, 11.67, 12.17, 11.58, 11.0, 10.5, 9.92, 9.33, 8.92, 8.25, 7.75, 7.17, 6.67, 6.08, 5.42, 4.75, 3.83, 3.0, 2.17, 1.67, 1.25, 0.83, 0.5, 0.17, 0.08, 0.08, 0.17, 0.17, 0.25, 0.5, 0.75, 1.08, 1.33, 1.67, 2.0, 2.33};



  for(i=0;i<l;i+=1){

    go(x[i],y[i]+2);  

    delay(dly);

  }

}



void house(){

  int l=112;

  float x[l] ={1.4167, 1.4167, 1.4167, 1.4167, 1.4167, 1.4167, 1.4167, 1.4167, 1.0833, 0.8333, 0.5833, 0.25, 0.25, 0.5833, 0.9167, 1.25, 1.6667, 2.0833, 2.5, 2.9167, 3.25, 3.5833, 3.9167, 4.25, 4.5833, 5.0, 5.3333, 5.75, 6.0, 6.3333, 6.6667, 7.0, 7.25, 7.5, 7.6667, 7.75, 7.6667, 7.6667, 7.6667, 8.0, 8.3333, 8.5833, 8.9167, 9.0, 8.9167, 9.0, 9.0, 9.0, 9.0, 8.9167, 8.9167, 9.1667, 9.4167, 9.6667, 10.0, 10.25, 10.5833, 10.8333, 11.0833, 11.4167, 11.5833, 11.5833, 11.3333, 11.0833, 10.8333, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.5833, 10.3333, 10.0, 9.6667, 9.25, 8.9167, 8.4167, 8.0, 7.5833, 7.25, 6.75, 6.4167, 6.0, 5.75, 5.3333, 5.0, 4.5833, 4.0833, 3.8333, 3.5833, 3.25, 2.8333, 2.5833, 2.0833, 1.9167, 1.75, 1.4167, 1.4167, 1.4167, 1.4167, 1.4167, 1.4167};

  float y[l] ={7.5, 7.0, 6.5, 6.0, 5.5833, 5.25, 4.75, 4.4167, 4.4167, 4.4167, 4.4167, 4.4167, 4.0833, 3.8333, 3.6667, 3.4167, 3.0833, 2.8333, 2.5833, 2.4167, 2.25, 2.0, 1.6667, 1.5, 1.25, 1.0, 0.8333, 0.5833, 0.4167, 0.5833, 0.6667, 0.9167, 1.0, 1.1667, 1.25, 1.0, 0.8333, 0.5, 0.3333, 0.3333, 0.3333, 0.3333, 0.3333, 0.5, 0.5833, 0.9167, 1.25, 1.5, 1.75, 1.9167, 2.1667, 2.3333, 2.5, 2.6667, 2.8333, 3.0, 3.1667, 3.3333, 3.5, 3.6667, 3.75, 4.1667, 4.1667, 4.1667, 4.1667, 4.1667, 4.3333, 4.5, 4.8333, 5.1667, 5.5, 5.9167, 6.1667, 6.4167, 6.6667, 6.9167, 7.1667, 7.4167, 7.6667, 7.9167, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.3333, 8.1667, 8.0, 7.9167, 7.6667, 7.5};



  for(i=0;i<l;i+=1){

    go(x[i],y[i]+1);  

    delay(dly);

  }

}



void f22(){

  int l=102;

  float x[l] ={1.8333, 2.1667, 2.4167, 2.75, 3.0, 3.3333, 3.5, 3.8333, 4.0, 4.0, 4.0, 4.0, 4.25, 4.5, 4.5, 4.5833, 4.5833, 4.6667, 4.75, 4.8333, 4.9167, 5.0, 5.0833, 5.1667, 5.1667, 5.25, 5.25, 5.25, 5.25, 5.25, 5.4167, 5.5833, 5.75, 5.75, 5.75, 5.8333, 5.8333, 5.8333, 5.9167, 6.0833, 6.25, 6.5, 6.6667, 6.9167, 7.1667, 7.3333, 7.5833, 7.8333, 7.8333, 7.8333, 7.8333, 7.8333, 7.6667, 7.5, 7.25, 7.0, 6.75, 6.4167, 6.0833, 6.1667, 6.3333, 6.5833, 6.75, 6.8333, 6.8333, 6.8333, 6.8333, 6.8333, 6.6667, 6.5, 6.25, 6.0, 5.75, 5.5833, 5.5833, 5.5, 5.1667, 4.8333, 4.5833, 4.3333, 4.3333, 4.3333, 4.1667, 4.0, 3.9167, 3.6667, 3.3333, 3.0, 3.0, 3.0, 3.1667, 3.4167, 3.6667, 3.3333, 3.0, 2.6667, 2.3333, 2.0, 1.9167, 1.8333, 1.75, 1.8333};

  float y[l] ={7.5833, 7.25, 7.0, 6.8333, 6.5, 6.25, 5.9167, 5.6667, 5.3333, 4.9167, 4.5833, 4.25, 4.0833, 3.9167, 3.5, 3.0833, 2.75, 2.3333, 2.0, 1.75, 1.8333, 1.9167, 2.1667, 2.4167, 2.6667, 2.9167, 3.1667, 3.4167, 3.6667, 3.9167, 4.0833, 4.1667, 4.25, 4.4167, 4.6667, 4.9167, 5.0833, 5.3333, 5.5833, 5.75, 5.9167, 6.0833, 6.25, 6.5, 6.75, 7.0, 7.1667, 7.4167, 7.5833, 7.6667, 7.9167, 8.1667, 8.1667, 8.3333, 8.4167, 8.5, 8.5833, 8.6667, 8.75, 9.0, 9.0833, 9.25, 9.5, 9.5, 9.5833, 9.75, 9.9167, 10.0833, 10.1667, 10.25, 10.25, 10.0833, 9.9167, 9.75, 9.5, 9.3333, 9.25, 9.25, 9.25, 9.25, 9.3333, 9.5833, 9.75, 10.0, 10.0833, 10.25, 10.25, 10.1667, 10.0, 9.6667, 9.4167, 9.1667, 8.9167, 8.6667, 8.5833, 8.5, 8.4167, 8.25, 8.0, 7.6667, 7.5833, 7.4167};



  for(i=0;i<l;i+=1){

    go(x[i],y[i]+1);  

    delay(dly);

  }

}



void butterfly(){

  int l=133;

  float x[l] ={3.333, 3.75, 4.083, 4.417, 4.75, 5.083, 5.333, 5.667, 5.833, 6.25, 6.583, 6.917, 7.167, 7.333, 7.583, 7.75, 8.083, 8.333, 8.667, 9.083, 9.417, 9.75, 10.083, 10.5, 10.917, 11.333, 11.667, 11.667, 11.667, 11.667, 11.583, 11.583, 11.417, 11.25, 11.083, 11.0, 10.917, 10.833, 10.833, 10.75, 10.5, 10.083, 9.75, 9.417, 9.083, 8.833, 9.0, 9.417, 9.667, 9.917, 10.083, 10.25, 10.333, 10.417, 10.417, 10.333, 10.333, 10.083, 10.0, 9.75, 9.583, 9.25, 8.917, 8.667, 8.333, 8.083, 7.833, 7.5, 7.333, 7.333, 7.167, 7.0, 6.917, 6.75, 6.667, 6.583, 6.5, 6.333, 6.083, 5.917, 5.833, 5.833, 5.667, 5.667, 5.583, 5.583, 5.417, 5.25, 5.0, 4.667, 4.417, 4.083, 3.75, 3.417, 3.0, 2.667, 2.417, 2.25, 2.083, 2.083, 2.25, 2.333, 2.583, 2.917, 3.167, 3.333, 3.083, 2.917, 2.5, 2.25, 2.0, 1.667, 1.583, 1.333, 1.25, 1.083, 1.083, 0.917, 0.667, 0.417, 0.333, 0.25, 0.25, 0.583, 0.917, 1.25, 1.75, 2.0, 2.25, 2.583, 2.667, 2.917, 3.083};

  float y[l] ={1.667, 1.917, 2.25, 2.5, 2.833, 3.0, 3.25, 3.5, 3.75, 3.833, 3.833, 3.583, 3.25, 2.917, 2.75, 2.583, 2.25, 1.917, 1.667, 1.25, 1.167, 0.917, 0.583, 0.583, 0.5, 0.417, 0.5, 0.667, 1.0, 1.25, 1.5, 1.833, 2.083, 2.333, 2.583, 2.917, 3.25, 3.5, 3.833, 4.083, 4.333, 4.333, 4.333, 4.333, 4.167, 4.25, 4.5, 4.667, 4.833, 5.0, 5.167, 5.417, 5.667, 6.0, 6.333, 6.667, 7.0, 7.25, 7.5, 7.667, 7.833, 7.917, 8.167, 8.25, 8.333, 8.333, 8.333, 8.167, 7.917, 7.583, 7.333, 7.0, 6.833, 6.667, 6.417, 6.167, 6.0, 6.0, 6.0, 6.0, 6.25, 6.5, 6.75, 7.083, 7.417, 7.667, 8.167, 8.25, 8.333, 8.5, 8.5, 8.5, 8.5, 8.333, 8.167, 7.917, 7.583, 7.25, 6.833, 6.333, 6.0, 5.583, 5.25, 5.0, 4.833, 4.667, 4.583, 4.583, 4.583, 4.583, 4.583, 4.5, 4.083, 3.75, 3.333, 3.0, 2.667, 2.333, 2.083, 1.833, 1.5, 1.25, 0.75, 0.583, 0.583, 0.583, 0.667, 0.833, 1.0, 1.083, 1.25, 1.25, 1.417};



  for(i=0;i<l;i+=1){

    go(x[i],y[i]+2);  

    delay(dly);

  }

}



void lamp(){

  int l=114;

  float x[l] ={0.5833, 1.0, 1.3333, 1.75, 2.1667, 2.6667, 3.1667, 3.6667, 4.1667, 4.5833, 5.0, 5.25, 5.0833, 5.0833, 5.0833, 4.75, 4.4167, 4.25, 3.9167, 3.8333, 3.8333, 3.9167, 4.0, 4.1667, 4.3333, 4.5, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.6667, 4.75, 4.75, 4.9167, 5.0833, 5.25, 5.4167, 5.5833, 5.75, 5.8333, 6.0, 6.0833, 6.1667, 6.25, 6.25, 6.25, 6.3333, 6.3333, 6.25, 6.0833, 6.0, 5.9167, 5.75, 5.6667, 5.4167, 5.3333, 5.25, 5.25, 5.25, 5.25, 5.25, 5.25, 5.5, 5.9167, 6.3333, 6.75, 7.1667, 7.5833, 8.0, 8.4167, 8.8333, 9.25, 9.6667, 9.5833, 9.5, 9.4167, 9.3333, 9.1667, 9.0, 8.6667, 8.5, 8.25, 7.9167, 7.75, 7.4167, 7.0833, 6.75, 6.4167, 6.0, 5.5833, 5.25, 4.75, 4.3333, 4.0, 3.5833, 3.25, 2.9167, 2.5833, 2.3333, 2.0, 1.75, 1.5833, 1.4167, 1.1667, 1.0, 0.8333, 0.75, 0.6667, 0.6667, 0.5833, 0.5833, 0.5833};

  float y[l] ={7.4167, 7.1667, 7.0, 6.9167, 6.8333, 6.8333, 6.6667, 6.6667, 6.6667, 6.6667, 6.6667, 6.5833, 6.5, 6.1667, 5.75, 5.6667, 5.5833, 5.3333, 5.0, 4.5833, 4.1667, 3.75, 3.5, 3.1667, 2.75, 2.5, 2.1667, 1.8333, 1.5, 1.1667, 0.9167, 0.6667, 0.3333, 0.5833, 0.8333, 0.9167, 1.0, 1.25, 1.4167, 1.6667, 1.9167, 2.1667, 2.3333, 2.6667, 2.9167, 3.1667, 3.5, 3.75, 4.0, 4.25, 4.5, 4.75, 5.0, 5.1667, 5.3333, 5.3333, 5.4167, 5.5, 5.6667, 6.0, 6.0833, 6.3333, 6.4167, 6.5833, 6.6667, 6.6667, 6.6667, 6.6667, 6.6667, 6.75, 6.8333, 6.8333, 7.0, 7.0833, 7.25, 7.5833, 7.9167, 8.25, 8.5833, 8.9167, 9.3333, 9.5, 9.8333, 10.1667, 10.3333, 10.5833, 10.6667, 10.9167, 11.0833, 11.25, 11.25, 11.3333, 11.3333, 11.3333, 11.25, 11.1667, 11.1667, 11.0, 10.8333, 10.75, 10.5833, 10.4167, 10.1667, 9.9167, 9.6667, 9.5, 9.25, 9.0, 8.8333, 8.5, 8.3333, 8.1667, 7.8333, 7.4167};



  for(i=0;i<l;i+=1){

    go(x[i],y[i]+2);  

    delay(dly);

  }

}



void tree(){

  int l=79;

  float x[l] ={3.08, 3.42, 3.58, 3.75, 3.75, 3.75, 3.75, 3.67, 3.17, 2.58, 2.17, 1.58, 1.08, 0.83, 0.67, 0.42, 0.17, 0.17, 0.42, 0.75, 1.0, 1.25, 1.25, 1.42, 1.67, 2.08, 2.5, 2.83, 3.17, 3.42, 3.58, 3.92, 4.25, 4.5, 4.83, 5.0, 5.33, 5.67, 6.0, 6.25, 6.67, 6.83, 7.0, 7.25, 7.58, 7.92, 8.08, 8.17, 8.17, 8.17, 7.92, 8.0, 8.25, 8.33, 8.5, 8.58, 8.58, 8.42, 8.25, 8.0, 7.75, 7.5, 7.17, 6.67, 6.25, 5.92, 5.75, 5.42, 5.17, 5.08, 5.0, 5.0, 5.0, 5.08, 5.17, 5.33, 5.5, 5.75, 5.92};

  float y[l] ={11.0, 10.25, 9.67, 9.0, 8.42, 7.67, 6.92, 6.33, 6.33, 6.17, 6.25, 6.33, 6.17, 5.67, 5.0, 4.58, 4.17, 3.5, 3.08, 2.67, 2.5, 2.42, 2.0, 1.58, 1.33, 1.17, 1.0, 1.08, 1.25, 1.25, 1.0, 0.92, 1.0, 1.08, 0.92, 0.67, 0.67, 0.58, 0.58, 0.67, 0.67, 0.92, 1.25, 1.17, 1.42, 1.5, 1.92, 2.17, 2.58, 2.92, 3.17, 3.33, 3.58, 3.75, 4.17, 4.5, 4.92, 5.33, 5.75, 5.92, 6.08, 6.33, 6.5, 6.5, 6.5, 6.33, 6.17, 6.17, 6.33, 6.67, 6.92, 7.42, 8.0, 8.5, 9.0, 9.42, 9.92, 10.33, 10.83};



  for(i=0;i<l;i+=1){

    go(x[i],y[i]+2);  

    delay(dly);

  }

}



void A(){

  int l=14;

  float x[l] ={3.5833, 4.25, 5.5833, 6.25, 7.5, 8.25, 7.5, 4.25, 7.5, 8.25, 6.25, 5.5833, 4.25, 3.5833};

  float y[l] ={8.1667, 6.1667, 2.4167, 2.4167, 6.1667, 8.1667, 6.1667, 6.1667, 6.1667, 8.1667, 2.4167, 2.4167, 6.1667, 8.1667};



  for(i=0;i<l;i+=1){

    go(x[i],y[i]);  

    delay(dly);

  }

}



void square(){

  for(i=0;i<10;i++){

    go(0,i);  

    delay(dly);

  } 

  for (i=0;i<10;i++){

    go(i,10);  

    delay(dly);

  }

  for(i=10;i>0;i-=1){

    go(10,i);

    delay(dly);

  }

  for(i=10;i>0;i-=1){

    go(i,0);

    delay(dly);

  }

}



void line(){



    for(i=0;i<10;i++){

      go(i+4,4);

      delay(dly);

      }

    for(i=10;i>0;i--){

      go(i+4,4);

      delay(dly);

      }

}



void working_envelop(){

  

  for(float x=16;x>=0;x-=0.20){

    go(x,1);  

    delay(50);

  }

  

  m2.write(20);

  

  for (i=150;i<180;i+=1){

    m1.write(i); 

    delay(50);

  }  



  for (i=20;i<170;i+=1){

    m2.write(i);

    delay(15);

  }



  for(i=180;i>10;i-=1){

    m1.write(i);

    delay(25);

  }

}



void working_envelop_one(){

  for(i=0;i<180;i+=1){

    m1.write(i);

    delay(25);  

  }

  

  for(i=180;i>0;i-=1){

    m1.write(i);

    delay(25);  

  }  

}



void loop() {

 



  working_envelop();

  

  star();

  tree();

  lamp();

  human();

  house();

  heart();

  hand();

  f22();

  butterfly();

  A();

  

  delay(500);

}

Step 17: CAD Design

Step 18: Demonstration