Skocz do zawartości

Startracker ATM


kudi145

Rekomendowane odpowiedzi

Od jakiegoś czasu szukam taniego patentu na mobilny montaż do krótkich ogniskowych i ostatni wpadł mi w oko, dzięki koledze kasztelan, taki projekt https://www.instructables.com/id/Equatorial-Mount-for-DSLR/ .

Na astromaniaku u kasztelan-a zamówiłem wydruk części, łożyska oraz główną oś. Wszystko przyszło i zostało poskładane w całość. Posiadam dwa kody, jeden oryginalny z wątku oraz poprawiony z mikrokrokami.

Mam w związku z tym wielką prośbę, czy mógłby ktoś obeznany zerknąć na kody i może da się coś w nich poprawić ?

 

Potrzebna biblioteka arduino   https://github.com/tyhenry/CheapStepper

 

EDIT

Gdzie mam podłączyć przełączniki do szybkiego przesuwu, oraz diody w drugim kodzie ?

 

Pierwszy

 

/*<br>Sketch by SimonRob 
3D printed equatorial mount for DSLR
Instructables
*/

int buttonA1 = 0;
int buttonA2 = 0;
int ledOrange = 4;
int ledRed = 5;

#include <CheapStepper.h>

CheapStepper stepper;

void setup() {
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  pinMode(ledOrange, OUTPUT);
  pinMode(ledRed, OUTPUT);
}

void loop() {

buttonA1 = digitalRead(A1);
buttonA2 = digitalRead(A2);

if (buttonA1 == HIGH){
  buttonA1 = digitalRead(A1);
  buttonA2 = digitalRead(A2);
  digitalWrite (ledOrange, HIGH);
  digitalWrite (ledRed, LOW);
  stepper.step(false);
  delay(6);
}
if (buttonA2 == HIGH){
  buttonA1 = digitalRead(A1);
  buttonA2 = digitalRead(A2);
  digitalWrite (ledOrange, HIGH);
  digitalWrite (ledRed, LOW);
  stepper.step(true);
  delay(6);
}
while((buttonA1 == LOW)&&(buttonA2 == LOW)){
  buttonA1 = digitalRead(A1);
  buttonA2 = digitalRead(A2);
  digitalWrite (ledOrange, LOW);
  digitalWrite (ledRed, HIGH);
  stepper.step(false);
  delay(3523);
    
}
} 

Drugi 

/*
Stepper Motor Control - with Microstepping
The outputs produce PWM signals that are 90 degrees out of phase
if sin(t) > 0 => PWM to L1
if sin(t) < 0 => PWM to L2
if cos(t) > 0 => PWM to L3
if cos(t) < 0 => PWM to L4
*/

const int stepsPerRevolution = 4076; // 4096 or 4076?? half-steps
// see https://www.makerguides.com/28byj-48-stepper-motor-arduino-tutorial/
const long timePerRevolution = 14360666; // milliseconds per revolution

// For the stepper motor, equals IN1-IN4 on the ULN2803-board.
// Swap L3 and L4 if the direction of rotation is reversed!
int L1 = 8, L2 = 9, L3 = 10, L4 = 11; // only use outputs, that are PWM-capable!

// steps for manual adjustment
#define step1 0b1001
#define step2 0b1000
#define step3 0b1010
#define step4 0b0010
#define step5 0b0110
#define step6 0b0100
#define step7 0b0101
#define step8 0b0001
#define manualTime 10
//uint8_t steps[]={step1, step2, step3, step4, step5, step6, step7, step8}; // half-steps
uint8_t steps[]={step1, step3, step5, step7}; // full-steps
unsigned long stepCount = 0; // number of steps the motor has taken
int period; // length of period in ms

void setup() {
pinMode(L1, OUTPUT);
pinMode(L2, OUTPUT);
pinMode(L3, OUTPUT);
pinMode(L4, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600); // debug only
period = 8* timePerRevolution/stepsPerRevolution; // one period equals 8 half-steps
}

void loop() {
int16_t phase_a, phase_b;
int16_t SetMotor = analogRead(A0); // use one potentiometer or two buttons (one SPDT-switch)
phase_a = (int16_t)(255.0 * sin(millis() * 6.2832 / period ));
phase_b = (int16_t)(255.0 * cos(millis() * 6.2832 / period ));
Serial.print(phase_a); // debug only
Serial.print(", "); // use the serial plotter
Serial.println(phase_b);
if(SetMotor > 800) { // adjust clockwise
digitalWrite(LED_BUILTIN,LOW);
setMotor(steps[stepCount++%4]); // %8 if half-steps are used
delay(manualTime);
}
else if (SetMotor < 240) { // adjust counter-clockwise
digitalWrite(LED_BUILTIN,HIGH);
setMotor(steps[stepCount--%4]); // %8 if half-steps are used
delay(manualTime);
}
else { // automatic rotation, blink the LED
if(phase_a>=0) {
analogWrite(L2, 0);
analogWrite(L1, phase_a);
}
else {
analogWrite(L1, 0);
analogWrite(L2, -phase_a); // no negative values für PWM!
}
if(phase_b>=0) {
analogWrite(L4, 0);
analogWrite(L3, phase_b);
}
else {
analogWrite(L3, 0);
analogWrite(L4, -phase_b);
}
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); // blink
delay(50);
}
}

// set steps for manual adjustment.n
void setMotor(uint8_t Step) {
digitalWrite(L1,Step&0x01);
digitalWrite(L2,Step&0x02);
digitalWrite(L3,Step&0x04);
digitalWrite(L4,Step&0x08);
}

 

 

Edytowane przez kudi145
  • Lubię 1
Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 miesiące temu...

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.