martes, 9 de octubre de 2012

Robot de sumo Boogerbot - julio-setiembre 2012

Esta es una reseña del nuevo diseño de boogerbot, trataré de sintetizar los aciertos y errores de diseño, así como las características que me hubieran gustado agregar y que no pude implementar a tiempo para la competencia, increíblemente por mas que empecé a trabajar 2 meses antes... me faltó tiempo.

Ruedas:


En el diseño original de boogerbot había utilizado orugas. Las orugas poseen ventajas y desventajas con relación a las ruedas, la principal ventaja de un buen par de orugas es la traxión, un par de orugas que cubra la mayor longitud posible a ambos lados del robot ofrece mucha superficie de contacto con el ring, lo que incrementa enormemente la traxión con relación a las ruedas, si adicionalmente se ensanchan las orugas, se tienen muchas posibilidades de empujar cualquier cosa fuera del ring.

La velocidad con se mueva el robot sobre el ring dependerá en gran medida de la velocidad de los motores utilizados, con relación a la fueza que pueda ejercer, se deben considerar un par de factores adicionales, el material utilizado para el contacto con el ring (sean ruedas u orugas), y la superficie de contacto. Mientras mas superficie mayor traxión.

Tristemente las leyes físicas se aplican a cabalidad en un ring, por lo que... si se tiene velocidad, se pierde fuerza, y se se gana fuerza, se pierde velocidad, encontrar la combinación perfecta entre ambas cosas puede resultar engañoso y difícil y la única manera de logralo es la experimentación.

Porque utilizar ruedas en lugar de orugas?, la respuesta es muy sencilla: simplicidad. Un buen par de orugas es bastante difícil de confeccionar, requieren de mucho tiempo, cada eslabón debe ser igual al anterior, se deben realiar muescas para los dientes de los engranes de los rodamientos, etc...

Es posible comprar tanto orugas como ruedas comerciales, que pueden darnos resultados superiores o inferiores a los esperados, pero... no sería tan divertido como fabricarlas nosotros mismos. :)

Con la ayuda de un amigo y su torno, moldé las ruedas de boogerbot (gracias Luis), originalmente la idea era utilizarlas como rodamientos para las orugas, luego... cambié de idea por lo dicho antes... muy complejo.



Las "llantas" fueron cubiertas con goma eva y esta pegada con cemento de contacto (cola de zapatero), propicié 3 capas sobre las llantas lo que me dió un diámetro promedio de 5cm. Sobre la goma, con ayuda de cinta doble faz agregué mi arma secreta... mbuajajaja... cinta aisladora autovulcanizable. Jugando con mis destornilladores descubrí que se adieren muy bien a todo tipo de superficies, pero no todo es color de rosas, cuesta bastante que quede perfectamente distribuida sobre las ruedas, pero, después de deshechar unos centímetros (medio metro mas o menos) me quedaron bastante bien.

 Mejoras a realizar a las ruedas:
 - Ruedas mas centradas, la primera, que la hizo Luis quedó fantástica, las 3 siguientes (las hice yo) tienen diámetros distintos y peor aún, el eje muy descentrado.
 - Ruedas mas anchas, huecas, de manera que los motores vayan dentro, para lograr mayor superficie de contacto (es necesario modificar la estructura base del robot para esto).
 - Pienso mantener el uso de la cinta autovulcanizable para las cubiertas, pero tengo que mejorar el proceso de aplicación para conseguir una mayor homogeneidad y adherencia.

Estructura:

El chasis de boogerbot está compuesto por 4 cortes de angulo de aluminio de 1.5mm de grosor, dos de ellos de 15cm de longitud y dos de 13cm de longitud, unidos entre sí por tornillos de 3mm.

En cada extremo de los segmentos de 15cm taladré 3 agujeros, uno de 8mm por donde pasa el eje de cada motor y 2 de 3mm para los tornillos que los sujetan.


Las partes traseras de los motores se encuentran enfrentadas, en medio de los 4 motores ubiqué la batería.


Superponiendo una buena cantidad de capas de pvc fabriqué unos calces para fijar un marco tabién de pvc, y por éste con tornillos la cuña ubicada al frente, una tapa atrás para proteger las ruedas y el puente h y un corte de chapa de aproximadamente 1cm de ancho para sujetar la batería.


Tanto la cuña como la tapa trasera las confeccioné con chapas galvanizadas de 0,75 mm de grosor.
 Mejoras a realizar:
 - La cuña debe estar sujeta por un material rígido (metal), el plastico pvc es flexible, aún cuando se hayan apilado varios. Al empujar, el soporte se arqueaba, las ruedas frontales se levantaban y giraban libremente, por lo que se perdía mucha fuerza.

