Hallo
ich habe mir aus 2 StepperMotoren 28BYJ-48 mit Antrieb Modulplatine
ULN2003
eine 2 Achsen Timelapse Vorrichtung gebaut und konnte diese im letzten
Urlaub auch schon ausgiebig testen.
Wer nicht weiß was das ist hier ein schneller Link.
Youtube-Video Youtube-Video "DIY GoPro Pan/Tilt Time-Lapse Rig Part 2"
Ich möchte das ganze jetzt ein wenig erweitern und zwar das man die
Geschwindigkeit über ein Poti einstellen kann. Allerdings muss ich
zugeben das ich das Programm nicht selbst geschrieben habe sondern ein
netter User von hier hat es mir zu Verfügung gestellt.
Naja meine Idee war das ganz einfach über ein analogRead machen und dann
bei der Geschwindigkeit einfügen das funktioniert allerdings nicht
Jemand eine Idee ?
struct toyStepper_t{
byte bluePin; byte pinkPin; byte yellowPin; byte orangePin;
unsigned long stepDelay; bool clockwise; byte curState;
unsigned int steps2go; unsigned long lastStepMicros;
};
toyStepper_t stepper[2]={
{2,3,4,5, 200L*10, true, 0, 0, 0 },
{8,9,10,11, 400L*10, true, 0, 0, 0 },
};
const int Taster=7; //Ein AusTaster
const int LEDPin=13;//Standby LED
const int sens=A0; //poti an A0
int valsens=0;
int Tasterstellung = LOW;
const int NUMSTEPPERS= sizeof(stepper)/sizeof(toyStepper_t);
const byte lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
void updateStepper(byte index, long nowMicros)
{
if (stepper[index].steps2go==0) return;
if (nowMicros-stepper[index].lastStepMicros >= stepper[index].stepDelay)
{
stepper[index].lastStepMicros= nowMicros;
stepper[index].steps2go--;
if (stepper[index].clockwise)
{
if (stepper[index].curState>0) stepper[index].curState--; else stepper[index].curState=7;
}
else
{
if (stepper[index].curState<7) stepper[index].curState++; else stepper[index].curState=0;
}
setOutput(index, stepper[index].curState);
}
}
void setup() {
//declare the motor pins as outputs
for (int i=0; i<NUMSTEPPERS; i++)
{
pinMode(stepper[i].bluePin, OUTPUT);
pinMode(stepper[i].pinkPin, OUTPUT);
pinMode(stepper[i].yellowPin, OUTPUT);
pinMode(stepper[i].orangePin, OUTPUT);
setOutput(i, stepper[i].curState);
}
pinMode(Taster,INPUT); // Taster INPUT
pinMode(LEDPin,OUTPUT); //LED output
pinMode(sens,INPUT); //Poti input
Serial.begin(9600);
Serial.println("Stepper demo");
}
const unsigned int stepsPerRevolution= 1600;
void loop(){
Tasterstellung=digitalRead(Taster);
valsens=analogRead(sens);
long now=micros();
if (Tasterstellung==HIGH){
digitalWrite(LEDPin,LOW);
for (int i=0; i<NUMSTEPPERS; i++)
{
updateStepper(i, now);
if (stepper[i].steps2go==0)
{
stepper[i].clockwise= !stepper[i].clockwise;
stepper[i].steps2go= stepsPerRevolution;
}
}
}
else{
digitalWrite(LEDPin,HIGH); }
}
void setOutput(byte index, byte state)
{
digitalWrite(stepper[index].bluePin, bitRead(lookup[state], 0));
digitalWrite(stepper[index].pinkPin, bitRead(lookup[state], 1));
digitalWrite(stepper[index].yellowPin, bitRead(lookup[state], 2));
digitalWrite(stepper[index].orangePin, bitRead(lookup[state], 3));
}
[/code*]