Módulo LCD basado en Arduino Mega. 



Para poder comprobar el funcionamiento de la electrónica del MiniZ (encoders, realimentación, error, etc..) es necesario poder comunicarse con él, para ello se ha hecho un módulo basado en un Arduino Mega con LCD para visualizar datos y botones digitales y analógicos para manejar el coche durante las pruebas, y también el resto de la electrónica que se vaya conectando a este módulo.

La comunicación con el coche se realizará mediante alguno de los protocolos series disponibles, se podría hacer ésto directamente mediante el puerto serie del pc sin necesidad de crear nueva electrónica, pero el objetivo de este MiniZ además de ser un robot velocista (en el que los concursos cada vez interesan menos debido al triste panorama robótico que hay por aquí), es crear un Scalextric en el que el circuito será idéntíco a los de las pruebas de velocistas.

Los coches seguirán la línea negra sin poder tocar la roja, permitiendo a cada jugador el control de la velocidad mediante un mando similar al de scalextric y ordenar cambios de carril para adelantar o para ir por el carril que más interese en cada parte del circuito. También estará disponible la opción de correr contra coches totalmente autónomos (robot velocista), en el que se implementa la idea de utilizar odometría para poder adaptar la velocidad del coche a las distintas partes del circuito y poder utilizar el freno al final de recta. No tiene mucho sentido quitar la parte de radiocontrol a un coche rc para acabar controlandolo con un mando estilo scalextric, pero la idea además de divertirse aquí es aprender, desarrollar la electrónica y el software que nos permitan correr más que nuestros oponentes, en modo scalextric o en modo robot velocista, y en un circuito tipo velocistas para conducir un coche rc con la emisora hace falta mucha mucha práctica.

Por lo que para llegar a desarrollar todo lo anterior hace falta una placa como la hecha para el Arduino Mega, que permita comprobar el funcionamiento de los distintos pasos que vayamos haciendo en el coche y para ello necesitamos algún tipo de interfaz, que permita probar los módulos de comunicación que seleccionemos para enviar datos (velocidad y carril) y recibir datos (batería, posición, velocidad, error, etc..) del coche, y más importante que podamos conectar los mandos tipo scalextric para el control de los coches y además incluye una comunicación usb con el pc, por lo que es ideal para el fin propuesto. Sin pesar en el  proyecto anterior montarse una placa de este tipo viene muy bien para los proyectos de electrónica, ya que nos proporciona un interfaz para comunicarnos con nuestros circuitos/proyectos, 3 buses serie, adcs, pwm, timers, etc..

Los pines del Arduino Mega que se han ocupado para los botones yl el LCD son los siguientes:

LCD: 11 pines.: del 27 al 37 del conector digital, que se corresponden con:

PA5: Pin Micro 73. Pin Arduino: conector digital, pin 27. Funciones: AD5. Módulo LCD: Pin LCD RS
PA6: Pin Micro 72. Pin Arduino: conector digital, pin 28. Funciones: AD6. Módulo LCD: Pin LCD R/W
PA7: Pin Micro 71. Pin Arduino: conector digital, pin 29. Funciones: AD7. Módulo LCD: Pin LCD  E

PC0: Pin Micro 53. Pin Arduino: conector digital, pin 37. Funciones: A8. Módulo LCD: Pin Data Bit 7.
PC1: Pin Micro 54. Pin Arduino: conector digital, pin 36. Funciones: A9. Módulo LCD: Pin Data Bit 6.
PC2: Pin Micro 55. Pin Arduino: conector digital, pin 35. Funciones: A10. Módulo LCD: Pin Data Bit 5.
PC3: Pin Micro 56. Pin Arduino: conector digital, pin 34. Funciones: A11. Módulo LCD: Pin Data Bit 4.
PC4: Pin Micro 57. Pin Arduino: conector digital, pin 33. Funciones: A12. Módulo LCD: Pin Data Bit 3.
PC5: Pin Micro 58. Pin Arduino: conector digital, pin 32. Funciones: A13. Módulo LCD: Pin Data Bit 2.
PC6: Pin Micro 59. Pin Arduino: conector digital, pin 31. Funciones: A14. Módulo LCD: Pin Data Bit 1.
PC7: Pin Micro 60. Pin Arduino: conector digital, pin 30. Funciones: A15. Módulo LCD: Pin Data Bit 0.

