Table of Contents....Portfolio of Work....Informes
 

informes de investigación

por Adam M. Hasler

 
sobre estos
informes
 
informes introductorios
diario de diciembre
 
introducción al Arduino y otras herramientas

 
informes de sensores y protocolos
Making Things Talk proyecto 1
 
Making Things Talk proyecto 2
 
informes de microcontroladores
microcontroladores parte 1: el fracaso
 
microcontroladores parte 2: el éxito
 
microcontroladores parte 3

Making Things Talk proyecto 1: Peluche Pong


describe: En este proyecto, se reemplace la mouse con 4 circuitos, que corresponde con los ejes 'x' y 'y', y los dos botones. Se ponen estos circuitos a dentro de un peluche. Esta serie de circuitos va a través del Arduino, que procesa la información (información digital de los interruptores momentáneos, información análoga de las resistencias), y conecta con un programa en la computadora inicialmente por un USB, y después por bluetooth. Ultimamente, se controla un juego de ping pong con los movimientos de los brazos de un peluche.
fechas: 10 enero hasta 2 febrero
materiales: Arduino, 2 resistencias flex, 2 interruptores momentáneos, 4 resistencias de 10 k-ohm, protoboard, alambre USB, batería de 9V, módulo de Bluetooth

El circuito y Processing

Este proyecto, que empecé inmediatamente después de volver a Buenos Aires de los EE.UU., demuestra la comunicación de dos vías, los protocolos necesarios para esa comunicación, y en el fin la comunicación del modem con la adición del bluetooth al sistema. El sistema entero exige en la comunicación serial, que "involucra cambiar el voltaje de una conexión eléctrica entre el remitente y el destinatario por una rapidez específica." (p. 50) El intervalo representa un bit de información, y cambios en voltaje representa o 0 o 1 para ese bit. Hay dos tipos de comunicación serial: el asincrónico, en que la rapidez está acordado y controlado independientemente entre el remitente y el destinario, y el sincrónico, en que el recipiente controla la rapidez.

Hacer el microcontrolador comunicar con una computadora involucra convertir el serial TTL que habla el microcontrolador al Serial Universal (USB) que entiende la puerta en la computadora a través de que pasa la información del Arduino. El Arduino hace esta conversión para nosotros con un circuito integrado en la placa hecho por FTDI. Otro protocolo serial que discutiré en otro capitulo es el RS-232, más conocido por el conectador del protocolo, el DB-9.

Ponski Circuit
esquemático para el circuito en el peluche

Pong Circuit Photo
mi circuito
Después de entender un poco más sobre los protocolos y la manera de comunicar datos, hubo que empezar armar los circuitos que detectara información y enviara información. Soldé cuerdas largas en las resistencias flex para darles mejor alcanze y permitirme más flexibilidad con la colocación de las resistencias. Hice el igual con los interruptores. Armé el circuito en el Arduino como indicado.

Con el interface físico armado, tuve que probarlo con un programa sencillo. Este programa me diría si produjo y envió datos los circuitos. Siendo seguro que funcionaba el parte físico del sistema, si habría problemas más después en el proceso con hacer todo funcionar, sabría que no fue los circuitos.

Con este programa probé los circuitos, y todos los sensores respondieron. El uso de este programa presenta otro asunto interesante y importante...aprendí, con la sección de USB y TTL, sobre las conexiones entre objetos. Pero ¿qué forma tiene los datos enviados? La información enviado del Arduino como tipo ASCII está organizado en tres partes: el payload, el tail, y los delimiters. El valor que representa la información del sensor es el payload, el tail es el /r o /n en el fin del mensaje, y las comas son los delimiteres. Muchos mensajes también tiene un header, que es una secuencia de bytes en el principio que identifica que sigue. Usaremos headers en otro capítulo. El conjunto de header, payload, delimiter, y tail se llama un packet, y muchos sistemas tiene una largura maxima de packet, función del tamaño del buffer serial. En este caso, el tamaño del packet que enviamos cada unidad de tiempo es 16 bytes.

