Obousměrné řízení miniaturního unipolárního krokového motoru 28BYJ-48 stejnosměrným napětím nebo potenciometrem.
V minulých dílech jsme trochu macešsky zapomněli na v současnosti velmi populární miniaturní krokový motorek 28BYJ-48.
Motorek s rotorem z permanentního magnetu má jednu otáčku o 360 st. rozdělenu na 32 kroků. K motoru je pevně připojena převodovka s převodovým poměrem 64:1, k otočení výstupního hřídele o 360 st. tedy potřebujeme ((32×64) 2048 kroků. Díky převodovce běží motorek celkem hladce a na své rozměry má také slušný točivý moment.
Schéma zapojení:

Krokový motor je připojen k řídící desce ULN2003 a musí být napájen externím zdrojem napětí v rozsahu 5 až 9 V. Při pokusu o napájení přímo z Arduina hrozí nebezpečí jeho poškození! Obvod ULN2003 byl na Robodoupěti už podrobněji popsán, tak jen na připomenutí si ukážeme rozložení pinů a zapojení jednoho kanálu ve vnitřní struktuře.
- Rozložení pinů obvodu ULN2003
- Vnitřní zapojení jednoho kanálu obvodu
Propojení s Arduinem:
IN1 – D11, IN2 – D10, IN3 – D9, IN4 – D8
Potenciometr je připojen na pin A0 Arduina podle obrázku, tedy:
Začátek dráhy – +5V, běžec – A0, konec dráhy – GND

Pozn: Při zkouškách motoru byl pro snadné a přehledné propojení s Arduinem použit Connector shield a proto je použit i na obrázku.
Program
K programu toho není příliš co říci, protože se podobá tomu z druhé části Krokohrátek s Arduinem. Na rozdíl od těch minulých je pro řízení motorku použita knihovna stepper, která je součástí instalace vývojového prostředí Arduina.
Její funkce jsou značně omezené:
Konstruktor
vytvoří instanci třídy, (v příkladu pojmenovanou stepper), předá tím programu počet kroků motoru na jednu otáčku a čísla pinů, které budou použity pro řízení motoru.
Stepper stepper(STEPS, IN4, IN2, IN3, IN1)
Knihovna obsahuje jen dvě funkce:
setSpeed(rpm)
Funkce nastavuje rychlost v otáčkách za minutu (ot/min nebo RPM), jakou se motor bude otáčet při volání funkce step().
step(steps)
Funkce otáčí motorem o parametrem určený počet kroků, rychlostí, určenou parametrem funkce setSpeed().
A zde je kód:
// připoj knihovnu Stepper motor Arduina
#include <Stepper.h>
// počet kroků motoru na otáčku
#define STEPS 32
// definice řídících pinů pro motor
#define IN1 11
#define IN2 10
#define IN3 9
#define IN4 8
// inicializace knihovny stepper
Stepper stepper(STEPS, IN4, IN2, IN3, IN1);
// potenciometr (1 - 10k) je připojen na pin A0
#define pot A0
void setup()
{
}
void loop()
{
// přečteme analogovou hodnotu z potenciometru
int val = analogRead(pot);
// pokud je potenciometr ve střední poloze, motor se neotáčí
if( (val > 500) && (val < 523) )
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
else
{
// chceme otáčet motorem jedním směrem
while (val >= 523)
{
// mapujeme proměnnou speed_ na rozsah 5 až 500 otáček / min.
int speed_ = map(val, 523, 1023, 5, 500);
// nastavíme motoru rychlost
stepper.setSpeed(speed_);
// pootoč motorem o jeden krok zvoleným směrem
stepper.step(1);
val = analogRead(pot);
}
// chceme otáčet motorem opačným směrem
while (val <= 500)
{
// mapujeme proměnnou speed_ na rozsah 5 až 500 otáček / min.
int speed_ = map(val, 500, 0, 5, 500);
// nastavíme motoru rychlost
stepper.setSpeed(speed_);
// pootoč motorem o jeden krok zvoleným směrem
stepper.step(-1);
val = analogRead(pot);
}
}
}




