Hulp nodig met AccelStepper

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 59
Geregistreerd: 19 Mrt 2015, 01:17

Hulp nodig met AccelStepper

Berichtdoor hazanovo » 31 Mrt 2015, 13:55

Hallo allemaal,

ik heb inmiddels een andere code gemaakt:






#include <AccelStepper.h>

// De bedoeling hier is dat de stappenmotor naar 4 verschillende posities gaat.


// Define a stepper and the pins it will use
AccelStepper stepper(AccelStepper::HALF4WIRE, 30, 31, 32, 33);

void setup(){


stepper.setAcceleration(400);
}

void loop(){

if (stepper.currentPosition() == 0){
stepper.setMaxSpeed(70);
stepper.moveTo(100);
}

if (stepper.distanceToGo() == 0){
stepper.setMaxSpeed(700);
stepper.moveTo(-100);

}


if (stepper.distanceToGo() == 0){
stepper.setSpeed(400);
stepper.moveTo(100); // deze regel word niet goed uitgevoerd. Want de motor veranderd niet van richting

}

if (stepper.distanceToGo() == 0){
stepper.setSpeed(20);
stepper.moveTo(-100); // deze regel word niet goed uitgevoerd. Want de motor veranderd niet van richting
}
stepper.run();

// Ook wat ik heel raar vind is dat stepper.moveTo(100); ipv 100 stappen, 200 maakt. En stepper.move(100); doet wel alle 100 stappen.
// Hoe zit het met de delay(); functie in accelstepper, is er een andere manier om een even te wachten.

}

Advertisement

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Hulp nodig met AccelStepper

Berichtdoor shooter » 31 Mrt 2015, 18:49

tja je moet wel een beetje geluk hebben natuurlijk:
stel even de position = 0
dan is if 1 waar,if2, if 3 en if 4 zijn ook waar.
dus dit moet je gaan oplossen met een state machine.
de gedachte is wel goed maar die loop gaat zo snel dat je maar een if in de loop moet zetten en als deze waar is dan de volgende stap van je switch case gaan doen.
paul deelen
shooter@home.nl

Berichten: 59
Geregistreerd: 19 Mrt 2015, 01:17

Re: Hulp nodig met AccelStepper

Berichtdoor hazanovo » 01 Apr 2015, 14:19

dus ongeveer als:


#include <AccelStepper.h>

AccelStepper stepper(AccelStepper::HALF4WIRE, 30, 31, 32, 33);

void setup(){

int state = 0; //is dit wat je bedoeld met state machine ?
stepper.setCurrentPosition(0);


switch (st){ // switch (ik heb echt geen idee wat ik hier moet invullen) {}

case1: stepper.moveTo(300); //De switch case functie hoort dat in de setup of in de loop ?
stepper.setAcceleration(600); // En als het in de setup moet, hoe kan ik het oproepen in loop.
stepper.setMaxSpeed(700);
if (stepper.distanceToGo() = 0){
stepper.stop();}
break;

case2: stepper.moveTo(200);
stepper.setAcceleration(200);
stepper.setMaxSpeed(100);
if (stepper.distanceToGo() = 0){
stepper.stop();}
break;

}
}

//Anders:


void setup() {

int state = 0;
stepper.setCurrentPosition(0);

}

void moveA() {
stepper.moveTo(200);
stepper.setAcceleration(200);
stepper.setMaxSpeed(100);
if (stepper.distanceToGo() = 0){
stepper.stop();}


}
void moveB() {


stepper.moveTo(200);
stepper.setAcceleration(200);
stepper.setMaxSpeed(100);
if (stepper.distanceToGo() = 0){
stepper.stop();}
}


void loop(){

switch (st) {

case1: moveA break;
case2: moveB break;
}
stepper.run();
}

Ik heb ook zoals je gevraagd had een fritzing gemaakt en de accelstepper.h bijgevoegd, staat in me vorige post.

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Hulp nodig met AccelStepper

Berichtdoor shooter » 01 Apr 2015, 22:59

