DERSLER
- ZAYIF AKIM TESİSLERİ
- YAPI ELEKTRİK VE KUVVET TESİSLERİ
- PANO TASARIM VE MONTAJI
- ENDÜSTRİYEL KONTROL VE ARIZA ANALİZİ
- ELEKTRİK-ELEKTRONİK VE ÖLÇME
- ELEKTRİK-ELEKTRONİK TEKNİK RESMİ
- ELEKTRİK-ELEKTRONİK ESASLARI
- ELEKTRİK-ELEKTRONİĞE GİRİŞ
- BİLGİSAYARLI ELEKTRİK TESİSAT PROJELERİ ÇİZİMİ
- BİLGİSAYAR DESTEKLİ UYGULAMALAR
- AHİLİK KÜLTÜRÜ VE GİRİŞİMCİLİK 12
Mini Cnc Plotter İçin Arduino Kodları
#include <Servo.h>
#include <Stepper.h>
#define LINE_BUFFER_LENGTH 512
const int kalem_kaldir = 85;
const int kalem_indir = 40;
const int kalem_servo_pin = 12;
const int adim_sayisi = 20;
const int hareket_hizi = 250;
Servo kalem_servo;
Stepper y_ekseni(adim_sayisi, 8,9,10,11);
Stepper x_ekseni(adim_sayisi, 4,5,6,7);
float x_adim_mm = 6.0;
float y_adim_mm = 6.0;
struct point {
float x;
float y;
float z;
};
struct point actuatorPos;
float StepInc = 1;
int StepDelay = 0;
int LineDelay = 50;
int penDelay = 50;
float Xmin = 0;
float Xmax = 40;
float Ymin = 0;
float Ymax = 40;
float Zmin = 0;
float Zmax = 1;
float Xpos = Xmin;
float Ypos = Ymin;
float Zpos = Zmax;
boolean verbose = false;
void setup() {
// Setup
Serial.begin( 9600 );
kalem_servo.attach(kalem_servo_pin);
kalem_servo.write(kalem_kaldir);
delay(200);
x_ekseni.setSpeed(hareket_hizi);
y_ekseni.setSpeed(hareket_hizi);
Serial.println("Çizim Yapan Mini CNC!");
Serial.print("X min ");
Serial.print(Xmin);
Serial.print(" den ");
Serial.print(Xmax);
Serial.println(" mm.");
Serial.print("Y min ");
Serial.print(Ymin);
Serial.print(" den ");
Serial.print(Ymax);
Serial.println(" mm.");
}
void loop()
{
delay(200);
char line[ LINE_BUFFER_LENGTH ];
char c;
int lineIndex;
bool lineIsComment, lineSemiColon;
lineIndex = 0;
lineSemiColon = false;
lineIsComment = false;
while (1) {
while ( Serial.available()>0 ) {
c = Serial.read();
if (( c == '\n') || (c == '\r') ) {
if ( lineIndex > 0 ) {
line[ lineIndex ] = '\0';
if (verbose) {
Serial.print( "Alıcı : ");
Serial.println( line );
}
processIncomingLine( line, lineIndex );
lineIndex = 0;
}
else {
// Empty or comment line. Skip block.
}
lineIsComment = false;
lineSemiColon = false;
Serial.println("ok");
}
else {
if ( (lineIsComment) || (lineSemiColon) ) {
if ( c == ')' ) lineIsComment = false;
}
else {
if ( c <= ' ' ) {
}
else if ( c == '/' ) {
}
else if ( c == '(' ) {
lineIsComment = true;
}
else if ( c == ';' ) {
lineSemiColon = true;
}
else if ( lineIndex >= LINE_BUFFER_LENGTH-1 ) {
Serial.println( "Yazma Hatası" );
lineIsComment = false;
lineSemiColon = false;
}
else if ( c >= 'a' && c <= 'z' ) {
line[ lineIndex++ ] = c-'a'+'A';
}
else {
line[ lineIndex++ ] = c;
}
}
}
}
}
}
void processIncomingLine( char* line, int charNB ) {
int currentIndex = 0;
char buffer[ 64 ];
struct point newPos;
newPos.x = 0.0;
newPos.y = 0.0;
while( currentIndex < charNB ) {
switch ( line[ currentIndex++ ] ) {
case 'U':
penUp();
break;
case 'D':
penDown();
break;
case 'G':
buffer[0] = line[ currentIndex++ ];
buffer[1] = '\0';
switch ( atoi( buffer ) ){
case 0:
case 1:
char* indexX = strchr( line+currentIndex, 'X' );
char* indexY = strchr( line+currentIndex, 'Y' );
if ( indexY <= 0 ) {
newPos.x = atof( indexX + 1);
newPos.y = actuatorPos.y;
}
else if ( indexX <= 0 ) {
newPos.y = atof( indexY + 1);
newPos.x = actuatorPos.x;
}
else {
newPos.y = atof( indexY + 1);
indexY = '\0';
newPos.x = atof( indexX + 1);
}
drawLine(newPos.x, newPos.y );
// Serial.println("ok");
actuatorPos.x = newPos.x;
actuatorPos.y = newPos.y;
break;
}
break;
case 'M':
buffer[0] = line[ currentIndex++ ];
buffer[1] = line[ currentIndex++ ];
buffer[2] = line[ currentIndex++ ];
buffer[3] = '\0';
switch ( atoi( buffer ) ){
case 300:
{
char* indexS = strchr( line+currentIndex, 'S' );
float Spos = atof( indexS + 1);
if (Spos == 30) {
penDown();
}
if (Spos == 50) {
penUp();
}
break;
}
case 114:
Serial.print( "Tam Pozisyon : X = " );
Serial.print( actuatorPos.x );
Serial.print( " - Y = " );
Serial.println( actuatorPos.y );
break;
default:
Serial.print( "Komut Tanınmadı : M");
Serial.println( buffer );
}
}
}
}
void drawLine(float x1, float y1) {
if (verbose)
{
Serial.print("fx1, fy1: ");
Serial.print(x1);
Serial.print(",");
Serial.print(y1);
Serial.println("");
}
if (x1 >= Xmax) {
x1 = Xmax;
}
if (x1 <= Xmin) {
x1 = Xmin;
}
if (y1 >= Ymax) {
y1 = Ymax;
}
if (y1 <= Ymin) {
y1 = Ymin;
}
if (verbose)
{
Serial.print("Xpos, Ypos: ");
Serial.print(Xpos);
Serial.print(",");
Serial.print(Ypos);
Serial.println("");
}
if (verbose)
{
Serial.print("x1, y1: ");
Serial.print(x1);
Serial.print(",");
Serial.print(y1);
Serial.println("");
}
x1 = (int)(x1*x_adim_mm);
y1 = (int)(y1*y_adim_mm);
float x0 = Xpos;
float y0 = Ypos;
long dx = abs(x1-x0);
long dy = abs(y1-y0);
int sx = x0<x1 ? StepInc : -StepInc;
int sy = y0<y1 ? StepInc : -StepInc;
long i;
long over = 0;
if (dx > dy) {
for (i=0; i<dx; ++i) {
x_ekseni.step(sx);
over+=dy;
if (over>=dx) {
over-=dx;
y_ekseni.step(sy);
}
delay(StepDelay);
}
}
else {
for (i=0; i<dy; ++i) {
y_ekseni.step(sy);
over+=dx;
if (over>=dy) {
over-=dy;
x_ekseni.step(sx);
}
delay(StepDelay);
}
}
if (verbose)
{
Serial.print("dx, dy:");
Serial.print(dx);
Serial.print(",");
Serial.print(dy);
Serial.println("");
}
if (verbose)
{
Serial.print("Going to (");
Serial.print(x0);
Serial.print(",");
Serial.print(y0);
Serial.println(")");
}
delay(LineDelay);
Xpos = x1;
Ypos = y1;
}
void penUp() {
kalem_servo.write(kalem_kaldir);
delay(LineDelay);
Zpos=Zmax;
if (verbose) {
Serial.println("Pen up!");
}
}
void penDown() {
kalem_servo.write(kalem_indir);
delay(LineDelay);
Zpos=Zmin;
if (verbose) {
Serial.println("Pen down.");
}
}