Controlling DC Motors

FORGET EVERYTHING!! Ok I have 2 motors DC that´ll work at 9V (inputs) controlled from the pins of the Arduino and the integrated circuit LM293D (throughole version). The Arduino will run this code: //Motor1 int IN1 = 9; int IN2 = 8; int ENA1 = 10; // Motor 2 int IN4 = 6; int IN3 = 5; int ENA2 = 3; int speedmotor = 127; //1=Hacia delante, 2=Hacia atrás, 3=Giro izquierdas, 4=Giro derechas int movimiento = 0; int movAnterior = -1; bool estado = true;
//Bluetooth(incluir libreria y softwareserial)
void setup() { Serial.begin(9600); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(ENA1, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); pinMode(ENA2, OUTPUT); //Se imprime un texto cada vez que se conecte Serial.println("CONTROL INALAMBRICO CONECTADO "); } void loop() { if(Serial.available()){ //Digo al Arduino que lea si el valor almacenado es mayor a 0 movimiento = Serial.parseInt(); //devuelve un numero entero y lo soobreescribe en la variable de movimiento } if(movimiento != movAnterior){ movAnterior = movimiento;
if(movimiento == 0){ Serial.println("Coche Detenido"); digitalWrite(IN1, 0); digitalWrite(IN2, 0); digitalWrite(IN3, 0); digitalWrite(IN4, 0); analogWrite(ENA1, 0); analogWrite(ENA2, 0); estado = true; } if(movimiento == 1){ Serial.println("Ir hacia adelante: "+String(speedmotor)); digitalWrite(IN1, 1); digitalWrite(IN2, 0); digitalWrite(IN3, 0); digitalWrite(IN4, 1); analogWrite(ENA1, speedmotor); analogWrite(ENA2, speedmotor); estado = true; } else if(movimiento == 2){ Serial.println("Ir hacia atras: "+String(speedmotor)); digitalWrite(IN1, 0); digitalWrite(IN2, 1); digitalWrite(IN3, 1); digitalWrite(IN4, 0); analogWrite(ENA1, speedmotor); analogWrite(ENA2, speedmotor); estado = true; } else if(movimiento == 3){ Serial.println("Girar hacia la derecha: "+String(speedmotor)); digitalWrite(IN1, 1); digitalWrite(IN2, 0); digitalWrite(IN3, 1); digitalWrite(IN4, 0); analogWrite(ENA1, speedmotor); analogWrite(ENA2, 0); estado = true; } else if(movimiento == 4){ Serial.println("Girar hacia la izquierda: "+String(speedmotor)); digitalWrite(IN1, 0); digitalWrite(IN2, 1); digitalWrite(IN3, 0); digitalWrite(IN4, 1); analogWrite(ENA1, 0); analogWrite(ENA2, speedmotor); estado = true; } Serial.println("movimiento: "+String(movimiento)); if(movimiento == 5 && estado == true){ Serial.println("speedmotor antes de cambiar: "+String(speedmotor)); speedmotor = speedmotor - 50; speedmotor = constrain(speedmotor, 10, 255); Serial.println("speedmotor despues de cambiar: "+String(speedmotor)); analogWrite(ENA1, speedmotor); analogWrite(ENA2, speedmotor); delay(500); estado = false; } else if(movimiento == 6 && estado == true){ Serial.println("speedmotor antes de cambiar: "+String(speedmotor)); speedmotor = speedmotor + 50; speedmotor = constrain(speedmotor, 10, 255); Serial.println("speedmotor despues de cambiar: "+String(speedmotor)); analogWrite(ENA2, speedmotor); analogWrite(ENA1, speedmotor); delay(500); estado = false; } delay(1000);
} } It is design to run bassed on a 9V 2100mAh battery. There will also be a bluetooth model (HC-04) that will be connected to a mobile phone that through an APP will send the respective number (1 or 2 or 3... depending on what the user want to do at that moment) put all the respective resistors and capacitors that you consider necessary but everything throughole please
He actualizado el esquema para tu robot con Arduino Uno + L293D DIP + 2 motores DC a 9 V + Bluetooth HC-05.
Hecho:
  • L293D rewired para tu código:
    • Motor 1: D9 → IN1, D8 → IN2, D10 → ENA1/PWM
    • Motor 2: D5 → IN3, D6 → IN4, D3 → ENA2/PWM
  • VCC2 del L293D ahora va al rail de 9 V, no a 5 V.
  • Añadí entrada de batería de 9 V, capacitores through-hole, HC-05 y divisor resistivo para RX del Bluetooth.
  • Actualicé la documentación:
Estado de verificación:
  • La revisión eléctrica y de fabricación no mostró errores.
  • Queda pendiente revisar/limpiar DRC de layout porque añadí componentes nuevos through-hole y todavía habría que colocarlos físicamente en la PCB y rutearlos.
Nota importante: verifica que cada motor no supere aprox. 600 mA continuos con el L293D. Si los motores consumen más, conviene cambiar a un driver más potente.
Auto-place components
Run ERC/DRC
Add terminals
Check motor current

Refine this doc
Ask about this doc
Firmware — Arduino Uno + HC-05 + L293D
Plataforma
  • Placa: Arduino Uno.
  • IDE: Arduino IDE o PlatformIO.
  • Bluetooth: HC-05 en modo SPP serie a 9600 baud.
  • Driver motores: L293D DIP-16.
  • Alimentación: batería de 9 V al rail VMOT_9V / VIN; lógica desde el Arduino.
Mapa de pines real del esquema

Table


