Styra en RepStrap bearbetning (9 / 25 steg)
Steg 9: Att göra det lite bättre
Jag gör förbättringar som jag kommer att lägga till steg i slutet av detta instructable.
10-11-09
Den tidigare koden spår bollen ganska bra men steppers drivs i en mycket stenig väg.
I denna uppdaterade kod signal bearbetning skiss bara en till Arduino när det sker en förändring i riktning. Så stegmotorer bara köra i vilken riktning var de senast fastställda till, tills de blir tillsagda att ändra. Detta gör att motorerna att köra en mycket snabbare och smidigare.
Men det är fortfarande något en bit bort. Arduinoen verkar missa några av signaler, så RepStrap som slutar med X-Y-steget skjuts hela vägen till ena sidan.
Jag ska försöka fixa detta.
Arduino och bearbetning koden är nedan. Jag har lagt till fler kommentarer för att hålla saker klart.
/////////////////////////////////////////////////
Arduino kod:
Läsa data från seriella
Använda data för att avgöra riktningen av X och Y steppers
#define XstepPin 10
#define XdirPin 7
#define YstepPin 2
#define YdirPin 3
int val; Uppgifterna från den seriella porten
void setup() {
pinMode (XstepPin, OUTPUT);
pinMode (XdirPin, OUTPUT);
pinMode (YstepPin, OUTPUT);
pinMode (YdirPin, OUTPUT);
Serial.BEGIN(9600); Starta seriell kommunikation på 9600 bps
}
void loop() {
int dirX;
int dirY;
om (Serial.available()) {/ / om data är tillgängliga att läsa,
Val = Serial.read(); sedan läsa den och lagra värdet i val
}
om (val == "H") {//set ledning av X och Y baserat på data som skickas från bearbetning
dirX = hög;
}
om (val == "L") {
dirX = låg;
}
om (val == "h") {
dirY = hög;
}
om (val == "l") {
dirY = låg;
}
digitalWrite(XdirPin,dirX); Set X riktning
digitalWrite(YdirPin,dirY); Ange Y-led
digitalWrite(XstepPin,HIGH); vidta åtgärder
digitalWrite(YstepPin,HIGH);
delayMicroseconds(2);
digitalWrite(XstepPin,LOW);
digitalWrite(YstepPin,LOW);
delayMicroseconds(2);
delayMicroseconds(1000); <<<<<< Används för att ändra hastighet <<<<<<<<
}
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
Bearbetar koden:
Detta utgångar rörelse i den studsande bollen med RepRap X- och Y-axeln
import processing.serial.*;
Seriella myPort; Skapa objekt från seriella klass
int val;
float x = 50,0;
float y = 50,0;
flyta speedX = 1,0;
float speedY =. 4;
float radie = 15,0;
int directionX = 1;
int directionY = 1;
int old_directionX = 1;
int old_directionY = 1;
void setup() {
storlek (100, 100);
Smooth();
noStroke();
ellipseMode(RADIUS);
Sträng portName = Serial.list() [0];
myPort = ny följetong (här, portName, 9600);
}
void draw() {
Fill(0,12);
rect (0,0, bredd, höjd);
Fill(255);
ellips (x, y, radius, radie);
x += speedX * directionX;
om ((x > bredd-radius) || (x < RADIUS)) {//change X riktning om bollen träffar sidan av rutan
directionX = - directionX;
}
y + = snabb * directionY;
om ((y > höjd-radius) || (y < RADIUS)) {//change Y riktning om bollen träffar sidan av rutan
directionY = - directionY;
}
om ((directionX! = old_directionX) & & (directionX == 1)) {//if X riktning ändras ut H
myPort.write('H');
Print('H');
Delay(100);
}
om ((directionX! = old_directionX) & & (directionX == -1)) {//if X riktning ändras ut h
myPort.write('h');
Print('h');
Delay(100);
}
om ((directionY! = old_directionY) & & (directionY == 1)) {//if Y riktning ändras ut L
myPort.write('L');
Print('L');
Delay(100);
}
om ((directionY! = old_directionY) & & (directionY == -1)) {//if Y riktning ändras ut l
myPort.write('l');
Print('l');
Delay(100);
}
old_directionX = directionX; lagrar de riktningar vi bara använde, som gamla mot
old_directionY = directionY;
Delay(100); ta bort kommentar för att bromsa hela för felsökning
}