Antes de leer éste artículo, leed éste. Primero que nada el código. Está algo desastrado, pero yo lo dejo para quién le pueda interesar. Lo tenéis aquí.
Tenemos, por un lado, el sistema que interpreta las órdenes llegadas desde el mando de la PS2. Ésto no lo he escrito, es una librería escrita por Bill Porter (¡Gracias!) que detecta las pulsaciones de todos los botones y sticks de un mando de PS2. En su blog está explicado como funciona todo, hay códigos de ejemplo, tenemos un artículo con una guía para la resolución de problemas (Yo tuve que soldar las resistencias, pero depende del mando) e incluso un foro de soporte. Llamamos desde el código del programa a la librería, que tiene que estar en la carpeta de Arduino y listo.
Para el sistema de control por bluetooth desde el móvil, he usado como base el proyecto de Mobot que tenéis aquí.Tenemos una aplicación en el móvil Android, Mobot BTCar, es gratuita y está disponible en la Play Store. Lo que hace es mandar letras por bluetooh; el módulo bluetooth las manda por el puerto serie al Arduino y el arduino tiene una serie de funciones definidas para cada letra recibida. Podríamos haber programado una aplicación más específica en Android nosotros mismo, pero si nos ahorramos ésta parte mejor que mejor. En el código del Arduino simplemente le he puesto que reciba constantemente letras por el puerto serie, y decida en función de ellas que acción ejecutar.
Para cambiar entre los dos modos de control, pulsamos start en el mando de la PS2.
Y con ésto creo que está todo, si tenéis alguna duda, a comentar.
Buenas! Enhorabuena por conseguir hacer que funcione todo del 10, muchos nos quedamos en la parte de montaje, pero a ver si el verano se porta y nos concede un poco de tiempo libre para realizar proyectos tan interesantes como este.
ResponderEliminarQuizás a la hora de utilizar un mando de PS2 hubiera sido mejor utilizar uno de PS3 que ya son bluetooth y los puedes conseguir chinos por 11€
Muchas gracias!
ResponderEliminarPensé en el mando de PS3, pero no tenía ninguno por casa para las primeras pruebas y además al principio el tanque tampoco tenía receptor Bluetooth.
Un saludo y ánimo con tus proyectos.
Hola:
ResponderEliminarAcabo de encontrar este blog por casualidad. Tengo un Jiayu G2S con el típico problema de recepción del GPS, y vi la mejora de antena que tienes en el blog.
Luego he visto que hay trabajos con Arduino y Raspberry Pi.
La verdad es que con Arduino llevo ya casi dos años, y en el último estoy integrando con Android. Con Raspberry acabo de empezar.
También usé el Mobot BT Car para la comunicación BT, pero se me quedaba algo corto y al final he terminado creandome yo mismo los programas con un software muy fácil de usar. Es AppInventor, el cual te recomiendo que le eches un vistazo, pues es de muy fácil uso.
Ánimo y a seguir con el blog.
Un saludo.
Primero que nada muchas gracias; por leerme, comentar y por el consejo :D
EliminarTiene muy buena pinta AppInventor, parece que simplifica, y mucho, hacer aplicaciones para Android. Con suerte la semana que viene acabo exámenes, así que tendré tiempo para trastear un poco.
Por cierto: ¿Sería posible que compartieras la app que has hecho? (con alguna licencia tipo GPL o BSD que me permita adaptarlo a mis necesidades, por ejemplo) Ahora mismo no tengo ni idea de como crear una acción que mande una letra por bluetooth a un dispositivo concreto... Con el formulario de contacto de arriba me llega un correo directo a mi, si no quieres colgarla públicamente.
No hay problema. Aqui te dejo unas imágenes de la aplicación más sencilla que tengo para mandar caracteres desde el bluetooth del móvil al dispositivo BT del arduino.
EliminarEl módulo utilizado por mi es un HC-06, cliente de bluetooth, conectado a la arduino. Que por cierto, no es necesario que sean los pines 0 y 1 los que hagan de puerto, pueden ser cualquier otro. Tan solo hay que utilizar la librería SoftwareSerial para poder configurar otros pines. Así puedes tener al mismo tiempo el ordenador enlazado con el arduino.
La aplicación de Android tan solo utiliza una variable que contiene la dirección MAC del módulo BT.
Tengo otra aplicación más compleja donde lee los dispositivos BT que tiene almacenados el teléfono o tablet ya enlazados y te deja elegir, pero es más complejo.
Panel de control. Tiene simplemente dos botones para conectar/desconectar, y 5 para los controles. Las imágenes a los botones las puedes poner tu mismo.
http://imageshack.us/a/img835/5167/bluetoothpanel.jpg
Aquí el editor de bloques, donde se pueden ver fácilmente como se envían los caracteres con los eventos click de los botones.
http://imageshack.us/a/img832/5838/bluetoothe.jpg
Saludos.
José Manuel.
Muchas gracias!
EliminarNo he podido entrar en detalles, pero tiene muy buena pinta. A ver cuando tengo tiempo y me pongo en serio, además aprovechándome de tu app me ahorraré un buen tiempo de programar :D
Buenas tardes, se presento un problema; realice la aplicación en appinventor pero cuando instale el apk el celular y quiero buescar el bluetooth me manda el siguiente mensaje: NEED BLUETOOTH_ADMIN PERMISSION:NEITHER USER 10107 NOR CURRENT PROCESS HAS ANDROID.PREMISSION. BLUETOOTH_AMIN.
EliminarNo se si me puedas ayudarme a resolver este problema por favor.
Lo siento, pero yo no tengo ni idea de app Inventor, por ahora no me he puesto en serio, y el amigo José Manuel comentó como anónimo, así que creo no le llegarán notificaciones de nuevos comentarios. De todas maneras, podrías compartir tu App para ver si alguien que se pase por aquí puede ayudarte ;)
EliminarHola, yo tengo un proyecto en el cual quiero usar el mando de la play para controlarlo, y ya lo e conseguido,pero me falla una cosa, que es que cuando pulso un botón y hace su movimiento lo esta haciendo hasta que no pulso otro, y lo que quisiera es que al dejar de pulsar el botón se pare.
ResponderEliminarEspero una respuesta.
Enhorabuena por tu proyecto, con arduino.
Eso es cosa del código que has escrito. Puedes ver como lo he resuelto yo, o si quieres publícalo, lo miro y ya te digo algo.
EliminarUn saludo, y gracias.
Eso es cosa del código que has escrito. Puedes ver como lo he resuelto yo, o si quieres publícalo, lo miro y ya te digo algo.
EliminarUn saludo, y gracias.
Hola Jorge,
ResponderEliminareste el código que utilizo, puedes editarlo.
https://docs.google.com/document/d/1_61bPMj9D8639BB4rFrBZVPC31kLX6e9RWIeDBSPokU/edit?usp=sharing
Gracias por tu atención.
Un saludo.
Me parece que sólo llamas a las funciones setSpeed y motorStart cuando se detecta un cambio en el mando. Deberías llamarlas en todos los ciclos para que se pare cuando toca
EliminarBuenas!!
ResponderEliminarMe ha gustado mucho tu proyecto!
Estoy en proceso de un proyecto similar e ir ampliando con accesorios.
De momento lo que quiero es hacer funcionar el Doble puente H pero no consigo hacerlo funcionar. Por otra parte, tengo puestas 6 pilas que me dan 10v. Cuando junto los dos motores apenas giran... ¿Qué esta pasando? Estoy utilizando un chasis con 4 motores que compré en DealXtreme.
Necesito ayuda para empezar con este proyecto, ya que tengo muchas ganas de seguir aprendiendo.
Saludos!
Hola, y gracias ;)
EliminarNecesito algunos datos más; dime que integrado usas para el doble puente en H y que chasis en concreto has usado (por el voltaje para el que están hechos los motores).
Unas pilas normales deberían poder mover los motores, comprueba con un tester que el doble puente en H de los 10v, si no es así, el problema podría ser la configuración del arduino. Eso es todo lo que se me ocurre con lo que me dices...
Un saludo!
Buenas!
ResponderEliminarMuchas gracias por contestar tan pronto :)
El integrado es: http://www.bricogeek.com/shop/motores/285-controlador-de-motores-doble-puente-h-l298.html
Y el chasis + motores: http://dx.com/es/p/dual-layer-4-motor-smart-car-chassis-w-speed-measuring-coded-disc-black-yellow-151803
Utilizo en Duemilanove. ¿Dónde compruebo los 10v? Pero como te comento anteriormente, si conecto los 4 motores a las pilas directamente, apenas se mueven, ¿Necesitan más voltaje?
Saludos!!
El integrado está perfecto, y el chasis mola, con encoders y todo para controlar la velocidad, cuando lo acabes podrías comentar en algún sitio todo. Eso si, no pone de cuanto son los motores.
EliminarYo los enchufaría a una fuente de alimentación e iría subiendo a ver que tal se comportan; si huele a quemado los desconectas rápido, XD. Lo ideal sería una fuente de banco para subir el voltaje gradualmente, pero si no tienes, y viendo en tu perfil que trabajasd en Beep, usa una de ordenador. Primero 3, luego 5 y por último 12v (ya tienes dos fuentes puedes afinar más; 3+3, 3+5 y 5+5).
Yo decía que comprobaras la salida del l298, pero no te había entendido bien lo de que los conectabas a las pilas directamente.
Un saludo!
Ya lo he solucionado!! Te hecho caso y he probado con una FA de la estación de soldadura que tengo y a 9v van bien. He puesto una batería que tengo pequeña de 0.8Ah y he solucionado un problema de los drivers con el Windows 8 por eso hacía cosas raras. :)
EliminarLo de los encoders no se que podría hacer con ellos, sugerencias? :P
Ahora voy a intentar enchufar el mando ps2 inalámbrico que tengo. ¿Dónde encuentro un esquema para enchufarlo?
Saludos!!
Si algo va mal, siempre es culpa de Windows... Por eso uso Linux XD
EliminarRespecto de los encoders, supongo que los habrán puesto por si unos motores van más rápido que otros, para monitorizar la velocidad e igualarla. No se me ocurre otro uso.
En la parte uno hay un enlace a la librería que usé, dónde se explica como conectarlo y hay también un artículo con los errores más comunes, muy práctico. Está, como casí toda la documentación sobre Arduino, en inglés, pero se entiende bien.
Ya me cuentas que tal te va, otro saludo!
Buenas!!
EliminarPoco a poco voy teniendo mi mini 4x4 :) .Ya tengo el adaptador PSX montado. Tenía una PS2 por ahí desarmada y he cogido la hembra para poder soldar ahí y no directamente al adaptador wireless. También estoy probando con un mando con cable.
He bajado la librería y la he probado. He tenido que cambiar a 57600 baud.
Te cuento: Si pulso las fechas de dirección me sale que he presionado pero el valor es 0: Los analógicos no funcionan, solo presionando. El R1 y L1 me sale: Stick Values:128,128,128,128 y con el "cuadrado" solo funciona cuando levanto el botón no al pulsar. En el serial lo primero que me sale es: Controller refusing to enter Pressures mode, may not support it.
DualShock Controller Found
He probado tu código intentando cambiar los pines que yo tengo en mi arduino pero me hace un bucle con el valor 2. Y al principio también me sale que "El mando no soporta presiones".
Me quedado ahí...
Ayudita!! :P
Saludos!
Buenas de nuevo :P
EliminarEl ejemplo la me funciona Ok. Creo que funciona ya todas las funciones del mando.
Ahora me estoy peleando con tu código. Ahora me dice que no detecta el mando... y se queda el bucle del 2 también.
No se donde puede estar el problema.
Saludos!!!!
Perdona, he estado fuera unos días.
EliminarSi no setecta el mando, yo provaría soldando las resistencias que pone que hay que soldar en el articulo de resolucion de problemas, hay gente que no lo necesita, pero en mi caso concreto me solucionó los problemas.
Respecto de lo de pulsar o soltar creo que había dos funciones distintas una "ButtonPressed" y otra"ButtonReleased", en el código de ejemplo usa una para cosa, pero se pueden intercambiar.
Respecto de los problemas con mi código, le hice muchos cambios para que me detectara bien el mando, puede que el tuyo sea distinto y por eso mis cambios hagan que no funcionen cosas. De todos modos supongo que habrás avanzado desde el último mensaje...
Un saludo, y cuéntame que tal que me interesa.
Buenas!!
ResponderEliminarPensé... Donde está este chico? Ha desaparecido!! :P
Pues ahora mismo acabo de configurarlo después de comerme la cabeza y preguntar en foros y sin respuesta. Lo último que había probado es Arduino Mega por si acaso.
Ya tengo funcionando el Ejemplo. Me lo detecta correctamente cualquier mando de los que tengo. ¿Solución? He puesto la resistencia de 10K en DATA y en la libreria he cambiado el valor de CTRL_CLK por 10 y perfecto lo que es el ejemplo.
He cargado tu código y esto es lo que me sale:
2
No hay mando PS2
DualShock Controller Found
2
...
2 (Bucle)
Cuando pulso al START se pone un 0 y al segundo empieza con un bucle en 1.
Espero tu ayuda a ver si puedo hacerlo funcionar hoy :P
Saludos!!
El start lo utilizo para cambiar entre los modos de control por bluetooth y por mando de PS2. Ese 1 o 2 lo utilizaba yo para comprobhar que me hiciera bien el cambio, y al final se me debió pasar quitarlo. El problema que tienes es que no te detecta el mando de PS2 (Evidente, XD).
Eliminar¿Has cambiado los pines en?:
error = ps2x.config_gamepad(13,11,10,12, true, true); //setup pins and settings: GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error
Es ahí donde comprueba si el mando está conectado y donde aparece tu error, así que aseguraté de que cada cable del mando va al pin que ahí le indicas. Si así no se te resuelve, recuerdo que el siguiente fragmento estaba modificado por mi, así que podrías cambiarlo por el del código de ejemplo:
error = ps2x.config_gamepad(13,11,10,12, true, true); //setup pins and settings: GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error
if(error == 0){
Serial.println("No hay mando PS2");
}
else if(error == 1)
Serial.println("No hay mando PS2");
else if(error == 2)
Serial.println("El mando no acepta comandos");
else if(error == 3)
Serial.println("En mando no soporta presiones ");
type = ps2x.readType();
switch(type) {
case 0:
Serial.println("Unknown Controller type");
break;
case 1:
Serial.println("DualShock Controller Found");
break;
case 2:
Serial.println("GuitarHero Controller Found");
break;
}
}
Ya me cuentas que tal, un saludo.
P.D: Ya que estás siguiendo muchos enlaces desde mi blog, XD; ¿que te parece lo de Adf.ly? La verdad es que pagan una basura, 0.26€ por 240 clicks ¿Crees que resulta muy molesto?
Buenas!!!
ResponderEliminarHe solucionado el tema de la detección del mando. He cogido el codigo de ejemplo y tu codigo y he ido modificandolo. He conseguido hacer la comunicación. He puesto que se enciendan unos led cuando pulsas el circulo y si pulsas otra vez se apaguen :), pero lo motores no consigo que funcionen. El funcionamiento de los motores, ¿Solo es moviendo los mandos analogicos?
Hay algunas cosas del codigo que declaras que no se para que es exactamente. Te paso el código modificado y a ver si me puedes echar una mano.
https://docs.google.com/file/d/0BxzOnvBoqTB3MzdqUFVfOXMxaXc/edit?usp=sharing
Respecto a lo que me comentas del blog, como bien sabes soy Administrador IT y como tal utilizo mucho internet, soy una persona muy exigente y me gustan los sitios dinamicos y sencillos, por tanto siendo sincero, me parece demasiado molesto. Otra cosa que veo es que tarda demasiado en abrirse el blog no se si será por el tema de la publicidad. Todo esto es desde mi punto de vista :)
Espero tu ayuda!! :)
Saludos!!
El problema es que como en un principio lo escribí para mi, hay cosas de las que no me acuerdo mucho y que puse poco claras, igual son variables que puse para algo y no borré, o son algún sistema cutre para que algo no falle; adivina...
EliminarEn efecto, los motores funcionan simplemente con los sticks analógicos, aunque también se puede aumentar o reducir la velocida con los gatillos, L1 y R1 para subir y bajar la velocidad permanentemente y L2 y R2 para bajar momentaneamente la velocidad de su correspondiente Joystick (mientras se mantienen pulsados), un sistema complejo, la verdad, pero después de muchas pruebas es el que más me convenció, XD
Creo que quiteré lo de bit.ly, o lo cambiaré por el banner superior a ver que tal (no te congela la navegación). Lo cierto es que si cuando voy yo a un enlace de mi blog me molesta, me imagino que a los visitantes mucho más... Respecto de la velocidad de carga, lo he notado también, y de hecho prové a quitar los anuncios y el tiempo de carga era similar ¿Puede que la barra de la derecha esté sobrecargadao o quizá sea cosa de Google?
Un saludo!
Este comentario ha sido eliminado por el autor.
ResponderEliminarTodo sea por una cerveza... XD
EliminarLos pines básicos son los que has puesto aquí:
//Motor 1
int mo1=6; //PWD //EB
int act11=7; //I4
int act12=8; //I3
//Motor 2
int mo2=5; //PWM //EA
int act21=3; //I1
int act22=4; //I2
Mo1 y Mo2 deben recibir señales PWM con las que controlarás la velocidad y deben ir a la entrada de tu placa en la que pone EA y EB; los act sirven para ir hacia alante o hacia atrás según las señales High y Low que le mandes:
//(para el motor 1)
7 y 8 LOW - El motor no se mueve
7 y 8 HIGH - El motor no se mueve
7 HIGH y 8 LOW - Hacia alante
7 LOW y 8 HIGH - Hacia atrás
Todos los pines act deben ir a las entradas I1, I2, I3 e I4 del integrado.
Por supuesto la placa del L298 debe estar alimentada, tanto para los motores como con su voltaje lógico (el voltaje lógico igual no es necesario, creo que tiene un regulador detrás, aunque eso es cuestión de probar.
No se si esas eran tus dudas exactamente, pero bueno, poco a poco avanzamos...
Ánimo con el blog, salvo cuando se te ponen muy pesados ;) está muy bien ver que hay gente que se interesa por lo que haces; que te lean y te comenten (aunque escribas, como yo, cada 6 meses) Ah, y el cochecito es el artículo ideal para empezar, que después de todos los mensajes quiero verlo.
Hello!!
EliminarHe cambiado un poco el cochecito y le metido el Arduino MEGA así ya puedo hacer todas las modificaciones posibles :P
¿Que quieres decir con lo del voltaje lógico?
Por más que veo el código no consigo averiguar que es lo que está pasando. Con el código BricoGee:
(http://blog.bricogeek.com/noticias/tutoriales/tutorial-robot-4x4-con-arduino/)
, funciona solo perfectamente, pongo tu código cambio los pines y no hace nada. Lo que he notado es que al estar con el voltaje de USB el Puente H luce cuando muevo los joystick analogicos pero como con poco voltaje, pongo el voltaje de la bateria (12v) y vuelvo a mover y ya no luce Repito con el código de BricoGeek, si funciona con el voltaje de la bateria el Puente H.
Dios!! Quiero que ande ya!! :P (Y repito que la programación no es mi fuerte :) )
Aquí tienes una foto del prototipo:
http://img16.imageshack.us/img16/3158/wkbn.jpg
Ya me cuentas.
Saludos!
Buenas de nuevo.
ResponderEliminarHe decidido comprarme una bateria de Lipo de buena calidad porque la bateria que tengo pesa bastante y para este tipo de prototipos el peso es un punto negativo.
Me gustarái que me recomendaras un sitio para comprar la bateria y el cargador (Pones en la primera parte que te salio por 40€). También me gustaría pillarme el indicador de voltaje para evitar que se descargue por completo la bateria como comentas.
También me he pillado un regulador de voltaje. He visto que los motores trabajan a 7,2v en una página que hay descripcción de estos mismos motores.
Espero tus consejos para pillarme eso.
Saludos!!
Hola!
EliminarLa batería y el cargador los compré por Ebay de un vendedor alemán que vendía baterías y cargadores de todo tipo, los compré hace mucho así que no puedo ver el vendedor concreto. Busca "Lipo battery 7,4V"(con la batería de 7,4 no necesitas regulador para los motores, eso ya como tu veas), filtra los resultados por europa (las chinas no valen nada) y elije un vendedor con buena puntuación, si le pides al mismo un cargador (en mi caso Imax B6) y el "avisador" te ahorrarás algo de envío.
Respecto del mensaje anterior, lo del voltaje lógico es que el L298 trabaja internamente a 5v, pero si te funciona con el otro código es que, como te dije, tiene incorporado un regulador de voltaje (el integrado negro pequeño de atrás)
Como comprenderás no te puedo dar un código ya escrito que te funcione perfecto, es cuestión de que vayas haciendo pruebas, que te detecte todo lo que le mandas por el mando, guardar eso en una serie de variables y luego en cada ciclo decirle a los motores que hagan lo que se ha almacenado en dichas variables. Tampoco soy un experto de la programación, estudio industriales, que tocan el tema de refilón. Me gusta el tema a nivel de hacer alguna cosita pero nada más.
Si el otro código te funciona, añadele la parte de que te detecte el mando y haz que las variables de dicho código dependan de lo que se mande por el mando o parte del ejemplo del mando, borra lo innecesario y añade las órdenes que hay que mandar al tanque.
Buenas.
EliminarGracias por lo de la batería y el cargador.
Lo del código, ya he llegado a la desesperación :P buscaré un sitio o alguién que me diga el funcionamiento de los analogicos y ya seguir yo. A estas alturas estoy dispuesto a pagar XD porque todo lo que me dices me suena a chino :P
Gracias por todo.
Saludos!
Hola Jorge,
ResponderEliminarSoy sergio, después de tanto tiempo he vuelto y de momento lo probado en los motores funciona. No he probado nada mas pues lo tengo un poco olvidadito. Una pregunta, la resistencia de 10k como la has soldado exactamente?.
Gracias.
Hola,
ResponderEliminarOtra pregunta, con esta libreria es posible controlar servos?
tengo una pregunta en donde puedo ver el codigo de la app de mobo bt car para modificar la interfaz
ResponderEliminarpor favor espero una respuesta pronto
ResponderEliminarHola Señor exigencias. En su momento les pregunté a los desarrolladores si serían tan amables de cedérmelo bajo las condiciones que consideraran para modificarlo, pero desgraciadamente no obtuve ninguna respuesta por su parte.
Eliminarhola amigo me podrias ayudar?? quiero controlar un coche con el control del ps2 pero no se como modificar la libreria de billy porter para que me funcionen dos motores y dos servomotores para la direccion del vehiculo. espero tu generosa ayuda de ante mano graacias mi correo es arduinofan_@hotmail.com
ResponderEliminarporfavor necesito tu ayuda amigo jorge crespo he intentado pedir informacion en otros blogs pero nadie responde espero que tu si nuevamente gracias y espero tu pronta respuesta!!
ResponderEliminarTe he contestado al mail que me mandaste, pero da igual, lo pongo por aquí por si le sirve a alguien. Necesito que me digas exactamente donde te has quedado, que es lo que has hecho, que es lo que funciona y como y que es lo que no funciona.
EliminarTan sólo diciéndome "No va, ayúdame" como comprenderás no puedo siquiera intentar darte una solución correcta.
Gran trabajo Jorge!
ResponderEliminarMe ha encantado el proyecto, sigue así!
¡¡buenas!!
ResponderEliminarla verdad es que me ha parecido muy interesante el proyecto que has realizado.
quisiera hacerte una pregunta respecto al código que no me ha quedado claro.. estoy realizan un proyecto similar donde la placa de Arduino lee pwm de un radio control y envía señales a los l298. quisiera saber que codigo utilizaste para coordinar el movimiento de las orugas ya que utilizan dos señales independientes.
de antemano muchas gracias!!
Este comentario ha sido eliminado por un administrador del blog.
ResponderEliminar