Пример 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); } |