
Интернет-магазин «Неглупый Дом»
L9110S — компактный двухканальный драйвер, заметно меньше уже разобранного на сайте L298N, рассчитанный на небольшие маломощные DC-моторы или униполярные шаговые двигатели. В этом проекте каждое нажатие кнопки меняет направление вращения подключённого мотора на противоположное.
L9110S содержит два независимых H-моста на одной маленькой плате — простые электронные схемы, каждая из которых может подать на мотор напряжение в одной из двух полярностей (или ничего), управляясь парой логических сигналов. Для вращения в одну сторону подаётся HIGH на один управляющий вход и LOW на другой, для вращения в обратную сторону — наоборот; одновременный HIGH или одновременный LOW на обоих входах останавливает мотор (короткое замыкание через мотор в режиме торможения или свободного вращения, в зависимости от конкретной комбинации).
В отличие от уже разобранного на сайте L298N (который может управлять более мощными моторами, но физически крупнее и имеет отдельный вход ШИМ для скорости), L9110S проще и компактнее, но рассчитан на заметно меньший ток — для небольших моторчиков в хобби-проектах (мини-вентиляторы, маленькие модели) этого более чем достаточно.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему. Небольшой DC-мотор
// не входит в комплект — подключается к выходным клеммам драйвера.
const int IA = 2;
const int IB = 3;
const int BUTTON_PIN = 4;
bool forward = true;
bool lastButtonState = HIGH;
void setMotorDirection(bool goForward) {
digitalWrite(IA, goForward ? HIGH : LOW);
digitalWrite(IB, goForward ? LOW : HIGH);
}
void setup() {
Serial.begin(9600);
pinMode(IA, OUTPUT);
pinMode(IB, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
setMotorDirection(forward);
}
void loop() {
bool buttonState = digitalRead(BUTTON_PIN);
if (lastButtonState == HIGH && buttonState == LOW) { // поймали момент нажатия
forward = !forward;
setMotorDirection(forward);
Serial.println(forward ? "Вперёд" : "Назад");
delay(50); // простая защита от дребезга контактов кнопки
}
lastButtonState = buttonState;
}
Дополнительных библиотек не требуется — только `digitalWrite()` и `digitalRead()`. Код реагирует именно на момент нажатия (переход HIGH→LOW), а не на удержание кнопки — направление меняется один раз за одно нажатие, а не постоянно пока кнопка зажата.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 137 ₽ 123 ₽ (экономия 14 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.