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