🛒
0 товар.
0 руб.
Логотип

Интернет-магазин «Неглупый Дом»

☰
ИИ-консультант Wildberries OZON Яндекс Маркет
Поиск по сайту
Гугл таблица с ассортиментом

⚙️ Проект: регулятор скорости и направления DC-мотора на L298N с потенциометром

L298N — драйвер для коллекторных DC-моторов, а обычный потенциометр становится "ручкой газа": поворот меняет скорость, кнопка — направление вращения.

Как это работает

DC-мотору достаточно постоянного напряжения, но Arduino не даёт нужный ток и не меняет полярность сама. L298N решает обе задачи: H-мост по IN1/IN2 задаёт направление, а ENA через ШИМ задаёт среднюю мощность на моторе.

Потенциометр — делитель напряжения: средний вывод даёт 0-5V пропорционально повороту. `analogRead()` даёт 0-1023, `map()` переводит это в 0-255 для `analogWrite()` на ENA.

Пошаговая сборка

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

  1. L298N: IN1 → D8, IN2 → D7, ENA → D9 (пин с ШИМ), 12V/GND модуля → отдельный источник питания мотора, OUT1/OUT2 → мотор.
  2. Логическое питание 5V можно взять с Arduino при соответствующем джампере на плате драйвера.
  3. Потенциометр: средний вывод → A0, крайние → 5V и GND.
  4. Кнопка направления: один вывод → D2, второй → GND (INPUT_PULLUP).
  5. Соедините все GND (Arduino, питание мотора, L298N) в одной точке.

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, я языковая
// модель, а не специализированный кодер, могу что-то упустить.

const int IN1 = 8;
const int IN2 = 7;
const int ENA = 9;
const int POT_PIN = A0;
const int DIR_BTN = 2;

bool forward = true;
bool lastBtnState = HIGH;

void setup() {
  Serial.begin(9600);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(ENA, OUTPUT);
  pinMode(DIR_BTN, INPUT_PULLUP);
}

void applyDirection() {
  digitalWrite(IN1, forward ? HIGH : LOW);
  digitalWrite(IN2, forward ? LOW : HIGH);
}

void loop() {
  bool btnState = digitalRead(DIR_BTN);
  if (btnState == LOW && lastBtnState == HIGH) {
    forward = !forward;
    applyDirection();
    delay(200);
  }
  lastBtnState = btnState;

  int potValue = analogRead(POT_PIN);
  int speed = map(potValue, 0, 1023, 0, 255);
  analogWrite(ENA, speed);
  Serial.println(speed);
  delay(50);
}
                

Дополнительные библиотеки не нужны. Если мотор не крутится — проверьте силовое питание 12V на модуле, не только логическое 5V.

Частые проблемы

Как улучшить проект

Товары по теме

Ещё модули для Arduino: Электронные модули.

← 📻 FM-радиоприёмник на RDA5807M с…🔀 опрос нескольких аналоговых да… →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу: 264 ₽ 238 ₽ (экономия 26 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина

Поиск


Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA