На главную страницу | Новости | FAQ | Ссылки | Для детей | Контакты
В это статье мы рассмотрим процесс подключения разного типа двигателей (моторов) к ардуино.
Можно, конечно, было бы спаять свою собственную схему, но проще всего это сделать с помощью шилда на базе чипа L293D, который на Ali стоит $1.8 .
Это модуль для Arduino UNO, в котором используется две микросхемы L293D.
Микросхема L293D - это драйвер двухканальный двигателей со встроенными защитными диодами.
Использование двух таких микросхем позволяет подключить одновременно 4 мотора постоянного тока, либо 2 шаговых двигателя. На шилде также располагается сдвиговый регистр 74НС595, который нужен для уменьшения количества управляющих выводов.
К шилду можно также подключать серво-приводы.
Наиболее важный момент, на который стоит обратить внимание - это питание шилда, точнее самих приводов (будем называть это "силовой частью"). Так вот, питание приводов производится либо от внешнего клеммника (6) либо замыканием джампера (5) (питанием моторов +M соединяется с выводом Vin Arduino). Напряжение для объединенного питания 6 - 12 В. Я лично предпочитаю использовать отдельный источник питания, чтобы не создавать помехи в цепи питания Arduino.
Шилд ставится прямо на плату Arduino UNO, при этом почти все цифровые выходы будут использоваться шилдом. Из свободных цифровых выводов останутся только пины 2, 13 и пины интерфейса UART- 0, 1. Впрочем аналоговые выводы можно использовать в качестве цифровых.
Код программы для управления двумя моторами постоянного тока.
Здесь я создавал класс Robot. Конечно, это делать не обязательно. Можно просто вызывать функции run и setSpeed класса AF_DCMotor библиотеки AFMotor.h.
#include < AFMotor.h > // Подключаем библиотеку для работы с шилдом
// Подключаем моторы к клеммникам M1, M2, M3, M4
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
class Robot {
public:
Robot();
void Forward(int t=0);
void Back(int t=0);
void Right(int t=0);
void Left(int t=0);
void Stop(int t=0);
} robot;
Robot::Robot() {
motor1.setSpeed(255);
motor2.setSpeed(255);
motor1.run(RELEASE);
motor2.run(RELEASE);
}
void Robot::Forward(int t)
{
motor1.run(FORWARD); // Задаем движение вперед
motor2.run(FORWARD);
delay(t);
}
void Robot::Back(int t)
{
motor1.run(BACKWARD); // Задаем движение назад
motor2.run(BACKWARD);
delay(t);
}
void Robot::Stop(int t)
{
motor1.run(RELEASE); // Останов двигателей
motor2.run(RELEASE);
delay(t);
}
void Robot::Right(int t) // Поворот направо
{
motor1.run(BACKWARD);
motor2.run(FORWARD);
delay(t);
}
void Robot::Left(int t) // Поворот налево
{
motor1.run(FORWARD);
motor2.run(BACKWARD);
delay(t);
}
void setup() {
}
void loop() {
robot.Forward(500);
// Не рекомендуется резко переключать направление вращения двигателей.
robot.Stop(300);
robot.Back(800);
robot.Stop(300);
robot.Left(300);
robot.Stop(300);
robot.Right(300);
robot.Stop(300);
}
На плату выведены 2 разъема для подключения сервоприводов (4). Управление сервоприводами стандартное с помощью библиотеки Servo.h
Выводы для управления сервоприводами:
- Цифровой вывод 9 - Сервопривод-1
- Цифровой вывод 10 - Сервопривод-2
Now 21.11.24 15:27:37, Your IP: 3.147.68.39; arduino.zl3p.com/modules/l293d
ePN