Управление двумя двигателями модулем L298N с Arduino (обучение работе с Proteus)
В этой статье показан способ управления двумя моторами с использованием Arduino и драйвера L298N.
Проект создан специально для обучения работе с симулятором Proteus и демонстрирует управление двигателями в трёх режимах: вперёд, назад и стоп с использованием трёх кнопок.
Скетч реализует управление скоростью и направлением вращения двух моторов через модуль L298N и три кнопки. Проект помогает понять, как Arduino взаимодействует с внешними исполнительными устройствами, реализуя базовые алгоритмы движения.
Назначение проекта
Цель проекта — показать, как можно управлять двигателями постоянного тока через драйвер L298N, используя простые элементы управления:
- три кнопки для выбора режима работы (вперёд, назад, стоп);
- правильное использование цифровых выходов для управления направлением вращения;
- создание безопасной логики остановки моторов при необходимости.
Такой подход используется в робототехнике, автоматике и учебных стендах для изучения управления двигателями постоянного тока через Arduino.
Используемые компоненты
- Arduino UNO;
- Драйвер моторов L298N;
- Два двигателя постоянного тока;
- Три кнопки;
- Proteus 8 или 9 с поддержкой Arduino.
Принцип работы программы
В проекте три кнопки подключены к цифровым входам Arduino с использованием INPUT_PULLUP, что упрощает схему и исключает необходимость внешних подтягивающих резисторов.
Алгоритм работы прост и эффективен:
- Нажатие кнопки «вперёд» включает оба мотора на заданной скорости и направлении;
- Нажатие кнопки «назад» меняет направление вращения моторов;
- Нажатие кнопки «стоп» останавливает оба мотора мгновенно;
Организация кода
Программа разделена на три отдельные функции:
- motor_maju() — движение вперёд;
- motor_mundur() — движение назад;
- motor_stop() — остановка двигателей.
Главный цикл loop() проверяет состояние кнопок и вызывает соответствующую функцию. Использование отдельной функции для каждого режима облегчает чтение кода и его модификацию.
Arduino-скетч
//pin arduino ke module L298N
#define enA 10
#define in1 9
#define in2 8
#define in3 7
#define in4 6
#define enB 5
//tombol kontrol
#define btn_fwd 4
#define btn_bkwd 3
#define btn_stop 2
//nilai pwm (kecepatan putar)
int kecepatan=255;
void setup() {
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(btn_fwd, INPUT_PULLUP);
pinMode(btn_bkwd, INPUT_PULLUP);
pinMode(btn_stop, INPUT_PULLUP);
motor_stop();
delay(500);
}
void loop() {
//tombol maju ditekan
if(!digitalRead(btn_fwd)){
motor_maju();
}
//tombol mundur ditekan
if(!digitalRead(btn_bkwd)) {
motor_mundur();
}
//tombol stop ditekan
if (!digitalRead(btn_stop)) {
motor_stop();
}
}
void motor_maju(){
analogWrite (enA, kecepatan);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
analogWrite (enB, kecepatan);
}
void motor_mundur(){
analogWrite (enA, kecepatan);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite (enB, kecepatan);
}
void motor_stop(){
//kecepatan=0
analogWrite (enA, 0);
analogWrite (enB, 0);
}
Работа проекта в Proteus
В симуляции Proteus нажатие кнопок приводит к мгновенному изменению направления или остановке моторов. Проект позволяет визуально наблюдать работу драйвера L298N и динамику изменения состояния моторов. Arduino подключать к компьютеру не требуется — вся работа выполняется внутри симулятора.
Запуск проекта в Proteus
- распакуйте архив с проектом;
- откройте файл .pdsprj;
- проверьте путь к файлу .hex в свойствах Arduino;
- нажмите Run Simulation;
- нажимайте кнопки и наблюдайте работу двигателей в трёх режимах.
Если что-то не работает
Если возникают проблемы с запуском проекта или непонятен принцип работы, рекомендуется пройти базовый урок по Proteus.
Подробно разобран первый проект в Proteus:
Первый проект в Proteus — мигание светодиода