Skocz do zawartości

Szafka zamykana silnikiem krokowym


greek4

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);
  }
  
}

 

Link do komentarza
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
Link do komentarza
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?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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
Link do komentarza
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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.