Motores:

Boogerbot en su primera versión se encontraba propulsado por servos standard con dos orugas, en esta, utilizé 4 motores de 200rmp a 12v, 25mm de diámetro por 60mm de largo.

En uno de los combates el consumo de corriente fue un tanto elevado y el puente h levantó un poco de temperatura, en promedio los motores consumen .2 amperes c/u.



 Mejoras:
 - Cambiar los motores de 200 rpm por 300 rpm, se perderá fuerza pero la velocidad extra puede ofrecer ventajas programando estrategias de combate, se gana rapidez en el ataque y posibilidad de escaparse de ciertas situaciones y con ello voltear el resultado.

Puente H:

Armado con un L298 y una pequeña placa se constituye la etapa de potencia de motores de boogerbot, suficiente para manejar el consumo de los 4 motores, si se desea trabajar mas holgadamente con el consumo de motores, se puede utilizar un integrado para controlar 2 motores.

También existen otros modelos de puente h con mucha mas capacidad de corriente.
En el PCB que utilicé las lineas para medir la corriente consumida no las implementé, no obstante, una pequeña modificación en la derivacion a gnd de los pines 1 y 15 sería suficiente para implementar el control de la corriente.


Sensores de Borde:

Los sensores que utilicé los armé con sensores CNY70, el circuito es expuesto en este mismo blog en el siguiente link http://blasmercado.blogspot.com/2012/05/microbot-con-dos-autitos-de-juguete.html

En cada extremo del ubiqué 1 sensor, así tenía en el frente un sensor izquierdo y un sensor derecho y de la misma manera atrás.


Con un poco de PVC fabriqué unos sportecitos para atornillar los sensores y éstos los fijé al chasis con silicona de calor.

En uno de los combates boogerbot fue expulsado del ring, dando como resultado la ruptura del soporte del sensor al caer del ring.

Mejora:
 - Eliminar el soporte de PVC y hacer que el chasis alberge al sensor para protegerlo de los golpes en las salidas del ring.

Sensor de oponente:


Placas antes de montar componentes.


Para detectar al oponente ensamblé sensores infrarrojos utilizando el decodificador de tonos LM567.




En un principio, la idea fue de incluir cuatro sensores para detectar al oponente sobre el ring, los sensores serían: Frente, Atrás, Derecha, Izquierda.



Cada sensor posee un rango de deteción de aproximadamente 20cm, un poquito mas, un poquito menos dependiendo de la superficie y tipo de pintura del oponente, un oponente con pintura negra mate, es detectado desde aproximadamente 15cm, un papel blanco se detecta a 25-28cm.

Circuito Terminado
 

La luz directa del sol ejerce una interferencia terrible sobre el sensor, dejándolo prácticamente inútil con un rango de detección de solo 3-5cm.



Terminé de ensamblar tres de los cuatro que necesitaba, pero finalmente por motivos de tiempo solo implementé 1 sensor en el frente para detectar al oponente.

Circuito adherido a pala.







Hice dos agujeros en la cuña, y una especie de cajita de PVC para alojar y fijar el sensor al metal.
Todos los componentes son del tipo smd exceptuando el emisor y receptor infrarrojo.






Mejora:
 - Ampliar el rango de detección.











Placa de control (Mainboard):




La placa de control se divide en dos partes.

1- Una breakout board fabricada para el microcontrolador PIC18F13K22.

2- La placa de control (Mainboard) en sí.






1- Breakout board PIC18F13K22.


La idea de realizar un breakout con un pic surgió de la intencion de remover y programar el microcontrolador con facilidad tanto para este proyecto como para otros que pudieran surgir.

El cerebro de boogerbot fue el PIC18F13K22, una compañera me dijo:Que "raro" es el pic que usaste, bueno la explicación es simple, comprando compoententes de newark, busqué pic18, ordené de menor a mayor por el campo precio y elegí el que estaba mas arriba, sip... ese es el secreto de la seleción del pic.

Este pic posee 8K de memoria de programa, 256B RAM, 256B EEPROM de datos, 20 pines, hasta 18 puertos I/O, ADC 12-ch 4 timers, mas que suficiente para un sumo básico, insuficiente para todas las características que deseaba implementar.

2- La placa de control (Mainboard) en sí.


La placa se concibió pensando en un diseño simple, que fuera fácil de producir en un PCB o en una placa universar y que quedara lo mas ordenado posible en cuanto a la distribución de pines del micro y que proporcionara además de los puertos de datos pines para la alimentacion de sensores. También debía aceptar a la breakout board que diseñé con anterioridad.