Función del códigoPin ArduinoConexión en L293D / móduloDirección
IN1 motor 1D9U1 1ASalida digital
IN2 motor 1D8U1 2ASalida digital
ENA1 motor 1 PWMD10U1 EN1,2Salida PWM
IN3 motor 2D5U1 3ASalida digital
IN4 motor 2D6U1 4ASalida digital
ENA2 motor 2 PWMD3U1 EN3,4Salida PWM
Bluetooth TXD0/RXBT1 UART-TXEntrada serie Arduino
Bluetooth RXD1/TX por R1/R2BT1 UART-RXSalida serie Arduino con divisor
PlatformIO opcional

Ini


[env:uno]
platform = atmelavr
board = uno
framework = arduino
monitor_speed = 9600
Código completo Arduino
Este código coincide con el sketch proporcionado y con el cableado actual del esquema.

Cpp


// Motor 1
int IN1 = 9;
int IN2 = 8;
int ENA1 = 10;

// Motor 2
int IN4 = 6;
int IN3 = 5;
int ENA2 = 3;

int speedmotor = 127;

// 1 = Hacia delante, 2 = Hacia atras, 3 = Giro derechas, 4 = Giro izquierdas
int movimiento = 0;
int movAnterior = -1;
bool estado = true;

void setup()
{
  Serial.begin(9600); // HC-05 normalmente trabaja a 9600 baud en modo datos

  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(ENA1, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(ENA2, OUTPUT);

  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
  analogWrite(ENA1, 0);
  analogWrite(ENA2, 0);

  Serial.println("CONTROL INALAMBRICO CONECTADO ");
}

void loop()
{
  if (Serial.available()) {
    movimiento = Serial.parseInt();
  }

  if (movimiento != movAnterior) {
    movAnterior = movimiento;

    if (movimiento == 0) {
      Serial.println("Coche Detenido");
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, LOW);
      analogWrite(ENA1, 0);
      analogWrite(ENA2, 0);
      estado = true;
    }
    else if (movimiento == 1) {
      Serial.println("Ir hacia adelante: " + String(speedmotor));
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, HIGH);
      analogWrite(ENA1, speedmotor);
      analogWrite(ENA2, speedmotor);
      estado = true;
    }
    else if (movimiento == 2) {
      Serial.println("Ir hacia atras: " + String(speedmotor));
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, HIGH);
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);
      analogWrite(ENA1, speedmotor);
      analogWrite(ENA2, speedmotor);
      estado = true;
    }
    else if (movimiento == 3) {
      Serial.println("Girar hacia la derecha: " + String(speedmotor));
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);
      analogWrite(ENA1, speedmotor);
      analogWrite(ENA2, 0);
      estado = true;
    }
    else if (movimiento == 4) {
      Serial.println("Girar hacia la izquierda: " + String(speedmotor));
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, HIGH);
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, HIGH);
      analogWrite(ENA1, 0);
      analogWrite(ENA2, speedmotor);
      estado = true;
    }

    Serial.println("movimiento: " + String(movimiento));

    if (movimiento == 5 && estado == true) {
      Serial.println("speedmotor antes de cambiar: " + String(speedmotor));
      speedmotor = speedmotor - 50;
      speedmotor = constrain(speedmotor, 10, 255);
      Serial.println("speedmotor despues de cambiar: " + String(speedmotor));
      analogWrite(ENA1, speedmotor);
      analogWrite(ENA2, speedmotor);
      delay(500);
      estado = false;
    }
    else if (movimiento == 6 && estado == true) {
      Serial.println("speedmotor antes de cambiar: " + String(speedmotor));
      speedmotor = speedmotor + 50;
      speedmotor = constrain(speedmotor, 10, 255);
      Serial.println("speedmotor despues de cambiar: " + String(speedmotor));
      analogWrite(ENA2, speedmotor);
      analogWrite(ENA1, speedmotor);
      delay(500);
      estado = false;
    }

    delay(1000);
  }
}
Carga y prueba
  1. Para cargar el sketch por USB, desconecta temporalmente el HC-05 de D0/D1 si la carga falla, porque comparte el puerto serie del Arduino Uno.
  2. Empareja el HC-05 desde el móvil. PIN típico: 1234 o 0000.
  3. La app debe enviar números enteros: 0 parar, 1 adelante, 2 atrás, 3 giro derecha, 4 giro izquierda, 5 bajar velocidad, 6 subir velocidad.
Advertencias
  • Verifica que cada motor tenga corriente de bloqueo menor que el límite del L293D. Si supera aproximadamente 600 mA por motor en uso continuo, usa un driver más potente.
  • El L293D tiene caída de tensión interna alta, así que los motores recibirán menos que 9 V bajo carga.
  • Una pila rectangular de 9 V puede quedarse corta para motores; un pack AA o batería recargable de más corriente suele funcionar mejor.

    Plataforma

    Mapa de pines real del esquema

    PlatformIO opcional

    Código completo Arduino

    Carga y prueba

    Advertencias

Documents

    Notas de diseño — Puente H Arduino Bluetooth

    Firmware — Arduino Uno + HC-05 + L293D

    Motor Driver 9 V Design Notes

Assets

Assets are files uploaded to this project which can be used in various ways.

USB-C ESP32 Environmental Node thumbnail
Low-power USB-C environmental sensor node using a dual-radio Wi‑Fi/BLE MCU, digital temperature/humidity sensing, protected 5 V USB-C input, and 3.3 V regulation for consumer use.

Properties

Properties describe core aspects of the project.

Pricing & Availability

Distributor

Qty 1

Arrow

$8.95–$13.35

Digi-Key

$13.19

HQonline

$4.36

LCSC

$1.46–$5.43

Mouser

$15.55

TME

$6.16

Verical

$5.17–$10.17

Controls