Sumo Controller Board

Este es un proyecto que empecé hace unos meses, y es el diseño de una placa controladora para Robots Sumo (y cualquier otro tipo de Robots). Mi idea era tener en una sola placa todos los componentes y conectores necesarios para un Robot Sumo, entre los que podemos citar, servos o algún otro controlador de motores DC, sensores para medición de distancia (tanto infrarrojos como por ultrasonido), conectores para varios pulsadores/leds indicadores, etc. Además de eso, que sea sencillo para programar (entiéndase, que no se necesite un programador como el pickit 2), ya que la idea es que estas placas sean usadas por los miembros del Club de Robótica. Para esto, la placa tendría que tener un microcontrolador que pueda programarse a si mismo (bootloader).

A continuación el esquemático y una explicación algunas partes de la placa y porque elegí cada componente en particular.

Microcontrolador

Como explicaba anteriormente, la idea es que no se necesite programador para grabar los programas, por lo tanto elegí un microcontrolador que tenga incorporado un modulo USB, en este caso usé un PIC18F47J53 de la empresa Microchip. Elegí este micro además trabaja a 3.3V, esto es una ventaja ya que varios sensores y/o módulos de comunicación (Xbee) trabajan también a esta tensión, además algunos pines del pic soportan hasta 5.5 volts, lo que nos permite conectar dispositivos de 5 volts al PIC. Otra característica muy interesante de este PIC en particular, es que posee una función denominada PPS (Peripherial Pin Select), que nos permite asignar ciertas funciones del PIC (USART, CCP, I2C, SPI) a varios pines posibles (a diferencia de los micros antiguos en los que una función estaba asignada a un pin y no se podía cambiar), facilitando enormemente el ruteado de la placa.

Conectores

La placa posee headers para una facil conexión con dispositivos como servos, o varios sensores, y utiliza la misma ubicación de señales que un servo. Además se tienen otros headers que permiten conectar un sensor de distancia ultasonico, como ser el modulo SDM-IO de la empresa IteadStudio.

También ser tiene un header para la programación ICSP del micro si se quiere hacer por este método o para grabar el bootloader la primera vez, y un header para conectar un conversor USB-Serial para enviar/recibir datos a/de la PC.

El conector mini-USB nos permite conectar la placa a la PC para la grabación de los programas en en microcontrolador una vez que este posea el bootloader. También nos permite alimentar la placa para hacer pruebas, el único cuidado que debemos tener es que el puerto USB de las computadoras pueden suministrar un máximo de 500mA de corriente.

LEDs

La placa cuenta además con 6 Leds (7 en la versión actual) para realizar un debug del codigo o para mostrar algunos datos útiles. Se tiene también un led que indica que la placa está siendo alimentada y dos leds mas que nos indican si se está transmitiendo o recibiendo datos por el puerto serie.

PCB

El diseño de la placa fue hecho con la versión gratuita de Cadsoft Eagle v5.11, y el PCB lo mande a hacer en IteadStudio, utiliando su servicio Open PCB. Es un servicio muy bueno ya que te hacen 10 PCBs (double side, con soldermask a ambos lados, vias, etc.) por 10 dólares (a esto hay que sumarle el envío).

Software

El software utilizado para programar el microcontrolador es el MPLAB C18 de la misma empresa fabricante del microcontrolador, el mismo posee una versión gratuita para estudiantes y ademas nos provee librerías para los periféricos del micro. El bootloader que utilicé está basado en un ejemplo de la Microchip Application Libraries y modificado de acuerdo al hardware de las placas. Sólo la primera vez se necesita un programador (Pickit 2 / Pickit 3) para grabar el bootloader al microcontrolador.

Ya que el bootloader ocupa espacio en la memoria de programa del micro, hay que indicarle al compilador que realice unas modificaciones a la hora de compilar nuestro código. Para eso utilizamos el siguiente codigo:

extern void _startup ( void ); // See c018i.c in your C18 compiler dir
#pragma code AppFirmwareStartLocation = 0x1000

