Motor shield L293D

Arduino motor shield L293D je přídavný modul pro Arduino, který je určen pro pohodlné a bezpečné ovládání tří druhů motorů. Jedná se o stejnosměrné "normální" motory, servo motory a krokové motory, přičemž najednou lze připojit dva servo motory a poté až čtyři normální motory a/nebo dva krokové motory. Konektory pro normální a krokové motory jsou po stranách motor shieldu a jsou označeny jako M1 až M4. Pokud chceme připojit krokový motor, je nutné vždy využít dvojici konektorů vedle sebe, tedy M1+M2 nebo M3+M4. Samostatně na delší straně shieldu se pak nachází ještě konektor pro připojení externího napájení společně s propojovacím jumperem. Vzhledem k proudové náročnosti je nutné pro řízení motorů využít právě zmíněného externího napájení. Velikost napájení je nutné volit podle vybraných motorů, řídící obvod L293D podporuje rozsah napájecího napětí 4,5 až 25 V a proud 0,6 A na výstup (špičkově až 1,2 A). Motor shield také obsahuje tepelnou ochranu řídících obvodů.

Pro úspěšné propojení s Arduinem stačí tento Motor shield jednoduše zapojit do kompatibilní Arduino desky, tedy například Uno či Leonardo. Tento shield pak zabere většinu datových pinů, pro další práci lze tedy využít pouze D2, D13 a analogové piny A0 až A5.

Pro správnou funkci uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu Motor_shield_library, návod jak na to je uveden zde. Ukázkový kód obsahuje na svém začátku připojení knihoven a dále připojení jednotlivých druhů motorů s popiskem, o který motor se jedná a jak nastavit jeho číslování. Dále je vytvořena proměnná i pro for smyčky a v podprogramu setup je nastaveno číslo pro servo motor společně se zapnutím práce s DC motorem. V nekonečné smyčce loop je poté uveden kód, který obsahuje ukázku kompletní práce s motory. Na začátku je tedy normální motor spuštěn směrem vpřed a ve for smyčce je poté nastavována postupně jeho rychlost společně s polohou servo motoru od 0 do 255 (maximální hodnota) a posunem krokového motoru po jednom kroku. Další for smyčka obsahuje stejné příkazy, ale se snižujícím se číslem i, tedy rychlostí. Následně je tento kód zopakován s tím rozdílem, že normální motor je spuštěn v opačném směru a krokový motor je posouván s rychlejším posunem. 

// Arduino motor shield L293D

// připojení knihoven
#include <AFMotor.h>
#include <Servo.h> 

// připojení DC motoru na konektor M2
// (volba "2" v závorce)
AF_DCMotor motor(2);
// připojení DC servo motoru
Servo servoMotor;
// připojení krokového motoru na konektory M3+M4
// (volba "2" v závorce),
// konektory M1+M2 odpovídají "1" v závorce,
// 48 kroků na otáčku
AF_Stepper krokovyMotor(48, 2);

// proměnná pro for smyčky
int i;

void setup() {
  // zapnutí servo motoru v konektoru "ser1",
  // první konektor je připojen na pin 9,
  // druhý konektor je připojen na pin 10
  servoMotor.attach(9);
   
  // zapnutí práce s DC motorem
  motor.setSpeed(200);
  motor.run(RELEASE);
}

void loop() {
  // zapnutí motoru ve směru vpřed
  motor.run(FORWARD);
  // for smyčka s postupným zvyšováním rychlosti
  // díky změně proměnné i
  for (i=0; i<255; i++) {
    // nastavení polohy servomotoru
    servoMotor.write(i);
    // nastavení rychlosti DC motoru 
    motor.setSpeed(i);
    // posun krokového motoru o jeden krok vpřed
    krokovyMotor.step(1, FORWARD, INTERLEAVE);
    // krátká pauza pro ustálení pohybu motorů
    delay(3);
  }
  // for smyčka s postupným snižováním rychlosti,
  // příkazy jsou shodné s předchozí for smyčkou
  for (i=255; i!=0; i--) {
    servoMotor.write(i-255);
    motor.setSpeed(i);
    // posun krokového motoru o jeden krok vzad
    krokovyMotor.step(1, BACKWARD, INTERLEAVE);
    delay(3);
  }
  // přepnutí motoru na opačný směr, tedy vzad
  // příkazy jsou shodné se směrem vpřed
  motor.run(BACKWARD);
  for (i=0; i<255; i++) {
    servoMotor.write(i);
    motor.setSpeed(i);
    delay(3);
    // rychlejší posun krokového motoru
    // o jeden krok vpřed
    krokovyMotor.step(1, FORWARD, DOUBLE);
  }
 
  for (i=255; i!=0; i--) {
    servoMotor.write(i-255);
    motor.setSpeed(i);
    // rychlejší posun krokového motoru
    // o jeden krok vzad
    krokovyMotor.step(1, BACKWARD, DOUBLE);
    delay(3);
  }
}

Po nahrání programu do Arduino desky se začnou hýbat všechny motory, pokud jsou správně připojené a je pro ně z externího zdroje poskytováno správné napájecí napětí a dostačně velký proud. 

Motor shield pro Arduino s obvody L293D je zajímavým prvkem do projektů, kde potřebujeme pracovat se stejnosměrnými motory. Můžeme ho použít například s normálními motory do různých vozítek či robotů. V případě servo motorů se nabízí možnosti použít tento shield jako řídící obvod pro zmenšené modely aut či letadel. A s krokovými motory si můžeme vytvořit například vlastní 3D tiskárnu.

 

Seznam použitých komponent:

http://dratek.cz/arduino/1078-arduino-motor-shield-l293d-1438016761.html

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

Další podobné články