Potrzebna pomoc przy "prostym" kodzie

Quadcoptery i inne bajery
maestro192
Konto z ograniczeniami
Postów w temacie: 5
Posty: 39
Rejestracja: 26 mar 2019, 18:21
x 1

Potrzebna pomoc przy "prostym" kodzie

Post autor: maestro192 »

Cześć

Potrzebuje pomocy przy napisaniu kodu
Mam arduino mega 2560 i ramps 1.6 do tego stepstick a4988, nema17
Potrzebuję żeby silniczki wykonywały taką "sekwencję" pracy w kółko

Używane osie X,Y

1.Zaczyna Silnik osi Y obrót o np. 200 kroków, dochodzi do krańcówki i po jej wciśnieciu od razu wraca o 200 kroków po tym sekunda przerwy

2. Uruchamia się silnik osi X i też obraca się o 200 kroków, dochodzi do krańcówki i wraca o taką samą ilość kroków

3. Gdy silniczki wykonają te ruchy to sekunda przerwy i powrót do punktu 1 i tak ciągle

Z góry dziękuję i mam nadzieję że zrozumiale napisałem to wszystko :D :D
Ender-3
Czarna Perła, Drukareczka pod wielkie wydruki 170cm - 70cm -70cm :) Dla Nylonu (własny projekt i wykonanie)
Awatar użytkownika
FlameRunner
Zasłużony
Postów w temacie: 1
Posty: 6568
Rejestracja: 15 kwie 2016, 21:26
x 2056

Re: Potrzebna pomoc przy "prostym" kodzie

Post autor: FlameRunner »

Nie rozumiem. Ma na początku zrobić dokładnie 200 kroków, czy dojechać do krańcówki?
maestro192
Konto z ograniczeniami
Postów w temacie: 5
Posty: 39
Rejestracja: 26 mar 2019, 18:21
x 1

Re: Potrzebna pomoc przy "prostym" kodzie

Post autor: maestro192 »

W sumie tak źle napisałem. Dochodzi do krańcówki i od razu wraca o te 200 kroków
Ender-3
Czarna Perła, Drukareczka pod wielkie wydruki 170cm - 70cm -70cm :) Dla Nylonu (własny projekt i wykonanie)
Awatar użytkownika
dziobu
Zasłużony
Postów w temacie: 5
Posty: 8908
Rejestracja: 28 gru 2016, 16:38
Drukarka: ZMorph 2.0(S)
x 5842
Kontakt:

Re: Potrzebna pomoc przy "prostym" kodzie

Post autor: dziobu »

Ale chodzi o gcode czy o kod dla Arduino?
Awatar użytkownika
dziobu
Zasłużony
Postów w temacie: 5
Posty: 8908
Rejestracja: 28 gru 2016, 16:38
Drukarka: ZMorph 2.0(S)
x 5842
Kontakt:

Re: Potrzebna pomoc przy "prostym" kodzie

Post autor: dziobu »

Ależ mi się nic nie chce...

Tak to może wyglądać:
linie musisz sobie uzupełnić.

Kod: Zaznacz cały

//..........................................
// stałe
// do pracy
const int IleKrokow_X = 200;
const int IleKrokow_Y = 200;
//..........................................


//..........................................
// sprzęt
// deklaracja silnika (rpm i linie)
int Stepper_X_Dir  = 2;
int Stepper_X_Step = 3;
int Stepper_Y_Dir  = 4;
int Stepper_Y_Step = 5;

// linie z krańcówkami
int EndStop_X = 13;
int EndStop_Y = 14;
//..........................................


//..........................................
// init
void setup() {
    pinMode(Stepper_X_Dir,  OUTPUT);
    pinMode(Stepper_X_Step, OUTPUT);
    pinMode(Stepper_Y_Dir,  OUTPUT);
    pinMode(Stepper_Y_Step, OUTPUT);

    digitalWrite(Stepper_X_Dir, LOW);
    digitalWrite(Stepper_Y_Dir, LOW);

    pinMode(EndStop_X, INPUT_PULLUP);
    pinMode(EndStop_Y, INPUT_PULLUP);
}
//..........................................


//..........................................
// zmienne
int pozycja = 0; // tymczasowe do liczenia kroków
int algorytm_poz = 0; // początkowa pozycja algroytmu pracy
//..........................................

//..........................................
// pętla

