Camer slider

Hoi Allemaal,

Project:
Ik wil graag een gemotoriseerde camera slider maken m.b.v. een Arduino. Het voorbeeld wat ik voor de elektronica deel gebruik is van Youtuber Max Maker die dit ook op Instructables heeft beschreven.
instructables.com
Helaas is deze informatie wat diffuus geworden door de tijd aangezien een paar sites met info verloren zijn gegaan.

De slider zelf is een vereenvoudigde kopie van edelkrone.

Probleem:
Het probleem wat ik heb is dat de code geen kik geeft in praktijk en ik kan enkele punten die ik in de seriële monitor te zien krijg niet verklaren.

De seriële monitor geeft onderstaande weer wanneer alle schakelaars laag zijn:

Steps = 10695.00 (Snap ik)
Deel 00 (snap ik)
Mode = s2 (Ik zie geen print regel staan tussen deel 00 en deel 10. Waarom wordt dit weergegeven?)
Deel 10 (Snap ik)
Stepdelay = 0.14 (Snap ik)
Deel 20 (Snap ik)
Mode = s2,3,4,5 (Snap ik)
Deel 10 (Snap ik)
Stepdelay = -1.06 (Waarom stop de loop hierna?)

Stappenmotor driver DRV8825, (orginele) Arduino uno en stappenmotor heb ik getest m.b.v. een test programmatje, dit werkt.
Het programma wordt geupload naar de arduino zonder problemen.

Aansluitschema:
Volgens Instructables site

Code:
Onderstaande code gebruik ik welke ik, om hier te kunnen plaatsen, heb ingekort (moet <9000 tekens zijn) Ik heb hier op verschillende plekken "deel **" in gezet om te debuggen.

int Pin2 = 2; //Pin 1 cannot be used for this. Start at 2.
int Pin3 = 3;
int Pin4 = 4;
int Pin5 = 5;
int Pin8 = 8;
int Pin9 = 9;

int SliderLength = 1050; //Travel length in mm
double TravelTime; //Used for calculations in the loop section.
double Steps = 10695; //Steps required to move along the entire Rail.400 * (SliderLength / (3.14 * PulleyDiameter))
double StepDelay;
int StepsTaken = 0;

bool s2;   ///s2 stands for switch2_status. It starts at 2 so we can match the pin.
bool s3;
bool s4;
bool s5;


const int stepPin = 8; //defines the step pin
const int dirPin = 9; //defines the direction pin


void setup()
{
  Serial.begin(9600); //Required for Serial Monitor
  pinMode(Pin2, INPUT);
  pinMode(Pin3, INPUT);
  pinMode(Pin4, INPUT);
  pinMode(Pin5, INPUT);

  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
  Serial.println("");
  Serial.print("Steps = ");
  Serial.println(Steps);
  digitalWrite(dirPin, HIGH);  //Defines the direction of travel. LOW reverses it.
  Serial.println("Deel 00 ");
}


void MoveStepper()
{

  digitalWrite(stepPin, HIGH); //This moves the stepper by 1 step.
  delayMicroseconds(500); //Depends on Motor 500-1000 is good
  digitalWrite(stepPin, LOW);
  delayMicroseconds(500);
  StepsTaken++;
  Serial.println("Deel 10 ");
}


// the loop routine runs over and over again forever:
void loop()
{
  s2 = digitalRead(Pin2);  ///This checks the status of the switches.
  s3 = digitalRead(Pin3);
  s4 = digitalRead(Pin4);
  s5 = digitalRead(Pin5);


  if ((s2 == LOW) && (s3 == HIGH) && (s4 == HIGH) && (s5 == HIGH)) ///LOW means switch is pressed/closed/conductive.
    Serial.println("Deel 11 ");
  {
    if (StepsTaken < Steps)
    { Serial.println("Mode = s2");
      TravelTime = 10; //The slider will move the distance in x seconds.enter 5
      StepDelay = ((TravelTime / Steps) - 0.0008) * 1000; //This calculates the delay required in ms between steps to make the journey in the desired amount of time. 0.001 Seconds are deducted because the MoveStepper Method includes 2x 500microseconds delays.
      MoveStepper();
      Serial.print("Stepdelay = ");
      Serial.println(StepDelay);
      delay (StepDelay);    // THis is in miliseconds (ms) Not MICRO!
      Serial.println("Deel 20 ");

    }
  }



  }
  if ((s2 == LOW) && (s3 == LOW) && (s4 == LOW) & (s5 == LOW)) ///LOW means switch is pressed/closed/conductive.
  {
    if (StepsTaken < Steps)
    { Serial.println("Mode = s2,3,4,5");
      TravelTime = 10; //The slider will move the distance in 30s
      StepDelay = ((TravelTime / Steps) - 0.002) * 1000; //This calculates the delay required in ms between steps to make the journey in the desired amount of time. 0.001 Seconds are deducted because the MoveStepper Method includes 2x 500microseconds delays.
      MoveStepper();
      Serial.print("Stepdelay = ");
      Serial.println(StepDelay);
      delay (StepDelay); // THis is in miliseconds (ms) Not MICRO!
      Serial.println("Deel 160 ");
    }

  }
}

Hopelijk wil iemand mij een duw in de goede richting geven.

Gr Jeroen

Lees je code nog eens goed door, en kijk naar wat hij zou moeten doen.
Zet ook eens wat random print opdrachten in je code, bijv: Serial.print("1"); aan het begin van je loop, Serial.print("2"); in het eerste gedeelte van de eerste if, enz. Zo kan je welke stukken van je code werken, in welke volgorde hij ze af gaat, en wat hij overslaat.

Hoi Wolf91,

Alhoewel ik dacht dit gedaan te hebben ben ik dit nog eens gaan doen. Soms helpt een paar dagen laten rusten.
O.a. met behulp van de tutorial van Bas on Tech een stukje verder gekomen en de motor heeft de eerste halve ronde gedraaid waarna deze stopte maar de loop blijft door draaien in de seriële monitor wat positief is. Ik vermoed een slechte verbinding o.i.d. in de test opstelling zoals ie nu is (redelijk houtje touwtje).

Tot zover bedankt :slight_smile:

Gr Jeroen

Edit: Koop geen aansluitdraden met krokodillenbekken van AliExpress zonder te weten hoe ze dit aansluiten… Zie bijlage...

zorg eerst eens dat je het programma goed kunt lezen, en begrijpen, het is tenslotte niet door jouzelf geschreven.
zet er commentaar in, als de stappenmotor werkt, kunje het zelf schrijven, leg dan dit ernaast zodat je een goede handleiding hebt.
ben duidelijk in waar het fout gaat, en beschrijf wat je aangesloten hebt.