El diseño presenta tres secciones de conectores, una seccion para 4 sensores de lineas, otra para 4 sensores de oponentes, y otra para 4 señales para controlar motores, como mencioné antes, cada sección posee pines para alimentación, por lo que con tres cables los sensores pueden conectarse al mainboard como módulos.



La distribución de pines de cada línea de comunicacion es: Señal, +5v, GND.

En un principio la misma placa serviría para panel de control, finalmente opté por prolongar el panel con cables.


El panel consta de 2 switches para seleccion de programa, 2 leds para indicar el programa seleccionado, un pulsador para inicio de combate y un zumbador (quedó en la mainboard).

 

 

 

Algunas Fotos








jueves, 3 de mayo de 2012

Microbot con dos autitos de juguete, Parte 3 Sensores de Lineas


A estas alturas el pequeño robot ya puede movilizarse, aunque todavía no posee inteligencia ni conciencia de su entorno, habilidades que le brindaremos agregándole sensores y un microcontrolador... por supuesto, un pic.

Ya tenemos motores que pueden movilizar al robot, ahora haremos que realize alguna tarea en base a sensores que utilizaremos para detectar lineas en el suelo.
Para esto nos basaremos en sensores CNY70 y utilizaremos por el momento 2 de ellos.

CNY70

El CNY70 es un sensor infrarrojo reflexivo, ajustado para tener buena sensibilidad a los colores blanco y negro, está compuesto por un fotodiodo emisor de rayos infrarrojos y un fototransistor cuya base se exita con el haz infrarrojo emitido por el fotodiodo.

Si exitamos el fototransistor y realizamos una medicion de voltaje en el colector, obtendremos un valor que variará dependiendo del tono y la distancia de la superficie que estémos utilizando para realizar la prueba, por ello es que si deseamos utilizar una entrada digital del microcontrolador para verificar el estado del sensor debemos adaptar esta señal.

La señal se puede adaptar utilizando transistores o un trigger schmit.

Esquema para conectar un CNY70 a un pin digital de un microcontrolador utilizando un transistor. 

Este sensor nos sirve tanto para convertir a nuestro robot en un seguidor básico o para detectar bordes de un dohio si experimentamos con el como robot de sumo.



Circuito impreso propuesto.


Circuito montado.
En este montaje utilicé un transistor 2N3904, si se dispone de un BC547 será necesario orientarlo en forma contraria.

Con este circuito cuando la superficie es negra el pin "D" esta en high (1) y cuando es blanca se pone en low (0). El pin D corresponde al marcado con un pequeño punto.

jueves, 1 de marzo de 2012

Robot con dos autitos de juguete, Parte 2 Puente H de los Motores.


En el artículo anterior se detallaba un proceso simple para armar una pequeaña base para un futuro robot, esta base estaba formada por dos autitos, sus ruedas, engranajes y sus motores.
Los motores montados en los autitos son del tipo DC, al aplicar una diferencia de potencial (voltaje) entre sus terminales, se puede accionar el motor logrando que gire; dependiendo de en cual terminal se aplique la corriente positiva y negativa, el motor girará en uno u otro sentido.
Para hacer que el auto vaya hacia adelante por ejemplo, se pueden cablear los motores de manera que uno vaya en sentido horario y otro antihorario, como las partes traseras de los motores se encuentran efrentadas, la base se moverá en una dirección.
Si deseamos que la base gire, debemos cablear los motores para que ambos giren en un mismo sentido, variando el sentido de ambos motores se variará el giro de la base a la derecha o izquierda.
Eventualmente querremos que el robot sea autónomo, o sea, querremos que un microntrolador controle su dirección y o velocidad, y... como los microntroladores no tienen manos para realizar las conexiones deberemos proporcionarselas ;-)
Para resolver este inconveniente, utilizaremos un Puente H, existen integrados comerciales que tienen internamente todo o casi todo lo necesario como el L293 o L298; también se puede optar por realizarlo con transistores, esto es lo que haremos. Necesitaremos 2 puentes h, uno para cada motor.

Figura 1 - DIAGRAMA


Un puente H está formado básicamente por 4 transistores, utilizados para pasar corriente en un sentido u otro, siempre se activan 2 transistores a la vez exitando las bases de los mismos.


El motor gira en sentido Horario
El motor gira en sentido Antihorario

En los diagramas se pueden ver 6 transistores, los dos transistores adicionales al puente h se encuentran allí por dos motivos:
1- Reducir la cantidad de puertos necesarios del microcontrolador que deseemos emplear.
2- Minimizar la corriente drenada por el microcontrolador en cada puerto utilizado para generar las señales de control.

