Início›Motor DC
⬤ Motor Driver · Fundamentos

⚙️ Motor DC — Direção e Velocidade

⏱️ 25 min📚 AFMotor · H-bridge · PWM · Rampa de aceleração

Nesta página

🔌 Como Funciona o H-Bridge L293D

O L293D contém dois H-bridges — 4 transistores por canal que permitem inverter a polaridade da tensão no motor. A velocidade é controlada por PWM no pino de enable.

IN1 (D4)IN2 (D8)Estado do motorAFMotor
HIGHLOWFORWARD (frente)motor.run(FORWARD)
LOWHIGHBACKWARD (trás)motor.run(BACKWARD)
LOWLOWBRAKE (travagem rápida)motor.run(BRAKE)
——RELEASE (motor livre)motor.run(RELEASE)
ℹ️
BRAKE curto-circuita os terminais — o motor para rapidamente. RELEASE desliga a corrente — o motor gira por inércia até parar. Para robôs, BRAKE é mais preciso.

📦 Biblioteca AFMotor — Referência

afmotor_ref.ino
#include <AFMotor.h>

// Canais: 1 = M1 (D3,D4,D8) | 2 = M2 (D11,D7,D2)
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);

motor1.setSpeed(200);    // 0 = parado | 255 = máximo
motor1.run(FORWARD);    // FORWARD | BACKWARD | BRAKE | RELEASE

🔄 Controlo de Direção com LCD

motor_direcao.ino
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <AFMotor.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);
AF_DCMotor motor(1);

void estadoLCD(const char* dir, int spd) {
  lcd.setCursor(0,1); lcd.print("Dir: "); lcd.print(dir); lcd.print("       ");
  lcd.setCursor(0,2); lcd.print("Vel: "); lcd.print(spd); lcd.print("/255  ");
}

void setup() {
  lcd.init(); lcd.backlight();
  lcd.setCursor(0,0); lcd.print("Motor DC Canal 1");
  motor.setSpeed(200);
}

void loop() {
  motor.run(FORWARD);  estadoLCD("FORWARD",  200); delay(2500);
  motor.run(BRAKE);    estadoLCD("BRAKE",    0);   delay(800);
  motor.run(BACKWARD); estadoLCD("BACKWARD", 200); delay(2500);
  motor.run(RELEASE);  estadoLCD("RELEASE",  0);   delay(800);
}

📈 Rampa de Velocidade

motor_rampa.ino
void rampa(AF_DCMotor& m, int vI, int vF, int ms) {
  int passos = abs(vF-vI);
  int espera  = passos > 0 ? ms/passos : ms;
  int d       = vF > vI ? 1 : -1;
  for(int v=vI; v!=vF; v+=d) {
    m.setSpeed(v);
    lcd.setCursor(5,2); lcd.print(v); lcd.print("   ");
    delay(espera);
  }
  m.setSpeed(vF);
}

void loop() {
  motor.run(FORWARD);
  rampa(motor, 0,   220, 2000); delay(1000);
  rampa(motor, 220, 0,   2000);
  motor.run(RELEASE); delay(500);
}

🖥️ Dashboard no LCD

Motor DC PR.FT9_Dir: FORWARD Vel: 200/255 PWM:78Estado: A FUNCIONAR

🏆 Para ir mais longe

PR.FT9_5 · LCD 20×4 · L293D Motor Driver · Arduino UNO Rev3 · Início · led.dge.medu.pt