Archivos mensuales: julio 2012

Controlador para servomotores USB, con entradas y salidas digitales

Para mi proyecto de tesis (recuerdan la Plataforma Stewart?), realizado con mi compañera Natalia Gonzalez, tuvimos la necesidad de diseñar una tarjeta controladora de servos, que nos permita controlar simultáneamente hasta 8 servos, con entradas y salidas digitales adicionales, y controlado por puerto USB. Para esto, hemos utilizado un microcontrolador PIC 18F4550, que tiene el hardware para conexión USB integrado dentro del microcontrolador, y dicho puerto USB puede ser configurado como un puerto serial emulado, lo que facilita muchísimo la interfaz con el PC, al no necesitar programar drivers específicos para nuestra tarjeta electrónica.

Como conocemos, cada servomotor necesita un pulso, cuyo ancho debe variar entre 1.25 y 1.75ms (siendo 1.5ms el ancho de pulso necesario para llegar a la posición central), que debe ser refrescado cada 20ms para mantener su posición. Controlar un servo por medio de interrupciones no presenta mayor inconveniente, pero para controlar 8 simultáneos, hay que poner un poco a trabajar el cerebro.

Usando una sola interrupción para controlar los 8 servomotores, lo que debemos hacer es multiplexar al timer 0, de tal manera, que aproximadamente cada 4ms, se dispara una nueva interrupción, que indicará que salida de servo se debe activar, y el tiempo que estará activa, de acuerdo a los valores de posición que asignemos a cada servo.

Los datos de la posición de cada servo, se los enviará via comunicación serial por el puerto USB, para esto se ha definido un pequeño protocolo de comunicación con la tarjeta electrónica, que responde a los siguientes comandos:

// comandos:
// 's' muestra ok para verificar conexion
// 'd'x escribe dato de 8 bits. espera dato de salida
// 'q'x activa salida x (0-7)
// 'w'x desactiva salida x (0-7)
// 'r' devuelve un dato de 8 bits de entrada del puerto D
// 'p'xy asigna al servo x (caracter entre 0 y 7) el valor y (caracter con un código ASCII entre 0 y 255)

Con estos comandos, además de poder controlamos los servos, tenemos la posibilidad de usar las entradas y salidas digitales programadas para la tarjeta.

El esquema del circuito es bastante sencillo, tal como lo mostramos a continuación:

Algo a tomar en cuenta en el diseño de la tarjeta electrónica, es la alimentación del circuito. El microcontrolador, puede ser alimentado directamente con los +5V del puerto USB, pero los servos, dependiendo del tipo, pueden consumir mucha mas corriente de los 1000mA que puede entregar el puerto USB de un computador personal. Es por esto, que tenemos 2 lineas de alimentación: Vdd que alimenta el microcontrolador (y está enlazado a +5V del puerto USB) y V+ que es una alimentación externa para los servos (que incluso, para darles mayor torque, puede subir hasta 6V, o más, si usamos servos HV).

Para el diseño del PCB, se utilizó una placa de doble lado, con un diseño bastante sencillo. El diseño como tal no es crítico, ya que se manejan señales de baja frecuencia.

El software que corre en el microcontrolador, fué realizado en C, usando el compilador propio de Microchip. El código fuente, con todas sus librerías, puede ser descargado en este enlace y el link del driver para el puerto serie (en sí es un archivo inf, con las definiciones del puerto USB) puede ser descargado aquí.

Podemos decir que se puede mejorar un poco el software (podrían agregarse entradas analógicas únicamente cambiando el código fuente, sin modificar el hardware), pero para nuestro proyecto, esta tarjeta electrónica funcionó perfectamente.

Les dejo un video del robot, que utiliza servos 6 estandard, cuyo control es realizado por la tarjeta electrónica que presentamos acá.

Y el video final de la plataforma (el que fué presentado en la sustentación final de la tesis)

La historia de los videojuegos (en video)