cpp code
// DualMotorShield.pde
// -*- mode: C++ -*-
//
// Shows how to run 2 simultaneous steppers
// using the Itead Studio Arduino Dual Stepper Motor Driver Shield
// model IM120417015
// This shield is capable of driving 2 steppers at
// currents of up to 750mA
// and voltages up to 30V
// Runs both steppers forwards and backwards, accelerating and decelerating
// at the limits.
//
// Copyright (C) 2014 Mike McCauley
// $Id: $
#include <AccelStepper.h>
// The X Stepper pins
#define STEPPER1_DIR_PIN 3
#define STEPPER1_STEP_PIN 2
// The Y stepper pins
#define STEPPER2_DIR_PIN 7
#define STEPPER2_STEP_PIN 6
// Define some steppers and the pins the will use
AccelStepper stepper1(AccelStepper::DRIVER, STEPPER1_STEP_PIN, STEPPER1_DIR_PIN);
AccelStepper stepper2(AccelStepper::DRIVER, STEPPER2_STEP_PIN, STEPPER2_DIR_PIN);
void setup()
{
stepper1.setMaxSpeed(200.0);
stepper1.setAcceleration(200.0);
stepper1.moveTo(100);
stepper2.setMaxSpeed(100.0);
stepper2.setAcceleration(100.0);
stepper2.moveTo(100);
}
void loop()
{
// Change direction at the limits
if (stepper1.distanceToGo() == 0)
stepper1.moveTo(-stepper1.currentPosition());
if (stepper2.distanceToGo() == 0)
stepper2.moveTo(-stepper2.currentPosition());
stepper1.run();
stepper2.run();
}

bestudeer deze maar eens.
dat zijn alvast 2 stepper motoren.
zoals je ziet moet je ze wel apart definieren, en als je er nog meer hebt dan krijgen die ieder een ander nummer.
in de loop staat eigenlijk dat als de stepper op de opgegeven positie is dan beweeg naar de negatieve van de huidige positie (dat is slechts een voorbeeld)
je kunt hier dus ook een nieuwe waarde opgeven of deze uit een array halen.

opdrachtjes:
zorg dat de motoren op elkaar wachten voordat ze weer verdergaan. (dat zijn dus twee voorwaarden bij de IF)

maak een lijstje met posities in een staparray en zorg dat er telkens naar de volgende positie gelopen wordt.
stepper1stap++;
(stepper1.moveTo(staparray[stepper1stap]);

je komt er vanzelf hoor.
gewoon volhouden.
paul deelen
shooter@home.nl

Berichten: 59
Geregistreerd: 19 Mrt 2015, 01:17

Re: Hulp nodig met AccelStepper

Berichtdoor hazanovo » 05 Apr 2015, 01:13

Hallo,

Ik heb hier dus en array gemaakt van 5 stappen. Error is "i" is not declared. Hoe kan dat want ik heb het toch globaal geplaatst. Hoe kan ik dit oplossen ?




#include <AccelStepper.h>


// Define a stepper and the pins it will use
AccelStepper stepper(AccelStepper::HALF4WIRE, 30, 31, 32, 33);
int runStep = 0;
int stepperMove[5];







void setup() {



stepperMove[0] = 300;
stepperMove[1] = -400;
stepperMove[2] = 100;
stepperMove[3] = -20;
stepperMove[4] = 100;

}


void loop() {

for (i = 0; runStep < 4; runStep++){
stepper.moveTo(stepperMove[runStep]);
if (stepper.distanceToGo()==0){
stepper.stop();
}
}



stepper.run();

}

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Hulp nodig met AccelStepper

Berichtdoor shooter » 05 Apr 2015, 09:09

cpp code
#include <AccelStepper.h>


// Define a stepper and the pins it will use
AccelStepper stepper1(AccelStepper::HALF4WIRE, 30, 31, 32, 33);
int runStep = 0;
int stepper1Move[5];

void setup() {

stepperMove[0] = 300;
stepperMove[1] = -400;
stepperMove[2] = 100;
stepperMove[3] = -20;
stepperMove[4] = 100;

}

void loop() {

if (stepper.distanceToGo()==0){
stepper1.moveTo(stepper1Move[runStep]);
runstep ++;
if (runstep>4){runstep=0;}// of iets anders zoals runstep wordt --
}
}
// lees de foutmeldingen dan zag je dat i (waarom geen naam teller dan lees je tenminste niet over die kleine i heen)

stepper1.run();

}