void _reset ( void )
{
	_asm goto _startup _endasm;
}
#pragma code

El código completo para encender y apagar los leds de la placa sería:

#include <p18f47j53.h>
#include <delays.h>

#pragma config WDTEN = OFF     //WDT disabled (enabled by SWDTEN bit)
#pragma config PLLDIV = 3      //Divide by 3 (12 MHz oscillator input)
#pragma config STVREN = ON     //stack overflow/underflow reset enabled
#pragma config XINST = OFF     //Extended instruction set disabled
#pragma config CPUDIV = OSC1   //No CPU system clock divide
#pragma config CP0 = OFF       //Program memory is not code-protected
#pragma config OSC = HSPLL //HS oscillator, PLL enabled, HSPLL used by USB
#pragma config FCMEN = OFF     //Fail-Safe Clock Monitor disabled
#pragma config IESO = OFF      //Two-Speed Start-up disabled
#pragma config WDTPS = 32768   //1:32768
#pragma config DSWDTOSC = INTOSCREF //DSWDT uses INTOSC/INTRC as clock
#pragma config RTCOSC = T1OSCREF//RTCC uses T1OSC/T1CKI as clock
#pragma config DSBOREN = OFF   //Zero-Power BOR disabled in Deep Sleep
#pragma config DSWDTEN = OFF   //Disabled
#pragma config DSWDTPS = 8192  //1:8,192 (8.5 seconds)
#pragma config IOL1WAY = OFF   //IOLOCK bit can be set and cleared
#pragma config MSSP7B_EN = MSK7//7 Bit address masking
#pragma config WPFP = PAGE_1   //Write Protect Program Flash Page 0
#pragma config WPEND = PAGE_0  //Start protection at page 0
#pragma config WPCFG = OFF     //Write/Erase last page protect Disabled
#pragma config WPDIS = OFF     //WPFP[5:0], WPEND, and WPCFG bits ignored

extern void _startup ( void ); // See c018i.c in your C18 compiler dir
#pragma code AppFirmwareStartLocation = 0x1000

void _reset ( void )
{
	_asm goto _startup _endasm;
}
#pragma code

void main ( void )
{
	LATC = 0xC0;
	LATD = 0x00;
	TRISC = 0x00;
	TRISD = 0x00;
	for (;;)
	{
		LATC = ~LATC;
		LATD = ~LATD;
		Delay10KTCYx(250);		// Delay for 500ms
	}
}

Hasta la próxima!

Advertisements

Segunda Reunión del Club de Robótica de la FP-UNA

El sábado 8 de Octubre se realizó exitosamente la Segunda Reunión del Club de Robótica, realmente me sorprendió la cantidad de gente que asistió (aproximadamente 20 personas), ya que esto demuestra que hay mucho interés en este tipo de actividades dentro de la FP-UNA.

A modo de resumen, en la primera reunión hablamos un poco acerca de como surgió la idea de formar el club de robótica y también sobre algunas actividades que queremos realizar antes de que termine este año. Para poder llevar a cabo estas actividades hicimos una pequeña votación para ver por donde comenzar, la mayoría de los que asistieron comentaron que sería muy productivo comenzar con un curso introductorio de lenguaje C, lo que me pareció muy interesante para luego empezar ya a programar microcontroladores y armar nuestros primeros robots!

Así que después de suspender la (primera) segunda reunión (que debería llevarse a cabo el sabado 1 de Octubre pero tuvimos que cancelarla por culpa del mal tiempo), por fin pudimos reunirnos de vuelta. El curso introductorio de C estuvo a cargo del compañero Blas Mercado (Programador, FP-UNA) y fue dictado en uno de los laboratorios de informática de la facultad.

Blas explicando lenguaje C

Algo que vale la pena recalcar es que  mucha gente de informática estuvo ayudando a la gente que no tenía conocimientos de C durante la clase, esto demuestra la voluntad para compartir conocimientos de la gente que asistió. Es muy interesante ya que uno de los objetivos principales del club es justamente ese, integrar alumnos de diversas carreras.

