Учи_новое
← 🤖 Робот-машинкаУрок 2 из 8 · 15 мин

Драйвер моторов 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. 1Прикрути Arduino на верхнюю палубу (или на стойки над отсеком) и приклей рядом мини-макетку. Вставь в неё драйвер так, чтобы ряды его ножек были по разные стороны от центральной канавки.
  2. 2Батарейки вынуты, выключатель — OFF. Провода левого мотора → AO1 и AO2, правого → BO1 и BO2.
  3. 3Управление: PWMA → пин 5, AIN1 → 7, AIN2 → 8; PWMB → пин 6, BIN1 → 9, BIN2 → 10.
  4. 4Логика: VCC → 5V Arduino, STBY → 5V (так драйвер всегда «проснулся»), GND драйвера → GND Arduino.
  5. 5Питание: «+» батарейного отсека (после выключателя) → VM драйвера и VIN Arduino. «−» отсека → GND. Теперь робот сможет ездить без USB.
  6. 6Поставь робота на подставку (коробку, катушку скотча), чтобы колёса висели в воздухе.
  7. 7Загрузи скетч по USB, вставь батарейки и включи выключатель. Смотри и сверяй с монитором порта: какое колесо и куда крутится.
  8. 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 секунды. Что сделает робот, если поставить его на пол?

🧠 Проверь себя
1. Как называется схема, которая крутит мотор в обе стороны?
2. AIN1 = LOW, AIN2 = HIGH. Что делает левый мотор?
3. Зачем соединять GND батареек, драйвера и Arduino?
← Шасси и моторы-редукторы