Sin duda la elección del microcontrolador es de las cosas que más problemas me ha dado.
Desde el principio la idea era que el robot contase con 2 microcontroladores, el primero de ellos en el piso inferior que se encargase de controlar los motores, de leer los datos de los sensores, de controlar los leds, etc., y el segundo microcontrolador en el piso superior para almacenar los sketch, controlar la pantalla, leer datos de la MicroSD, y controlar el piso inferior.
Esta división de tareas es muy parecida a la que se hace en el Arduino Robot oficial con sus dos ATmega32u4 (el microcontrolador del Arduino Leonardo). El problema de elegir ese micro es que tiene poca memoria y la mayoría de librerías necesarias, como la del LCD o SD, ya ocupan la mitad de esa memoria. No tendría sentido entonces que el microcontrolador que se encarga de controlarlo todo estuviera limitado después en el número o complejidad de el/los sketch a cargar, o en la tamaño de los menús a mostrar en el LCD.
Ese fue uno de los principales inconvenientes que encontré, pero también surgieron otros según iba probando los módulos. Por ejemplo con la pantalla LCD y el Lector de tarjetas MicroSD, ambos se conectan por ISP sin embargo en el LCD se pueden elegir los pines por si se quiere usar el puerto ISP nativo del microcontrolador o si por el contrario se prefiere «virtualizarlo» usando cualquier otros pines, esto en el lector MicroSD no es posible, al menos con la librería de serie pues solo permite el puerto nativo.
El caso es que ambos dispositivos funcionan correctamente si se conectan al puerto ISP de un Arduino Uno, pero no si se hace sobre un Arduino Leonardo, con esta placa el lector funciona bien solo si se usa el conector ISCP (el conector de 6 pines del lateral) mientras que la pantalla no funciona desde ahí. Para hacerla funcionar es necesario usar otros pines digitales…. pero también surgió otro problema más, y es que la pantalla para que se inicialice hace falta resetarla, y este reseteo funcionaba bien en el Arduino Uno pero no en el Leonardo, al menos no de la misma forma…
Total, que después de un fin de semana perdiendo el tiempo por todos estos problemas decidí finalmente que el microcontrolador del robotDuino sería un ATmega2560 y también que el LCD no sería el de Nokia si no un LCD OLED por conexión I2C.
Este microcontrolador tiene la ventaja de que posee 8 veces más memoria que el Leonardo, es decir 256KiB frente a los 32KiB del otro micro. Además se comporta de forma idéntica a un Arduino Uno, y cuenta con pines de sobra para conectarlo todo. Y en cuanto al precio queda muy parecido, ya que antes eran dos micros, y ahora es solo uno pero hay que sumarle el chip USB>Serial, por lo que el conjunto ronda los 6€
Este sería el esquemático del microcontrolador y de su chip FTDI (adaptador a USB):