Hallo liebes Forum!
für ein kleines Heimprojekt benötige ich eure Hilfe. Bis vor 2 Wochen hatte ich noch keine Berührungspunkte mit nem Arduino, sprich ich bin ein ziemlicher Anfänger auf dem Gebiet. Seitdem hab ich viel ausprobiert und blick auch langsam durch jedoch ergeben sich auch immer mehr Fragen. Ich hoffe, ihr könnt mir weiterhelfen.
Erstmal kurz zur groben Hardware: 2 x Nema17 Schrittmotor (Bipolar); Arduino Mega2506 und 2 x a4988 Treiber, LED, Fotowiderstand
Was soll passieren: Zu Beginn fällt Licht auf den Fotowiderstand und beide Motoren drehen gleich schnell. Wird der Fotowiderstand abgedunkelt, soll Schrittmotor 1 seine Geschwindigkeit verdoppeln.
Am Anfang habe ich alles ohne Bibliothek mit delay programmiert. Da ich aber gerne die Umdrehungsgeschwindigkeit definiert einstellen möchte und gelesen habe, dass die Programmierung mit delays nicht so das Wahre ist, bin ich auf die accelstepper-Bibliothek umgestiegen. Da komme ich aber auch nicht weiter. Das Hauptproblem ist die Erhöhung der Geschwindigkeit aus dem „Lauf“ von Motor 1 bei konstanter Geschwindigkeit des Motors 2.
Ich hab es jetzt soweit programmiert, dass beide Motoren sich gleich schnell drehen und und bei Abdunklung der Motor 1 stehen bleibt. (In Wahrheit soll er aber nicht stehen bleiben sondern seine Geschwindigkeit verdoppeln)
Meinen „Delay-Code“ sieht wie folgt aus:
//Variablendefinition
int dirPin1 = 4;
int stepPin1 = 3;
int dirPin2 = 7;
int stepPin2 = 6;
int PRPin = A0;
int Genauigkeit = 50;
int StartValuePR;
void setup() {
pinMode(PRPin,INPUT);
pinMode(dirPin1, OUTPUT);
pinMode(stepPin1, OUTPUT);
digitalWrite(dirPin1, HIGH);
digitalWrite(stepPin1, LOW);
pinMode(dirPin2, OUTPUT);
pinMode(stepPin2, OUTPUT);
digitalWrite(dirPin2, HIGH);
digitalWrite(stepPin2, LOW);
StartValuePR = analogRead(PRPin); //Startwert der Photozelle wird ausgelesen
}
void loop() {
if (analogRead(PRPin) - Genauigkeit < StartValuePR){
digitalWrite(stepPin1, HIGH);
digitalWrite(stepPin2,HIGH);
delay(10);
digitalWrite(stepPin1, LOW);
digitalWrite(stepPin2,LOW);
delay(10);
}
if (analogRead(PRPin) - Genauigkeit > StartValuePR){
digitalWrite(stepPin2, HIGH);
delay(10);
digitalWrite(stepPin2, LOW);
delay(10);
}
}
Ich hoffe sehr, dass ihr mir weiterhelfen könnt. Vielen Dank im Voraus!