Все модули подключаются одинаково. В качестве примера мы возьмем самый популярный драйвер двигателя на L293D микросхеме.
Кроме драйвера нам понадобится контроллер DaVinci, два мотора постоянного тока, соединительные провода и дополнительный источник питания, так как контроллер выдает маленькие токи и на двигатели необходимо подавать питание отдельным источником питания к контакту MOTOR 5-36V (у драйвера на 9110S микросхемах используется один контакт для подключения питания модуля и двигателей, источник питания может быть от 5В до 12В).
Управление двигателями производится с помощью ШИМ сигналов через контакты IN1..IN4.
Двигатели подключаются к клеммам М1 и М2. При этом полярность не имеет значения, ее можно поменять программно.
Собираем схему согласно рисунку.
Напишем простую программу, которая будет вращать один из двигателей, меняя направление каждую секунду.
#define M1 3 #define DIRECTION1 9 void setup() { pinMode(M1, OUTPUT); pinMode(DIRECTION1, OUTPUT); } void loop() { digitalWrite(M1, LOW); digitalWrite(DIRECTION1, HIGH); delay(1000); digitalWrite(M1, HIGH); digitalWrite(DIRECTION1, LOW); delay(1000); }
Теперь усложним программу. Будем кроме направления менять еще и мощность.
#define M1 3 #define DIRECTION1 9 void setup() { pinMode(M1, OUTPUT); pinMode(DIRECTION1, OUTPUT); } void loop() { analogWrite(M1, 255); digitalWrite(DIRECTION1, LOW); delay(2000); analogWrite(M1, 130); digitalWrite(DIRECTION1, LOW); delay(2000); analogWrite(M1, 125); digitalWrite(DIRECTION1, HIGH); delay(2000); analogWrite(M1, 0); digitalWrite(DIRECTION1, HIGH); delay(2000); }
Вот что получится в итоге. Сначала мотор вращается с максимальной скоростью, затем замедляется, и повторяет все в обратном направлении.
А теперь задействуем второй двигатель.
#define M1 3 #define M2 6 #define DIRECTION1 9 #define DIRECTION2 12 void setup() { pinMode(M1, OUTPUT); pinMode(M2, OUTPUT); pinMode(DIRECTION1, OUTPUT); pinMode(DIRECTION2, OUTPUT); } void loop() { analogWrite(M1, 100); digitalWrite(DIRECTION1, LOW); analogWrite(M2, 100); digitalWrite(DIRECTION2, LOW); delay(1000); analogWrite(M1, 200); digitalWrite(DIRECTION1, LOW); analogWrite(M2, 200); digitalWrite(DIRECTION2, LOW); delay(2000); analogWrite(M1, 155); digitalWrite(DIRECTION1, HIGH); analogWrite(M2, 155); digitalWrite(DIRECTION2, HIGH); delay(2000); analogWrite(M1, 55); digitalWrite(DIRECTION1, HIGH); analogWrite(M2, 55); digitalWrite(DIRECTION2, HIGH); delay(1000); }
Как видим, моторы сначала вращаются с небольшой скоростью, а затем переходят на увеличенные обороты, и повторяют все в обратном направлении.
В качестве закрепления материала, можно собрать простого колесного робота и научить его двигаться по окружности, выполнять змейку и восьмерку.