de volgende stap wordt dan stepper1 stepper2 etc.
dan tijden in de array en motornummers, en natuurlijk snelheid en stappen. en dat allemaal in 1 array :D
paul deelen
shooter@home.nl

Berichten: 59
Geregistreerd: 19 Mrt 2015, 01:17

Re: Hulp nodig met AccelStepper

Berichtdoor hazanovo » 05 Apr 2015, 11:58

Dank je voor de wijze woorden, langzaam maar zeker begint het te bewegen. :o ;)
Moet ik voor de snelheid een aparte array maken ?
Zoals:

#include <AccelStepper.h>


// Define a stepper and the pins it will use
AccelStepper stepper(AccelStepper::HALF4WIRE, 30, 31, 32, 33);
int runStep = 0;
int stepperMove[10];
int stepperSpeed[3];
int stepSpeed = 0;





void setup() {
Serial.begin(9600);

stepper.setAcceleration(700);

stepperMove[0] = 300;
stepperMove[1] = -50;
stepperMove[2] = 40;
stepperMove[3] = -20;
stepperMove[4] = 30;
stepperMove[5] = -50;
stepperMove[6] = 30;
stepperMove[7] = -80;
stepperMove[8] = 50;
stepperMove[9] = -10;
stepperSpeed[0] = 1100;
stepperSpeed[1] = 300;
stepperSpeed[2] = 50;
}


void loop() {



if (stepper.distanceToGo()==0){
stepper.move(stepperMove[runStep]);
stepper.setMaxSpeed(stepperSpeed[stepSpeed]);
Serial.println(runStep);
stepSpeed ++;
runStep ++;
delay(500);
if (runStep>9){runStep=0;}// of iets anders zoals runstep wordt --
}







stepper.run();
}

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Hulp nodig met AccelStepper

Berichtdoor shooter » 05 Apr 2015, 21:15

u bent goed bezig.
paar dingen:
voor de toekomst is het handiger om naar een postie te gaan ipv aantal stappen.
als begin is het leuk om verschillende arrays te maken zet dan wel elke stap bij elkaar.
straks is het handiger om het in 1 array te doen,

volgende stap is werken met tijd
dwz op een tijd die in de array staat een stepper die ook in de array staat een nieuwe positie en snelheid geven.
als de tijd voorbij is dan volgende regel
dan kun je dus een soort camswitch maken. hierbij kunnen dus vele motoren tegelijk draaien.
als je dit dan in een youtube zet dan krijg je van mij de uitwerking.

een andere benadering is een virtuele as die dan de andere assen berekent.
paul deelen
shooter@home.nl

Berichten: 59
Geregistreerd: 19 Mrt 2015, 01:17

Re: Hulp nodig met AccelStepper

Berichtdoor hazanovo » 29 Apr 2015, 12:38

Hallo, sorry voor mijn late reactie. Ik heb in de tussen tijd een voeding (20A) voor de robot + een koelbox waar de arduino en alle l293d in gemonteerd zijn. Ik heb veel last gehad van hete IC's dus elke l293d heeft nu een koelvin, en ook het ik een l293d motorshield gekocht en daarop een extra l293d gesoldeerd. In die tijd ben ik niet bezig geweest met programmering. Nu nog de bekabeling vd robot op orde brengen, zodat er maar 1 dikke kabel aaangesloten moet worden, ipv 30 verschillende xD. Een kleine update.

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Hulp nodig met AccelStepper

Berichtdoor shooter » 29 Apr 2015, 19:16

een koelbox is niet slim liever een grote plaat of koelprofiel waar je die 293 op vastzet. je moet warmte afvoeren het hoeft niet koud te zijn.
Zet er een stekker tussen bijv. een subD 25.
als een motor niet hoeft te draaien zet hem dan uit. want ook de motoren worden erg warm.
Stroom is de helft van max ratings.
maak van elke motor een kleine kabel en zorg voor ruim voldoende kabel zodat er geen draden breken tijdens het vele bewegen.
doe het bewegen vooral heel langzaam, want dat vraagt v eel stroom.
en maak eens fotos wellicht kun je vooral armen balanceren, of met veren een beetje tegendruk geven.
paul deelen
shooter@home.nl

Volgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 21 gasten