PRÁCTICO • Control Remoto

Controlando un Coche a Teledirigido desde Linux (I)

EL COCHECITO

Reconozcamos que si nos ven jugar con un coche teledirigido a nuestra edad pasaremos más de un apuro para explicarnos. ¿Quien nos va a creer si decimos que realmente lo estamos controlando desde scripts shell? POR ALBERTO PLANAS

o se si a vosotros os pasa, pero uno de los temas que más me ha despertado la imaginación desde siempre han sido los robots. Máquinas que incorporan programas que los hace inteligentes y autocontrolados, es apasionante. El proyecto que vamos a emprender, desde luego, no tiene esa complejidad pero es un comienzo: vamos a crear un programa que diseñado por nosotros sea capaz de dirigir un coche radiocontrolado. La inspiración vino tras ojear el libro Linux Toys[1] de la editorial ExtremeTech. El libro dedica un capítulo entero a explicar un proyecto similar a este, pero como interfaz hardware utiliza una placa comercial llamada LynX-Port conectada al puerto serie del ordenador. Por desgracia el precio del dispositivo excede en 150 Euros cualquier presupuesto. La solución que proponemos en este primer artículo además de ser

N

mucho más barata es mucho más divertida y peligrosa (¡cuidado con el cutter y el soldador!).

Lo Duro del Hardware
La mayoría de nosotros, por lo general, somos personas de software: pensamos en operaciones booleanas, instanciaciones de clases y cosas por el estilo. Por el contrario hay gente con una formación en electrónica que piensa en otros términos: diferencias de potencial e intensidades de corrientes. Ellos se quedan con la mitad de la diversión y nosotros necesitaremos cruzar al inhóspito mundo de los transistores y las soldaduras para tener la diversión completa. En una serie de dos artículos vamos a explicar los pasos que hemos llevado a cabo para diseñar y construir una pequeña plaquita que, mediante el puerto paralelo del ordenador, nos

permitirá controlar el movimiento de un coche teledirigido. Antes de empezar la tarea quiero hacer un disclaimer: Yo soy hasta la médula del mundo de las operaciones booleanas, así que he recurrido a mis coleguillas de la otra acera para que me ayuden con todo esto. Así que cualquier error o inexactitud se debe exclusivamente a su^H^H mi ignorancia. ¡Gracias chicos! : )

Presentamos a los Actores
Lo primero es conseguir un coche a radiocontrol con un mando con botones. Hay que tener cuidado en este punto, todo el desarrollo descrito aquí supone que estamos ante un mando que funcione a base de pulsadores o interruptores y no por medio de las palancas que encontramos en modelos más caros y avanzados. En las tiendas esas de “Todo a pocos Euros” encontraremos modelos pre-tuneados (a juzgar por la estética) a bajo pre-

48

Número 07

WWW.LINUX- MAGAZINE.ES

ignoraremos este último pulsador. la pila (ver Figura 2 y 3) Nuestra misión es. ya que se incluye un botón para correr a mayor velocidad: Turbo total. dos extremos del pulsado con un alamAhora la placa queda suelta completabre o con una barrita de metal. sin que medie ningún otro elemento. de hecho si nos fijamos más veremos que el mismo circuito une todos los lados negativos de los Figura 2: Vamos a sacar la caja de la pila con ese cutter tan interruptores. la respuesta era obvia para quien dores tienen una disposición similar a las supiera algo de electrónica. otro para colocar la pila de 9V y una placa de color verde con integrados.Control Remoto • PRÁCTICO cio. ¿Cómo afrontar conectores de la caja de este reto? Esa es la pregunta que le hice a pilas a la placa para dejarlo un amigo y su respuesta no pudo se más tal y como se ve en la Figura 4. Para comprobar esto cable rojo estaba soldado al polo positivo puentearemos de manera temporal los de la pila. Lo normal es encontrar un lugar donde se coloca la antena. WWW. En mi caso hay cinco. Necesitamos nuestra voluntad. Corte y Saturación veremos que desde la parte posterior. mente y podremos retirarla del mando. a la ahora soldar otra vez los voluntad del ordenador.ES Número 07 49 . adelante y atrás. Veremos que la corriente pasará y se Con un cutter cortaremos el encenderán los leds (en caso de existir) y plástico del mando para se empezará a mover el coche en la extraer el contenedor de dirección asignada a ese pulsador. En la misma tienda donde hemos adquirido el conector deberemos preguntar por cuatro optoacopladores 4N25 y ocho resistencias 4K7-0. pueda conmutar el estado de los interruptores del mando por medio de la placa que construiremos. El precio de todo esto no debe exceder los 4 Euros. resistencias y pulsadores. a su vez quedará conectada a la placa controladora del mando a distancia. En mi caso el diente en el coche. Cada pulsador corresponde a cada operación que puede realizar el coche: giro a la derecha. otro al negativo y un tercero que va a la base de la antena. estaban conectasamos el interruptor cerramos el circuito dos los cables para poder luego recompoy se producirá el movimiento corresponnerlos a su lugar correcto. y el cable blanco al negativo. Esto es opcional puesto que se puede usar la misma caja del mando a distancia del coche para esto. Si nos detenemos un momento a analizar la placa del mando a distancia. Pero no era mostradas en la Figura 5. construir y eliminaremos los troalgún tipo de mecanismo que sea capaz zos sobrantes hasta de hacer lo mismo que hemos hecho con darle una forma adeel alambre: puentear el interruptor a cuada. uno va al polo positivo de la pila. Puesto que lo normal es encontrar solo cuatro. ideales para desarmar sin sobresaltos. izquierda. También necesitaremos ensamblar un cable paralelo. Tomaremos un destornillador y abriremos la tapa del mando a distancia (ver Figura 1). También nos daremos cuenta que hay tres cables que salen de la placa. por tanto. desconcertante: transistores polarizados. para ello usaremos un cable de red normal y corriente y un conector paralelo de 25 pines.25W. La idea es que cada vez que emita un pulso desde el ordenador. El esquema general es simple: crearemos un cable paralelo que conectará el ordenador a una placa con los optoacopladores y las resistencias. Abrimos el Mando Vamos a empezar a trabajar. las soldaduras de los cuatro o cinco pulsaVale. Naturalmente anotaremos en Figura 1: El mando a distancia desmontado. De todas maneras yo para practicar pedí un optoacoplador y un par de resistencias extras. Se pueden ver los cinco un papel donde interruptores mencionados en el texto.MAGAZINE. Con un poco de paciencia y del pulsador pertenecen al circuito impreso y otros dos no. dos extremos mi caso. Con mucho cuidado desoldaremos los extremos del cable cercanos al contenedor de la pila. Si seguimos uno de los extremos veremos además que está directamente conectado al polo negativo de la pila.LINUX. Cuando pulamarillo. ésta. Por último buscaremos alguna caja o recipiente para colocar los componentes electrónicos una vez ensamblados. Esto es común a todos los pulsadores. o mejor dicho.

