Пример 35. Плата расширения для двигателей на L293D
Примеры
СБОРНИК ПРИМЕРОВ
ПРИМЕРЫ
- Пример 1. Светодиоды
 - Пример 2. Подключение кнопки
 - Пример 3. Переключатель
 - Пример 4. Активный зуммер
 - Пример 5. Пассивный зуммер
 - Пример 6. Фоторезистор
 - Пример 7. RGB-светодиод
 - Пример 8. Семисегментный индикатор и 74HC595N
 - Пример 9. Четырехразрядный 7-сегментный индикатор
 - Пример 10. Светодиодная матрица
 - Пример 11. Светодиодная шкала
 - Пример 12. ЖК-дисплей
 - Пример 13. Джойстик
 - Пример 14. Вольтметр
 - Пример 15. Термистор
 - Пример 16. Модуль DHT11
 - Пример 17. Модуль HC-SR04
 - Пример 18. Датчик движения HC-SR501
 - Пример 19. Матричная клавиатура
 - Пример 20. ИК датчик и пульт
 - Пример 21. Модуль часов DS-1302
 - Пример 22. RFID-модуль RC522
 - Пример 23. Сервопривод
 - Пример 24. Модуль реле
 - Пример 25. Двигатель постоянного тока
 - Пример 26. Шаговый двигатель и драйвер ULN2003
 - Пример 27. Драйвер двигателей на L298N
 - Пример 28. MP3-плеер DFPlayer Mini
 - Пример 29. Датчик уровня воды
 - Пример 30. Serial Port
 - Пример 31. Симуляция парковки
 - Пример 32. Датчик температуры DS18B20
 - Пример 33. Bluetooth-модуль HC-06
 - Пример 34. Плата расширения с дисплеем и кнопками
 - Пример 35. Плата расширения для двигателей на L293D
 - Пример 36. Ethernet шилд W5100
 - Пример 37. GSM/GPRS шилд SIM900
 - Пример 38. GPS модуль Ublox NEO-6M
 - Пример 39. Модуль считывания отпечатков пальцев
 - Пример 40. Шаговый двигатель NEMA17 и драйвер TB6600
 
Мотор-шилды на основе микросхем L293D и L298N являются самыми популярными драйверами для управления моторами постоянного тока. Данная плата расширения позволяет подключить 4 DC-мотора (либо 2 шаговых двигателя) и два серводвигателя.
На борту данного шилда имеется две микросхемы L293D (1). Она позволяет управлять слаботочными двигателями с током потребления до 600 мА на канал. На двух пятипиновых клеммниках (2) можно насчитать 4 разъема для подключения двигателей (M1, M2, M3, M4), центральные выводы на пятипиновых клеммниках соединены с землей и служат для удобства при подключении пятипроводных шаговый двигателей. Использование двух микросхем L293D позволяет одновременно подключить 4 моторчика постоянного тока или 2 шаговых двигателя, либо два DC-моторчика и шаговик. Для управления на прямую выводами L-ки (IN1, IN2, IN3, IN4), отвечающимими за выбор направления вращения, необходимо 4 вывода, а для двух микросхем целых 8. Для уменьшения количества управляющих выводов используется сдвиговый регистр 74НС595 (3). Благодаря регистру управление сводится с 8-ми пинов к 4-м. Также, на плату выведены 2 разъема для подключения сервоприводов (4). Управление сервоприводами стандартное с помощью библиотеки Servo.h. Питание силовой части производится либо от внешнего клеммника (5), либо замыканием джампера (6) (питание от клеммника моторов +M соединяется с выводом Vin Arduino). При замкнутом джампере напряжение для объединенного питания должно лежать в пределах от 6 до 12 В.
К минусам данного шилда можно отнести то, что он задействует практически все цифровые пины.
Выводы, отвечающие за скорость вращения двигателей:
- Цифровой вывод 11 – DC Мотор №1 / Шаговый №1
 - Цифровой вывод 3 – DC Мотор №2 / Шаговый №1
 - Цифровой вывод 5 – DC Мотор №3 / Шаговый №2
 - Цифровой вывод 6 – DC Мотор №4 / Шаговый №2
 
Выводы, отвечающие за выбор направления вращения двигателей:
- Цифровые выводы 4, 7, 8 и 12
 
