jueves, 9 de mayo de 2013

Control de los motores DC con el LN293 o puente H

Utilizando una aplicación Android, Arduino, Módulo Bluetooth y un puente H podemos controlar los motores de nuestro tanque, la App que nosotros utilizamos se llama “Bluetooth RC”, la puedes encontrar en Google Play y es gratuita. Su manejo es intuitivo, al abrir el menú de opciones puedes ver un botón que dice “Info” allí viene la lista de caracteres que “manda” al presionar los botones, estos caracteres son los que el Arduino interpretará para realizar las funciones.


Material:
  • Arduino Uno.
  • Cable para proto.
  • L293.
  • Módulo bluetooth.
  • Dos Motores DC bipolares.
  • Batería (el voltaje depende de los motores que utilices).


Herramientas:
  • Computadora.
  • Dispositivo Android.
  • Pinzas de corte y de punta.
  • Protoboard.



Forward - F
Backward - B
Left - L
Right - R
Forward Left - G
Forward Right - I
Backward Left - H
Backward Right - JStop - S




El Puente H que utilizamos es el LN293, lo puedes conseguir en cualquier tienda de electrónica y cuesta aproximadamente $50 Mexicanos. Este es su diagrama de conexiones:


Para nuestro caso lo conectaremos al Arduino y a los motores de la siguiente manera:


 El código de Arduino está en el siguiente Link: TanqueArduinoBT_good.rar