9.ES . inicial. Vamos a usar un ordenador que Si la intensidad de corriente es algo tiene un puerto paralelo. tanto. pin_sequence[i]). 30 printf("clearing pin %d\n". corriente entre los extremos Echando un Cable de los pulsadores de nuestra placa de radiocontrol. 32 } 33 } recibe un nombre: colector. En ese ser que puede ser malo para caso la diferencia de potennuestra controladora. pero para este ¡peligro! Corremos el riesgo ejemplo vamos a considerar de. 29 fgets(buf.PRÁCTICO • Control Remoto algo de lectura se puede entender el funcionamiento del transistor. Dos de en profundidad en el Para poder controlar. Si esta intensidad de la base está dentro de unos rangos. por ellas conectadas al cirsiguiente capítulo. Vcc. Cuando el transistor está en corte no hay corriente entre el colector y el emisor: es como un interruptor abierto. necesitaremos poner la El puerto paralelo es. La corriente pasa generalmente entre el colector y el emisor siguiendo la dirección de la flecha del emisor. y si nos salimos por el límite superior el transistor estará saturado. de 9V. introducir 9V en el que une directamente el puerto paralelo. ya tenemos una parte de la teode entrada solo de entrada) y estaba desría.MAGAZINE. cosa. 7. 5. i++) 20 clear_pin(LP_PIN[pin_sequence[i]]).h> #include <stdlib. Si nos salimos de este rango por abajo. 17 18 /* Nos aseguramos de poner a 0 cada pin */ 19 for (i = 0.LINUX. 5. Con el 50 Número 07 WWW. 11 char buf[6]. 23 while (1) { 24 if (pin_sequence[++i] == -1) 25 i = 0.h" int main() { int pin_sequence[] = { 2. dependiendo cómo se ordenen estos cristales tendremos un transistor NPN o PNP.h> #include <unistd. si nos equivocamos al que el transistor se comporta trabajar con los transistocomo si existiera un cable res. Mi amigo además me explicó otra tinado a conectar la impresora. pines de salida eran solo de salida y los Vale. Eso parece colector y el emisor. En oripila. 31 clear_pin(LP_PIN[pin_sequence[i]]). cero). patilla del emisor en la parte del inteuno de los puertos de comunicaciones rruptor que da al polo negativo de la más veteranos en la informática.c 01 02 03 04 05 06 07 08 09 #include <stdio. el transistor estará en corte. mientras que V1 tenemos que gen este puerto era unidireccional (los ponerla en la parte positiva. Figura 3: Dos horas después ya tenemos la cajita de la pila. De todas maneras solo nos interesa un comportamiento de estos transistores: el que se denomina paso de corte a saturación. La cial entre V1 y tierra sería de solución está entonces en cero. base y emisor. 10 int i. pin_sequence[i]). un pulsador. la diferencia de potencial entre V1 (colector) y el emisor es de Vcc. el transistor amplificará la corriente colector-emisor. 8. Cada cristal es un terminal del transistor y Listado 1: test. puesto que no pasa corriente (y la diferencia de Figura 4: Soldamos la caja a la placa respetando la polaridad potencial entre Vcc y V1 es. 27 set_pin(LP_PIN[pin_sequence[i]]). Un transistor está compuesto por tres cristales semiconductores. Tengo por transistor. 3. stdin). 26 printf("setting pin %d\n". La corriente se controla a partir de una intensidad introducida en la base del transistor. 15 16 pin_output_mode(LP_DATA_PINS | LP_SWITCHABLE_PINS). hay una caída muy pequeña de alimentación diferentes: potencial. -1}.\n"). lo mismo soldaduras traseras de Aunque esto ya lo veremos que un interruptor cerrado. Dos circuitos con dos fuentes de Bueno. mientras que la difedesacoplar los dos circuitos rencia de potencial entre V1 por medio de un nuevo y Vcc es… sí… ¡eso es!: Figura 5: Las cuatro invento: el optoacoplador. Es. naturalmente. 21 22 i = -1. 12 13 if (pin_init_user(LPT1) < 0) 14 exit(0). entonces. 6. 4. Para explicar este modo de funcionamiento nos vamos a remitir a la Figura 6. En este caso el puente colecotro lado una placa conectada a una pila tor-emisor se comporta como un hilo. la el tránsito de cuito. junto con el serie. En este caso si miramos la Figura 6. y desde ese más alta podremos llegar a saturar el puerto voy a emitir pulsos.h> #include "parapin... i < 8. 28 printf("Hit return.

ES Número 07 51 . En la actualicomprendido entre 2. Es el momento Alberto Planas es desarrollador de aplicaciones bajo entornos libres desde hace varios años. vamos a construir un programa (Listado 1) que pondrá a cero los ocho pines de datos. Con esta librería podremos activar y desactivar los pines que deseemos del puerto paralelo.gz cd parapin-1. Todo eso lo veremos ordenadamente en el siguiente número. aunque ya quedan pocos secretos que revelar falta cómo rematar el trabajo. Cómo solo vamos a usar estos ocho este veremos que en la parte donde se terminales de salida de datos podremos espera que soldemos los cables hay una tomar un cable Ethernet (Figura 8) de numeración del 1 al 25.6. Cada pin tiene esos que sobran para soldarlo al conecuna finalidad. por este mes nos vamos a quedar aquí. Para dad es bidirecciocomprobarlo he medido con un mulnal y tiene una tímetro los potenciales de estos ocho mayor velocidad pines y me sale 3. Estos pares de cobre. El conector que hay en el ordenador es puesto que lo usaremos para testear la hembra y el que hemos comprado es corrección del cable que vamos a monmacho de 25 pines. s RECURSOS [1] Linux Toys: http://www. Hacer tests y un programa en C (una variación del listado de este número) que controle cada dirección del coche. Estos cables tienen cuatro nos interesa los 8 pines de datos. multímetros (o polímetros) prestados.MAGAZINE. La compilación de la librería es muy sencilla: Figura 8: El cable ethernet y el conector paralelo antes de soldarlo. alterna sus horas de sueño con las horas dedicadas al estudios de las Redes Bayesianas. EL AUTOR WWW. que dan un total de ocho son los situados entre el 2 y el 9 (ver cables. si no lo hici- mos en cuando soldamos el cable.net [2] Librería parapin: sourceforge. programación con las QT.net/ http://parapin. Es ahora la ocasión. tar -xzvf par pin-1.LINUX. Aficionado a la tecnología desde siempre. deberíamos tener un cable similar al de la Figura 9. hemos extraído la placa del mando y la hemos soldado a la caja de la pila de 9V. pero es lo que teníamos más a mano. Para probar nuestro nuevo cable usaremos la librería de comunicaciones parapin que podremos descargar desde [2].5V y 5V./setup-2.0 .tar. desarrollo en Java y mil cosas más.0. de ir comprobando que cada uno de los cables va recibiendo potencial de manera ordenada por medio de multímetro. Y en el Siguiente Número… Muy bien. aunque a nosotros sólo tor paralelo. enviemos un “0” no paso del tiempo tendremos potencial. Si nos fijamos en tar.linuxtoys. La lógica de estos terminales es positiva: cada vez que envíe un “1” lógico desde el ordenador estaremos transmitiendo un potenFigura 7: Esquema simplificado de los cial alto y cada vez que pines de datos del puerto paralelo. Solo nos queda preparar los optoacopladores y disponerlo todo en una caja vacía. para luego ir activando / desactivando cada uno de ellos en orden ascendente. Son duros y poco maleables.sh make Figura 9: Cable Ethernet soldado al conector paralelo. Una vez pasado el trance y el calor de la soldadura. A partir de una versión modificada de un fichero de ejemplo de la librería.Control Remoto • PRÁCTICO Figura 7). de apuntar en un papel la correspondencia pin/color del cable para usarlo más adelante como referencia. Tenemos un cable preparado con ocho terminales. La documentaeste conector ha ción técnica de este puerto dice que el ido evolucionanpotencial que emite debería estar do. Es conveniente pedir uno de estos como interruptor.0.0. de datos.3V por cada uno de Figura 6: Transistor en la transferencia ellos. perfeccionamiento de C++.

Sign up to vote on this title
UsefulNot useful