Выводы для управления сервоприводами (выведены на штырьки на краю платы):
- Цифровой вывод 9 – Сервопривод №1
 - Цифровой вывод 10 – Сервопривод №2
 
В итоге незадействованными цифровыми выводами остаются только пины 2, 13 и пины интерфейса UART – 0, 1. Однако есть выход из данной ситуации. У нас остались незадействованные аналоговые входы A0 – A6, их можно использовать как цифровые. В коде они будут записываться как цифровые с 14 по 19.

Описание:
В данном примере с помощью мотор-шилда на L293D будем одновременно управлять 4 двигателями постоянного тока (меняя скорость и направление). Для подключения шилда достаточно вставить его в плату Arduino Uno. Для работы с данным шилдом необходимо скачать библиотеку AFMotor.
Компоненты:
- 1 × Плата Arduino Uno R3
 - 1 × USB-кабель
 - 1 × Плата расширения для двигателей на L293D
 - 4 × Двигатель постоянного тока (с редуктором) или (без редуктора)
 - 1 × Клемма для 9 В батареи (Кроны)
 - 1 × 9 В цинковая батарея (типа Крона)
 - Соединительные провода
 
Схема:

Скетч:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102  | 
						#include <AFMotor.h>  // Подключаем библиотеку для работы с шилдом  // Подключаем моторы к клеммникам M1, M2, M3, M4 AF_DCMotor motor1(1); AF_DCMotor motor2(2); AF_DCMotor motor3(3); AF_DCMotor motor4(4); //счетчик int i; void setup() {   // Задаем скорость вращения моторов (аналог работы PWM)    motor1.setSpeed(100);   motor1.run(RELEASE);   motor2.setSpeed(100);   motor2.run(RELEASE);   motor3.setSpeed(100);   motor3.run(RELEASE);   motor4.setSpeed(100);   motor4.run(RELEASE); } void loop() {   // Двигаемся условно вперед одну секунду    motor1.run(FORWARD); // Задаем движение вперед   motor2.run(FORWARD);   motor3.run(FORWARD);   motor4.run(FORWARD);   motor1.setSpeed(100); // Задаем скорость движения   motor2.setSpeed(100);    motor3.setSpeed(100);   motor4.setSpeed(100);   delay(1000);   // Останавливаем двигатели   /* Очень не рекомендуем резко переключать направление вращения двигателей.   Лучше дать небольшой промежуток времени.*/   motor1.run(RELEASE);    motor2.run(RELEASE);   motor3.run(RELEASE);    motor4.run(RELEASE);   delay(500);   // Двигаемся в обратном направлении   motor1.run(BACKWARD);  // Задаем движение назад   motor2.run(BACKWARD);   motor3.run(BACKWARD);   motor4.run(BACKWARD);   motor1.setSpeed(100);  // Задаем скорость движения    motor2.setSpeed(100);    motor3.setSpeed(100);    motor4.setSpeed(100);    delay(1000);   // Останавливаем двигатели     motor1.run(RELEASE);   motor2.run(RELEASE);   motor3.run(RELEASE);   motor4.run(RELEASE);   delay(500);   // Разгоняем двигатели в одном направлении   motor1.run(FORWARD);   motor2.run(FORWARD);   motor3.run(FORWARD);   motor4.run(FORWARD);   for (i=0; i<255; i++) {     motor1.setSpeed(i);      motor2.setSpeed(i);       motor3.setSpeed(i);      motor4.setSpeed(i);       delay(10);  }  // Останавливаем двигатели     motor1.run(RELEASE);   motor2.run(RELEASE);   motor3.run(RELEASE);   motor4.run(RELEASE);   delay(500);   // Разгоняем двигатели в обратном направлении   motor1.run(BACKWARD);   motor2.run(BACKWARD);   motor3.run(BACKWARD);   motor4.run(BACKWARD);   for (i=255; i>=0; i--) {     motor1.setSpeed(i);      motor2.setSpeed(i);      motor3.setSpeed(i);      motor4.setSpeed(i);      delay(10);  }   // Останавливаем движение     motor1.run(RELEASE);   motor2.run(RELEASE);   motor3.run(RELEASE);   motor4.run(RELEASE);   delay(500); }  | 
					

				
				