Содержание



Motor Drive Shield L293D

Описание

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

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

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

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

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

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

Скачать

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

Что нужно: Кол-во, шт
Контроллер Smart 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() {
 
 
}