Jeśli jeszcze nie masz silnika krokowego kupisz go w naszym sklepie pod tym linkiem: Silnik krokowy Arduino
To proste, pokażemy jak podpiąć popularny silnik krokowy 28BYJ-48 5V z układem sterowania ULN2003 i sterować nim za pomocą 4 linijek kodu.
Zacznijmy od wpięcia białej wtyczki od silnika do modułu ULN2003. Kolejno wejścia sterownika IN1, IN2, IN3, IN4 podpinamy w wymienionej kolejności do portów Arduino o numerach 8, 9, 10, 11.
Silnik wraz ze sterownikiem może być zasilany napięciem 5V – takim samym jakim dysponuje Arduino – można tutaj na potrzeby uruchomienia zestawu podciągnąć zasilanie i masę z Arduino – tak jak pokazano na FIOLETOWO na schemacie. W takim wypadku niebieskie podpięcie do baterii nie będzie konieczne.
Tak podpięty zestaw powinien bez problemów działać. Przejdźmy do strony kodowej. Program będziemy pisali w środowisku ArduinoIDE i skorzystamy z wbudowanej biblioteki Stepper. Jest to prosta biblioteka ale zawiera wszystkie niezbędne nam funkcję i jest prosta w użyciu.
Funkcje i argumenty jakie należy przekazać znajdziemy na stronie bibliboteki: https://www.arduino.cc/en/Reference/Stepper
Poniżej kod programu z komentarzami:
#include <Stepper.h> //dodajemy do szkicu bibliotekę obsługującą silniki krokowe
#define ILOSC_KROKOW 32 //definiujemy stałą gdzie podajemy ilość kroków zależną od użytego silnika w naszym przypadku 32
Stepper mojSilnik(ILOSC_KROKOW, 8, 10, 9, 11); //tutaj podajemy piny w Arduino, którymi sterujemy silnikiem
void setup()
{
}
void loop ()
{
mojSilnik.setSpeed(500); //podajemy prędkość obrotu wyrażona w rpm
mojSilnik.step(512); //linijka powoduje obrót ośki silnika o 90 stopni
delay(2000); // linijka powoduje odczekanie 2 sekund (wartosc w milisekundach 1000 = 1s)
mojSilnik.setSpeed(250);
mojSilnik.step(-1024);
delay(2000);
}
Prędkość obrotu silnika można zwiększać i zmniejszać w zależności od silnika – trzeba to samemu wyczuć. Przy zbyt dużej wartości silnik zacznie przeskakiwać lub dławić się a jego praca będzie nierówna. Górna granica w wypadku testowanego silnika to około 700.
Aby obrócić silnikiem o określony kąt należy przeliczyć ilość kroków potrzebnych na pełen obrót i podzielić przez 360°.
Nasz silnik ma 32 kroki oraz przekładnie 64 zębów wynika to z jego budowy. Więc na pełen obrót składa się 32*64 = 2048 małych kroczków.
Aby dowiedzieć się ile to jest 1° dzielimy 2048/360= 5,69 kroku.
Aby obrócić silnikiem o kąt 180 stopni mnożymy 180 * 5,69= 1024. I taką liczbę podajemy jako argument mojSilnik.step()
Jeżeli chcemy obracać ośką przeciwnie do ruchu wskazówek zegara podana liczba powinna być ujemna czyli -1024.
Tak w prosty sposób możemy tworzyć sekwencje ruchu naszego silniczka.
Przygotowaliśmy również filmik, na którym można zobaczyć jak krok po kroku wygląda cała akcja opisana w tym wpisie. Zachęcamy do subskrypcji naszego kanału na youtube oraz zapraszamy na zakupy w naszym sklepie.
Zestawi silnika krokowego 28BYJ-48 ze sterownikiem ULN2003 można nabyć w naszym sklepie pod linkiem:
#jak podpiąć silnik krokowy do arduino, #jak sterować silnikiem krokowym z arduino,
22 Comments
Zostaw komentarz
wojtek
jak wyzwolić przyciskiem rfuch silnika krokowego o nastawioną liczbę kroków zatrzymanie go i ponowny ruch dopiero powciśnięciu przycisku
admin
Najprościej zrobić z powyższego kodu funkcję i wywoływać ją sprawdzając stan na wejściu do którego podłączyliśmy przycisk sterujący. Sprawdzenie można realizować za pomocą pętli
Eryk
Witam, mam już silnik podłączony- działa, ale nie wiem jak zrobić aby wykonał prace po wciśnięciu przycisku. Chodzi mi o to ze w skrócie: wciskam przycisk: silnik rusza w lewo w prawo, następnie staje i znów czeka aż włącze przycisk aby wykonał prace. Z góry dziękuje
admin
Dzień dobry, należało by wykrywać stan przycisku na jednym z wejść Arduino i dodać jakąś instrukcję warunkową.
Zapraszamy do naszego kursu Arduino dla początkujących – pomoże on lepiej zrozumieć działanie mikrokontrolera i rozwiąże podstawowe problemy.
Krzysztof
program OK.
Ale jak zrobić aby silnik przy zaniku napięcia i jego powrocie nie zaczynał od „0”
admin
Panie Krzysztofie, jeżeli zanika napięcie niestety bez obsługi pamięci nie uda się nie zaczynac od 0.
Chyba najprościej było by wykorzystać kartę pamięci i tam jakoś zapisywać i odczytywać ostatnie położenie.
Mr Remmoz
Jakiś schemacik modułu sterownika i całości by się przydał. Jakis link do schematu chćby.
Ostreerc
Jaka jest wydajność prądowa wyjścia 5V z Arduino? Gdyby np. zahamować silniczek ręką, czy układ Arduino uległby przeciążeniu?
admin
Tak naprawdę to nic prądożernego nie powinno się tam podpinać, wydajność przy zasilaniu z USB to około 500mA, na pinach wejść/wyjść 40mA.
Szkoda mikrokontrolera, zawsze lepiej zasilać projekt przy pomocy zewnętrznego źródła. Wygodne są przystawki do płytek prototypowych MB-102 lub koszyki na baterie.
Ostreerc
Stepper mojSilnik(ILOSC_KROKOW, 8, 9, 10, 11); // moim zdaniem sekwencja powinna być 8,10,9,11 – u mnie tak dopiero zadziałało…chyba że napięcia podałem za duże i coś się zepsuło 🙂
admin
Tutaj napięcie nie powinno mieć znaczenia, a jedynie są to piny sygnałowe sterownika, być może to wina innej wersji bibliotek, w każdym razie cieszymy się, że działa!
Wojtek
jakim cudem 2048 jezeli na wyjsciu silnika jest 64 kroki na pelen obrot , tzn 360 / 64 , 1 stopien =5,625 kroku
admin
Dzień dobry, tak jak napisaliśmy silnik ma 32 kroki oraz przekładnie 64 zębów wynika to z jego budowy. Więc na pełen obrót składa się 32*64 = 2048 małych kroczków.
Aby dowiedzieć się ile to jest 1° dzielimy 2048/360= 5,69 mikrokroków. Chodzi oczywiście o mikro kroki wpisane w programie, które dadzą obrót o 1 stopień
Maciek
Czy taki zestaw da się zasilić podpinając powerbank? Zasilanie przez ładowarkę nie wchodzi w grę, gdyż chcę aby zestaw był mobilny. Docelowo myślę o użyciu go w astrofotografii.
admin
Jak najbardziej powerbank powinien sobie poradzić.
radek
Witam
Siedzę od dłuższego czasu w tych szkicach i programach i za cholerę nie mogę napisać i znaleźć odpowiedniego programu do mojego projektu, którego nie mogę skończyć .A mianowicie robię roto mat na zegarek automatyczny, potrzebowałbym jakiś link do szkicu :po włączeniu urządzenia obrót silniczka przez 20 min w prawo stronę , przerwa 5 minut ,po przerwie ruch lewo stronę 20 minut, i znów przerwa i tak w koło aż do wyłączenia urządzenia. Znalazłem podobny szkic skopiowałem do biblioteki, ale nie wiem dlaczego kręci się zgodnie z ruchem zegara, mimo że po przerwie w programie jest obrót w przeciwną stronę.Pozdrawiam
admin
Najlepiej zamiast kopiować, spróbować napisać swój kod ze zrozumieniem na podstawie innych przykładów, często popełniamy przy kopiowaniu jakieś trywialne błędy ciężkie do znalezienia. Aby pomóc jeszcze trzeba widzieć kod i schemat połączenia, bez tego to wróżenie z fusów.
Łukasz
Witam,
Czy ktoś orientuje się czy można zastosować dłuższy kabel pomiędzy silnikiem a sterownikiem? Czy będzie to miało jakiś wpływ na działanie silnika?
admin
Spokojnie można wykorzystać dłuższe przewody.
Sebastian
Witam mam następujący problem.
Silniczek zaczyna gubić kroki już przy prędkości około 100 rpm z czego może to wynikać uszkodzenie silniczka?
Meow
Autor żle podał Stepper mojSilnik(ILOSC_KROKOW, 8, 9, 10, 11);
prawidłowe działanie jest taka 8,10,9,11
admin
Jest to zależne od tego jak wepniemy przewody od naszego silnika, gdyby coś nie działało można zamienić przewody, albo właśnie deklaracje pinów.