Zaloguje się
or
Tel +48 698 615 740

Podłączenie i zaprogramowanie silnika krokowego 28BYJ-48 12V z zestawem sterowania ULN2003

02 czerwca, 2022

W tym artykule zostanie przedstawione podłączenie silnika oraz jego modułu do Arduino. Wykorzystamy program przeznaczony do silników krokowych i sprawdzimy jego działanie. Po podłączeniu jednego silnika wykorzystamy drugi i zobaczymy tego efekty.

Spis treści

  • Krótki opis
  • Specyfikacja
  • Podłączenie
  • Zaprogramowanie
  • Podłączenie drugiego silnika

Krótki opis

Zestaw Sterownika i silnika Krokowego 28BYJ-48 12V

Specyfikacja

  • Fazy: 4
  • Zasilanie: 12V
  • 64 kroki na obrót
  • Moment obrotowy: 34 mNm
  • Wymiary: 25x13mm
  • Parametry sterownika:
  • Napięcie zasilania: 12V
  • Diody LED: sygnalizacja działania
  • Max. natężenie: 0.5A
  • Złącze dostosowane do silnika 28BYJ-48
  • Wymiary: 40x23mm

Podłączenie

Zaczniemy od wpięcia silnika, czyli białej wtyczki do modułu, przy wpinaniu należy zwrócić uwagę na to po której stronie są ząbki. Teraz wpinamy piny do modułu od IN1 do IN4 i kable po kolej wpinamy do arduino od pinu D11 do D8. Piny z modułu “+” i “-” podłączamy do zasilania 12V. Poniżej znajduje się schemat całego połączenia.

Zaprogramowanie

Po poprawnym podłączeniu będziemy potrzebować programu, który umożliwi sterowanie naszym silnikiem. Wgrywamy poniższy program i sprawdzamy czy nasz silnik się porusza.

#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11

void setup() {
  pinMode(IN1, OUTPUT); //ustawienie IN1 jako wyjście
  pinMode(IN2, OUTPUT); //ustawienie IN2 jako wyjście
  pinMode(IN3, OUTPUT); //ustawienie IN3 jako wyjście
  pinMode(IN4, OUTPUT); //ustawienie IN4 jako wyjście
}

void loop() {

  for (int i = 0; i < 500; i++) //pętla for wykonująca się 500 razy
  {
    obrot_prawo(IN1, 3); //wykorzystanie funkcji obrot_prawo(argument 1, argument 2), w miejsce argument1 wpisujemy pierwszy pin, a w miejsce drugiego argumentu podajemy opóźnienie, które ma wystąpić
  }
  for (int i = 0; i < 500; i++) //pętla for wykonująca się 500 razy
  {
    obrot_lewo(IN1, 3); //wykorzystanie funkcji obrot_lewo(argument 1, argument 2), w miejsce argument1 wpisujemy pierwszy pin, a w miejsce drugiego argumentu podajemy opóźnienie, które ma wystąpić
  }

}

void obrot_prawo(int pin, int dly) {
  digitalWrite(pin, HIGH);
  delay(dly);
  digitalWrite(pin, LOW);
  digitalWrite(pin + 1, HIGH);
  delay(dly);
  digitalWrite(pin + 1, LOW);
  digitalWrite(pin + 2, HIGH);
  delay(dly);
  digitalWrite(pin + 2, LOW);
  digitalWrite(pin + 3, HIGH);
  delay(dly);
  digitalWrite(pin + 3, LOW);
}
void obrot_lewo(int pin, int dly) {
  digitalWrite(pin + 3, HIGH);
  delay(dly);
  digitalWrite(pin + 3, LOW);
  digitalWrite(pin + 2, HIGH);
  delay(dly);
  digitalWrite(pin + 2, LOW);
  digitalWrite(pin + 1, HIGH);
  delay(dly);
  digitalWrite(pin + 1, LOW);
  digitalWrite(pin, HIGH);
  delay(dly);
  digitalWrite(pin, LOW);
}

Jeżeli silnik nie będzie się obracał, a będzie jakby buczał, znaczy, że napięcie jest zbyt niskie. Tak samo będzie w wypadku, gdy będzie się on obracał, a po chwili zmieni kierunek obracania się.

Ilość kroków do wykonania ustawiamy w pętli for, 500 podmieniamy na długość ruchu, który chcemy wykonać.

Aby sterować prędkością wystarczy zmienić w funkcji obrot_prawo(IN1, 3) lub obrot_lewo(IN1, 3) parametr 3 na inną liczbę im większa, tym wolniej będzie się on obracał, a im mniejsza tym szybkość będzie większa.

Podłączenie drugiego silnika

Aby podłączyć dwa silniki należy lekko zmodyfikować połączenie i program, zaczniemy od podłączenia.