// rozbijam pracę bo OIDW z loopa trzeba wychodzić; inaczej było by znacznie prościej
void loop() {
  switch(algorytm_poz) {
    //.........................................
    case 0: // Y - jazda do krańcówki
      if(digitalRead(EndStop_Y) == LOW) {
        // jest krańcówka
        algorytm_poz++; // następny krok
        pozycja = IleKrokow_Y; // tyle do przejechania
	      digitalWrite(Stepper_Y_Dir, HIGH); // kierunek kolejnego ruchu
        break;
      }
      // nie ma krańcówki
      digitalWrite(Stepper_Y_Step, LOW);
      digitalWrite(Stepper_Y_Step, HIGH);
      break;
    //.........................................

    //.........................................
    case 1: // Y - odjazd o ileś krokow
      if(pozycja > 0) {
        digitalWrite(Stepper_Y_Step, LOW);
        digitalWrite(Stepper_Y_Step, HIGH);
        pozycja--;
      } else {
        algorytm_poz++; // następny krok algroytmu
	      digitalWrite(Stepper_Y_Dir, LOW); // kierunek kolejnego ruchu
      }
      break;
    //.........................................
    
    //.........................................
    case 2: // czekam 1 s
      delay(1000);
      algorytm_poz++;
      break;
    //.........................................

    //.........................................
    case 3: // X - jazda do krańcówki
      if(digitalRead(EndStop_X) == LOW) {
        // jest krańcówka
        algorytm_poz++; // następny krok
        pozycja = IleKrokow_X; // tyle do przejechania
	      digitalWrite(Stepper_X_Dir, HIGH); // kierunek kolejnego ruchu
        break;
      }
      // nie ma krańcówki
      digitalWrite(Stepper_X_Step, LOW);
      digitalWrite(Stepper_X_Step, HIGH);
      break;
    //.........................................

    //.........................................
    case 4: // X - odjazd o ileś krokow
      if(pozycja > 0) {
        digitalWrite(Stepper_X_Step, LOW);
        digitalWrite(Stepper_X_Step, HIGH);
        pozycja--;
      } else {
        algorytm_poz++; // następny krok algroytmu
	      digitalWrite(Stepper_X_Dir, LOW); // kierunek kolejnego ruchu
      }
      break;
    //.........................................
    
    //.........................................
    case 5: // czekam 1 s
      delay(1000);
      algorytm_poz = 0; // algroytm od początku
      break;
    //.........................................
  }
}  
//..........................................


Jeśli z jakiegoś powodu trzeba użyć biblioteki Stepper.h to kod będzie taki:

Kod: Zaznacz cały

#include <Stepper.h>

//..........................................
// stałe
// do pracy
const int IleKrokow_X = 200;
const int IleKrokow_Y = 200;
//..........................................


//..........................................
// sprzęt
// deklaracja silnika (rpm i linie)
Stepper myStepper_X(100, 2, 3, 4, 5);
Stepper myStepper_Y(100, 6, 7, 8, 9);

// linie z krańcówkami
int EndStop_X = 13;
int EndStop_Y = 14;
//..........................................


//..........................................
// init
void setup() {
    pinMode(EndStop_X, INPUT_PULLUP);
    pinMode(EndStop_Y, INPUT_PULLUP);
}
//..........................................


//..........................................
// zmienne
int pozycja = 0; // tymczasowe do liczenia kroków
int algorytm_poz = 0; // początkowa pozycja algroytmu pracy
//..........................................

//..........................................
// pętla

// rozbijam pracę bo OIDW z loopa trzeba wychodzić; inaczej było by znacznie prościej
void loop() {
  switch(algorytm_poz) {
    //.........................................
    case 0: // Y - jazda do krańcówki
      if(digitalRead(EndStop_Y) == LOW) {
        // jest krańcówka
        algorytm_poz++; // następny krok
        pozycja = IleKrokow_Y; // tyle do przejechania
        break;
      }
      // nie ma krańcówki
      myStepper_Y.step(-1);
      break;
    //.........................................

    //.........................................
    case 1: // Y - odjazd o ileś krokow
      if(pozycja > 0) {
        myStepper_Y.step(1);
        pozycja--;
      } else {
        algorytm_poz++; // następny krok algroytmu
      }
      break;
    //.........................................
    
    //.........................................
    case 2: // czekam 1 s
      delay(1000);
      algorytm_poz++;
      break;
    //.........................................

    //.........................................
    case 3: // X - jazda do krańcówki
      if(digitalRead(EndStop_X) == LOW) {
        // jest krańcówka
        algorytm_poz++; // następny krok
        pozycja = IleKrokow_X; // tyle do przejechania
        break;
      }
      // nie ma krańcówki
      myStepper_X.step(-1);
      break;
    //.........................................

    //.........................................
    case 4: // X - odjazd o ileś krokow
      if(pozycja > 0) {
        myStepper_X.step(1);
        pozycja--;
      } else {
        algorytm_poz++; // następny krok algroytmu
      }
      break;
    //.........................................
    
    //.........................................
    case 5: // czekam 1 s
      delay(1000);
      algorytm_poz = 0; // algroytm od początku
      break;
    //.........................................
  }
}  
//..........................................