Probando en el laboratorio, se determinó que el consumo de corriente de los pequeños motores puede alcanzar picos de hasta 1A (o.O), por lo que fue necesario buscar transistores adecuados para el consumo de corriente; pude haber utilizado unos TIP31 y TIP32, pero son muy "grandes" tanto físcamente como en características eléctricas, adicionalmente el costo de estos es también elevado, ya que para todo el conjunto, necesitamos 8.
Los tres tansistores utilizan el patillaje ECB

Decidí entonces utilizar los BC639 y BC640, ambos transistores soportan un consumo de corriente de 1A y picos de hasta 1,5A; para exitar a éstos transistores 2 C1815 (recuperados de una vieja fuente de pc) equivalentes a los BC547, el patillaje es diferente.


El siguente paso lógico es hacerse un PCB para soportar a los transistores, como son pequeños, fue posible encajarlos en poco espacio.

Aquí el fotolito del PCB porsi alguien quiera utilizarlo.

Componentes montados en el circuito








Cada motor del robot debe poseer su Puente H, en la foto  se ven los dos ya cableados listos para instalarlos en el robot.







En la foto de la derecha se pueden ver los dos puentes H, instalados en su lugar, cableados y listos para funcionar.








Por último, en el video se puede ver a los puentes de cada motor funcionando.

Saludos y hasta la próxima.

martes, 14 de febrero de 2012

Robot hecho con dos autitos de juguete, Parte 1 Mecánica.

Quien se haya aventurado a la creación de un robot rodado partiendo de elementos básicos como plástico, metal, motores, ruedas y demás, puede dar fe de que es una tarea un tanto compleja, especialmente cuando se debe modelar al robot con herramientas simples como cierras de mano, pinzas y martillos.

En el diseño de los mecanismos de tracción, se puede optar por conectar los ejes de los motores directamente a ruedas u orugas así como de realizar un pequeño sistema de transmisión con engranajes o poleas.

Es necesario hacerse de un "chasis" o "base" para montar en él los mecanismos y tomarlo como cimiento para construir sobre éste los soportes para motores, placas de control y sensores.

Muchos entusiastas se dan por vencidos antes de tener algo funcional o al menos que "camine", y... terminando al empezar, solo se consigue frustración y pérdida de tiempo y dinero.

Aquí les presento una alternativa que puede dar una mano a quienes quieran acortar el camino.

La idea es formar una especie de chasis con 2 motores DC de pequeño tamaño y unos engranajes que ya vienen montados en los autitos; también poseen portapilas y el costo de este par se eleva sólo hasta el 20% de un servomotor y es aún mucho menor que el de un motor DC.

Si bien el resultado no tendrá cabida en las categorías normales de sumo u otros tipos de robots de competencia, el robot a construirse sirve para practicar y aprender conceptos básicos que pueden ser aplicados en futuros emprendimientos.

Para ensamblar la base serán necesarios dos autitos como los de la figura de arriba, cada autito formará una mitad de la base, por acá se los conoce en las tiendas de juguetes como "autitos locos" :)

El proceso es realmente simple:



1 - Se separa la parte superior del auto, por debajo se encuentran los tornillos para hacerlo, al separar la parte superior de la inferior se pueden distinguir los motores que darán mobilidad a nuestra creación, también se puede ver la caja de engranajes que mueve las ruedas.


2 - Remover todos los cables e interruptores que se ven en la imagen.







3 - Recortar los ejes de las ruedas de manera que se separen las ruedas que no están cerca de los engranajes, como se ve en la figura.












Los cuatro ejes recortados con la "caja" de engranajes reductores enfrentados.



4 - Unir los dos cuerpos formando uno. Esto se puede realizar con pegamento instantáneo (se puede encontrar en ferreterías, supermercados, farmacias, etc..).



Algunos amigos han incorporado una pieza de plastico como juntura entre las dos mitades.


En siguientes artículos iremos transformando esta base para convertirla en un robot completamente funcional.
 
Hasta luego.

viernes, 11 de noviembre de 2011

Envío de SMS con J2Me

1 - Iniciar el Netbeans, este proyecto fue desarrollado con la version 7.0.1 en ingles.
2 - Crear el proyecto en netbeans, Menu File -> New Proyect
En el cuadro de diálogo seleccionar Categoría: JavaME, Proyecto: Mobile Application; click en Next.



3-Dar un nombre al proyecto, yo seleccioné BlasSMS