Ahora, hacemos el programa en Processing que usa la información del peluche para jugar pong. El programa entero está acá. En este programa, dibujamos la pantalla del juego, las paletas, y la pelota. Además, incluye instrucciones de donde el programa debe conseguir la información, vincula la información de las resistencias con las paletas, y el movimiento/animación de la pelota. También incluye todo la información de las reglas del juego y el sistema de puntuación. Pero más allá de estos aspectos obvios, el programa incluye dos aspectos interesantes. Uno, se calibra el mínimo y máximo para los valores de las paletas, que hace más sensible el movimiento de la pantalla. Dos, el programa incluye un "handshake", o saludo. Incluye este para controlar el flujo, un aspecto necesario debido al funcionamiento de la comunicación asincrónica. La computadora recibe mucho más información que necesita para operar el programa, entonces llena el buffer serial rápidamente. Con un handshake, Processing solo pide información cuando la necesita, y el microcontrolador solo envia un packet cuando está pedido. Este mejora la sincronización entre el Arduino y la computadora.

Bluetooth

La segunda etapa del proyecto fue quitar la cuerda USB, remplazándolo con una conexión de radio Bluetooth. Representó el primer reto serio que encontré en las experimentas que hice con Arduino, y pasé varios días intentando averiguar el funcionamiento de Bluetooth y su integración en el sistema existente.

Circuit with Bluetooth
Circuito con módulo Bluetooth
El módulo bluetooth, en este caso el Sparkfun Bluesmirf con Roving Networks Bluetooth Chip, tiene dos interfaces. El primero es la puerta serial típica de RX y TX que se usa para comunicación con el microcontrolador. La otra interfaz es un modem, una tecnología originalmente creada para convertir señales digitales a señales audios para enviarlas por cuerdas telefónicas. El bluetooth, en vez de enviar las señales por cuerdas telefónicas, emite los señales audios como ondas radios, que un recipiente de bluetooth reconvierte a señales digitales. Un rasgo importante y interesante del protocolo de señales radios que usa el bluetooth es el uso de perfiles. Bluetooth tiene muchos niveles, que lo hace útil para convertir inalámbrica varias aplicaciones seriales. Estos perfiles incluye el HID (Human Interface Device, o Aparato de Interfaz Humano, usado para los mouses o tecladores) y aparatos para audio, como auriculares o micrófonos. El más básico es el SPP (Serial Port Profile, o Perfil de Puerta Serial), como lo que vamos a usar para este proyecto. Aparatos intercambian información sobre lo que pueden hacer usando el Protocolo de Descubrimiento de Servicios. La presencia de este protocolo hace el mayor parte del trabajo de hacer los aparatos bluetooth comunicar y mantener una conexión.

Conecté el módulo bluetooth al circuito, ahora con poder de una batería de 9V. Descubrí en este punto que las instrucciones en mi libro sobre conectar el bluetooth al circuito fue incorrecto, debido al uso en el texto de otro modelo de bluetooth más viejo. En los ajustes de bluetooth, el módulo se llamó Firefly. Seguí por el proceso de armar una nueva puerta serial en Mac, un proceso que se llame hacer pareja. Cuando fue completo, empezé mi sketch en processing, que listó las puertas de serial. Vi que la computadora creó puertas 6 y 7 para el bluetooth, con la puerta seis puesto para tty (lo que necesité). A pesar de terminar este proceso, el sketch en processing no respondió a los estímulos en el circuito físico. Aunque fueron pareja, no hubo conexión. El libro dijo que los modelos nuevos de bluetooth no necesitaba palabra clave, pero de todas maneras entré un clave dado en el texto, 1234. Todavía, no conexión.

Modules with Headers
Módulos con nuevos headers
En este punto de darme cuenta que tendría que investigar y experimentar más, hice algo para mejorar la eficiencia de mi proceso Un problema que tenía inicialmente tenía que ver con usar solo alambres para conectar el módulo Bluetooth (más después el chip convertidor USB-a-Serial) al circuito. Soldar tiras del poste a las tablas fue crítico en términos de tiempo usado configurando las conexiones físicas de los circuitos.

Mi programa de pong en processing no respondió a estímulos en el sistema físico...con USB, funcionó, entonces sabía que probablemente no fue problema con el programa. Intenté con mi programa original de probar los datos enviados por el Arduino, y tampoco no había información enviada del Arduino por el bluetooth. Haber eliminados la posibilidad que fue un problema de programación enfoqué en el bluetooth. Investigué un poco, y descubrí el blog de un otro chico haciendo la misma investigación y quien encontró las mismas problemas. En su descripción, contó que los ajustes en el módulo bluetooth fue incorrecto para comunicación entre computadora y Arduino, y que se tiene que cambiar los ajustes del Bluetooth con conexi&$243n USB a la computadora. Específicamente, la rapidez del bluetooth es 11520bps cuando sale de la fábrica, y hay que cambiarlo a 9600, la rapidez que usa el Arduino en este programa. Este me requería avanzar en el texto a la próxima sección, Negociar en Bluetooth. También leer el manual que vino con el módulo del Bluetooth para aprender un poco más sobre las especificaciones y como cambiar los ajustes, y hacer un nuevo circuito con el convertidor USB-a-Serial para hacer una conexión física con mi computadora.

Comandas útiles para el programa terminal:
Lista de puertas seriales:
ls /dev/tty.*
Abre programa de pantalla con dispositivo contectado a la puerta serial:
screen /dev/tty.[nombre de puerta] 9600[o otra rapidez]
Cerra programa de pantalla: empuje "ctrl a \"
En esta sección de libro, aprendemos un poco más sobre comunicaciones del modem, y en esencia aprendemos hacer manualmente lo que hace el asistente de bluetooth en mac. Además, con estas experimentas llegaría al grano de hacer conexiones seriales con el programa terminal de la computadora. Los modems tienen dos modas que abren una conexión, negocian los términos de intercambio de datos, realmente los intercambian, y cierran la conexión. La moda en que intercambian los datos, en que hablamos a traves del modem, se llama (gran sorpresa) la moda datos. La moda en que hablamos al modem se llama la moda comanda, y la colección de comandas que el mayor parte modems usan se llama el protocolo de comanda Hayes AT. Pero como descubrí, después de una semana de frustración, no todos los modems usan esta colección de comandas.

RS232 circuit
Circuito entre USB y Bluetooth
Armé el circuito con el convertidor USB-a-Serial y lo conecté a la puerta USB de mi compu. Abrí un conexión con la puerta serial del bluetooth, un programa pantalla, en el terminal usando el formato de screen (nombre entero de puerta) (Rapidez de datos). Para descubrir el nombre entero de la puerta serial, tecla ls /dev/tty.* en la linea comanda, y selecciona de la lista (nota que se puede hacer esto solo cuando está enchufado el aparato o circuito al USB...no es permanentamente disponible). Hice esto, y encontré solo una pantalla vacía. Intenté ingresar las comandas descritos en mi libro, pero nada pasó. Entonces cerró la pantalla (aprendería cuantas cosas equivocadas hice en este acto en la semana que pasó). Probé varias variaciones de esta, pero sin exito...fue un problema de driver? equipo? ajustes?

Después de varios días probando varias permutaciones del proceso de hacer una conexión, intentar usar ZTerm (un programa de terminal alternativo al Terminal de Mac), y remplazar las baterias después de tanto uso, tuve mi exito. Por fin podía comunicar con el bluetooth. Aprendí que este modelo de Bluetooth no usa las comandas AT, pero colección diferente. Bajé la manual del dispositivo que tiene toda la información de la colección de comandas que utiliza (algo que debía leer al principio). Con estas comandas, podía hacer todos los pasos en el texto, pero con otras comandas. También aprendí que la rapidez base del bluetooth es 115200 baud. Tenía que comunicar con el Bluetooth para cambiar la rapidez, entonces armé el circuito con el convertidor de USB a Serial.

