Драйвер моторов TB6612FNG
Подключаем моторы через драйвер TB6612FNG и по очереди крутим каждое колесо вперёд и назад.
Как плата с крошечными пинами управляет двумя моторами?
Ты уже знаешь, что пин Arduino даёт всего 20–40 мА, а мотору нужно сотни. В курсе «Электроника» ты крутил мотор через транзистор — но только в одну сторону. А роботу нужно ещё и назад.
Попробуй. В машине урока переключай «переключатели» IN1 и IN2 и смотри, куда течёт ток через мотор и куда крутится колесо.
Что ты заметил? Чтобы мотор крутился в другую сторону, ток через него должен идти наоборот. Для этого нужны четыре «ключа», которые соединяют провода мотора то с плюсом, то с минусом. Такая схема называется H-мост (на рисунке она похожа на букву Н).
В маленькой микросхеме TB6612FNG спрятаны сразу два H-моста — для левого и правого мотора. Каждым управляют три пина:
| IN1 | IN2 | Мотор |
|---|---|---|
| HIGH | LOW | вперёд |
| LOW | HIGH | назад |
| LOW | LOW | свободный стоп |
А пин PWM задаёт силу: analogWrite(пин, 0..255).
Питание у драйвера двойное: VM — «сильное» питание моторов от батареек, VCC — «слабое» 5 В от Arduino для логики. И главное правило: GND у всех общий.
- • Плата Arduino Uno + USB-кабель × 1
- • Робот, собранный в прошлых уроках × 1
- • Драйвер моторов TB6612FNG (модуль) × 1
- • Мини-макетная плата 170 точек × 1 — приклей на верхнюю палубу
- • Провода «папа-папа» × 14
- • Батарейный отсек 6×AA и батарейки × 1
- • Стойки М3 и винты для верхней палубы × 4
- 1Прикрути Arduino на верхнюю палубу (или на стойки над отсеком) и приклей рядом мини-макетку. Вставь в неё драйвер так, чтобы ряды его ножек были по разные стороны от центральной канавки.
- 2Батарейки вынуты, выключатель — OFF. Провода левого мотора → AO1 и AO2, правого → BO1 и BO2.
- 3Управление: PWMA → пин 5, AIN1 → 7, AIN2 → 8; PWMB → пин 6, BIN1 → 9, BIN2 → 10.
- 4Логика: VCC → 5V Arduino, STBY → 5V (так драйвер всегда «проснулся»), GND драйвера → GND Arduino.
- 5Питание: «+» батарейного отсека (после выключателя) → VM драйвера и VIN Arduino. «−» отсека → GND. Теперь робот сможет ездить без USB.
- 6Поставь робота на подставку (коробку, катушку скотча), чтобы колёса висели в воздухе.
- 7Загрузи скетч по USB, вставь батарейки и включи выключатель. Смотри и сверяй с монитором порта: какое колесо и куда крутится.
- 8Если колесо крутится назад, когда в мониторе написано «вперёд», — поменяй местами два провода этого мотора в клеммах AO1/AO2 (или BO1/BO2). В программе ничего менять не надо.
// Урок 2. Проверяем драйвер TB6612FNG: каждое колесо по очереди
// Левый мотор — канал A, правый — канал B. STBY драйвера соединён с 5V.
const int PWMA = 5, AIN1 = 7, AIN2 = 8; // левый мотор
const int PWMB = 6, BIN1 = 9, BIN2 = 10; // правый мотор
const int SPEED = 150; // скорость 0..255 (больше 170 не ставь: моторы на 6 В)
// Один мотор: speed > 0 — вперёд, speed < 0 — назад, 0 — стоп
void motor(int pwm, int in1, int in2, int speed) {
if (speed > 0) {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
} else if (speed < 0) {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
} else {
digitalWrite(in1, LOW); // оба LOW — мотор свободно останавливается
digitalWrite(in2, LOW);
}
analogWrite(pwm, abs(speed)); // ШИМ задаёт силу
}
void setup() {
Serial.begin(9600);
int pins[] = {PWMA, AIN1, AIN2, PWMB, BIN1, BIN2};
for (int i = 0; i < 6; i++) pinMode(pins[i], OUTPUT);
delay(2000); // 2 секунды, чтобы поставить робота на подставку
}
void loop() {
Serial.println("Левое колесо вперёд");
motor(PWMA, AIN1, AIN2, SPEED); delay(1500);
motor(PWMA, AIN1, AIN2, 0); delay(500);
Serial.println("Левое колесо назад");
motor(PWMA, AIN1, AIN2, -SPEED); delay(1500);
motor(PWMA, AIN1, AIN2, 0); delay(500);
Serial.println("Правое колесо вперёд");
motor(PWMB, BIN1, BIN2, SPEED); delay(1500);
motor(PWMB, BIN1, BIN2, 0); delay(500);
Serial.println("Правое колесо назад");
motor(PWMB, BIN1, BIN2, -SPEED); delay(1500);
motor(PWMB, BIN1, BIN2, 0); delay(2000);
}💡 Безопасность. Все провода переключай только при выключенном выключателе. Батарейки — 6 штук одного типа и одной свежести, не смешивай старые с новыми. Никогда не соединяй «+» и «−» отсека напрямую: батарейки сильно нагреются. Если драйвер стал горячим — выключи питание и проверь, не перепутаны ли VM и GND. Наши моторы рассчитаны на 3–6 В, а отсек даёт 9 В, поэтому скорость в программах не выше 170 из 255.
Вызов
Добавь в loop() пятый шаг: оба колеса одновременно вперёд на 2 секунды. Что сделает робот, если поставить его на пол?