Início›DC PWM
⬤ Motor DC · Iniciante

📈 Motor DC — Controlo de Velocidade

⏱️ 25 min🧩 setSpeed() · PWM · analogRead() · Potenciómetro

Nesta página

📈 PWM e setSpeed()

ℹ️
setSpeed(v) define o duty cycle do PWM no enable do L293D: 0 = parado, 255 = máximo. A velocidade real depende do motor e da carga.
ex_dc_pwm.ino
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <AFMotor.h>

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

void setup() {
  lcd.init(); lcd.backlight();
  motor.run(FORWARD);
  lcd.setCursor(0,0); lcd.print("Motor DC: PWM");
  lcd.setCursor(0,1); lcd.print("Vel: ");
  lcd.setCursor(0,2); lcd.print("PWM: ");
}

void loop() {
  for(int v=0; v<=255; v+=5) {
    motor.setSpeed(v);
    lcd.setCursor(5,1); lcd.print(v);    lcd.print("   ");
    lcd.setCursor(5,2); lcd.print(v*100/255); lcd.print(" %  ");
    delay(30);
  }
  for(int v=255; v>=0; v-=5) {
    motor.setSpeed(v);
    lcd.setCursor(5,1); lcd.print(v); lcd.print("   ");
    delay(30);
  }
}

🎛️ Controlo Manual com Potenciómetro

ex_dc_pot.ino
#define POT A0
int ultV = -1;

void loop() {
  int raw = analogRead(POT);
  int vel = map(raw, 0, 1023, 0, 255);
  if(abs(vel-ultV) > 2) {   // zona morta de 2
    motor.setSpeed(vel);
    lcd.setCursor(0,1); lcd.print("Pot:");lcd.print(raw);lcd.print("  V:");lcd.print(vel);lcd.print("  ");
    ultV = vel;
  }
  delay(50);
}

☀️ Velocidade por Luminosidade (LDR)

ex_dc_ldr.ino
#define LDR A1
void loop() {
  int ldr = analogRead(LDR);
  int vel = map(ldr, 0, 1023, 50, 255);
  motor.setSpeed(vel);
  lcd.setCursor(0,0); lcd.print("LDR:");lcd.print(ldr);
  lcd.setCursor(0,1); lcd.print("Vel:");lcd.print(vel);
  delay(100);
}

🏆 Para ir mais longe

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