37 comentarios:

  1. amigo como hago para meterle leds al carro ?

    ResponderEliminar
    Respuestas
    1. a que te refieres, cuando quieres que enciendan? es que no te entendí

      Eliminar
    2. si quiero que prendan varios leds, estuve mirando el código de arduino y al verificar me tira un error 'c' was not declared in this scope

      Eliminar
    3. estás usando el código "TanqueArduinoBluetooth" no?

      prueba con éste https://www.mediafire.com/?rdcwv1nndg4l4ci

      si quierse prender LEDs sólo define más pines como salidas o conecta los más en paralelo
      es que no se como resolver tu duda porque no la entiendo, cuando quieres que prendan esos LEDs? por ejemplo, si quieres que prendan cuando mandas la señal al arduino o que funcionen como luces para el carrito, dime :D

      perdón por tardar en contestar, ando ocupado :P

      Eliminar
  2. amigo yo tengo un puente H L293D, mi pregunta seria que si funciona con este puente H o solo funciona con la referencia que esta en el plano? y/o que otra referencia puedo utilizar?

    ResponderEliminar
    Respuestas
    1. Puedes usar cualquier puente H, la diferencia entre el que tienes y el que está en el diagrama tal vez sea la corriente que puede manejar sin quemarse. El L293 te entrega como 600mA en cada salida.

      Cuando publiqué este post apenas estaba haciendo el carrito y no consideré la corriente que demandaba el motor, al final utilicé un puente H que yo hice con relevadores porque el LN293 no era suficiente y se calentaba mucho.

      Te recomiendo que si vas a hacer un carrito como este uses el L298, te entrega 2A a la salida de cada motor y se conecta masomenos igual, te puedo pasar la oja de datos si quieres :D o puedes hacer un puente H con relevadores, la desventaja es que vas a agotar más rápido la batería pero ya te olvidas de si la corriente es suficiente y bla bla bla (Y)

      Eliminar
    2. https://www.mediafire.com/?401sybrq1pxhbuk

      esa es la hoja de datos del L298N

      Eliminar
  3. la cuestion con los LEDs es que quiero que funcionen como luces del carro

    ResponderEliminar
    Respuestas
    1. ah pues sólo deja un pin del arduino como salida y conectale los LEDs en paralelo. Para controlar esos LEDs con la aplicación sólo fíjate que caracter le manda al arduino al pulsar el botón de las luces e igual que con las demás ordenes, le dices al arduino que cuando reciba ese caracter ponga en HIGH ese pin.

      dentro del switch(c) pon estas dos condiciones, en vez de luces pon el pin que estés utilizando:

      case 'W':
      digitalWrite(luces, HIGH);
      break;
      case 'w':
      digitalWrite(luces, LOW);
      break;

      cualquier duda me dices :D

      Eliminar
  4. Amigo, cuando voy a cargar el cdigo, me genra varios errores?

    ResponderEliminar
  5. estem me podrias ayudar en c=serial.read(); y switch (c)( me puedes ayudar !! ayi :/ porfas

    ResponderEliminar
  6. Hola soy el de arriba estem pues mas bien nose como pornerle en esa parte de c=serial.read(); y switch (c)( me señala error ! y nose que ponerle !! :S casi nose usar el arduino si me pudieras ayudar por favor !!

    ResponderEliminar
  7. Es el que publicaste yo el error que tengo es c=serial.read(); y switch (c)( ayi pero pues no lo quiero con luces coo le ago que show !!ocupo ayudaa ayi .

    ResponderEliminar
    Respuestas
    1. Ya lo compilé y no tiene error sube una captura de pantalla con el error que te aparece
      Tal vez sea que estás cargando el programa con el módulo bluetooth conectado al Arduino, intenta desconectarlo antes de cargar :D
      Si no quieres luces sólo borra esa parte del programa

      Eliminar
  8. Pero La borro de donde inicia el c=serial.read(); y switch (c) desde ayi ???

    ResponderEliminar
    Respuestas
    1. mira me sale un erroor cuando le doy VERIFICAR nose si sea por el bluetooth como me dicas tu no soy muy experto bea pero me suraya con anranjado donde empieza c = Serial.read();desde ayi copy error mensajes dice :s !

      Eliminar
    2. necesito que me pases tu código, así no te puedo ayudar
      pégalo todo en un comentario :D

      Eliminar
    3. int motorA1 = 2;
      int motorA2 = 3;
      int motorR1 = 4;
      int motorR2 = 5;
      int luz = 11;
      int led=13;

      void adelante();
      void reversa();
      void parado();
      void derecha();
      void izquierda();
      void encenderLuz();


      void setup(){
      Serial.begin(9600);
      pinMode(led, OUTPUT);
      pinMode(motorA1, OUTPUT);
      pinMode(motorA2, OUTPUT);
      pinMode(motorR1, OUTPUT);
      pinMode(motorR2, OUTPUT);
      pinMode(luz, OUTPUT);
      }

      void loop(){
      while (Serial.available()) {
      if (Serial.available() >0) {
      c = Serial.read();
      }
      }
      switch(c){
      case 'F':
      adelante();
      break;
      case 'B':
      reversa();
      break;
      case 'S':
      parado();
      break;
      case 'L':
      izquierda();
      break;
      case 'R':
      derecha();
      break;
      case 'G':
      adelanteIzquierda();
      break;
      case 'I':
      adelanteDerecha();
      break;
      case 'H':
      atrasIzquierda();
      break;
      case 'J':
      atrasDerecha();
      break;
      case 'W':
      encenderLuz();
      break;
      case 'w':
      apagarLuz();
      break;
      }
      }

      void adelante(){
      digitalWrite(motorA1,HIGH);
      digitalWrite(motorA2,HIGH);
      digitalWrite(led,HIGH);
      }

      void reversa(){
      digitalWrite(motorR2,HIGH);
      digitalWrite(motorR1,HIGH);
      digitalWrite(led,HIGH);
      }

      void parado(){
      digitalWrite(motorR2,LOW);
      digitalWrite(motorR1,LOW);
      digitalWrite(motorA2,LOW);
      digitalWrite(motorA1,LOW);
      digitalWrite(led,LOW);
      }

      void parado2(){
      digitalWrite(motorR2,LOW);
      digitalWrite(motorR1,LOW);
      digitalWrite(motorA2,LOW);
      digitalWrite(motorA1,LOW);
      digitalWrite(led,LOW);
      }

      void izquierda(){
      digitalWrite(motorA1,HIGH);
      digitalWrite(motorR2,HIGH);
      digitalWrite(led,HIGH);
      }

      void derecha(){
      digitalWrite(motorA2,HIGH);
      digitalWrite(motorR1,HIGH);
      digitalWrite(led,HIGH);
      }

      void encenderLuz(){
      digitalWrite(luz,HIGH);
      }

      void apagarLuz(){
      digitalWrite(luz,LOW);
      }
      como le arias pero sin luces por que ya le hice como me dijiste y aun asii salee erros si podrias mandarloo sin luces porfass :S

      Eliminar
    4. ok
      ya lo estoy checando
      lo que pasa es que mandas llamar métodos que no están declarados en el programa
      estás haciéndolo justamente con el circuito de arriba?
      éste es por si tienes un carro con dos motores y dependiendo hacia donde giren pues el auto da vuelta, igual que un tanque

      cómo tienes el hardware?

      Eliminar
    5. int motorA1 = 2;
      int motorA2 = 3;
      int motorR1 = 4;
      int motorR2 = 5;
      int luz = 11;
      int led=13;
      char c = 0;

      void setup(){
      Serial.begin(9600);
      pinMode(led, OUTPUT);
      pinMode(motorA1, OUTPUT);
      pinMode(motorA2, OUTPUT);
      pinMode(motorR1, OUTPUT);
      pinMode(motorR2, OUTPUT);
      pinMode(luz, OUTPUT);
      }

      void loop(){
      while (Serial.available()) {
      if (Serial.available() >0) {
      c = Serial.read();
      }
      }
      switch(c){
      case 'F':
      adelante();
      break;
      case 'B':
      reversa();
      break;
      case 'S':
      parado();
      break;
      case 'L':
      izquierda();
      break;
      case 'R':
      derecha();
      break;
      case 'W':
      encenderLuz();
      break;
      case 'w':
      apagarLuz();
      break;
      }
      }

      void adelante(){
      digitalWrite(motorA1,HIGH);
      digitalWrite(motorA2,HIGH);
      digitalWrite(led,HIGH);
      }

      void reversa(){
      digitalWrite(motorR2,HIGH);
      digitalWrite(motorR1,HIGH);
      digitalWrite(led,HIGH);
      }

      void parado(){
      digitalWrite(motorR2,LOW);
      digitalWrite(motorR1,LOW);
      digitalWrite(motorA2,LOW);
      digitalWrite(motorA1,LOW);
      digitalWrite(led,LOW);
      }

      void parado2(){
      digitalWrite(motorR2,LOW);
      digitalWrite(motorR1,LOW);
      digitalWrite(motorA2,LOW);
      digitalWrite(motorA1,LOW);
      digitalWrite(led,LOW);
      }

      void izquierda(){
      digitalWrite(motorA1,HIGH);
      digitalWrite(motorR2,HIGH);
      digitalWrite(led,HIGH);
      }

      void derecha(){
      digitalWrite(motorA2,HIGH);
      digitalWrite(motorR1,HIGH);
      digitalWrite(led,HIGH);
      }


      void encenderLuz(){
      digitalWrite(luz,HIGH);
      }

      void apagarLuz(){
      digitalWrite(luz,LOW);
      }

      Eliminar
    6. ese está bien, chécalo
      espero que te sirva (Y)

      Eliminar
  9. Con el código arduino _ good y conectando el circuito igual, no me funciona y uno de los motores reproduce una canción

    Ayuda?

    ResponderEliminar
    Respuestas
    1. estás usando el mismo integrado y se calienta?
      los motores tienen poca potencia o ni se mueven?

      hahahaha wtf!? cómo que una canción?

      Eliminar
  10. buenas, esta programacion la puedo usar para un auto normal? que avance, retroceda, doble hacia la izq, derecha, etc.... lo digo porque hice todo tal cual y al momento de usarlo los botone no funcionan bien :/

    ResponderEliminar
    Respuestas
    1. ¿cómo que un auto normal?

      lo que importa es que las salidas del arduino manden los pulsos necesarios para activar el puente H

      ¿por qué no funciona bien, qué hace o qué no hace?

      Eliminar
  11. en serio nesesito ayudita para un trabajito de computadoras en la pinche escuela
    como no lo consiga mi profesor me reventara el recto con su enorme verga igual que a mi mamasita
    ayudita :(
    PD:vayan con la virgensita de guadalupe i con san antonio patron de la pedofilia
    NO MAMEEEEEEEEEEEEESSS

    ResponderEliminar
  12. ayuda con programación en arduino y sugerencia
    https://espanol.answers.yahoo.com/question/index?qid=20150508193352AAroK09

    ResponderEliminar
  13. hola, estoy utilizando un modulo l293n no logro mover el motor reviso voltage en la salida del modulo y lo muestra cuando conecto el motor se cae total , ayuda..

    ResponderEliminar
  14. quisiera saber si se podria hacer lo mismo pero con un receptor rc?

    ResponderEliminar
  15. quisiera saber si se podria hacer lo mismo pero con un receptor rc?

    ResponderEliminar
  16. Oye amigo es lo mismo usar un sensor bluetooth que un ultrasonico ?

    ResponderEliminar
  17. Como puedo agregar LEDs al carro

    ResponderEliminar