4 - En la siguiente pantalla es necesario seleccionar la plataforma para la que se compilará el proyecto, para esta ocasion CLDC-1.0 y MIDP-2.0, se seleccionan las configuraciones mas básicas posibles para mantener la compatibilidad con la mayor cantidad de dispositivos posibles.
Luego hacemos click en Finish


5 - Seleccionamos el archivo HelloMIDlet.java, apretamos F2 y cambiamos su nombre a BlasSMS.java y le damos enter, en la pantalla que aparece seleccionamos la casilla "Apply Rename on Comments" (Aplicar renombrar a los comentarios) y hacemos click en Refactor.

6 - Abrir el fuente BlasSMS.java y hacer click en boton Screen y seleccionar "form" en el combo de la derecha.

7 - En la paleta de objetos seleccionamos TextField y agregamos 2 campos al form que estamos editando, seleccionamos el primero de los textfields, hacemos click derecho y seleccionamos Rename, cambiamos el nombre de la instancia a "txtCodigo".



Hacemos lo mismo con el segundo textfield y lo nombramos "txtMensaje".

Al hacer click derecho sobre los objetos podemos acceder también a las propiedades, y cambiar los labels a "Codigo" y "Mensaje"


Ahora seleccionamos en la paleta un "Exit Command" y lo agregamos a la pantalla, luego un "Ok Command", también lo agregamos, cambiamos las propiedades para que se llamen "cmdSalir" y "cmdEnviar" de manera análoga a las propiedades de los campos de texto.



El proyecto debería verse así:


8 - En la solapa "Flow", se hace un click en el boton cmdSalir y se arrastra hacia el cuadro titulado "Mobile Device"
Con lo que se vería así:


9 - Al código!
Seleccionamos la solapa source, debajo de la declaracion de la clase agregamos la declaracion de dos variables, una para el mensaje y otra para mantener el numero telefónico al cual enviar
public class BlasSMS extends MIDlet implements CommandListener {
private String mensaje = "";
private String telNro = "+595985265999";
en el método commandAcction agregamos una llamada al metodo enviarSMS() que efectuará el envio del mensaje

public void commandAction (Command command, Displayable displayable) {
if (displayable == form) {
if (command == cmdEnviar) {
// write pre-action user code here
this.enviarSMS(this.telNro); //----> ATENCION ESTE ES EL CODIGO AGREGADO!!!
// write post-action user code here
} else if (command == cmdSalir) {
Al final del archivo se escriben métodos para enviar y validar el mensaje, uno para dar un formato "util" al texto enviado y otro para mostrar una ventana de alerta que nos ayudará a mostrar diferentes mensajes en pantalla.
Validación del mensaje:
public boolean validarMensaje(){

if (this.txtCodigo.getString().length()<1){
this.mensaje = "Falta Codigo: Verifique";
return false;
}
if (this.txtMensaje.getString().length()<1){

this.mensaje = "Falta Mensaje: Verifique";
return false;
}

return true;

}
Método para "comprimir" el mensaje con los datos introducidos antes de enviarlo:
public String compactarMensaje(){

String resultado = "" ;
resultado = "'" + this.txtCodigo.getString().trim().toUpperCase() + "',";
resultado += "'" + this.txtMensaje.getString().trim().toUpperCase() + "',";
return resultado;
}

Método para envío del mensaje:
public boolean enviarSMS(String telNro){
try {
if (!validarMensaje()){
mostrarAlerta(this.mensaje);
return false;
}
String recipientAddress = "sms://" + telNro;
MessageConnection connection = (MessageConnection) Connector.open(recipientAddress);
TextMessage tmsg = (TextMessage) connection.newMessage(MessageConnection.TEXT_MESSAGE);
tmsg.setPayloadText(this.compactarMensaje());
tmsg.setAddress(recipientAddress);
connection.send(tmsg);
connection.close();
} catch (IOException ex) {
this.mostrarAlerta("Error:" + ex.getMessage());
return false;
}
this.mostrarAlerta("Envio OK");
return true;
}
Método para mostrar alertas:
public void mostrarAlerta(String msg){
Alert frmAlert = new Alert(msg);
frmAlert.setTimeout (Alert.FOREVER);
switchDisplayable (frmAlert, getForm());
}
Bibliografía:

Proyecto tagua http://sourceforge.net/projects/tagua/files/ Octubre 10, 2011
Manual de programación J2ME http://mygnet.net/manuales/j2me/manual_programacion_j2me.510 Octubre 10, 2011
Arranque rápido para programar J2ME http://netbeans.org/kb/docs/javame/quickstart.html Octubre 10, 2011