6. Está montado en una placa que a su vez se calza sobre el “shield”, formando una especie de pirámide de circuitos de 3 pisos (contando la propia Arduino). Esta placa contiene el integrado 74LS47, convertidor de binario a 7 segmentos, del cual, anotaremos como curiosidad, se utilizan las 16 combinaciones de sus 4 entradas binarias. De esta manera pueden verse ocasionalmente en el display “caracteres” que no corresponden a ninguna cifra decimal, e incluso caracteres que no existen en la especificación del chip, los cuales se logran conmutando rápidamente 2 códigos distintos. Los 3 transistores restantes forman un conmutador izquierda / derecha, que convenientemente manejado desde la Arduino permite desplegar bastante información usando sólo 5 salidas digitales y un diseño sumamente sencillo. Doble display led de 7 segmentos
7. 0 - in - control remoto IR 1 - out - "E" (clock 2) LCD / BackLight LCD 2-4 - out - "bus de direcciones" 74HC259 4 - detector de proximidad IR (led) 2 - motor radar 3 - Clock 1 (shift register) LCD 5 - out - "Dato" 74HC259 / buzzer / "Dato" LCD 6 - out - "enable" 74HC259 (lógica negativa) 11 - out - volumen buzzer (PWM) 7 - out - led display C 8 - out - led display B 12 - out - led display D 13 - out - led display A 9,10 - out - motor cassette (PWM) Utilización de pines de la Arduino Como puede verse, absolutamente todos los pines de la Arduino son utilizados en este proyecto, algunos con más de una función. El diseño no fue enteramente planificado, sino que se fueron agregando nuevas partes, tratando de modificar mínimamente lo que ya estaba hecho. Esto explica que la distribución de los pines resulte desordenada y aparentemente caprichosa. Cabe destacar que las decisiones de diseño respondieron siempre a la simplicidad y facilidad de implementación, pero no sólo en lo electrónico, sino que muchas veces pesaron factores de tipo mecánico, espacial, cercanía de las partes, cableado, etc. Tanto el 74HC259 como el 74LS374 (que se usó como “shift register”) y el display LCD poseen un pin de “data” y otro de “enable”, “clock” o simplemente “E” (en el caso del LCD, son 8 los bits de data). El 74HC259 posee además 3 pines para direccionamiento. El 74LS47 (interface para el display de 7 segmentos) tiene 4 entradas, llamadas A, B, C y D. Los pines del 1 al 5 de la Arduino tienen todos dos y hasta tres funciones. El “truco” consiste en compartir, por ejemplo, los pines de direccionamiento del 74HC259, los cuales mientras no se active el “E” de dicho chip no alteran el estado de los latchs. Esta misma filosofía se aplicó a todos los casos posibles, permitiendo incluso cierta “interacción” entre los módulos, la cual es evidente por ejemplo en el caso del buzzer. Este produce diversos “pitidos involuntarios” cada vez que se escribe en el display LCD, se activan los motores, etc., lo que no constituye sin embargo una limitación, sino que se aprovecha “estéticamente”. analog 2,3,4 - detectores de proximidad analog 5 - encoder magnético en cassette analog 0 - IR Ranger SHARP (10cm = 528; 80cm = 64; inf. cm = 0) analog 1 - posición radar (0, 768, 682, 512) direcciones 74HC259: 0-5 motores paso a paso principales 6 - izquierda/derecha led display 7 - atraer cabezal cassette
12. Estructura mecánica Consiste en una cruz de aluminio, en uno de cuyos ejes (el más ancho) van montados los 2 motores principales, y en el otro dos ruedas “locas” (pivotantes) provistas además de sendos resortes que las mantienen siempre en contacto con la superficie, absorbiendo posibles irregularidades de la misma. Se trata entonces del clásico robot tipo “tortuga”. (de hecho, esta estructura fue construida por el año 1990, junto con Daniel Lopes, y solíamos referirnos a ella como “la tortuga”).
13. Los motores principales Se trata de unos motores paso-a-paso (steppers) de gran tamaño, obtenidos del desguace de unas computadoras Texas Instruments de la década del 70. Cada uno de estos motores movía el cabezal de unas grandes disketteras (obsérverse el “sinfín” de que disponen, a tales efectos). Al estar acoplados directamente a las ruedas, sin ningún sistema de reducción, el movimiento resultante es un tanto tosco, necesitando además una poderosa fuente de alimentación y una velocidad no excesiva en la secuencia de control. Este diseño se realizó en forma totalmente experimental, sin ningún cálculo previo, como casi todas las restantes partes del robot. No obstante, en una etapa posterior, a través del software, se optimiza todo lo posible el control, lográndose interesantes velocidades de movimiento en forma bastante estable. Un detalle interesante de estos motores es que, a pesar de contar con 4 conectores, no se trata de los clásicos steppers bipolares, sino que son motores de “reluctancia variable”, muy raros hoy en día, con 3 bobinas y un polo común, lo que al final de cuentas simplificó bastante el diseño del circuito de control. Éste consta de 6 darlingtons de potencia y los obligatorios diodos para cancelar la corriente inversa de las bobinas.
14. El control remoto IR Se trata de un control remoto IR doméstico, de 38KHz como es habitual en casi todos los equipos del mercado. Este control en particular, pertenecía a una tarjeta de video MSI. Varios controles remotos fueron probados con el receptor IR de 38KHz (IRM8510), y todos ellos funcionaban, algunos incluso compartían idéntico sistema de codificación, diferenciándose únicamente en el byte identificatorio. El MSI pertenecía al grupo mayoritario en lo que a codificación se refiere, utilizando el llamado “protocolo NEC”, que se verá en detalle en la parte de software. Fue elegido por la gran cantidad de botones con que cuenta, y por la relativa coherencia de los mismos con las posibles funciones de un robot. ch. up 26 ch. dn 30 vol. up 27 vol. dn 31 ch rtn 23 enter 77 mute 12 << 22 >|| 20 >> 24 rec 72 |< 73 stop 89 >| 91 Códigos del control remoto IR power 18 suspend 80 sleep 81 home 82 DVD 84 FM 86 arriba 92 abajo 95 izquierda 93 derecha 94 enter 83 menu 16 exit 78 mts 19 c.c/ttx 79 tv 64 fm radio 65 music 66 pictures 67 video clip 68 dvd 69 game zone 70 application 71
15.
16. El reproductor de cinta Sin dudas uno de los puntos fuertes del proyecto fue incluir este reproductor de cinta para que el robot “hable”. El sistema de control de posición para que los mensajes sean reproducidos con exactitud, es también una de las partes que más experimentación requirió, y cuyo software de control resultó más complicado. El software incluye una cantidad de sofisticaciones, entre ellas un sistema de “freno” para contrarrestar la inercia, un detector de “vueltas falsas”, etc. El dispositivo fue extraido de un contestador telefónico Panasonic, un modelo que fue muy popular en nuestro pais. El amplificador de audio fue extraido de otro dispositivo de micro-cassette, esta vez un pequeño grabador portátil. El mecanismo original es relativamente sencillo, consta de un motor DC para mover la cinta en ambas direcciones, a distintas velocidades, un electroimán para atraer el cabezal de grabación/reproducción y un “encoder” magnético acoplado a uno de los ejes de carrete. El encoder en el aparato original, presumimos que se usa únicamente para detectar si la cinta llegó a uno de los extremos, mientras que para el posicionamiento de los mensajes se usan señales de audio grabadas en la propia cinta. Sin embargo, en nuestro diseño el encoder es usado en todo momento para medir la cantidad de vueltas que dio el carrete, tarea que resultó bastante compleja ya que el comportamento de este dispositivo es a veces, en apariencia, impredecible. El control de velocidad y dirección se efectúa mediante 2 salidas PWM de la Arduino, conectadas a un puente en “H” de 4 transistores NPN. Por útimo se colocó un relé funcionando a la par del electroimán, para desconectar el amplificador de audio de la alimentación mientras no se usa y de esta manera ahorrar energía.
17. Control de volumen para el buzzer Otra salida PWM se utiliza para controlar el volumen del buzzer. Nuevamente, se trata de un diseño extremadamente sencillo. Una salida PWM conectada a un filtro RC para obtener una tensión de control; ésta se amplifica con un operacional CA3140 en configuración “seguidor de tensión” (salida conectada directamente a entrada inversora) y la salida de este operacional se aplica a un circuito VCA muy elemental. El VCA consiste en 2 transistores puestos en “serie”, como muestra la figura. Uno de ellos recibe la señal de audio y el otro la tensión de control (un VCA es esecialmente un “multiplicador” de señales).
18. El “radar” Un módulo de gran elaboración, aunque en la práctica no resulta tan útil. Consiste en un medidor de distancia Sharp GP2D12, con salida analógica, que mide distancias entre 10 y 80cm basándose en el ángulo de reflexión de un haz IR, montado sobre una estructura giratoria con un encoder de 4 posiciones. La estructura giratoria consta de una caja de reducción extraida de un reloj electrónico de pared, con un motor DC en la base. El encoder consiste en una red de resistencias con 4 contactos puestos formando un cuadrado, sobre la superficie que recorre otro contacto acoplado con la pieza giratoria. Este contacto se dirige a una entrada analógica de la Arduino, proporcionando 4 voltajes fácilmente identificables, cada vez que la pieza se encuentra en una de las 4 posiciones buscadas (una especie de “servo casero”, la red de resistenicas sustituye al potenciómetro). Nuevamente es el mismo software de la Arduino el que está a cargo de manejar este dispositivo, como ocurre en casi todo el resto del proyecto. (Apenas el display LCD es el único periférico dotado de un procesador propio.)
19. El display LCD La inclusión de este display LCD de 2 x 16 caracteres (cada carácter formado por una matriz de 7 x 5 puntos) permite desplegar información muy diversa, pero tiene el inconveniente de que sus dimensiones no están en relación con las del robot mismo; desde la distancia normal a la que suele estar el observador, no es posible leer los mensajes en él mostrados. El display utiliza un bus de datos paralelo de 8 bits, y algunas señales de control. Contiene un controlador, un chip KS0066, compatible con el HD44780, lo que significa que este display utiliza el protocolo estándar, clásico de los LCD de este tipo. Para comunicarnos con el display desde la Arduino, utilizamos esta vez un protocolo serial sincrónico, y con el comando “ShiftOut” escribimos los 8 bits en un “shift register”. En lugar de un auténtico shift register, utilizamos un 74LS374, óctuple latch, y conectamos los latchs en cadena, con lo que se obtiene exactamente el mismo resultado. También se puso un transistor para controlar la luz trasera, y un detalle interesante a este respecto, es que el pin que se usa para controlar dicha luz es el mismo que se usa para la señal “clock” del display. Esto es un ejemplo de la técnica de compartir pines llevada al extremo: la señal permanece en reposo tanto en “0” como en “1”, pero cuando es necesario escribir un dato en el display, la señal tiene que conmutar entre ambos estados y luego volver al que estaba. Junto al 74LS374 puede verse el HT640, usado en el trasmisor de RF, que toma el dato del mismo shift register que el display LCD.
20. Trasmisor de RF de 430MHz Finalmente, el último dispositivo en integrarse fue este trasmisor de RF de 430MHz, que hace juego con un receptor de la misma frecuencia colocado en otro robot, permitiendo intercambiar información entre ambos. La comunicación es en una sola dirección (para la otra dirección utilizamos IR, simulando un control remoto) Estos módulos de RF son realmente muy limitados, su velocidad de transferencia de datos no llega a los 2Kb/s, carecen de electrónica de control alguna, es decir no hay control de flujo ni corrección de errores. Lo mejor, entonces, es usarlos en combinación con un par de integrados codificador / decodificador, como en nuestro caso que utilizamos el HT640, si bien la decodificación en el otro robot se hizo por software, usando la Arduino. El HT640 lee permanentemente un byte de la salida del 74LS374, nuestro “shift register”, lo codifica y lo trasmite indefinidamente a través del módulo RF. Obsérvese que de esta manera logramos introducir una nueva funcionalidad al robot, sin modificar prácticamente nada, tal como nos veníamos proponiendo desde el principio. El dato que se trasmite por RF puede escribirse en el 74LS374, sin modificar lo que muestra el display LCD; no obstante, una vez que lo hicimos, si quisiéramos modificar el estado de la luz trasera, por ejemplo, podríamos activar accidentalente el clock y en ese caso sí, el display recibiría un dato incorrecto. Este tipo de cosas son las que hay que tener en cuenta cuando se trabaja compartiendo el hardware de esta manera. A modo de antena, se utilizó un alambre de cobre de 16cm (1/4 de onda).
22. movimientos simples velocidades "atención obstáculo" modos de zig-zag volumen profundidad en los zig-zag y modo automático encendido / apagado los detectores de obstáculo para hacer musiquita el tema del apagado de motores, modo "pause", modo "sleep" modo aleatorio modo automático movimiento acelerado Apendices: Protocolo nec Data sheets del irm8510 Del ht640, de los módulos RF, gp2d12, 259, 374, 7447 , display LCD Circuitos varios Compartir pines mas a fondo Pwm en el atmega Mas fotos