====== Motor Drive Shield L293D ======
===== Описание =====
Motor Drive Shield L293D - плата расширения для контроллеров линейки UNO, предназначенная для питания и управления моторами и сервоприводами. Плата будет очень удобна в проектах создания движущихся объектов: роботов, машин, управления открыванием/закрыванием и прочие проекты, где используются моторы и сервоприводы. 
Плата позволяет управлять четырьмя моторами или двумя сервоприводами. Имеет разъём для подключения внешнего питания. 

==== Технические характеристики ====
  * Напряжение питания двигателей: 5-36 В
  * Напряжение питания платы: 5 В
  * Допустимый ток нагрузки: 600 мА на канал
  * Максимальный (пиковый) ток нагрузки: 1,2А на канал

==== Особенности платы ====
  * 4-ёх канальное управление
  * Имеются отдельные выводы для подключения сервоприводов
  * Контакты для дополнительного питания платы
  * Защита от перегрева

==== Физические размеры ====
  * Шилд (Д х Ш х В): 70 х 54 х 20 мм

==== Плюсы использования ====
  * Заменяет использование нескольких модулей для управления моторами
  * Позволяет упростить конечное устройство

==== Минусы использования ====
  * Не подойдет для мощных моторов

==== Скачать ====
  * [[http://files.smartelements.ru/know_libs/AFMotor.zip|Библиотека (AFMotor)]]


//**Внимание!** При использовании данного шилда, цифровые выводы 2 и 13 контроллера не используйте в своих проектах! Также могут быть заняты и другие пины, в зависимости от использования моторов. Занятые выводы приведены в таблице ниже//

^ Вывод шилда    ^ Занятные выводы контроллера  ^
| SER1(сервопривод 1)           | цифровой пин 9               |
| SER2(сервопривод 2)           | цифровой пин 10              |
| M1(мотор 1)    | цифровой пин 11              |
| M2(мотор 2)    | цифровой пин 3               |
| M3(мотор 3)    | цифровой пин 5               |
| M4(мотор 4)    | цифровой пин 6               |
| Шаговый мотор  | цифровые пины 4, 7, 8, 12    |

===== Примеры подключения и использования =====
**Пример 1:** В примере демонстрируется подключение двух сервоприводов к шилду и управление ими.

//Обратите внимание! Вывод **SER1** (Сервопривод1) - на плате расширения соединен с цифровым **пином 9** , а вывод **SERVO_2** (Сервопривод2) с **пином 10** контроллеров UNO.//

^ Что нужно:                                                                                                                                       ^ Кол-во, шт  ^
| [[http://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart UNO]]                                                     | 1           |
| [[http://smartelements.ru/collection/shildy/product/motor-drive-shield-l293d|Motor Drive Shield L293D]]  | 1           |
| [[http://smartelements.ru/collection/motory-dravery-shassi/product/servoprivod-towerpro-sg90|Сервопривод TowerPro SG90]]                                                      | 2           |

**Схема подключения**
{{ :главная:шилды:motordriveshield_servo.fzz_-_fritzing_-_макетная_плата_.jpg?nolink |}}

**Скетч для загрузки**
<file Arduino>
#include <Servo.h> //подключение библиотеки для работы с сервоприводами

Servo myservo1;  // создание объекта для работы с сервоприводом №1
Servo myservo2;  // создание объекта для работы с сервоприводом №2


int val1 = 0;       // переменная градуса поворота первого сервопривода
int val2 = 180;     // переменная градуса поворота второго сервопривода
int stepVal = 30;   // переменная шага поворота сервопривода

void setup() {
  myservo1.attach(10);   // подключение первого сервопривода к пину 10
  myservo2.attach(9);    // подключение второго сервопривода к пину 9

}

void loop() {

  val1 += 30;               // увеличить переменную поворота первого сервопривода
  val2 -= 30;               // увеличить переменную поворота второго сервопривода

  myservo1.write(val1);     // установить позицию первого сервопривода
  delay(15);                // подождать пока сервопривод примет нужное положение
  myservo2.write(val2);     // установить позицию второго сервопривода
  delay(15);                // подождать пока сервопривод примет нужное положение
                
  delay(500);               // задержка для раздумий

  if (val1 > 180) val1 = 0; // проверки граничных значений угла поворота
  if (val2 < 0) val2 = 180; // проверки граничных значений угла поворота
  
}

</file>

**Пример 2**: В примере демонстрируется подключение четырех коллекторных моторов к шилду и демонстрация работы с ними. Для корректной работы требуется обеспечить внешнее питание для шилда (моторов).

//Обратите внимание! Вывод **М1** (Мотор1) - на плате расширения соединен с цифровым **пином 11** , вывод **М2** (Мотор2) с **пином 3**, вывод **М3** (Мотор3) с **пином 5**, а вывод **М4** (Мотор4) с **пином 6** контроллеров UNO.//

^ Что нужно:                                                                                                                                       ^ Кол-во, шт  ^
| [[http://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart UNO]]                                                     | 1           |
| [[http://smartelements.ru/collection/shildy/product/motor-drive-shield-l293d|Motor Drive Shield L293D]]  | 1           |
| Коллекторный мотор                                                     | 4           |

**Схема подключения**
{{ :главная:шилды:motordriveshield_motors.fzz_-_fritzing_-_макетная_плата_.jpg?nolink |}}

**Скетч для загрузки**
<file Arduino>
#include <AFMotor.h>  // Подключение библиотеки для работы с шилдом 

//Создание объектов мотора и подключение 
AF_DCMotor motor1(1); // Подключение мотора к клеммнику M1
AF_DCMotor motor2(2); // Подключение мотора к клеммнику M2
AF_DCMotor motor3(3); // Подключение мотора к клеммнику M3
AF_DCMotor motor4(4); // Подключение мотора к клеммнику M4

void setup() {

  //Демонстрация работы

  motor1.run(FORWARD);  // Установка направления движения вперед (FORWARD = вперед)
  motor1.setSpeed(255); // Установка максимальной скорости движения
  motor2.run(FORWARD);  // Установка направления движения вперед (FORWARD = вперед)
  motor2.setSpeed(255); // Установка максимальной скорости движения
  motor3.run(FORWARD);  // Установка направления движения вперед (FORWARD = вперед)
  motor3.setSpeed(255); // Установка максимальной скорости движения
  motor4.run(FORWARD);  // Установка направления движения вперед (FORWARD = вперед)
  motor4.setSpeed(255); // Установка максимальной скорости движения
  delay(3000);          // Время задержки (3 секунды моторы двигаются вперед)
 
  motor1.run(RELEASE); // Остановка двигателей (RELEASE - остановка)
  motor2.run(RELEASE); // Остановка двигателей (RELEASE - остановка)
  motor3.run(RELEASE); // Остановка двигателей (RELEASE - остановка)
  motor4.run(RELEASE); // Остановка двигателей (RELEASE - остановка)
  delay(500);          // Время задержки (0,5 секунды моторы остановлены)

  motor1.run(BACKWARD);  // Установка направления движения назад (BACKWARD = назад)
  motor1.setSpeed(255);  // Установка максимальной скорости движения 
  motor2.run(BACKWARD);  // Установка направления движения назад (BACKWARD = назад)
  motor2.setSpeed(255);  // Установка максимальной скорости движения
  motor3.run(BACKWARD);  // Установка направления движения назад (BACKWARD = назад)
  motor3.setSpeed(255);  // Установка максимальной скорости движения
  motor4.run(BACKWARD);  // Установка направления движения назад (BACKWARD = назад)
  motor4.setSpeed(255);  // Установка максимальной скорости движения
  delay(3000);           // Время задержки (3 секунды моторы двигаются назад)
    
  motor1.run(RELEASE);   // Остановка двигателей (RELEASE - остановка)
  motor2.run(RELEASE);   // Остановка двигателей (RELEASE - остановка)
  motor3.run(RELEASE);   // Остановка двигателей (RELEASE - остановка) 
  motor4.run(RELEASE);   // Остановка двигателей (RELEASE - остановка)
  delay(500);            // Время задержки (0,5 секунды моторы остановлены) 
  
  // Разгон двигателей в одном направлении от нулевой скорости, до максимальной
  
  for (int i=0; i<255; i++) {
    motor1.setSpeed(i);   // Установка скорости движения
    motor2.setSpeed(i);   // Установка скорости движения
    motor3.setSpeed(i);   // Установка скорости движения 
    motor4.setSpeed(i);   // Установка скорости движения
    motor1.run(FORWARD);  // Установка направления движения мотора
    motor2.run(FORWARD);  // Установка направления движения мотора
    motor3.run(FORWARD);  // Установка направления движения мотора
    motor4.run(FORWARD);  // Установка направления движения мотора
    delay(100);           // Время задержки
  }
 
  motor1.run(RELEASE);   // Остановка двигателей (RELEASE - остановка)
  motor2.run(RELEASE);   // Остановка двигателей (RELEASE - остановка)
  motor3.run(RELEASE);   // Остановка двигателей (RELEASE - остановка) 
  motor4.run(RELEASE);   // Остановка двигателей (RELEASE - остановка)
  delay(500);            // Время задержки (0,5 секунды моторы остановлены) 
  
  // Снижение скорости двигателей в одном направлении от максимальной к нулевой
  
  for (int i=0; i<255; i++) {
    motor1.setSpeed(i);   // Установка скорости движения
    motor2.setSpeed(i);   // Установка скорости движения
    motor3.setSpeed(i);   // Установка скорости движения 
    motor4.setSpeed(i);   // Установка скорости движения
    motor1.run(FORWARD);  // Установка направления движения мотора
    motor2.run(FORWARD);  // Установка направления движения мотора
    motor3.run(FORWARD);  // Установка направления движения мотора
    motor4.run(FORWARD);  // Установка направления движения мотора
    delay(100);           // Время задержки
  }
 
  motor1.run(RELEASE);   // Остановка двигателей (RELEASE - остановка)
  motor2.run(RELEASE);   // Остановка двигателей (RELEASE - остановка)
  motor3.run(RELEASE);   // Остановка двигателей (RELEASE - остановка) 
  motor4.run(RELEASE);   // Остановка двигателей (RELEASE - остановка)
  delay(500);            // Время задержки (0,5 секунды моторы остановлены) 
  

}

void loop() {
 
 
}
</file>