Skocz do zawartości
greek4

Szafka zamykana silnikiem krokowym

Pomocna odpowiedź

Witam.

Chcialbym poprosic o pomoc w dokonczeniu kodu do mojego malego projektu. Mianowicie chcialbym zrobic szafke zamykana silnikiem krokowym sterowanym przez arduino.

Do mojego projektu wykorzystalem mechanizm osi Z z mojej starej drukarki 3D wraz z silnikiem i stepstickiem, ktory ma byc sterowany za pomoca arduino Nano.

Po wcisnieciu przelacznika (takiego od swiatla w pokoju) w pozycji gornej na pin 13 w arduino zostaje podany stan wysoki co prowadzi do obracania sie silnika w prawo i tym samym uniesienie klapy od szafki. Zas wylacznik w pozycji dolnej podaje stan niski na pin 13 co sprawia, ze silnik sie kreci w lewo i zamyka klape. Tyle udalo mi sie zrobic. Schody zaczely sie gdy musze dodac przelaczniki typu endstop aby arduino wiedzialo kiedy ma zatrzymac silnik, poniewaz w tej chwili pracuje nieustannie albo w jedna albo w druga strone. Nie mam pojecia co nalezy dopisac lub co zmienic w istniejacym kodzie aby to dzialalo jak nalezy. Z gory dziekuje za pomoc.

 

Oto moj kod

// Sterownik silnika krokowego do zamykania szafki
// Arduino nano + silnik nema ze stepstickiem

int Index;
const int buttonPin = 13;     // Przelacznik bistabilny
int buttonState = 0;         // Status przelacznika

void setup() 
{
  pinMode(8, OUTPUT); //Enable
  pinMode(2, OUTPUT); //Step
  pinMode(5, OUTPUT); //Direction
  pinMode(buttonPin, INPUT); //Wylacznik
  digitalWrite(8,LOW);
}

void loop() 
{
   // Odczyt stanu przelacznika:
  buttonState = digitalRead(buttonPin);

  // Jesli przelacznik jest w pozycji gornej -5V- to stan wynosi HIGH - Obrot silnika w prawo:
  if (buttonState == HIGH)
  digitalWrite(5,HIGH);

  for(Index = 0; Index < 200; Index++)
  {
    digitalWrite(2,HIGH);
    delayMicroseconds(500);
    digitalWrite(2,LOW);
    delayMicroseconds(500);
  }


 // Odczyt stanu przelacznika:
  buttonState = digitalRead(buttonPin);

  // Jezeli przelacznik jest w pozycji dolnej -GND- to stan wynosi LOW - Obrot silnika w lewo:
  if (buttonState == LOW)
  digitalWrite(5,LOW);

  for(Index = 0; Index < 2000; Index++)
  {
    digitalWrite(2,HIGH);
    delayMicroseconds(500);
    digitalWrite(2,LOW);
    delayMicroseconds(500);
  }
  
}

 

Udostępnij ten post


Link to post
Share on other sites

Użyj biblioteki accelstepper.h (znajdziesz w Google) i tam masz, że podajesz punkt docelowy, w loop  po prostu stepper.run() i zatrzyma się sam tam gdzie ma się zatrzymać. Krańcówka to może być dodatkowe zabezpieczenie, powinieneś wiedzieć że zamknięcie to np. 1234 kroki, ale z tą biblioteką po prostu możesz dodać if(cośtam) stepper.run();, gdzie "cośtam" będzie wymodzone z warunku czy kręci się do przodu, to ignoruje krańcówkę z tyłu i vice versa. W Twoim programie używając delay przez 2000x 1000us czyli 2s program ignoruje wszystkie krańcówki.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
15 godzin temu, kaczakat napisał:

Użyj biblioteki accelstepper.h (znajdziesz w Google) i tam masz, że podajesz punkt docelowy, w loop  po prostu stepper.run() i zatrzyma się sam tam gdzie ma się zatrzymać. Krańcówka to może być dodatkowe zabezpieczenie, powinieneś wiedzieć że zamknięcie to np. 1234 kroki, ale z tą biblioteką po prostu możesz dodać if(cośtam) stepper.run();, gdzie "cośtam" będzie wymodzone z warunku czy kręci się do przodu, to ignoruje krańcówkę z tyłu i vice versa. W Twoim programie używając delay przez 2000x 1000us czyli 2s program ignoruje wszystkie krańcówki.

Dziekuje za zainteresowanie, lecz moja programowania nie pozwala mi doprowadzic programu do konca. Pomimo wielu prob wciaz wyskakuja bledy. Niestety czytanie poradnikow tez nie pomoglo.  Moze znajdzie ktos chwile aby napisac przykladowy program na ktorym bede mogl sie pouczyc?

Udostępnij ten post


Link to post
Share on other sites

To biblioteka accelstepper przylazła bez przykładów?

Jeśli nie dajesz sobie rady z programowaniem polecam tutejsze kursy Arduino. Tylko trochę cierpliwości i chęci do nauki...

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
40 minut temu, ethanak napisał:

To biblioteka accelstepper przylazła bez przykładów?

Jeśli nie dajesz sobie rady z programowaniem polecam tutejsze kursy Arduino. Tylko trochę cierpliwości i chęci do nauki...

Dziekuje za odpowiedz. Zmotywowales mnie.

Biore sie za dalsze czytanie 😉 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Napisz odpowiedź...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...