Arduino krokový motor s driverem, tedy řídící deskou, je vhodným kompletem pro nejrůznější projekty, které vyžadují řízený mechanický pohyb. Tento návod je konkrétně zaměřen na krokový motor 28BYJ-48 a driver s tranzistorovým polem ULN2003. Zmíněný motor je unipolární a jedná se o elektromechanické zařízení, které přeměňuje elektrické impulzy na mechanický pohyb. Mezi výhody tohoto krokového motoru patří snadné otočení o libovolný úhel, velká síla i v klidné poloze či okamžitá odezva při zastavení či spouštění motoru.

Krokový motor + driver

Pro úspěšné propojení s Arduinem je nutné nejprve propojit motor s driverem pomocí pěti-pinového konektoru a dále propojit driver a Arduino desku 6 propojovacími piny. Připojíme IN1 na D8, IN2 na D9, IN3 na D10 a dále z napájecích pinů – na GND a + na 5 V. Napájení je však vhodné při větší zátěži na motor připojit z externího zdroje – například baterie. Výstupní piny INx můžeme samozřejmě připojit na jiné volné piny naší Arduino desky.

Schéma zapojení krokového motoru s driverem

Ukázkový kód obsahuje ukázku práce s krokovým motorem a otočením jeho hřídele o plných 360 stupňů. Na začátku kódu nastavíme čísla pinů pro digitální výstupy, vytvoříme proměnnou, pomocí které se nastavuje rychlost – 1 odpovídá nejvyšší rychlosti a s většími čísly (doba mezi spínáními) se rychlost snižuje a také vytvoříme proměnnou na nastavení úhlu otočení hřídele. V podprogramu setup nastavíme všechny digitální výstupy jako výstupy. V loop smyčce pak nejprve pomocí smyčky for provedeme otáčku o nastavený úhel po směru hodinových ručiček, počkáme jednu vteřinu a provedeme rotaci proti směru hodinových ručiček. Dále se už v kódu nachází pouze podprogramy s nastavením jednotlivých kroků a jejich posloupnosti tak, jak udává výrobce motoru.

// Krokový motor a driver

// čísla pinů pro digitální výstupy
const int in1 =  8;
const int in2 =  9;
const int in3 = 10;
const int in4 = 11;

// proměnná pro nastavení rychlosti,
// se zvětšujícím se číslem se rychlost zmenšuje
int rychlost = 1;
//
int uhel = 360;

void setup() {
  // inicializace digitálních výstupů
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
}

void loop() {
  // plná rotace o 360 stupňů = 512 volání
  // funkce rotacePoSmeru() či rotaceProtiSmeru()
  for(int i=0;i<(uhel*64/45);i++){
    rotacePoSmeru();
  }
  // pauza po dobu 1 vteřiny
  delay(1000);
  
  for(int i=0;i<(uhel*64/45);i++){
    rotaceProtiSmeru();
  }
  // pauza po dobu 1 vteřiny
  delay(1000);
}
// zde následují funkce pro volání jednotlivých
// kroků pro otočení po či proti směru hodinových
// ručiček
void rotacePoSmeru() {
  krok1();
  krok2();
  krok3();
  krok4();
  krok5();
  krok6();
  krok7();
  krok8();
}
void rotaceProtiSmeru() {
  krok8();
  krok7();
  krok6();
  krok5();
  krok4();
  krok3();
  krok2();
  krok1();
}
// každý krok obsahuje výrobcem dané pořadí
// pro správné spínání motoru a následnou
// pauzu, kterou určujeme rychlost otáčení
void krok1(){
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  delay(rychlost);
}
void krok2(){
  digitalWrite(in1, HIGH);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  delay(rychlost);
}
void krok3(){
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  delay(rychlost);
}
void krok4(){
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  delay(rychlost);
}
void krok5(){
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  delay(rychlost);
}
void krok6(){
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, HIGH);
  delay(rychlost);
}
void krok7(){
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  delay(rychlost);
}
void krok8(){
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  delay(rychlost);
}

Po nahrání programu do Arduino desky můžeme pozorovat opakující se rotaci hřídele krokového motoru. Poté si můžeme vyzkoušet měnit rychlost otáčení pomocí proměnné rychlost či úhel otočení hřídele pomocí nastavení počtu průběhů for smyčkou. Tento úhel vychází z datasheetu výrobce, který udává, že 512 průběhů odpovídá 360 stupňům. Velikost úhlu je tedy nutné vynásobit číslem 64 a následně podělit hodnotou 45. Je však nutno podotknout, že například u úhlu 100 stupňů by počet průběhů smyčkou vycházel na 142,2. My můžeme provádět ale pouze celá čísla, ve skutečnosti se tedy provede pouze 142 průběhů a skutečný úhel bude 99,84 stupňů.

 

Seznam použitých komponent:

http://dratek.cz/arduino-vystupni-periferie/832-arduino-krokovy-motor-driver.html

http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html

http://dratek.cz/arduino-kabelaz-propoje-rozsireni/1214-arduino-vodice-samice-samice-40-kusu-1457705007.html

FB tw

Další podobné články