Liste der Anhänge anzeigen (Anzahl: 2)
hallo allerseits,
das fahrzeug hat jetzt die endgültigen räder bekommen:
Anhang 30963
das anflanschen der räder an die getriebeachsen sieht so aus:
Anhang 30964
hier kann man die fahrweise sehen:
https://youtu.be/UuRWhUiWCaY
das im video gezeigte wird weder über irgendwelche sensoren, noch über die klicks der encoder gesteuert (kommt noch), es ist nur eine aneindander gereihte folge von einzelnen codeschnipseln für die eine oder andere fahrweise...
Liste der Anhänge anzeigen (Anzahl: 2)
hallo allerseits,
mein künftiges roboter-fahrgestell war mir mit den DC-motoren und getriebe zu schnell, mit hilfe von PWM ließ sich das zwar verlangsamen, der antrieb wurde dadurch aber schwächer....
Der nächste versuch findet mit schrittnotoren statt ( DC 5V 28YBJ-48 )
Anhang 31028Anhang 31029
angepasstes beispiel aus der CustomStepper lib (als demosoftware für das video):
Code:
#include <CustomStepper.h>
CustomStepper stepper_VL(22, 24, 26, 28);
CustomStepper stepper_HL(23, 25, 27, 29);
CustomStepper stepper_HR(47, 49, 51, 53);
CustomStepper stepper_VR(46, 48, 50, 52);
boolean rotate_li;
boolean rotate_deg_li;
boolean rotate_re;
boolean rotate_deg_re;
boolean vorwaerts;
boolean rueckwaerts;
void setup()
{
rotate_li = false;
rotate_deg_li = false;
rotate_re = false;
rotate_deg_re = false;
vorwaerts = false;
rueckwaerts = false;
Serial1.begin(115200);
}
void loop()
{
if (stepper_VL.isDone() && rueckwaerts == false)
{
alle_stepper_rueckwaerts();
}
if (stepper_VL.isDone() && rueckwaerts == true && rotate_li == false)
{
rotieren_links();
}
if (stepper_VL.isDone() && rotate_li == true && vorwaerts == false)
{
alle_stepper_vorwaerts();
}
if (stepper_VL.isDone() && vorwaerts == true && rotate_re == false)
{
rotieren_rechts();
}
if (stepper_VL.isDone() && rotate_re == true && vorwaerts == true)
{
alle_stepper_vorwaerts();
}
stepper_VL.run();
stepper_HL.run();
stepper_HR.run();
stepper_VR.run();
}
/***********************************************************/
void alle_stepper_vorwaerts()
{
stepper_VL.setRPM(12);
stepper_HL.setRPM(12);
stepper_HR.setRPM(12);
stepper_VR.setRPM(12);
stepper_VL.setSPR(4075.7728395);
stepper_HL.setSPR(4075.7728395);
stepper_HR.setSPR(4075.7728395);
stepper_VR.setSPR(4075.7728395);
stepper_VL.setDirection(CW);
stepper_VL.rotate(2);
stepper_HL.setDirection(CW);
stepper_HL.rotate(2);
stepper_HR.setDirection(CW);
stepper_HR.rotate(2);
stepper_VR.setDirection(CW);
stepper_VR.rotate(2);
vorwaerts = true;
}
void alle_stepper_rueckwaerts()
{
stepper_VL.setRPM(12);
stepper_HL.setRPM(12);
stepper_HR.setRPM(12);
stepper_VR.setRPM(12);
stepper_VL.setSPR(4075.7728395);
stepper_HL.setSPR(4075.7728395);
stepper_HR.setSPR(4075.7728395);
stepper_VR.setSPR(4075.7728395);
stepper_VL.setDirection(CCW);
stepper_VL.rotate(2);
stepper_HL.setDirection(CCW);
stepper_HL.rotate(2);
stepper_HR.setDirection(CCW);
stepper_HR.rotate(2);
stepper_VR.setDirection(CCW);
stepper_VR.rotate(2);
rueckwaerts = true;
}
void rotieren_links()
{
stepper_VL.setRPM(12);
stepper_HL.setRPM(12);
stepper_HR.setRPM(12);
stepper_VR.setRPM(12);
stepper_VL.setSPR(4075.7728395);
stepper_HL.setSPR(4075.7728395);
stepper_HR.setSPR(4075.7728395);
stepper_VR.setSPR(4075.7728395);
stepper_VL.setDirection(CCW);
stepper_VL.rotate(2);
stepper_HL.setDirection(CCW);
stepper_HL.rotate(2);
stepper_HR.setDirection(CW);
stepper_HR.rotate(2);
stepper_VR.setDirection(CW);
stepper_VR.rotate(2);
rotate_li = true;
}
void rotieren_rechts()
{
stepper_VL.setRPM(12);
stepper_HL.setRPM(12);
stepper_HR.setRPM(12);
stepper_VR.setRPM(12);
stepper_VL.setSPR(4075.7728395);
stepper_HL.setSPR(4075.7728395);
stepper_HR.setSPR(4075.7728395);
stepper_VR.setSPR(4075.7728395);
stepper_VL.setDirection(CW);
stepper_VL.rotate(2);
stepper_HL.setDirection(CW);
stepper_HL.rotate(2);
stepper_HR.setDirection(CCW);
stepper_HR.rotate(2);
stepper_VR.setDirection(CCW);
stepper_VR.rotate(2);
rotate_re = true;
}
es funktionirt ( video hier ), ich wäre mit dieser geschwindigkeit zufrieden, was mir nicht gelungen ist, ist die elegante lösung von botty hier nachzubauen (um das hier realisieren zu können):
Code:
// stepper xyz...
for (uint8_t idx = ST_VL; idx < ST_MAX; idx++)
{
// die 4 stepper mit den verschiedenen, aber doch irgendwie 4x den gleichen anweisungen, bzw. variablen/konstanten zu "versehen"...
}
muster für die DC-motoren (AF_Motor lib)
Code:
enum motoren_e
{
M_VL = 0, // Motor vorne links
M_HL,
M_VR,
M_HR,
M_MAX
};
struct motor
{
AF_DCMotor mot;
uint8_t enc_pin;
// volatile damit der Compiler keine 'dummen' Optimierung macht.
volatile uint32_t ticks;
unsigned long start_time;
unsigned long stop_time;
};
struct motor motoren[M_MAX] =
{
{ AF_DCMotor(4), 18, 0, 0, 0 },//M_VL
{ AF_DCMotor(1), 19, 0, 0, 0 },//M_HL
{ AF_DCMotor(2), 21, 0, 0, 0 },//M_HR
{ AF_DCMotor(3), 20, 0, 0, 0 } //M_VR
};
mein versuch das nachzuempfinden:
Code:
enum stepper_e
{
ST_VL = 0, // Motor vorne links
ST_HL,
ST_VR,
ST_HR,
ST_MAX
};
struct stepper motoren[ST_MAX]=
{
{CustomStepper(4),22, 24, 26, 28},
{CustomStepper(1),23, 25, 27, 29},
{CustomStepper(2),47, 49, 51, 53},
{CustomStepper(3),46, 48, 50, 52}
}
wird vom compiler mit verschiedenen fehlermeldungen (bei verschiedenen kombinationen des aufbaus beim "stepper_motoren" struct) quittiert...
--------------------------------------
Was ich herausgefunden habe ist, dass die AFMotor lib eine möglichkeit beinhaltet die motoren mit einer "nummer" zu versehen, das bietet die CustomStepper lib nicht. Daran liegt sicher ein teil meiner probleme, aber ist das alles? Bzw. wie muss die vorarbeit aussehen, um die for-schleife (idx) realisieren zu können?