Aproximadamente media hora antes de dar por terminada la reunión, di una pequeña introducción sobre microcontroladores para que la gente vaya viendo un poco más acerca del hardware que vamos a estar utilizando más adelante.

Lastimosamente como solo pudimos quedarnos hasta las 4 de la tarde, era muy temprano para ir a comer pizza como estaba planeado, para la próxima reunión espero que nos organicemos mejor para no dejar pasar otra vez!

En resumen, la reunión fue un éxito, y espero que la gente pueda seguir asistiendo y que se vaya sumando más gente.

Gracias a todos los que pudieron asistir y nos vemos en la próxima reunión.


Primera Competencia de Robots Sumo FP-UNA

El martes 20 pasado, durante la Exposición Tecnológica y Científica 2011 (ETyC), que se realiza anualmente en la Facultad Politécnica de la Universidad Nacional de Asunción, se llevó a cabo la Primera Competencia de Robots Sumo de la FP-UNA.

El evento fue auspiciado por la Cooperativa Universitaria, que proveyó los premios, y Servicio Electromédico Profesional S.A. que proveyó las remeras para el evento.

Este evento fue organizado para ser el primer evento del Club de Robótica de la FP-UNA, el mismo pretende ser un espacio para que alumnos de todos los semestres y carreras de la facultad puedan aprender electrónica, diseño de pcbs, soldadura, diseño y armado de robots, etc. además de ser un lugar en el que alumnos con intereses similares puedan conocerse y compartir conocimientos.

En el evento participaron cinco Robots, Poldestro, Valquiria, Thor, BoogerBot y Gladiador. La tabla de posiciones final fue la siguiente:

1er Puesto – Poldestro 4pts.

2do Puesto – Thor 3pts.

3er Puesto – Valquiria 2pts.

4to Puesto – Gladiador 1pts.

5to Puesto – BoogerBot 0pts.

Esta fue la primera edición de este evento que pretendemos poder organizar todos los años durante la ETyC

This slideshow requires JavaScript.

Muchas gracias a los auspiciantes por confiar en nosotros, a los participantes y a todos los que ayudaron a que esto fuera posible.


Bus Pirate v3.5 Free PCB Build

A few months ago I won a free PCB from Dangerous Prototypes. I chose the Bus Pirate v3.5 SOIC because it seems a very interesting tool. According to DP,

The Bus Pirate is an open source hacker multi-tool that talks to electronic stuff. It’s got a bunch of features an intrepid hacker might need to prototype their next project.

It uses a PIC24FJ64GA002 and some of the features listed in their webpage are:

Support for many serial protocols with line levels of 0 – 5.5 volts:

After a few months of lying in my bench, I finally decide to build it, so I bought the parts from Mouser Electronics and after a few weeks of waiting for the parts I finally assembled it. It was the first time I worked with 0603 components but it resulted to be pretty easy to solder. Also, I had some trouble soldering the FT232RL (I think I even burned it). Here are some pictures of the finished board.

This slideshow requires JavaScript.

Thanks Dangerous Prototypes!


Algunas fotos del INTERCON 2011

Del 8 al 12 de Agosto pasado estuvimos representando a la Facultad Politécnica en el  “XVIII INTERNATIONAL CONGRESS OF ELECTRONIC, ELECTRICAL AND SYSTEMS ENGINEERING” – INTERCON 2011, “V Concurso Peruano de Robótica – IEEE RAS”. Para el mismo presentamos 2 Robots en la categoría de Robots Sumo, Thor-GL y Loki-GL. Fue una experiencia muy interesante ya que conocimos gente de Perú, Bolivia, Ecuador y Brasil! Ojalá podamos repetir la experiencia el año próximo.

Collage of photos of INTERCON 2011

Aquí subo un collage de algunas fotos de la competencia y de los preparativos antes de la competencia.