Descargar

Sistema de iluminación con leds en JAVA

Enviado por henry


  1. Objetivos
  2. Procedimiento
  3. Programa microcontrolador
  4. Programa JAVA
  5. Bibliografía

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.

edu.red

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:

edu.red

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:

edu.red

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:

edu.red

FIGURA Nº 4

Driver Giovynet para abrir el puerto serie con JAVA

Abrimos el programa eclipse y realizamos un nuevo proyecto:

edu.red

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:

edu.red

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:

edu.red

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):

edu.red

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):

edu.red

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.

edu.red

FIGURA Nº 9

Nombre asignado a la comunicación con hiperterminal

edu.red

FIGURA Nº 10

Dirección al COM2 con el hiperterminal

Las propiedades de la comunicación son:

edu.red

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:

edu.red

FIGURA Nº 12

Ventana hiperterminal conectada al COM2

En el programa java realizamos la ejecución del mismo como Java Aplication:

edu.red

FIGURA Nº 13

Ejecución del programa en JAVA conectada al COM1

Y veremos en el hiperterminal:

edu.red

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:

edu.red

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:

edu.red

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:

edu.red

FIGURA Nº 16

Configuración de nuevo hardware

edu.red

FIGURA Nº 17

Configuración de nuevo hardware

Dar la ruta a la carpeta driver del archivo comprimido.

edu.red

FIGURA Nº 17

Configuración de nuevo hardware

edu.red

FIGURA Nº 18

Finalización de configuración

Para verificar la conexión del nuevo hardware seguimos los siguientes pasos:

edu.red

FIGURA Nº 19

Propiedades de PC

edu.red

FIGURA Nº 20

Propiedades del sistema

Clic en Administrador de dispositivos:

edu.red

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.

edu.red

FIGURA Nº 22

Propiedades del COM19

edu.red

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

edu.red