Arduino krokohrátky 5

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 se dodává i s jednoduchým budičem, takže ho můžeme připojit přímo k Arduinu.

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.

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) &amp;&amp; (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);
    }
  }
}

PICAXE – krokohrátky 1