Motor Drive Shield L293D

Описание

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

Технические характеристики

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

Особенности платы

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

Физические размеры

  • Шилд (Д х Ш х В): 70 х 54 х 20 мм

Плюсы использования

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

Минусы использования

  • Не подойдет для мощных моторов

Скачать

Внимание! При использовании данного шилда, цифровые выводы 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.

Схема подключения

Скетч для загрузки

#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; // проверки граничных значений угла поворота
  
}

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

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

Что нужно: Кол-во, шт
Контроллер 1
Motor Drive Shield L293D 1
Коллекторный мотор 4

Схема подключения

Скетч для загрузки

#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() {
 
 
}

Статья разработана в сотрудничестве с проектом HelpDuino