Utilizando el puerto paralelo para manipular un carro a control remoto

1. Introducción

Este es un proyecto que realicé cuando estaba en la universidad, hace mucho tiempo, para ser exactos en agosto del 2009. Este proyecto consistía en controlar un carro a control desde la PC haciendo uso del antiquisimo puerto paralelo usado por impresoras.

El funcionamiento es sencillo, simplemente destrozamos el control remoto y lo adaptamos al puerto paralelo smiley, no soy un electrónico, pero, el funcionamiento del puerto paralelo es sencillo. Aunque la mayoria de computadoras modernas no tengan el puerto paralelo, se puede comprar un adaptador USB-LPT1.

1.1. Contenido

  1. Funcionamiento del puerto paralelo.
  2. Diagramas y adaptación del control remoto.
  3. Software para la manipulación del puerto paralelo.

2. Puerto Paralelo

El puerto paralelo era usado para la conexión de impresoras. Antiguamente las impresoras tenian un conector DB25, de 25 pines, el cual se conectaba al puerto paralelo, era muy común el uso de este puerto para realizar "otras tareas" debido a la simpleza para poder enviar señales a través de este puerto. Este puerto trabaja con 5 v.

Cada uno de los pines tiene designado un número especifico, además de estar agrupados.

2.1. Puertos

Los pines del puerto paralelo están agrupados generándose 3 puertos reconocidos por el kernel, además de 8 pines usados para conexión a tierra.

Puerto de datos

Concido como el puerto 888, este puerto es de sólo escritura, por lo cual sólo se pueden enviar datos hacia el dispositvo externo. Consta de 8 pines lo que permite enviar un byte(8 bits), los pines que conforman este puerto son del 2 al 9

Puerto de control

Conocido como el puerto 889, este puerto es de sólo lectura, por lo cual se pueden recibir datos desde el disposivo externo. Consta de 5 pines , los pines que lo conforman son el 10, 11,12,13 y 15.

Puerto de estado

Conocido como el puerto 890, este puerto es de lectura y escritura, por lo cual se pueden enviar y recibir datos del dispositivo externo. Consta de 4 pines, los pines que lo conforman son el 1, 14, 16 y 17.

Masa

Este no es un puerto en si, pero se utiliza como tierra o masa(en cristiano sería la polaridad negativa).

3. Materiales y herramientas

3.1. Materiales

 

PiezaCantidad
Carrito Juguete a control remoto1
Resistencias de 10kohm4
Transistores BC5484
Resistencias de 1ohm4
LEDS de 3 voltios4
Conector Macho DB-251
Cable de Mouse2
Pasta de Soldar1
Estaño1m
Placa para circuito1

3.2. Herramientas

Físicas

Soldador

Computadora con puerto LPT1 habilitado

Software

Sistema operativo GNU/Linux, probado con el kernel 2.6

Compilador GCC

Anjuta DevStudio con Gtk+ y Glade

Suite de diseño elctrónico GEDA (para que fintees de electrónico smiley)

4. Adaptando el control remoto al puerto paralelo

Debido a la simpleza de un control remoto de juguete, sólo debemos reconocer los puntos de contacto, esto permiten el movimiento de derecha, izquierda, adelante y atrás. Estos contáctos concentran unos conectores que al ejercer preción sobre ellos se realiza un contacto que permite cerrar el circuito para cada movimiento, es decir, que cuando el circuito se cierre el control enviará la señal de movimiento para el lado indicado.

En la siguiente imagen podemos ver esos conectores

Lo que haremos es hacer pasar señales desde el puerto paralelo hacia cada uno de los puntos de movimiento (4), haremos uso del puerto de datos del puerto paralelo. En la siguiente imagen podemos ver el diagrama electríco:

Haremos uso de los pines 2, 3, 4 y 5 para el envio de datos desde la PC (Puerto de datos), estos pines estarán conectados a los LEDS, lo cual permitirá observar si se está enviando o no la señal, seguidamente de un transistor para regular el voltaje, y finalmente, conectados a los conectores de movimiento del control remoto.

5. Software controlador

5.1. Conexión al puerto paralelo

La conexión al puerto de datos de la PC es sencillo, se crea el archivo puerto.c para manipular el puerto de datos:

#include <stdio.h>
#include <stdlib.h>
#include <sys/io.h>
#include "puerto.h"
#define BaseAddr 0x378    /* LPT1 */

int EnviarSenial(int senial)
{
        if(ioperm(BaseAddr,3,1)) {
                perror("ioperm");
                return 1;
        }
        int senal =senial;
        if(senal <0 || senal >255)
                printf("Dato incorrecto para el puerto\n");
        else{
                printf("Enviado : %i \n",senal);
                outb(senal,BaseAddr);
        }
    return 0;
}

Ahora creamos el archivo puerto.h para poder usarlo en otros archivos de código:

int EnviarSenial(int senial);

El puerto de datos del puerto permite enviar un byte (8bits), tomando en cuenta los números binarios (0 y 1) sólo se pueden enviar números del 0 al 255.

5.2. Envio de señales de movimiento

Debemos tomar en cuenta la conexión que hemos realizado de los pines para poder realizar la conversión decimal, en la siguiente tabla podemos observar las equivalencias:

PinPeso binariovalor decimalconectado a
22^01C. R. Derecha
32^12C. R. Izquierda
42^24C. R. Adelante
52^38C. R. Atrás

Para hacer uso de la función EnviarSenal de puerto.c debemos enviarle un número entero, este número debe contener las "órdenes", representadas por los movimientos del carro, según el peso binario pero en valor decimal.

Por ejemplo si deseamos que se gire a la derecha el valor del argumento senial de la función será 1, en caso de que deseemos que además retroceda el valor será 9(1 derecha + 8 atras). El valor del argumento senial consiste en simplemente sumar los valores decimales según el movimiento que se desea.

En la siguiente tabla podemos ver los posibles valores para cada movimiento combinado:

MovimientoValor decimal
Derecha + Adelante5
Derecha + Atrás9
Izquierda + Adelante6
Izquierda + Atrás10

Finalmente creamos las interfaces gráficas para poder usar nuestro control desde la PC, llamando a la función EnviarSenial de puerto.c.

Actividad: