
Интернет-магазин «Неглупый Дом»
L298N — классический двухканальный драйвер для коллекторных DC-моторов, а обычный потенциометр в этом проекте превращается в плавную "ручку газа": поворот влево-вправо меняет скорость мотора, а отдельная кнопка переключает направление вращения.
Коллекторному DC-мотору для вращения достаточно просто подать на него постоянное напряжение — но Arduino не может напрямую дать мотору нужный ток, да и не умеет быстро менять полярность. L298N решает обе задачи: внутри него H-мост из силовых транзисторов, который по сигналам IN1/IN2 определяет полярность на выходе (а значит, направление вращения), а вход ENA через ШИМ (PWM) управляет средней мощностью, подаваемой на мотор — чем выше процент времени, когда ШИМ-сигнал "включён", тем быстрее крутится мотор.
Потенциометр — это просто делитель напряжения: его средний вывод выдаёт напряжение от 0 до опорного (5V), пропорциональное углу поворота ручки. Функция `analogRead()` переводит это напряжение в число от 0 до 1023, а `map()` пересчитывает это число в диапазон 0-255, понятный для `analogWrite()` на пине ENA.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
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();
Serial.println(forward ? "Направление: вперёд" : "Направление: назад");
delay(200); // защита от дребезга контактов кнопки
}
lastBtnState = btnState;
int potValue = analogRead(POT_PIN); // 0..1023
int speed = map(potValue, 0, 1023, 0, 255); // переводим в диапазон ШИМ
analogWrite(ENA, speed);
Serial.print("Скорость (0-255): ");
Serial.println(speed);
delay(50);
}
Никаких дополнительных библиотек не требуется — всё управление строится на стандартных `digitalWrite`, `analogWrite` и `analogRead`. Если мотор не крутится — сначала проверьте отдельное питание 12V на модуле, а не только логическое 5V.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 264 ₽ 238 ₽ (экономия 26 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.