Połączenie nie będzie się dużo różniło, oczywiście na początku wtykamy białą wtyczkę do modułu silnika tak samo jak poprzednio. Przechodzimy teraz do modułu, podłączamy od IN1 do IN4, a na arduino wpinamy je do pinów D7-D4, zasilanie podłączamy również do 12V. Wygląd całego połączenie znajduje się poniżej

Zaprogramowanie dwóch silników

Wystarczy zdefiniować nowe piny, a w funkcji setup ustawić nowe wyjścia. W funkcji głównej loop() kopiujemy funkcję i ustawiamy parametry tak, aby się zgadzały.

//silnik krokowy 1
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
//silnik krokowy 2
#define IN5 4
#define IN6 5
#define IN7 6
#define IN8 7

void setup() {
  pinMode(IN1, OUTPUT); //ustawienie IN1 jako wyjście
  pinMode(IN2, OUTPUT); //ustawienie IN2 jako wyjście
  pinMode(IN3, OUTPUT); //ustawienie IN3 jako wyjście
  pinMode(IN4, OUTPUT); //ustawienie IN4 jako wyjście
  pinMode(IN5, OUTPUT); //ustawienie IN5 jako wyjście
  pinMode(IN6, OUTPUT); //ustawienie IN6 jako wyjście
  pinMode(IN7, OUTPUT); //ustawienie IN7 jako wyjście
  pinMode(IN8, OUTPUT); //ustawienie IN8 jako wyjście
}

void loop() {

  for (int i = 0; i < 500; i++) //pętla for wykonująca się 500 razy
  {
    obrot_prawo(IN1, 3); //wykorzystanie funkcji obrot_prawo(argument 1, argument 2), w miejsce argument1 wpisujemy pierwszy pin, a w miejsce drugiego argumentu podajemy opóźnienie, które ma wystąpić
    obrot_prawo(IN5, 3); //wykorzystanie funkcji obrot_prawo(argument 1, argument 2), w miejsce argument1 wpisujemy pierwszy pin, a w miejsce drugiego argumentu podajemy opóźnienie, które ma wystąpić
  }
  for (int i = 0; i < 500; i++) //pętla for wykonująca się 500 razy
  {
    obrot_lewo(IN1, 3); //wykorzystanie funkcji obrot_lewo(argument 1, argument 2), w miejsce argument1 wpisujemy pierwszy pin, a w miejsce drugiego argumentu podajemy opóźnienie, które ma wystąpić
    obrot_lewo(IN5, 3); //wykorzystanie funkcji obrot_lewo(argument 1, argument 2), w miejsce argument1 wpisujemy pierwszy pin, a w miejsce drugiego argumentu podajemy opóźnienie, które ma wystąpić
  }

}

void obrot_prawo(int pin, int dly) {
  digitalWrite(pin, HIGH);
  delay(dly);
  digitalWrite(pin, LOW);
  digitalWrite(pin + 1, HIGH);
  delay(dly);
  digitalWrite(pin + 1, LOW);
  digitalWrite(pin + 2, HIGH);
  delay(dly);
  digitalWrite(pin + 2, LOW);
  digitalWrite(pin + 3, HIGH);
  delay(dly);
  digitalWrite(pin + 3, LOW);
}
void obrot_lewo(int pin, int dly) {
  digitalWrite(pin + 3, HIGH);
  delay(dly);
  digitalWrite(pin + 3, LOW);
  digitalWrite(pin + 2, HIGH);
  delay(dly);
  digitalWrite(pin + 2, LOW);
  digitalWrite(pin + 1, HIGH);
  delay(dly);
  digitalWrite(pin + 1, LOW);
  digitalWrite(pin, HIGH);
  delay(dly);
  digitalWrite(pin, LOW);
}

Wgrywamy do arduino i możemy się cieszyć działaniem dwóch silników. W taki sposób można dodać jeszcze kilka innych, a jeżeli chcemy, żeby się obracały więcej lub mniej razy, możemy umieścić ją w osobnej pętli i zmienić tylko wartość pętli, aby wykonała się np. 100 razy.

Działanie w praktyce

Sticky
Możliwość komentowania Podłączenie i zaprogramowanie silnika krokowego 28BYJ-48 12V z zestawem sterowania ULN2003 została wyłączona
Adrian Wojtala

Adrian Wojtala

Ma 21 lat. Studiuje informatykę na Uniwersytecie DSW, ukończył technikum o profilu technik-informatyk. Interesuje się programowaniem i w przyszłości ma plan zostać back-end developerem. Swoją przygodę z Arduino rozpoczął podczas praktyk od września 2021 r.

Comments are closed.

Strona korzysta z plików cookies w celu realizacji usługi i zgodnie z Polityką Plików Cookies. Możesz określić warunki przechowywania lub dostępu do plików cookies w Twojej przeglądarce.