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.