Home | Links | Contact |

Printed from www.nzmeccano.com

Top Home Bottom

Section 8 of XY Plotter Instructions

(Author: Peter Harwood)

The Arduino Sketch

 The complete X-Y Plotter Instructions are in the User Gallery in Peter Harwood 2.  These instructions are in the form of a pdf file. The Arduino sketch in the instructions becomes corrupted in the conversion process from a PDF to a text file, so here is the complete sketch as text.

Don't be put off by the size of it.  The whole thing is in sections that are described in the instructions!

8. The Arduino Sketch

/*[200217a_with_MECCANO]
X-Y Plotter Sketch by Peter Harwood 11/03/2020
Drives two stepper motors in precision
mode to plot an ellipse and 'MECCANO'.
Runs at two speeds selected by Digitalpin(12):
0v 100 points/sec
5v 30 points/sec
A point is ~.25mm
*/
int S1count = 0; //Accumulated posn of Stepper 1
int S1posn = 0; //Incremental posn, one of eight w. Phase 1= posn 0
int S2count = 0; //Accumulated posn of Stepper 2
int S2posn = 0; //Incremental posn, one of eight w. Phase 1= posn 0
float currentX = 0;
float startX = 0;
float startY = 0;
int targetX = 0;
int targetY = 0;
float currentY = 0;

//Array giving start point of each stage
//Stage 0(line) 1(line) 2(ellipse) M E C C A N O 9(line) 10(line) 11(line)
float Xarray[13] = ;
float Yarray[13] = ;

int MXarray[32] = ;
int MYarray[32] = ;
int EXarray[39] = ;
int EYarray[39] = ;
int CXarray[51] = ;
int CYarray[51] = ;
int AXarray[37] = ;
int AYarray[37] = ;
int NXarray[33] = ;
int NYarray[33] = ;
int OXarray[52] = ;
int OYarray[52] = ;

float G = 0; //Gradient of line from (startX,startY) to targetX,targetY)
float Angle = 195; // Angle in ellipse, this is the start value
float k = 2 * 3.14 / 360; //Converts angle from degrees to radians
int Stage = 0; // The plot occurs in 12 stages
int Lstage = 0; // Stage 2, the ellipse, is a series of vectors using Lstage
float deltaY = 0;
int Xstep = 0;
int Ystep = 0;

void setup()

void loop()
}
}

if (Stage == 1) //Stage 1 goes to(36,211)

}
}

if (Stage == 2) // goes from and to (36,211)
//Calculate x and y for Angle 0-360 in degree steps

}
}

if (Stage == 3) //M. Stage 3 from(36,211) to (257,211))

}
//End of overall Stage
if (Lstage == 32)

}

if (Stage == 4) //E. Stage 4 from(257,211) to (364,208)

}
//End of overall Stage
if (Lstage == 40)

}

if (Stage == 5) //C. Stage 5 from (364,208) to (435,208)

}
//End of overall Stage
if (Lstage == 51)

}

if (Stage == 6) //C. Stage 6 from (435,208) to (465,211)

}
//End of overall Stage
if (Lstage == 52)

}

if (Stage == 7) //A. Stage 7 from (423,211) to (419,211)

}
//End of overall Stage
if (Lstage == 37)

}

if (Stage == 8) //N. Stage 8 from (554,211) to (664,208)

}
//End of overall Stage
if (Lstage == 35)

}

if (Stage == 9) //)O. Stage 9 from (664,208) to (664,208)

}
//End of overall Stage
if (Lstage == 52)

}

if (Stage == 10) //Stage 10 from (664,208) to(750,208)

}
}

if (Stage == 11) //Stage 11 from(750,208) to(750,0)

}
}

if (Stage == 12) //Stage 12 from(750,0) to(0,0)

}
}
currentX = (S2count - S1count) / 2;
currentY = (S1count + S2count) / 2;

Xstep = 0; // Sets initial condition
Ystep = 0;

//Determine path to take to next point. The start, current and
// target X and Y points are known when each point is calculated.
// This procedure works out the straight line between the start
//and target points and decides which X and Y steps to take to
// stay on the line.

// Compute distance deltaY in Y direction from current posn. to Start-Target line. (G is float)

if ((targetX - startX) != 0) //Slope not vertical

}

if ((targetX - startX) == 0) //Slope vertical

/*
Serial.print(Stage);
Serial.print(" deltaY = ");
Serial.print(deltaY);
Serial.print(" Xstep = ");
Serial.print(Xstep);
Serial.print(" Ystep = ");
Serial.print(Ystep);
Serial.print(" currentX = ");
Serial.print(currentX);
Serial.print(" currentY = ");
Serial.print(currentY);
Serial.print(" G = ");
Serial.print(G);
Serial.print(" startX = ");
Serial.print(startX);
Serial.print(" startY = ");
Serial.print(startY);
Serial.print(" targetX = ");
Serial.print(targetX);
Serial.print(" targetY = ");
Serial.print(targetY);
Serial.print(" Angle = ");
Serial.println(Angle);
*/

//Update count
S1count = S1count - Xstep + Ystep;
S2count = S2count + Xstep + Ystep;

//Establish updated posn from eight
S1posn = S1count % 8; // Gives 0 to 7 and -7 to 0
if (S1posn < 0) S1posn = 8 + S1posn;
S2posn = S2count % 8;
if (S2posn < 0) S2posn = 8 + S2posn;

//Set posn of stepper motor 1 from 0 - 7
if (S1posn == 0)

else if (S1posn == 1)

else if (S1posn == 2)

else if (S1posn == 3)

else if (S1posn == 4)

else if (S1posn == 5)

else if (S1posn == 6)

else if (S1posn == 7)

//Set posn of stepper motor 2 from 0 - 7
if (S2posn == 0)

else if (S2posn == 1)

else if (S2posn == 2)

else if (S2posn == 3)

else if (S2posn == 4)

else if (S2posn == 5)

else if (S2posn == 6)

else if (S2posn == 7)

if (digitalRead(12) == 1) delay(30);
else delay(10);
}
 

 

If you have any interesting information or comments about this page, please add them here:


Your name:
Your message:
Security check: (Please type in the text to prove you're a person!)
 
Login status:  You have not yet entered your user name and password. You cannot create or edit documents until you do.
Enter your user name and password to log in

Remember me

If you click on the box marked 'remember me next time', you will not have to log in again on this computer for three months.

If you don't have a user name yet, please click here

Models:

(Neil Bedford and Richard Smith)
Midlands Meccano Guild
Model Report 
97th Meeting 
The Arduino Sketch 
(Philip Drew & Richard Smith)
Midlands Meccano Guild
105th Model Report 
92nd Model Report 
91st Model Report 
103rd Meeting Model Report 
(John Rogers & Colin Bull)
Midlands Meccano Guild
101st Meeting Model Report 
(John Rogers and Neil Bedford)
Midlands Meccano Guild
100th Meeting Model Report 
98th Meeting Model Report 
97th Meeting Model Report 
(David Couch)
The Little Tram
An introductory Arduino project 
82nd Meeting Model Report 
(Roger Marriott)
Midlands Meccano Guild
95th Meeting Model Report 
 
(Andre Theberge)
Meccano Segway
Instructions 
(Andre Theberge)
A Meccano Segway
Arduino code 
(Andre Theberge)
A Meccano Segway
Assembly instructions 
92nd Model Report 
91st Model Report 
76th Meeting Report 
Construction details 
Bert Love's Blocksetter in colour 
(Rob Thompson pp Terry Bullingh)
BlockSetter Tower
Built by Terry Bullingham 
(Rob Thompson pp John Reid)
Captain Robert Falcon Scott
1912 Polar Sledging Party 
(Niels Gottlob)
Bucket Wheel Excavator
Transcribed from typed document with photos 
(Norbert Klimmek)
Hulett Ore Unloader
A 1 to 32 Scale Model 
 
(Joe Attard of Malta)
A model ship
 
Not many in this condition I'll bet! 
 
 View all | Chat | Models | Hints and Tips | Opinion | Reviews | Mine