No a jak chciałeś gcode to chyba sobie poradzisz ;) (tutaj tylko pętli nie zrobisz)
JGFTW
maestro192
Konto z ograniczeniami
Postów w temacie: 5
Posty: 39
Rejestracja: 26 mar 2019, 18:21
x 1

Re: Potrzebna pomoc przy "prostym" kodzie

Post autor: maestro192 »

No dobra a jak to uruchomić na arduino i ramps ? Krańcówki mam podpięte pod minimum
Ender-3
Czarna Perła, Drukareczka pod wielkie wydruki 170cm - 70cm -70cm :) Dla Nylonu (własny projekt i wykonanie)
Awatar użytkownika
dziobu
Zasłużony
Postów w temacie: 5
Posty: 8908
Rejestracja: 28 gru 2016, 16:38
Drukarka: ZMorph 2.0(S)
x 5842
Kontakt:

Re: Potrzebna pomoc przy "prostym" kodzie

Post autor: dziobu »

A poprawiłeś nr pinów w kodzie?
maestro192
Konto z ograniczeniami
Postów w temacie: 5
Posty: 39
Rejestracja: 26 mar 2019, 18:21
x 1

Re: Potrzebna pomoc przy "prostym" kodzie

Post autor: maestro192 »

Teraz jakie piny wpisać jak krancowki i silniki podłączone po ramps
Ender-3
Czarna Perła, Drukareczka pod wielkie wydruki 170cm - 70cm -70cm :) Dla Nylonu (własny projekt i wykonanie)
Awatar użytkownika
dziobu
Zasłużony
Postów w temacie: 5
Posty: 8908
Rejestracja: 28 gru 2016, 16:38
Drukarka: ZMorph 2.0(S)
x 5842
Kontakt:

Re: Potrzebna pomoc przy "prostym" kodzie

Post autor: dziobu »

No poszukaj w sieci na jakich pinach Ramps ma stepsticki. Odrobina pracy własnej nie zaszkodzi.

Z kodu Marlina 1.1.9:

Kod: Zaznacz cały

//
// Limit Switches
//
#define X_MIN_PIN           3
#ifndef X_MAX_PIN
  #define X_MAX_PIN         2
#endif
#define Y_MIN_PIN          14
#define Y_MAX_PIN          15
#define Z_MIN_PIN          18
#define Z_MAX_PIN          19

//
// Z Probe (when not Z_MIN_PIN)
//
#ifndef Z_MIN_PROBE_PIN
  #define Z_MIN_PROBE_PIN  32
#endif

//
// Steppers
//
#define X_STEP_PIN         54
#define X_DIR_PIN          55
#define X_ENABLE_PIN       38
#ifndef X_CS_PIN
  #define X_CS_PIN         53
#endif

#define Y_STEP_PIN         60
#define Y_DIR_PIN          61
#define Y_ENABLE_PIN       56
#ifndef Y_CS_PIN
  #define Y_CS_PIN         49
#endif
Ale nie mam Rampsa żeby to sprawdzić.

Potencjalnie jeszcze musisz dodać (analogicznie jak jest z DIRem i STEPami) linie Enable dla X i Y, czyli deklarację

Kod: Zaznacz cały

int Stepper_X_En = 38;
i w procedurze setup to enable aktywować:

Kod: Zaznacz cały

pinMode(Stepper_X_En, OUTPUT);
digitalWrite(Stepper_X_En, LOW);
Z napędem Y tak samo.
maestro192
maestro192
Konto z ograniczeniami
Postów w temacie: 5
Posty: 39
Rejestracja: 26 mar 2019, 18:21
x 1

Re: Potrzebna pomoc przy "prostym" kodzie

Post autor: maestro192 »

Jak ustawiam tak jak napisałeś to z silniczków idzie pisk a jak nacisnę krańcówkę od np X to przestaje piszczeć, tak samo na Y
Ender-3
Czarna Perła, Drukareczka pod wielkie wydruki 170cm - 70cm -70cm :) Dla Nylonu (własny projekt i wykonanie)
ODPOWIEDZ

Wróć do „Robotyka, modele RC, modelarstwo”