Paso 9: Lo que es un poco mejor
Como hacer mejoras voy a agregar pasos al final de este instructivo.
11/10/09
El código anterior sigue la bola bastante bien pero los steppers son conducidos de una manera muy rocosa.
En este código actualizado, el bosquejo del proceso únicamente envía una señal a la Arduino cuando hay un cambio en la dirección. Los motores de pasos a ejecutar en cualquier dirección última fueron instalados, hasta que se les dice a cambiar. Esto permite que los motores funcionar mucho más rápido y más suave.
Pero todavía hay algo un poco apagado. El Arduino parece perderse algunas de las señales, por lo que el RepStrap termina con la etapa de X-Y empujada a un lado.
Voy a intentar solucionar este problema.
El código de Arduino y el proceso está por debajo. He añadido mas comentarios para ayudar a mantener las cosas claras.
/////////////////////////////////////////////////
Código de Arduino:
Leer datos de la serie
Utilizar los datos para determinar la dirección de X y Y steppers
#define XstepPin 10
#define XdirPin 7
#define YstepPin 2
#define YdirPin 3
int val; Datos recibidos del puerto serial
void setup() {}
pinMode (XstepPin, salida);
pinMode (XdirPin, salida);
pinMode (YstepPin, salida);
pinMode (YdirPin, salida);
Serial.Begin(9600); Iniciar la comunicación serial a 9600 bps
}
void loop() {}
DIR int x;
dirY int;
Si (Serial.available()) {/ / si hay datos disponibles para leer,
Val = Serial.read(); luego leer y guardar valor en val
}
Si (val == 'H') {//set la dirección de X e Y en base a datos del proceso
dirX = alta;
}
Si (val == 'L') {}
dirX = bajo;
}
Si (val == 'h') {}
dirY = alta;
}
Si (val == 'l') {}
dirY = bajo;
}
digitalWrite(XdirPin,dirX); Dirección de sistema X
digitalWrite(YdirPin,dirY); Dirección de conjunto Y
digitalWrite(XstepPin,HIGH); tomar medidas
digitalWrite(YstepPin,HIGH);
delayMicroseconds(2);
digitalWrite(XstepPin,LOW);
digitalWrite(YstepPin,LOW);
delayMicroseconds(2);
delayMicroseconds(1000); <<<<<< Uso de cambio de velocidad <<<<<<<<
}
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
Código de procesamiento:
Salidas del movimiento de la bola que despide al eje RepRap X e Y
Import processing.serial.*;
Serie myPort; Crear un objeto de clase Serial
int val;
Float x = 50.0;
Float y = 50.0;
flotador de speedX = 1.0;
flotador rápido =. 4;
radio de flotador = 15.0;
int directionX = 1;
int directionY = 1;
int old_directionX = 1;
int old_directionY = 1;
void setup() {}
tamaño (100, 100);
Smooth();
noStroke();
ellipseMode(RADIUS);
String portName = Serial.list() [0];
myPort = serie nueva (este, portName, 9600);
}
void draw() {}
Fill(0,12);
Rect (0,0, ancho, alto);
Fill(255);
Ellipse (x, y, radio, radio);
speedX de x += * directionX;
Si ((x > anchura-radio) || (x < RADIUS)) {//change X dirección si la bola golpea el lado de la caja
directionX = - directionX;
}
y += rápida * directionY;
Si ((y > altura-radio) || (y < RADIUS)) {Dirección de //change Y si la bola golpea el lado de la caja
directionY = - directionY;
}
Si ((directionX! = old_directionX) & & (directionX == 1)) {//if X dirección cambió de impresión H
myPort.write('H');
Print('H');
Delay(100);
}
Si ((directionX! = old_directionX) & & (directionX == -1)) {//if X dirección cambió de impresión h
myPort.write('h');
Print('h');
Delay(100);
}
Si ((directionY! = old_directionY) & & (directionY == 1)) {//if Y dirección cambió de impresión L
myPort.write('L');
Print('L');
Delay(100);
}
Si ((directionY! = old_directionY) & & (directionY == -1)) {//if Y dirección cambió de impresión l
myPort.write('l');
Print('l');
Delay(100);
}
old_directionX = directionX; almacena las direcciones a utilizar, como la antigua dirección
old_directionY = directionY;
Delay(100); Comentario para frenar todo esto para la solución de problemas
}