PG0: Pin Micro 51. Pin Arduino: conector digital, pin 41. Funciones: WR (Write strobe to external memory). Módulo LCD: Pin sin conexión.
PG2: Pin Micro 70. Pin Arduino: conector digital, pin 39. Funciones: ALE (Address Latch Enable to external memory).Módulo LCD: Pin sin conexión.
PL6: Pin Micro 41. Pin Arduino: conector digital, pin 43. Funciones: Ninguna.Módulo LCD: Pin sin conexión.

PL5: Pin Micro 40. Pin Arduino: conector digital, pin 44. Funciones: OC5C. Módulo LCD: LED.
PL7: Pin Micro 42. Pin Arduino: conector digital, pin 42. Funciones: Ninguna .Módulo LCD: LED.
PG1: Pin Micro 52. Pin Arduino: conector digital, pin 40. Funciones: RD (Read strobe to external memory). Módulo LCD: LED.

PK1: Pin Micro 88. Pin Arduino: conector Analog In, pin 9. Funciones: ADC9/PCINT17. Módulo LCD: Pulsador.
PK2: Pin Micro 87. Pin Arduino: conector Analog In, pin 10. Funciones: ADC10/PCINT18. Módulo LCD: Pulsador.
PK3: Pin Micro 86. Pin Arduino: conector Analog In, pin 11. Funciones: ADC11/PCINT19. Módulo LCD: Pulsador.
PK4: Pin Micro 85. Pin Arduino: conector Analog In, pin 12. Funciones: ADC12/PCINT20. Módulo LCD: Pulsador.
PK5: Pin Micro 84. Pin Arduino: conector Analog In, pin 13. Funciones: ADC13/PCINT21. Módulo LCD: Pulsador.
PK6: Pin Micro 83. Pin Arduino: conector Analog In, pin 14. Funciones: ADC14/PCINT22. Módulo LCD: Pulsador.
PK7: Pin Micro 82. Pin Arduino: conector Analog In, pin 15. Funciones: ADC15/PCINT23. Módulo LCD: Pulsador.

PF0: Pin Micro 97. Pin Arduino: conector Analog In, pin 0. Funciones: ADC0 (ADC input channel 0). Módulo LCD:  Potenciometro.
PF1: Pin Micro 96. Pin Arduino: conector Analog In, pin 1 Funciones: ADC1. Módulo LCD:  Potenciometro.

El resto de pines de los conectores del Arduino Mega siguen teniendo acceso al mundo exterior con un conector macho y uno hembra para cada pin. Se ha añadido a todos los pines (incluidos los anteiores utilizados) una resistencia de 220 Ohmios en serie para proteger al puerto de errores de programación que lo puedan quemar, en el caso de que pueda influir sobre alguno de los periféricos pues se quita y se pone una de 0 Ohmios en su lugar.

Los pulsadores están filtrados mediante un RC que entra al Trigger Schmitt del puerto, el valor de los condensadores más grandes que tenía por aquí son 220 nF, la resistencia de pull-up del pulsador 100k y la del RC 10K, los condensadore habría que subirlos a 1 uF para filtrar más tiempo de rebote, la resistencia ya es suficientemente grande ya que el puerto como entrada tiene una corriente de 1 uA por lo que no es aconsejable subir esta resistencia en lugar del condensador, ya que nos iríamos acercando al umbral mínimo del trigger.

Se ha sacado la conexión ICSP delante del LCD ya que quedaba debajo de éste y aprovechando el bus I2C se ha añadido una memoria eeprom de 1 Mega, además de las resistencias de pull-up correspondientes para el funcionamiento del bus de 4k7.

Por lo demás subo el pcb y las fotos del montaje, click para mayor resolución.

PCB.

Montaje:











Video del funcionamiento.


Código.
.
blog comments powered by Disqus