Pages: [1]   Go Down
Author Topic: Ayuda. Controlar coche con motores cc mediante bluetooch con Android  (Read 2353 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Hola, pues la idea es que he montado un pequeño cochecito, con dos motores dcc comprados por ebay, en concreto estos:

http://www.ebay.es/itm/Arduino-robot-wheels-car-chasis-2-ruedas-motores-motors-coche-sencillo-proye-/221140826154?pt=LH_DefaultDomain_186&hash=item337d05382a

para controlar los motores compre esto:   

http://www.ebay.es/itm/Arduino-L298N-DC-and-stepper-Motor-dual-drive-module-/170938361023?pt=UK_BOI_Electrical_Components_Supplies_ET&hash=item27ccb864bf
Arduino L298N DC and stepper Motor dual drive module
 
es el tipico controlador L298N

Para la comunicacion por Buetooch esto:

ebay.es/itm/BLUETOOTH-for-fur-ARDUINO-Wireless-Serial-Port-Module-Transceiver-JY-MCU-/170936492690?pt=LH_DefaultDomain_186&hash=item27cc9be292

Bueno pues el tema es que con este codigo controlo los motores, que hacen una secuencia de hacia delante, atras, izquierda y derecha con un tiempo entre ellos de 2 segundos.

Code:
#define MOTOR1_CTL1  8  // I1 
#define MOTOR1_CTL2  9  // I2 
#define MOTOR1_PWM   11 // EA 
 
#define MOTOR2_CTL1  6  // I3 
#define MOTOR2_CTL2  7  // I4 
#define MOTOR2_PWM   10 // EB 
 
#define MOTOR_DIR_FORWARD  0 
#define MOTOR_DIR_BACKWARD   1 
 
void setup() 

  // Setup pins for motor 1 
   pinMode(MOTOR1_CTL1,OUTPUT); 
   pinMode(MOTOR1_CTL2,OUTPUT); 
   pinMode(MOTOR1_PWM,OUTPUT); 
     
  // Setup pins for motor 2 
   pinMode(MOTOR2_CTL1,OUTPUT); 
   pinMode(MOTOR2_CTL2,OUTPUT); 
   pinMode(MOTOR2_PWM,OUTPUT);     

 
void setSpeed(char motor_num, char motor_speed) 

   if (motor_num == 1) 
   { 
      analogWrite(MOTOR1_PWM, motor_speed); 
   }     
   else 
   { 
      analogWrite(MOTOR2_PWM, motor_speed); 
   } 

 
void motorStart(char motor_num, byte direction) 

   
   char pin_ctl1; 
   char pin_ctl2; 
     
   if (motor_num == 1) 
   { 
      pin_ctl1 = MOTOR1_CTL1; 
      pin_ctl2 = MOTOR1_CTL2; 
   }     
   else 
   { 
      pin_ctl1 = MOTOR2_CTL1; 
      pin_ctl2 = MOTOR2_CTL2;       
   } 
   
   switch (direction) 
   { 
     case MOTOR_DIR_FORWARD: 
     { 
       digitalWrite(pin_ctl1,LOW); 
       digitalWrite(pin_ctl2,HIGH);           
     } 
     break;   
           
     case MOTOR_DIR_BACKWARD: 
     { 
        digitalWrite(pin_ctl1,HIGH); 
        digitalWrite(pin_ctl2,LOW);           
     } 
     break;           
   } 

 
void motorStop(char motor_num) 

   setSpeed(motor_num, 0); 
   if (motor_num == 1) 
   { 
     digitalWrite(MOTOR1_CTL1,HIGH); 
     digitalWrite(MOTOR1_CTL2,HIGH);       
   } 
   else 
   { 
     digitalWrite(MOTOR2_CTL1,HIGH); 
     digitalWrite(MOTOR2_CTL2,HIGH);       
   } 

 
void loop() 

  // Start motors! 
  motorStart(1, MOTOR_DIR_FORWARD);   
  setSpeed(1, 200); 
  motorStart(2, MOTOR_DIR_FORWARD);       
  setSpeed(2, 200); 
   
  delay(2000); 
   
  motorStart(1, MOTOR_DIR_BACKWARD);   
  setSpeed(1, 200); 
  motorStart(2, MOTOR_DIR_BACKWARD);       
  setSpeed(2, 200); 
   
  delay(2000); 
   
  motorStart(1, MOTOR_DIR_FORWARD);   
  setSpeed(1, 140); 
  motorStart(2, MOTOR_DIR_BACKWARD);       
  setSpeed(2, 140);   
   
  delay(2000); 
   
  motorStart(1, MOTOR_DIR_BACKWARD);   
  setSpeed(1, 140); 
  motorStart(2, MOTOR_DIR_FORWARD);       
  setSpeed(2, 140);   
   
  delay(2000);   
   


con este codigo hago la comunicacion de el bluetooh:


/* Include the software serial port library */
#include <SoftwareSerial.h>



/* DIO used to communicate with the Bluetooth module's TXD pin */
#define BT_SERIAL_TX_DIO 10
/* DIO used to communicate with the Bluetooth module's RXD pin */


#define BT_SERIAL_RX_DIO 11

/* Initialise the software serial port */
SoftwareSerial BluetoothSerial(BT_SERIAL_TX_DIO, BT_SERIAL_RX_DIO);

void setup() 


{
  /* Set the baud rate for the hardware serial port */
  Serial.begin(9600);


  /* Set the baud rate for the software serial port */
  BluetoothSerial.begin(9600);

}

/* Main loop that will pass any data to and from the Bluetooth mode to the


   host PC */
void loop()
{
  /* If data is available from the Bluetooth module then pass it on to the


     hardware serial port. */
  if (BluetoothSerial.available())
    Serial.write(BluetoothSerial.read());


 
   /* If data is available from the hardware serial port then pass it on
      to the Bluetooth module. */
  if (Serial.available())


    BluetoothSerial.write(Serial.read());
}

Y por si alguien lo necesita esta son las conexiones para los motores a la placa arduino:

Una vez conectados los motores al controlador, es el turno de conectarlo al Arduino. En la imagen de arriba no se muestra, pero no olvideis de contactar también los cables de alimentación que vienen del interruptor! Irán conectados a VMS y GND.

Las conexiones a la placa Arduino serán así:

    Arduino PIN 8 -> I1
    Arduino PIN 9 -> I2
    Arduino PIN 11 -> EA
    Arduino PIN 6 -> I3
    Arduino PIN 7 -> I4
    Arduino PIN 10 -> EB

 


Éstas son las señales de control ya que además estamos utilizando los pines PWM para luego poder variar la velocidad de los motores. También necesitareis conectar la salida del controlador marcada como +5V al pin de arduino señalado como VIN. Esto hace que el controlador de motores le proporcione corriente a la placa Arduino. No olvideis también de unir las masas con los pines GND.

(todo estos codigos no son mios eh, los he sacado por ejemplo este ultimo de Bricogeek.com)

la conexion al bluetooch:

Arduino       Bluetooth module
5V            PIN 2 (VCC),
GND           PIN 3 (GND)

DIO 10        PIN 4 (TXD)
DIO 11        PIN 5 (RXD)

Bueno esto es todo lo que hay y sus conexiones, la cuestion es que por separado, osea cargo el codigo en la placa de lo de los motores y funciona correctamente , va hacia delante, para , va hacia detras, para, gira hacia la izquiera, para, gira hacia la derecha, para y repite el ciclo continuamete.

Ahora cargo el codigo del bluetooch y la comunicacion es correcta tambien, pruebo varios programas desde mi telefono con android como amarino y envio datos que veo des el monitor de arduino.
Osea que ahora me encuentro y lo siento se que quizas voy a pedir mucho porque no tengo ni idea pero por mas que busco no acabo de encontrar la solucion ni informacion que me acabe de aclarar, pues como digo me encuentro que quiero hacer una "Ensalada", tengo los tomates, y la lechuga pero no se como mezclarlos, no se si me explico.

En primer lugar no se como cargar o mezclar el codigo del control de los motores con el codigo del bluetooch, aparte de que supongo que habra que añadir cosas para poder interactuar con el bluetoch los motores, de momento con que vaya hacia delante, hacia detras, gire hacia un lado y otro me basta.

En segundo lugar y ya metiendome en conexiones veo que por ejemplo los pines 10 y 11 los utiliza la placa de control de los motores, y el bluetooch tambien utiliza los mismo pines 10 y 11, esto creo que seria cambiar el codigo que es muy sencillo o eso creo yo y decirle que utilice otros pines libres por ejemplo 3 y 4.

Bueno si alguien me puede orientar un poco por favor, o darme algun enlace donde haya un tutorial con codigo para esto seria de gran ayuda ya que estoy atascado y no se por donde seguir.
Se que lo primero que tendria que hacer es aprender a pogramar, pero eso seria muy muy lento y aunque no lo descarto mi idea en principio en ir viendo codigos para no partir de 0 e ir intentando entender que hace cada parte para asi modificarlo a mi gusto.
Si alguien me puede ayudar por favor!!!!!.

En cuanto a Android estaria bien utilizar Amarino o hay algun otro mas facil, porque en principio creo que con amarino lo mas sencillo seria programar (Cosa que no se eh) que utilizara al mandar por ejemplo con amarino la letra A para ir hacia delante y X hacia detras etc etc, lo digo para no crear un programa entero con botones etc, que me imagino que sera mucho mas dificil.

Otra cosa es que tengo un sensor de distancia, el tipico :   
SENSOR de DISTANCIAS por ULTRASONIDOS HC-SR04 ultrasonic

y este tambien lo pongo por separado con su pantalla Lcd conectada a arduino y todo bien, pero estoy en lo mismo quiero por ejemplo hacer autonomo el coche y que vaya solo y no se como conectar las dos cosas a la vez o con que tipo de codigo.

Si has llegado hasta aqui leyendo MUCHAS GRACIAS de nuevo, espero haber ayudado a alguien con la informacion y codigos por si quieren hacer algo parecido y  a ver si se puede seguir avanzando en este proyecto y controlarlo desde el mobil.

Saludos
« Last Edit: November 17, 2012, 02:09:10 am by stoki57 » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-confuse No hay nadie que me pueda orientar por favor?
he estado buscando información de aplicaciones de androíd con arduino y lo que he encontrado a sido aplicaciones para controlar coches pero con otro tipo de placas controladoras para los motores, la mía cono comenté es ka L298N DC.

Este finde voy a ver sí puedo adaptar esas conexiones con mi placa.
Ya contaré......de todas formas sí alguien tiene alguna sugerencia????
« Last Edit: November 16, 2012, 08:23:52 am by stoki57 » Logged

Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 958
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Uff.. se hace un poco infumable tu post tan largo y mezclado todo.

¿Porque no usas el boton de # que hay arriba de donde escribes el post para poner tu codigo dentro y facilitar la lectura al resto?
Code:
Ejemplo:
Aqui iria el codigo

Segundo, no he usado paso a paso pero porque no desglosas el problema en cachos pequeños, es decir, reducirlo al problema mas pequeño e ir avanzando.

En tu caso, primero gobernaria los motores con un simple pulsador a cada entrada, si ya te funciona asi, sustituiria el control de los motores enviando un codigo determinado por la terminal serie que trae el ide del arduino y haria que mi codigo lea lo que le entra por el serie y mueva en funcion de las instrucciones que le envie por el serial.

Ej: envio "A" por el serie y al recibirlo, los motores "A"vanzan
envio "R" y "R"etroceden

Y asi el resto...

Despues de conseguido esto solo has de intercalar el bluetooth y ya esta, como por arte de magia porque el bluetooth es a fin de cuentas una comunicacion serial.

Un saludo


Logged

CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Heke muchísimas gracias.
Siento que el post sea tan difícil dr entender, mi idea fue dar toda la información posible para que la gente que quisiera hacer algo parecido tuviese información de que cómprar etc y de cómo utilizarlo.
No sabía que hay una opción para poner el código.
en cuanto pueda desde el pc lo arreglo e intentó mejorar que ahora estoy con el mobil.
Gracias de nuevo por la información y un saludo.
Logged

Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 958
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No hay problema compañero.

De todas formas, recuerda que hasta en un post hay que cuidar el "diseño grafico" mas o menos para que sea atractivo o al menos comodo o ameno de leer.

Vamos... como todo en esta vida...

Eso si, con estilo eh   smiley-wink porque esta misma contestacion que te pongo la puedo hacer mas atractiva asi, pero no hay que pasarse  smiley-lol


¿Tu me entiendes no?
Logged

CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

Pages: [1]   Go Up
Jump to: