Управление направлением и H-мост

Вперёд крутиться научились. А как назад? Ответ — в гениально простой схеме из четырёх переключателей под названием H-мост.

Чтобы мотор крутился в обе стороны, нужно уметь менять полярность на его выводах местами. Делает это H-мост — сердце любого драйвера моторов.

Сейчас разберём, как одно и то же колесо едет вперёд и назад, меняя лишь сигналы на двух пинах. Без этого нет ни машинки, ни робота, который умеет разворачиваться.

Идея H-моста

        +V                         +V
        |                          |
      [S1]      [S2]             [S1]X     X[S2]
        |        |                 |          |
        +--MOTOR-+                 +--MOTOR---+
        |        |                 |          |
      [S3]      [S4]             X[S3]      [S4]X
        |        |                 |          |
       GND      GND               GND        GND

   ВПЕРЁД: S1 и S4 замкнуты    НАЗАД: S2 и S3 замкнуты
   ток идёт слева-направо       ток идёт справа-налево

Четыре «ключа» (транзистора) образуют букву H, мотор — перекладина. Замкнёшь одну диагональ (S1+S4) — ток течёт в одну сторону; другую (S2+S3) — в обратную. Микросхема L298N содержит готовый H-мост, тебе нужно лишь подать сигналы на два пина направления.

Код с L298N

const int IN1 = 7;   // направление
const int IN2 = 8;   // направление
const int ENA = 9;   // скорость (ШИМ)

void setup() {
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(ENA, OUTPUT);
}

void forward(int speed) {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  analogWrite(ENA, speed);
}

void backward(int speed) {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  analogWrite(ENA, speed);
}

void stopMotor() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
}

void loop() {
  forward(200);  delay(2000);
  stopMotor();   delay(500);
  backward(200); delay(2000);
  stopMotor();   delay(500);
}

Как работает под капотом

IN1 и IN2 управляют диагоналями H-моста. IN1=HIGH, IN2=LOW — вперёд; наоборот — назад; оба LOW — стоп. Пин ENA с ШИМ задаёт скорость, открывая ключи «не до конца», а порциями. Критично важно: нельзя замыкать оба ключа одной стороны (например, S1 и S3 вместе) — это короткое замыкание питания через мост («сквозной ток»). Поэтому IN1 и IN2 никогда не ставят в HIGH одновременно.

# Та же логика на Python: сигналы IN1/IN2 -> поведение мотора
def motor_state(in1, in2):
    if in1 and not in2:
        return "ВПЕРЁД"
    if in2 and not in1:
        return "НАЗАД"
    if not in1 and not in2:
        return "СТОП (свободный ход)"
    return "ОПАСНО: короткое замыкание моста!"

for in1, in2 in [(1,0),(0,1),(0,0),(1,1)]:
    print(f"IN1={in1} IN2={in2} ->", motor_state(in1, in2))

Запусти — комбинация (1,1) подсвечивается как опасная. Этот случай драйвер обычно блокирует, но понимать его нужно.

Частые ошибки

  • Ставят IN1 и IN2 в HIGH одновременно. Логически — короткое замыкание моста. Всегда ровно один HIGH.
  • Меняют направление на полном ходу резко. Бросок тока. Лучше: стоп → пауза → реверс.
  • Забыли подать питание на ENA или снять перемычку — мотор не крутится, хотя направление задано.

Best practices

  • Вынеси forward / backward / stop в отдельные функции — код машинки станет читаемым.
  • Перед сменой направления делай короткий стоп с паузой — бережёт мотор и драйвер.
  • Для двух моторов (левый и правый) повтори схему дважды — и получишь поворотную платформу.

Машинка: два мотора и повороты

Как только ты умеешь крутить один мотор вперёд и назад, до колёсного робота остаётся один шаг: поставить два мотора — левый и правый — и управлять ими независимо. Драйвер L298N как раз рассчитан на два мотора: у него два набора входов (IN1/IN2 и IN3/IN4) и два ENA/ENB для скорости. Дальше всё сводится к простой логике поворотов, и её удобно прогнать в голове или на бумаге, прежде чем заливать в железо.

Логика движения такая: оба вперёд — едем прямо; оба назад — задний ход; левый вперёд, правый назад — разворот на месте вправо; разные скорости на колёсах — плавный поворот по дуге. Это называется дифференциальное управление, и так ездят почти все простые роботы и даже гусеничная техника. Добавь к этому ультразвуковой датчик спереди — и машинка сможет сама объезжать препятствия. Все кирпичики у тебя уже есть; остаётся собрать их в одну программу.

Итоги

H-мост — четыре ключа буквой H; замыкая разные диагонали, он гонит ток мотора туда или обратно. IN1/IN2 задают направление (никогда оба HIGH!), ENA — скорость. Ты управляешь моторами по-взрослому. Пора собрать всё в финальном разделе — своём устройстве со связью с компьютером.

Проверьте себя
1. Что физически делает H-мост для реверса мотора?
AМеняет напряжение питания
BМеняет местами полярность на выводах мотора через диагонали ключей
CУскоряет процессор
DДобавляет сопротивление
2. Почему опасно подавать HIGH на IN1 и IN2 одновременно?
AМотор поедет слишком быстро
BВозникает короткое замыкание (сквозной ток) через мост
CСядет батарейка
DНичего не произойдёт