04-02-2022, 15:45
(03-02-2022, 02:15)kaczakat napisał(a): Może ustawiasz złą prędkość/przyspieszenie. Jak miałem takie silniczki za 1$ to tylko się grzały w bezruchu jak się ustawiło coś za dużo.Dziękuję za odpowiedź. Zawsze jestem pod wrażeniem ludzi, którzy poświęcają swój czas, by pomóc innym.
To powinno działać, ale nie mam aktualnie żadnego krokowca pod ręką, ustaw swoje piny, akurat na tych miałem ledy:
Niestety przesłany kod działa bardzo dziwnie. Najpierw porusza się w prawo, a potem wolniutko zaczyna wracać w nieskończoność. Pozostałej części kodu to już w ogóle nie rozumiem. Dlatego się poddałem i zrezygnowałem z biblioteki Accelerstepper do robienia time lapsów. Zastąpiłem ja prostym kodem, który najpierw przesuwa głowicę, następnie ją obraca i robi fotkę. To całkowicie zaspakaja moje oczekiwania.
Napisałem natomiast inny program, którego zadaniem jest, by w określonym czasie "s" przesunąć w poziomie wózek z kamerą z konkretną prędkością "Prp" i jednocześnie obrócić głowicę o zadany kąt z prędkością "Pro". Po czasie "s" powinno nastąpić wyłączenie sterowników i zatrzymanie całego ruchu. Prędkości zostały obliczone z uwzględnieniem długości prowadnicy. Do odliczenia czasu użyłem funkcji millis. I znowu klapa. Silniki pracują bez końca. Gdzie jest błąd?
Oto kod:
#include <AccelStepper.h>
const int s = 10 ; // Czas przejazdu (sek)
const int Prp = 800 ; // Prędkość w poziomie( kroki/sek)
const int Pro = 480 ; //Prędkość głowicy( kroki/sek)
unsigned long Ac = 0; // Aktualny cas
unsigned long Zc = 0; // Zapamiętany czas
unsigned long Rc = 0; // Różnica czasu( Ac-Zc)
AccelStepper stepper1(1, 7, 6);
AccelStepper stepper2(1, 9, 8);
const int enablePin1 = 10; // Steruje wyłączaniem sterowników
const int enablePin2 = 11;
void setup() {
pinMode(enablePin1,OUTPUT);
pinMode(enablePin2,OUTPUT);
digitalWrite(enablePin1,LOW);
digitalWrite(enablePin2,LOW);
stepper1.setMaxSpeed(10000);
stepper2.setMaxSpeed(10000);
stepper1.setSpeed(Prp);
stepper2.setSpeed(Pro);
}
void loop() {
Ac = millis();
Rc = Ac-Zc;
if (Rc <= 5000UL) {
Zc = Ac;
stepper1.runSpeed();
stepper2.runSpeed();
}
else
{
digitalWrite(enablePin1,HIGH);
digitalWrite(enablePin2,HIGH);
}
}