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