Les dejo un remix de juegos clásicos. Este video fué realizado usando cortes y el audio de estos juegos

  • Zork
  • MULE
  • Dam Busters
  • Flight Simulator
  • Kings Quest: Quest For The Crown
  • DOS Ninja
  • Hard Hat Mack
  • Chess
  • Donkey
  • Lode Runner
  • Sid Meier’s Pirates
  • Burger Time
  • Galactix
  • Where In The World Is Carmen San Diego
  • Alley Cat
  • Pool of Radiance
  • Wizardry
  • Oregon Trail
  • Leisure Suit Larry in The Land of The Lounge Lizards
  • Space Quest: The Sarien Encounter
  • Defender of The Crown
  • Jeopardy!
  • Captain Power and The Soldier of The Future
  • Cannonball Blitz
  • Arctic Fox
  • California Raisins
  • High Rollers
  • Wavy Navy
  • Ultima
  • Sim City
  • Prince of Persia
  • Monkey Island 2
  • Lemmings
  • Wolfenstein 3D
  • Kings Quest VI
  • Dune II
  • Sam & Max Hit The Road
  • Command & Conquer: Red Alert
  • Supremacy
  • Civilization
  • Doom
  • Sim City 2000
  • Day of The Tentacle
  • Myst
  • Mech Warrior 2
  • Wing Commander 3
  • X-Com UFO Defense
  • Command & Conquer
  • Warcraft II: Tides of Darkness
  • Star Wars TIE Fighter
  • Elder Scrolls Arena
  • Warlords II
  • Duke Nukem 3D
  • Diablo
  • Elder Scrolls II
  • Starcraft
  • Heroes of Might and Magic III
  • Fallout
  • Blade Runner
  • Riven
  • Half-Life
  • Quake II
  • Counter Strike 1.6
  • Deus Ex
  • Star Wars: Knight of The Old Republic
  • Max Payne
  • Battlefield 1942
  • Medal of Honor: Allied Assault
  • Warcraft 3
  • Diablo II
  • Empire Earth
  • Unreal Tournament 2004
  • Splinter Cell
  • Half-Life 2
  • Hitman: Blood Money
  • Doom 3
  • Team Fortress 2
  • Left 4 Dead 2
  • Portal
  • Fallout 3
  • Dead Space 2
  • Gran Theft Auto 4
  • Borderlands
  • Amnesia
  • Civilization V
  • Starcraft 2
  • Limbo
  • Crysis 2
  • Deus Ex Machina
  • Minecraft
  • Portal 2
  • Dota 2
  • Diablo 3

Raspberry Pi! Hands On

Finalmente! El viernes, y luego de un mes de espera (realmente, más de 3 meses, desde que fué anunciada su fabricación), ha llegado a mis manos el Raspberry Pi, el pequeño microcomputador que ha dado muchisimo de que hablar en este último tiempo.

Por qué tanta novelería? Pues revisemos sus características del hardware

  • CPU ARM a 800Mhz
  • GPU Broadcom VideoCoreIV, OpenGL ES 2.0, decodificador 1080p H.264
  • 256MB de memoria RAM
  • 2 puertos USB
  • 1 puertoLAN 100Mbps
  • 1 salida de audio
  • 1 salida de video RCA
  • 1 salida de video HDMI
  • 26 pines de entrada/salida digital GPIO
  • Ranura SD para almacenamiento

En características como tal, no es nada revolucionario, y en procesamiento como tal, equivale más o menos a un computador con procesador Pentium III de 300Mhz, con una tarjeta de video “bastante poderosa” (se puede ejecutar juegos como Quake III Arena sin problema)

Lo que realmente hace notable al raspberry, es primero su precio. Éste tiene un costo de $35 dolares, y DHL, por costos de desaduanización y manejo, cargaron un adicional de $12, entregandonos un computador por $47…. nada mal eh? Además, soporta Linux como sistema operativo, lo que abre muchísimas posibilidades en cuanto al software que se puede ejecutar… teóricamente, toda aplicación de linux para PC, se podría recompilar  y ejecutar sobre el raspberry, tomando en cuenta obviamente las limitaciones de RAM y velocidad.

Como lo pienso usar? no se! jajaja, pero habrá que recordar un poco de Python, para empezar a programar aplicaciones, tomando en cuenta, que este bichito consume menos de 3W a plena potencia, y puede pasar encendido y conectado a la red todo el día sin aumentar la cuenta de energía eléctrica.  Inicialmente, la idea es conectarlo a mi TV, y armarlo como un Smart CRT-TV jejejeje. Mientras lo vaya probando, iré mostrando los avances.

Les dejo algunas fotos del juguete (les recomiendo verlas en full size), para que observen el diseño de la misma. Ojo con el close up del procesador. En realidad es un SoC (System on Chip) que contiene dentro del mismo dado de silicio, el CPU, el GPU, los puertos de Entrada y Salida, y sobre este, en torre, el chip de memoria ram. Realmente un trabajo memorable realizado por la gente de esta fundación.
R-PI

R-PI

R-PI

R-PI

R-PI

Raspberry Pi Smart CRT-TV