ajustes
ajustes en un programa de pantalla
Abrí Terminal para hablar con el módulo Bluetooth a través del USB. Usé la comanda de arriba para descubrir la dirección de la puerta serial de USB, que tuve conectado al bluetooth en el protoboard (fue en mi caso /dev/tty.usbserial-A7005FGC). Teclé screen /dev/tty.usbserial-A7005FGC 11520. La conexión comenzó en la moda de datos y una pantalla vacía, y para entrar la moda comanda, teclé $$$. Comencé explorar la comandas disponible, que están en 5 categorias: Set (guarda información en el flash del módulo), Get (Recoge y muestra la información guardada), Change (Cambia rapidez serial y paridad) Action (Ejecutar acción como pregunta, conectar), GPIO (Configura y manipula señales GPIO).

Intenté abrir una conexión entre el Bluetooth y la computadora por radio (la que ya tenía fue con el USB). Primero, en la moda comanda busqué otros aparatos de bluetooth que el módulo detecta con la comanda IN,[máximos aparatos de devolver]. Por ejemplo, teclé IN3. Devolvió

Inquiry, COD=0 (significa que busqué cualquier tipo de aparato bluetooth)
0016CB2215DE,38010C,A.M. HASLER's MacBook
001124B93913,102104,A.M. HASLER's iPhone
Found 1

El primer parte de este cadena de números es la dirección única del aparato. El segundo parte es la clase del aparato, y el tercer es el nombre del aparato. Usé la dirección de la computadora para conectarla. Teclé la comanda C, (dirección), que en mi caso fue C,0016CB2215DE. Respondió TRYING (intentando), y CONNECT failed. ¿Por qué? Necesito hacerlas pareja primera, y para hacer eso necesito abrir la conexión en mi computadora por su puerta de bluetooth primero. Para hacerla, abrí otra ventanilla de terminal, y en la misma manera que hice con la puerta USB, abrí un programa de pantalla con la puerta Bluetooth PDA-Sync, así:

screen /dev/tty.Bluetooth-PDA-Sync 9600
Intenté la comanda de conectar otra vez, y cambió el LED a verde. Estuve en la moda de datos con una conexión. Exito. Para asegurar que funcionó y que podía enviar datos desde la computadora al bluetooth usando señales de radio, teclé cualquier cosa, y lo que teclé en una ventana apareció en la otra. Para reentrar la moda de comanda, teclé $$$. Maté la conexión por teclar K, en en las dos ventanas, teclé ctrl A /. Teclé sí, y todo estuvo cerrado correctamente.

Pong on Screen
juego completo y inalámbrico

Ahora, con los ajustes cambiado y después de estar seguro que podía hacer comunicar la computadora con el Bluetooth, regresé al circuito original para hacer mi peluche inalámbrico. De este punto fue fácil. Con el Arduino y el Cluetooth recibieno poder de una batería, y la TX y RX pins del bluetooth conectado con la TX y RX pins en el Arduino, respectivamente. Asegurando que la puerta serial en el programa en processing tenía la puerta serial para mi bluetooth, lanzé el programa. Respondió, por fin, el programa al circuito inalámbrico. Aseguré cerrar el programa antes de cambiar la conexión en cualquier manera para prevenir problemas, y ya...proyecto funcionando y completo.

 
contacto

amhasler[at]gmail[dot]com

 
textos
Making Things Talk
 
Getting Started with Arduino
 
seminarios de Sparkfun
 
otros vínculos
Processing
 
Arduino
 
Estado Lateral
 
Adafruit
 
AVRFreaks
 
Doing the Projects in Making Things Talk