1.
OBJETIVOS
El objetivo del presente proyecto es llevar
los conocimientos en programación JAVA al control de
puertos de una computadora, en sistema operativo
Windows.
Investigar formas posibles que se tiene
para abrir los puertos de una computadora, evaluar cada una de
ellas y encontrar la mejor solución para nuestro
propósito.
Determinar los materiales y programas que
se deben necesitar, para el control del puerto. Investigar cuales
son los procedimientos para usar el puerto USB de una computadora
personal, ya que los nuevos modelos no incluyen puertos serie ni
paralelo.
2.
PROCEDIMIENTO
El fin del proyecto de fin de curso de la
materia de COMPUTACION PARA INGENIERIA, en nuestro caso es
realizar la apertura del puerto serie de una computadora
personal, para controlar y realizar la automatización de
una vivienda, donde se controlara el encendido y apagado del
circuito de iluminación de la vivienda.
Para este propósito pensamos que la
solución más actual que podemos proponer es una el
puerto USB, el primer problema fue como realizar la
gestión de este puerto y unir este con el lenguaje JAVA,
los siguientes párrafos hacen referencia a los puntos
investigados y usados en el proyecto.
2.1 PROTOCOLO USB
Sin realizar mucha teoría que se encuentra en
todos lados de red, nos vamos directo al grano, lo que se
realizara es una comunicación bidireccional usando el
puerto USB, se realizara la gestión del mismo usando un
microcontrolador de la familia MICROCHIP de código
PIC18F4550.
FIGURA Nº 1
ENCAPSULADO DEL MICROCONTROLADOR
PIC18F4550
Este posee un periférico de
comunicación USB, existen básicamente tres tipos de
comunicación en protocolo USB:
? BULK USB
? HID USB
? CDC USB
Nosotros usamos el CDC USB que en
términos mas explícitos seria el COMMUNICATIONS
DEVICES CLASS, este tipo de comunicación nos perite
realizar cualquier comunicación entre el
microcontrolador y un programa de
computadora (en nuestro caso JAVA).
Con la comunicación CDC USB podemos
emular que la conexión es COM estándar, pero con la
diferencia que se están enviando datos a mucha más
velocidad, es decir
cuando usamos la comunicación CDC es
como si estuviéramos usando una comunicación serie
normal.
Para esto debemos realizar un ajuste en el
programa del microcontrolador para que la computadora lo
reconozca como un puerto serie COM VIRTUAL, microchip nos provee
de un driver para esta comunicación que es el
mchpcdc.inf.
Que se instala de la siguiente
forma:
FIGURA Nº 2
Instalación del driver USB de
microchip
Este proceso de instalación no
produce ningún tipo de ventana se la realiza de forma
inmediata, con este driver instalado y grabado el
microcontrolador con un firmware incluya la gestión del
puerto ya podemos realizar la comunicación entre el
microcontrolador y la pc.
El firmware que debemos incluir en el programa del
microcontrolador está incluido en el archivo .rar que
acompaña a este proyecto y en el punto de programa
microcontrolador se aprecia como se lo debe incluir.
2.2 CIRCUITO ELECTRONICO
El circuito electrónico usado para
este proyecto, lo realizamos en el software PROTEUS que es muy
usado para simulación de circuitos basados en
microcontroladores, y en sus nuevas versiones incluye en conector
USB para las simulaciones.
Circuito electrónico
usado:
FIGURA Nº 3
Circuito Electrónico usado para el
proyecto
Como se aprecia en esta ultima figura, se
está conectando un circuito de reloj con un cristal
resonador de 20 MHz, los leds simulan las lámparas de tres
habitaciones, estos tres bits pueden ser ingresados en un
circuito de potencia con TRIACS y encenderían
lámparas de 100 W de potencia activa.
En el proyecto usaremos la tensión de 5V que
entrega el puerto USB de la computadora, entrega una corriente de
500mA suficiente para encender los leds y alimentar al circuito
eléctrico.
2.3 ECLIPSE
Usamos el programa eclipse para la
compilación de nuestro proyecto, sobre este usaremos un
driver que se encargara de abrir el puerto serie para este
programa.
2.4 DRIVER PUERTO SERIE
El driver para puerto serie se puede
descargar gratuitamente de internet, está en formato .rar
y se puede buscar por el nombre GiovynetDriver.rar una vez
descargado mostrara:
FIGURA Nº 4
Driver Giovynet para abrir el puerto
serie con JAVA
Abrimos el programa eclipse y realizamos un
nuevo proyecto:
FIGURA Nº 5
Nuevo Proyecto JAVA
Escogemos en Java Project, aparecerá
una nueva ventana y le damos como nombre RS232_10 y seleccionamos
la opción crear proyecto desde una fuente
existente:
FIGURA Nº 6
Nuevo Proyecto JAVA
En el archivo .rar se incluye la carpeta
serial dentro de la carpeta JAVA, seleccionamos la misma, en mi
computadora se encuentra en el escritorio:
FIGURA Nº 7
Nuevo Proyecto JAVA de fuente
existente
Clic en aceptar y finish deberíamos
ver que cargo el programa que estaba dentro de la carpeta, el
código que se ve en la figura debajo es un ejemplo que
imprime Hola Ramirex (este programa es de ejemplo el que
está en la carpeta es el que se utilizo en el programa
final):
FIGURA Nº 7
Programa ejemplo del puerto
serie
Para realizar una verificación que
si el programa está enviando los datos correctamente
usaremos el programa Virtual Serial Port que realiza la
conexión virtual de dos puerto serie virtuales (no existen
físicamente):
FIGURA Nº 8
Programa Virtual Serial Port
Una vez hecho esto abrimos el hiperterminal de Windows
(si no se tiene se puede descargar de la red), con el que
conectaremos nuestro programa JAVA, el programa en JAVA esta
configurado en el COM1 y el hiperterminal debe estar conectado en
el COM2 según la conexión que hicimos con el
Virtual Serial Port.
FIGURA Nº 9
Nombre asignado a la comunicación
con hiperterminal
FIGURA Nº 10
Dirección al COM2 con el
hiperterminal
Las propiedades de la comunicación
son:
FIGURA Nº 11
Propiedades de comunicación del
COM2
Clic en aceptar y el hiperterminal
está listo para recibir datos por el puerto serie COM2,
nos muestra la siguiente figura mostrando cono
característica CONECTADO:
FIGURA Nº 12
Ventana hiperterminal conectada al
COM2
En el programa java realizamos la
ejecución del mismo como Java Aplication:
FIGURA Nº 13
Ejecución del programa en JAVA
conectada al COM1
Y veremos en el hiperterminal:
FIGURA Nº 14
Verificación de envío del
COM1 al COM2
Este ejemplo imprime Hola Ramirex, ahora
realizaremos un programa que envié datos
numéricos
para el proyecto seria enviar:
Dato 11 Enciende la lámpara
1
Dato 12 Apaga la lámpara
1
Dato 13 Enciende la lámpara
2
Dato 14 Apaga la lámpara
2
Dato 15 Enciende la lámpara
3
Dato 16 Apaga la lámpara
3
El programa correspondiente para este
procedimiento es el que esta descrito en el punto programa java
una vez ejecutado con el Run-Java Aplication se aprecia en la
consola de Eclipse:
FIGURA Nº 15
Pestaña consola del programa JAVA
en Eclipse
Apreciándose los datos en el
hiperterminal los datos 11, 12, 13, 14, 15 y 16 imprimidos lado a
lado:
FIGURA Nº 15
Verificación de envió de
datos al COM2
Ahora nos toca con el
microcontrolador.
3. PROGRAMA
MICROCONTROLADOR
El programa del microcontrolador fue realizado en CCS
PCHW, que realiza la apertura del puerto USB en CDC y captura los
datos que envía el programa en JAVA y entra en un
menú de selección en el cual enciende o apaga los
leds, que en nuestro caso simulan el circuito de
iluminación de una vivienda.
El programa es el siguiente:
#include <18F4550.h>
#fuses
HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#USE fast_IO (B)
#include ".incluirusb_cdc_ramirex.h" void
main() {
BYTE value;
delay_ms(300); SET_TRIS_B(0x00);
OUTPUT_B(0);
usb_cdc_init();
usb_init();
do
{
value = gethex_usb();
switch(value)
{
case 0x11:
output_high(PIN_B0);
delay_ms(100);
break;
case 0x12: output_low(PIN_B0);
delay_ms(100);
break;
case 0x13:
output_high(PIN_B1);
delay_ms(100);
break;
case 0x14: output_low(PIN_B1);
delay_ms(100);
break;
case 0x15: output_high(PIN_B2);
delay_ms(100);
break;
case 0x16: output_low(PIN_B2);
delay_ms(100);
break;
default: output_high(PIN_B0);
output_high(PIN_B1); delay_ms(50);
}
delay_ms(100);
} while (TRUE);
}
El firmware que se carga es él
".incluirusb_cdc_ramirex.h", que también les incluyo en
el archivo comprimido.
Este programa se debe cargar al chip usando
un programador de microcontroladores, el archivo que se debe
cargar en el microcontrolador es el .hex
Cuando se conecta el microcontrolador con
la computadora por primera vez se aprecia:
FIGURA Nº 16
Configuración de nuevo
hardware
FIGURA Nº 17
Configuración de nuevo
hardware
Dar la ruta a la carpeta driver del archivo
comprimido.
FIGURA Nº 17
Configuración de nuevo
hardware
FIGURA Nº 18
Finalización de
configuración
Para verificar la conexión del nuevo
hardware seguimos los siguientes pasos:
FIGURA Nº 19
Propiedades de PC
FIGURA Nº 20
Propiedades del sistema
Clic en Administrador de
dispositivos:
FIGURA Nº 21
Administrador de dispositivos
En la figura 21 se aprecia al nuevo puerto
COM19, por el cual nos comunicaremos entre el microcontrolador y
el programa JAVA, también podemos ver las propiedades del
COM19.
FIGURA Nº 22
Propiedades del COM19
FIGURA Nº 23
Propiedades del COM19
Ahora el microcontrolador está listo para enviar
y recibir datos por el puerto USB en CDC, cabe mencionar como se
aprecia en la última grafica el puerto esta denominado
como COM19 entonces el programa en JAVA también debe estar
configurado en COM19, esta denominación no es constante y
puede variar según el equipo.
4. PROGRAMA
JAVA
package serialporttest;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import giovynet.serial.Baud;
import giovynet.serial.Com;
import giovynet.serial.Parameters;
public class Main
{
public static void main(String
args[]) throws Exception
{
Parameters configuracion = new
Parameters(); configuracion.setPort("COM19");
configuracion.setBaudRate(Baud._9600);
configuracion.setMinDelayWrite(10);
Com com1= new
Com(configuracion);
BufferedReader in;
in = new BufferedReader(new
InputStreamReader(System.in));
int m = 0;
System.out.println (" ");
System.out.println
("////////////////////////////////////////////////////");
System.out.println ("// PROGRAMACION PARA
INGENIERIA II //"); System.out.println ("// PROYECTO DE
FINAL DE SEMESTRE //"); System.out.println ("// CONTROL
DE LAMPARAS A TRAVES DEL PUERTO USB //");
System.out.println ("// //");
System.out.println ("// Opciones de control: //");
System.out.println ("// 1. Encender la lampara de la
habitacion A //"); System.out.println ("// 2. Apagar la
lampara de la habitacion A //"); System.out.println ("//
3. Encender la lampara de la habitacion B //");
System.out.println ("// 4. Apagar la lampara de la
habitacion B //"); System.out.println ("// 5. Encender
la lampara de la habitacion C //"); System.out.println
("// 6. Apagar la lampara de la habitacion C //");
System.out.println ("// 7. Salir del programa //");
System.out.println
("////////////////////////////////////////////////////");
System.out.println ("
");
do
{
System.out.println ("-> Ingresar el numero
correspondiente a la acción a
realizar:");
m = Integer.parseInt (in.readLine
());
switch (m)
{
case 1:
System.out.println (" -> Se
encendio la lampara 1");
com1.sendString("11");
break;
case 2:
System.out.println (" -> Se
apago la lampara 1");
com1.sendString("12");
break;
case 3:
System.out.println (" -> Se
encendio la lampara 2");
com1.sendString("13");
break;
case 4:
System.out.println (" -> Se
apago la lampara 2");
com1.sendString("14");
break;
case 5:
System.out.println (" -> Se
encendio la lampara 3");
com1.sendString("15");
break;
case 6:
System.out.println (" -> Se
apago la lampara 3");
com1.sendString("16");
break;
case 7:
System.out.println ("Fin del
programa n");
com1.close();
break;
}
}
while (m != 7);
}
}
Hacer correr el programa con clic derecho
sobre algún espacio vacio del código Run-Java
Aplication y según se escoja el menú de opciones de
enecederan o apagaran los leds.
Para una apreciación grafica se
puede ver el funcionamiento del mismo en YOUTUBE con el
nombre
PUERTO USB CON JAVA UMSA
INGENIERIA
5.
BIBLIOGRAFIA
Las páginas usadas que nos ayudaron
y merecen el reconocimiento nuestro son:
? La pagina se sixca, con ejemplos de
aplicación USB
? MuchoTrasto – ejemplos de
aplicaciones USB CDC
? La pagina de Red-Raven con
explicación adicional y muy buen contenido.
? No podía faltar la pagina de
www.todopic.com
? Libro Compilador C CCS y Simulador
Proteus – Eduardo Garcia Brejio
? La biblia de Java
? Aprenda Java como si estuviera en
primero
Autor:
Ramiro Luis Lima Poma
Henry J. Choque Villca
Pedro Alex Montaño
Tinta
Claudia Mollo Pari
DOCENTE: Lic. Irma Prado
CARRERA: Ingeniería
Eléctrica
FECHA DE ENTREGA: Diciembre 9 del
2011
UNIVERSIDAD MAYOR DE SAN ANDRES FACULTAD DE
INGENIERIA
PROYECTO FINAL DE COMPUTACION PARA
INGENIERIA II