Silnik krokowy i Arduino
Zastanawialiście się kiedyś jak podłączyć silnik krokowy do Arduino? Zapewne wielu z was posiada takie silniki wśród swoich elektronicznych materiałów. Takie silniczki popularne były i są w napędach CD/DVD, drukarkach, czy skanerach. W związku z tym, niewielkim kosztem możemy wejść w posiadanie takiego silniczka, ale co dalej.
![Silnik połączony ze sterownikiem](https://starter-kit.nettigo.pl/wp-content/uploads/2014/04/silnik4.jpg)
W internecie można się natknąć na różne sposoby podłączania silników do mikrokontrolerów. Na początku należałoby powiedzieć parę słów o tym czym są silniki krokowe. Moim celem nie jest wprowadzenie czytelnika w tajniki i teorię budowy silników krokowych, ale naświetlenie mu z czym to się je. Generalnie silnik krokowy to silnik elektryczny, w którym impulsowe zasilanie prądem elektrycznym powoduje, że jego wirnik nie obraca się ruchem ciągłym, lecz wykonuje za każdym razem ruch obrotowy o ściśle ustalonym kącie. Dzięki temu kąt obrotu wirnika jest ściśle zależny od liczby dostarczonych impulsów prądowych, a prędkość kątowa wirnika jest dokładnie równa częstotliwości impulsów pomnożonej przez wartość kąta obrotu wirnika w jednym cyklu pracy silnika.
Nas, na chwilę obecną interesuje tylko ta informacja, że rotor silnika będzie się przekręcał o ustalony przez nas kąt lub krok. Dlatego też silniki krokowe wykorzystywane są w automatyce, robotyce i wszędzie tam gdzie potrzebna jest dokładność.
Sterownik i jego podłączenie
Do naszego pierwszego uruchomienia użyjemy gotowego zestawu składającego się z silnika krokowego i sterownika opartego na ULN2003A. Oczywiście można samemu wykonać taki sterownik korzystając ze schematów dostępnych w sieci.
![Sterownik silnika krokowego](https://starter-kit.nettigo.pl/wp-content/uploads/2014/04/silnik1.jpg)
Przyjrzyjmy się płytce sterownika. Jak widać oprócz wspomnianego wcześniej układu ULN2003A znajdują się jeszcze rezystory i diody LED, służące do informowania nas o aktualnej pracy sterownika. Po jednej stronie znajduje się gniazdo XH do którego podłączamy nasz silnik, natomiast po drugiej stronie widać listwę goldpin służącą do połączenia z arduino i podłączenia zasilania z zakresu 5-12V.
Biblioteka
Z uruchomieniem nie będzie najmniejszych problemów. W tym przykładzie wykorzystaliśmy wbudowaną w IDE bibliotekę stepper. Sterownik podłączyliśmy zgodnie z kodem (wejścia IN1…4 na sterowniku do wyjść Digital 10…8 w Arduino). Potencjometr został podłączony do Analog 0 i zasilania 5V i GND. Tak podłączony układ jest gotowy do uruchomienia.
![Sterownik silnika krokowego, widok od tyłu](https://starter-kit.nettigo.pl/wp-content/uploads/2014/04/silnik2.jpg)
Do testów użyliśmy kodu, w którym za pomocą potencjometru możemy regulować prędkość obrotową naszego silnika.
/*
Stepper Motor Control - speed control This program drives a unipolar or bipolar stepper motor. The motor is attached to digital pins 8 - 11 of the Arduino. A potentiometer is connected to analog input 0. The motor will rotate in a clockwise direction. The higher the potentiometer value, the faster the motor speed. Because setSpeed() sets the delay between steps, you may notice the motor is less responsive to changes in the sensor value at low speeds. Created 30 Nov. 2009 Modified 28 Oct 2010 by Tom Igoe */ #include <Stepper.h> const int stepsPerRevolution = 140; // change this to fit the number //of steps per revolution for your motor // initialize the stepper library on pins 8 through 11: Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); int stepCount = 0; // number of steps the motor has taken void setup() { // nothing to do inside the setup } void loop() { // read the sensor value: int sensorReading = analogRead(A0); // map it to a range from 0 to 100: int motorSpeed = map(sensorReading, 0, 1023, 0, 100); // set the motor speed: if (motorSpeed > 0) { myStepper.setSpeed(motorSpeed); // step 1/100 of a revolution: myStepper.step(stepsPerRevolution / 100); } }
W niektórych przypadkach może się okazać, że nasz silnik nie będzie reagował zbyt dobrze przy małych wartościach ustawionych potencjometrem. Odpowiada za to funkcja setSpeed() określająca opóźnienia pomiędzy kolejnymi krokami.
Kolejną rzeczą jest wartość stepsPerRevolution, określająca ilość kroków dla jednego obrotu. Wartość ta powinna odpowiadać wartości naszego silnika. Oczywiście możemy tego na samym początku nie zmieniać, ale musimy się liczyć z tym, że silnik może dostać czkawki, szczególnie przy wyższych obrotach. Dla naszego silnika liczba kroków na pełen obrót wyniosła 140. Wartość ta została dobrana eksperymentalnie, liczba była zwiększana do momentu wspomnianej wcześniej czkawki na wysokich obrotach.
![Silnik krokowy](https://starter-kit.nettigo.pl/wp-content/uploads/2014/04/silnik3.jpg)
Jak to wygląda w praktyce możecie zobaczyć na poniższym filmiku.
Uwaga: Proszę się nie martwić tym, że silnik jest ciepły. W przypadku silników krokowych jest to normalna sprawa, ponieważ jego zadaniem jest obrócenie się o pewien kąt i utrzymanie tej pozycji. Tak więc przez cały czas przez silnik przepływa prąd powodując grzanie się obudowy silnika. Oczywiście są metody na redukcje grzania się silnika, możemy go przykręcić do metalowej obudowy, bądź zmienić soft. Sądzę jednak, że na nasze potrzeby i eksperymentowanie z Arduino, grzanie się silnika nie będzie wielkim problemem.
aby uruchomić kilka silników muszę każdy podłączyć do
UL2003 ????
Zgadza się, jeden ULN obsługuje tylko jeden silnik.
Na przykładzie widzę, że silnik kręci się zawsze w prawo. Czy można zmusić go do obrotów w dowolną stronę korzystając z tego sterownika? Chciałbym wykorzystać taki silnik jako coś w rodzaju prędkościomierza, gdzie wskazówka przesuwałaby się w prawo przy zwiększaniu jakiegoś parametru, a w lewo gdy ten parametr by się zmniejszał, pokazując tym samym na przypiętej skali jakąś wartość.
Jasne, możesz kręcić silnikiem w dowolną stronę.
Gdy w metodzie myStepper.step(liczba_krokow); podasz ujemną liczbę to silnik będzie się kręcił do tyłu.
Czy posiadajac dwa takie zestawy mogę podłączyć je naraz do Arduino czy potrzebny jest specjalny kontroler do obsługi dwóch silników?
Jak podłączyć dwa silniczki j.w. do Arduino uno i sterować
nimi niezależnie aby każdy wykonywał swoją prace – może
znacie link do takiej strony… mam ograniczony czas
pobytu w internecie wic nie zabardzo mog szukać godzinami
dzięki
witam,
potrzebuję kontrolować ilość pełnych obrotów. czyli komendy: 2 obroty w prawo, 3 obroty w lewo itp
czy można zrealizować takie zadania za pomocą tego układu?
dzięki i pozdrawiam, Sławek
To mój totalny początek, więc rozumiem „nic” :)
Czy może mi Pan napisać prosty kod, żeby silnik wykonał kilka (np. 10) cykli po np. 10 kroków w określonych odstępach (np. 10s), po czym, żeby wykonał ten sam schemat w kierunku przeciwnym kierunku.
Fajnie, gdyby to były dwie wersje kodu: z pracą w fazie zatrzymania (wtedy się będzie grzał silnik), oraz bez pracy.
Gdybym sobie przeanalizował konkretny kod z konkretną pracą, może bym coś „załapał” :)
Pozdrawiam.
A jeszcze dodam: gdyby Pan opatrzył kod komentarzami, co robi dana linijka, byłoby fajnie.
czy można podłączyć 3 Silniki krokowy 5V wyposażony w sterownik na układzie ULC2003A z Waszego sklepu do Arduino
Uno – kombinuję i nic nie wychodzi może ktoś zna sposób ?
tak można, znalazłem sprawdziłem DZIAŁA
na filmie sterownik oparty na ULN2003A podłączony jest do układu. Czym jest ten układ (usb). Jak dobrać kompatybilny.
A czy można w jakiś sposób się dowiedzieć w jakim położeniu jest silnik? Po włączeniu zasilania silnik będzie w stanie, w którym został wyłączony?
Mat – jeśli nic nie poruszy osią silnika to zostanie w tym samy stanie. Jak będzie naprawdę, to zależy od projektu.
Jeśli nie masz takiej gwarancji to zostaje nałożenie jakiegoś enkodera na oś, by można odczytać jego pozycję. Sam sterownik nigdy nie da Ci takiej możliwości, bo zawsze może być tak, że ktoś „przyjdzie i obróci oś”
Podłączyłem wszytko a po silnik cały czas kręci się w prawo nie zależnie od tego czy w steps wpiszę liczbę dodatnią czy ujemną.