hallo,
ich habe eine fräse, mit der ich macroaufnahmen von kleinen objekten machen möchte. die kamera ist der z-achse befestigt. der abstand der kamera zum objekt soll immer gleich sein. dafür habe ich einen sharp ir gp2d120 (4-30 cm) neben der kamera montiert und zum aufnahmebereich ausgerichtet.
der code der z-achse alleine funktioniert. der code um allgemein die achsen ohne delay zu bewegen funktioniert nun auch. ich bin aber nicht sicher wie ich die beiden zusammenfüge.
die bewegung der x- und y-achse verläuft unabhängig von z. wenn ich mit switch case arbeite, werden bestimmte wege abgefahren und jede bewegungsänderung bekommt ein eigenes case. die z-achse muß aber case-Übergreifend bewegt werden.
so wie der code nun aussieht, bewegen sich die x- und y- achsen und auch die z-achse. die z-achse reagiert zufriedenstellend auf die messwerte. aber x- und y-achsen laufen extrem reduziert. die bewegung ist mit dem auge fast nicht wahr zu nehmen. ich habe zum spass den unteren codebereich, der sensordaten und umsetzung in z-achsenbewegung beinhaltet, zeile für zeile einkopiert und die fräse jedesmal angefahren. die serial.print-zeilen sind das problem. je mehr serial.print-zeilen um langsamer laufen x- und z-achse.
hat jemand eine idee?
ich habe eine fräse, mit der ich macroaufnahmen von kleinen objekten machen möchte. die kamera ist der z-achse befestigt. der abstand der kamera zum objekt soll immer gleich sein. dafür habe ich einen sharp ir gp2d120 (4-30 cm) neben der kamera montiert und zum aufnahmebereich ausgerichtet.
der code der z-achse alleine funktioniert. der code um allgemein die achsen ohne delay zu bewegen funktioniert nun auch. ich bin aber nicht sicher wie ich die beiden zusammenfüge.
die bewegung der x- und y-achse verläuft unabhängig von z. wenn ich mit switch case arbeite, werden bestimmte wege abgefahren und jede bewegungsänderung bekommt ein eigenes case. die z-achse muß aber case-Übergreifend bewegt werden.
so wie der code nun aussieht, bewegen sich die x- und y- achsen und auch die z-achse. die z-achse reagiert zufriedenstellend auf die messwerte. aber x- und y-achsen laufen extrem reduziert. die bewegung ist mit dem auge fast nicht wahr zu nehmen. ich habe zum spass den unteren codebereich, der sensordaten und umsetzung in z-achsenbewegung beinhaltet, zeile für zeile einkopiert und die fräse jedesmal angefahren. die serial.print-zeilen sind das problem. je mehr serial.print-zeilen um langsamer laufen x- und z-achse.
hat jemand eine idee?
code: [select]
#include <arduino.h>
int dirpin_x = 5;
int stepperpin_x = 2;
int dirpin_y = 6;
int stepperpin_y = 3;
int dirpin_z = 7;
int stepperpin_z = 4;
unsigned long move_x =1000;
unsigned long move_y =1000;
unsigned long move_z =200;
unsigned long interval;
//sensor
int sensorpin = a5;
int distance = 0;
int sollabstand = 104; //abstand des sensors zum objekt; kameraabstand dann 90mmm zum objekt
void setup()
{
serial.begin (9600);
pinmode(dirpin_x, output);
pinmode(stepperpin_x, output);
pinmode(dirpin_y, output);
pinmode(stepperpin_y, output);
pinmode(dirpin_z, output);
pinmode(stepperpin_z, output);
}
void step_1(boolean dir, int steps) // einstellungen für die z-achse
{
digitalwrite(dirpin_z,dir);
delay(50);
for(int i=0;i<steps;i++)
{
digitalwrite(stepperpin_z, high);
delaymicroseconds(600);
digitalwrite(stepperpin_z, low);
delaymicroseconds (600);
}
}
void loop()
{
static unsigned long lastmillis = 0;
unsigned long currentmillis = millis();
static byte step = 1;
if(currentmillis - lastmillis >= interval)
{
lastmillis = currentmillis;
if (++step ==3) step =1;
}
switch (step)
{
case 1:
digitalwrite(dirpin_x, 1);
digitalwrite(stepperpin_x, 1);
delaymicroseconds(500);
digitalwrite(stepperpin_x, 0);
delaymicroseconds(500);
interval = move_x;
break;
case 2:
digitalwrite(dirpin_y, 1);
digitalwrite(stepperpin_y, 1);
delaymicroseconds(2000);
digitalwrite(stepperpin_y, 0);
delaymicroseconds(2000);
interval = move_y;
break;
}
--------------------//////////////-------------------
// der untere bereich umfasst die messdaten
//des sharpsensors und die Übergabe die z-achse
// die serial.print zeilen haben einfluß auf die geschwindigkeit der x- und y-achse
// je mehr zeilen um langamer die x- und y-achse
distance = analogread(sensorpin);
serial.print("messwert: "); serial.print(distance); serial.print(" ");
int distanceconverted = (207600 / (distance-11))/10;
distanceconverted = constrain(distanceconverted, 50, 150);
serial.print("abs. abstand: "); serial.print(distanceconverted); serial.print("mm ");
serial.print("rel. abstand: "); serial.print(distanceconverted - sollabstand); serial.println(" mm");
if (distanceconverted == 50)
{
step_1(true,0);
}
else if (distanceconverted == 150)
{
step_1(true,0);
}
else if (distanceconverted > 104)
{
step_1(true,300);
}
else if (distanceconverted < 104)
{
step_1(false,300);
}
}
hat jemand eine idee?mit 9600 baud kannst du nicht mehr als 960 zeichen pro zekunde ausgeben, dann ist schicht im serial-schacht.
versuch's mal mit:
code: [select]
serial.begin (115200);
oder:
code: [select]
serial.begin (500000);
bei 500000 baud kannst du allerdings dann nicht mehr den seriellen monitor der arduino-ide verwenden, der diese baudrate nicht unterstützt, sondern du müßtest ein "serielles terminalprogramm" starten, bei dem du diese baudrate auch einstellen kannst.
Arduino Forum > International > Deutsch (Moderator: uwefed) > Serial.print-Zeilen reduzieren Steppermotorgeschwindigkeit
arduino
Comments
Post a Comment