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

Silnik połączony ze sterownikiem

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

Sterownik silnika krokowego

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

Sterownik silnika krokowego, widok od tyłu

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

Silnik krokowy

 

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.

15 thoughts on “Silnik krokowy i Arduino

  1. Mac

    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ść.

    Odpowiedz
  2. sprae

    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.

    Odpowiedz
  3. pav

    Czy posiadajac dwa takie zestawy mogę podłączyć je naraz do Arduino czy potrzebny jest specjalny kontroler do obsługi dwóch silników?

    Odpowiedz
  4. Henio

    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

    Odpowiedz
  5. slawek

    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

    Odpowiedz
  6. 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.

    Odpowiedz
  7. Sławek

    A jeszcze dodam: gdyby Pan opatrzył kod komentarzami, co robi dana linijka, byłoby fajnie.

    Odpowiedz
  8. Henio

    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 ?

    Odpowiedz
  9. maciek

    na filmie sterownik oparty na ULN2003A podłączony jest do układu. Czym jest ten układ (usb). Jak dobrać kompatybilny.

    Odpowiedz
  10. Mat

    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?

    Odpowiedz
    1. netmaniac

      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ś”

      Odpowiedz
  11. Krzysiek

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

    Odpowiedz

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.