Arduino IDE
Разберёмся к подключением драйвера мотора к Arduino Uno и напишем несколько тестовых программ.
Для выполнения всех примеров из этого раздела потребуется отладочная плата Arduino Uno (используем UNO2 от RobotClass), двигатель постоянного тока с рабочим напряжением от 3 до 6 В, микросхема драйвера L293D, макетная плата и немного проводов вилка-вилка.
Необходимые компоненты можно добавить в корзину прямо здесь, и затем оформить заказ в нашем интернет-магазине.
Подключение
Как уже было написано выше, драйвер L293D работает по схеме IN1/IN2/EN. Так что для управления одним мотором потребуется задействовать три контакта Arduino Uno, один из которых должен поддерживать генерацию ШИМ сигнала.
Для эксперимента подключим по этой схеме всего один двигатель. Схема подключения к Arduino:
Драйвер L293D | INPUT1 | INPUT2 | ENABLE1 | VSS | VS | GND |
Uno2 | D2 | D3 | D5 | +5V | +5V | GND |
Программа
Напишем простую программу, которая будет вращать двигатель, меняя направление каждые две секунды. Не будем использовать ШИМ, на контакт ENABLE1 подадим высокий уровень сигнала — 5 Вольт, что эквивалентно ШИМ к коэффициентом заполнения 100%.
const byte in1 = 2;
const byte in2 = 3;
const byte en1 = 5;
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(en1, OUTPUT);
digitalWrite(en1, HIGH);
}
void loop() {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
delay(2000); // пауза 2 секунды
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
delay(2000); // пауза 2 секунды
}
Загружаем программу на Arduino и проверяем её работу: мотор должен попеременно вращаться в разные стороны.
Управление при помощи ШИМ
Следующая программа будет менять не только направление вращения мотора, но и его скорость. Делать это придётся путём подачи ШИМ сигнала на контакт ENABLE1.
Для работы с ШИМ используем встроенную функцию analogWrite. Она принимает два аргумента: контакт и коэффициент заполнения в диапазоне от 0 до 255, где 255 — это 100%.
analogWrite( pin, value );
Пусть теперь программа сначала будет вращать мотор в одну сторону, постепенно увеличивая скорость его вращения. Затем в обратную сторону — также, с плавным ускорением.
const byte in1 = 2;
const byte in2 = 3;
const byte en1 = 5;
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(en1, OUTPUT);
}
void loop() {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
for( byte i=0; i<255; i++){
analogWrite(en1, i);
delay(10);
}
delay(2000);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
for( byte i=0; i<255; i++){
analogWrite(en1, i);
delay(10);
}
delay(2000);
}
Загружаем программу на Arduino и следим за мотором.