Vous êtes sur la page 1sur 11

Programacin III

Tema: Control de una tarjeta Arduino a travs del


puerto USB desde Java
Tutores: Ing. Vladimir Robles Ing. Cristian Timbi
1

Tutorial sobre manejo de puerto USB en Java

Prerrequisitos.

A fin de poder realizar el proceso de instalacin de forma ptima,


Usted deber descargar los siguientes archivos del AVAC y contar con
los siguientes requerimientos:

Paquete con las libreras para manejar puerto USB desde Java: (Ojo,
no debe utilizar otra versin de este paquete, ya que hemos
modificado el cdigo original para que se pueda manejar los
eventos del puerto de forma automtica!).
Cdigo fuente de ejemplo en Java (este cdigo muestra cmo
utilizar el puerto USB).
Cdigo fuente de ejemplo en C (cdigo corresponde a un programa
bsico que escribe datos aleatorios en el puerto desde la tarjeta
arduino)
Arduino Builder: Entorno GUI para compilacin y escritura de
cdigo (programa) de interaccin y comando de tarjeta arduino.
Tarjeta Electrnica: Es importante contar con una tarjeta electrnica
que permita garantizar que la transmisin se est realizando de
forma ptima.

El conjunto de archivos correspondientes a los requisitos antes


mencionados los encontrar adjunto a este tutorial o los podr descargar
desde su AVAC.

Proceso de instalacin de los controladores en Windows.

En esta seccin se explican los pasos a seguir para poder instalar


tanto los controladores (drivers) para Windows como la librera para
Programacin III
Tema: Control de una tarjeta Arduino a travs del
puerto USB desde Java
Tutores: Ing. Vladimir Robles Ing. Cristian Timbi
2

acceder al puerto USB desde Java.

a) Como primer paso debemos conectar la tarjeta Arduino, y cuando


lo hagamos, Windows iniciar automticamente el proceso de
instalacin de los controladores (ilustracin 1).

Ilustracin 1. Men contextual que aparece al conectar la tarjeta Arduino.

b) Si damos clic en el men contextual (ilustracin 1), nos mostrar una


ventana que indica el progreso de la instalacin.

Ilustracin 2. Ventana que muestra el progreso de instalacin del


controlador (driver) de la tarjeta Arduino.

c) Una vez que Windows haya finalizado de instalar el


Programacin III
Tema: Control de una tarjeta Arduino a travs del
puerto USB desde Java
Tutores: Ing. Vladimir Robles Ing. Cristian Timbi
3

controlador (driver), podemos comprobar que el proceso se haya


desarrollado de forma exitosa a travs del panel de control. Para ello,
damos clic en Inicio y seleccionamos la opcin Dispositivos e
impresoras, accin la que mostrar el listado de dispositivos
instalados, donde aparece el controlador USB FT232R USB
UART (ilustracin 3).

Ilustracin 3. Men contextual que aparece al conectar la tarjeta


Arduino.

d) Como ltimo paso, debemos comprobar en qu puerto se ha


conectado la tarjeta. Para ello damos clic con el botn derecho del
ratn en el dispositivo y seleccionamos la opcin Propiedades. En
la ventana que se muestra, debemos escoger la pestaa Hardware.
Programacin III
Tema: Control de una tarjeta Arduino a travs del
puerto USB desde Java
Tutores: Ing. Vladimir Robles Ing. Cristian Timbi
4

Como se aprecia en la ilustracin 4, en nuestro caso se ha


conectado la tarjeta al puerto COM4. Esto puede variar en
funcin de la computadora de cada usuario.

Ilustracin 4. Verificacin del puerto al que est conectado la tarjeta


Arduino.

Creacin de un proyecto para leer datos del puerto USB desde Java.

a) En primer lugar es necesario descargar la librera para acceso al


puerto USB desde Java (ver la seccin 1 de Prerrequisitos).

Una vez que hayamos descargado la librera (nrjavaserial-3.8.8.jar)


debemos crear un proyecto nuevo en NetBeans o Eclipse (sin
archivo principal). Llamaremos a este proyecto
EjemploUSB_Java y le agregaremos una ventana
Ventana.java (ver ilustracin 5).
Programacin III
Tema: Control de una tarjeta Arduino a travs del
puerto USB desde Java
Tutores: Ing. Vladimir Robles Ing. Cristian Timbi
5

Ilustracin 5. Creacin del proyecto EjemploUSB_Java para probar la


conexin con el puerto USB desde Java.

b) Como segundo paso, debemos agregar la librera nrjavaserial-


3.8.8.jar a fin de que Java pueda acceder al puerto USB y leer los
datos que le enva la tarjeta. Para ello damos clic con el botn
derecho el nombre del proyecto (EjemploUSB_Java) y
seleccionamos la opcin Propiedades.

En la ventana que aparece debemos escoger la opcin Libreras


(parte superior izquierda) y dar clic en el botn Add
JAR/Folder (Agregar JAR/Folder). Esto mostrar una ventana
que nos permitir escoger la ubicacin del archivo JAR que
descargamos previamente, lo seleccionamos y deber aparecer
como se muestra en la ilustracin 6.
Programacin III
Tema: Control de una tarjeta Arduino a travs del
puerto USB desde Java
Tutores: Ing. Vladimir Robles Ing. Cristian Timbi
6

Ilustracin 6. Men para agregar la librera de acceso al puerto USB


desde Java.

c) Ahora damos click en el botn OK y deberemos modificar el


cdigo de la ventana (Ventana.java) para que quede como se indica
en la tabla 1. Recuerde que debe cambiar el evento de cerrado
automtico de la ventana, a fin de que podamos agregar un listener
para cerrar primero el puerto y luego la ventana. Este cdigo puede
encontrarlo en el AVAC (seccin 1).

package ejemplousb_java;

/**
*
* @author UPS - SiiA
*/
public class Ventana extends javax.swing.JFrame implements gnu.io.SerialPortEventListener{
Programacin III
Tema: Control de una tarjeta Arduino a travs del
puerto USB desde Java
Tutores: Ing. Vladimir Robles Ing. Cristian Timbi
7

// Variable que representa el puerto USB y permite realizar la conexion con el mismo
private gnu.io.NRSerialPort puertoUSB;
// Variable que representa el flujo de datos que envia el puerto USB
private java.io.DataInputStream flujoUSB;
// Variable con la coordenada x que envia la tarjeta electronica
private int x;
// Variable con la coordenada y que envia la tarjeta electronica
private int y;

/**
* Creates new form Ventana
*/
public Ventana() {
initComponents();
setBackground(java.awt.Color.WHITE);
try{
// Abrimos el puerto en el puerto COM4 y con 9600 baudios de velocidad
puertoUSB=new gnu.io.NRSerialPort("COM4",9600);
// Nos conectamos al puerto USB
puertoUSB.connect();
// Indicamos que queremos saber cuando lleguen nuevos datos. Que nos notifique.
puertoUSB.notifyOnDataAvailable(true);
// Agregamos un listener para saber que hacer cuando llegan nuevos datos.
puertoUSB.addEventListener(this);
System.out.println("Puerto USB Listo...");
}catch(Exception e){
e.printStackTrace();
System.exit(-1);
}
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent we){
System.out.println("Cierra puerto...");
// Es importante cerrar el puerto cuando ya no se lo utilice
puertoUSB.disconnect();
System.exit(0);
}
});
}

// Dibujamos un punto en las coordendas x e y que nos manda la tarjeta Arduino


public void paint(java.awt.Graphics g){
super.paint(g);
g.setColor(java.awt.Color.BLUE);
g.fillOval(x,y,7,7);
Programacin III
Tema: Control de una tarjeta Arduino a travs del
puerto USB desde Java
Tutores: Ing. Vladimir Robles Ing. Cristian Timbi
8

// Aqui controlamos la llegada de nuevos datos.


public void serialEvent(gnu.io.SerialPortEvent evento){

try{
// Verificamos que el evento generado sea de llegada de datos del puerto
if(evento.getEventType()==gnu.io.SerialPortEvent.DATA_AVAILABLE){
System.out.println("LLegan datos....");
// Obtenemos el lector del flujo
flujoUSB=new java.io.DataInputStream(puertoUSB.getInputStream());
if(flujoUSB.available()>0){
x=flujoUSB.read();
y=flujoUSB.read();
System.out.println("x: "+x+" y: "+y);
repaint();
}
}
}catch(Exception e){
e.printStackTrace();
}

/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());


getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);
Programacin III
Tema: Control de una tarjeta Arduino a travs del
puerto USB desde Java
Tutores: Ing. Vladimir Robles Ing. Cristian Timbi
9

pack();
}// </editor-fold>

/**
* @param args the command line arguments
*/
public static void main(String args[]) {

/* Create and display the form */


java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Ventana().setVisible(true);
}
});
}
Tabla 1. Ejemplo de cdigo para leer datos del puerto USB.

Instalacin de programa de control en tarjeta Arduino


Para la instalacin o subida del programa de control de la tarjeta arduino
vamos a utilizar un IDE para facilitar su compilacin y despliege en la
memoria ERPROM de la tarjeta.
a) Conectamos la tarjeta a la computadora (considerar que el driver
debera estar instalado previamente).
b) Ejecutamos el programa ArduinoBuilder.exe
Programacin III
Tema: Control de una tarjeta Arduino a travs del
puerto USB desde Java
Tutores: Ing. Vladimir Robles Ing. Cristian Timbi
10

c) Cargamos el programa codigo_arduino.ino (cdigo fuente de la


aplicacin de ejemplo) utilizando el botn Load Sketch / Hex
d) Seteamos los parmetros de configuracin correspondientes a la
tarjeta que tenemos:
BoardType: Arduino Duemilanove (328)
Clock : 16 Mhz
d) Utilizamos el botn Build Only para validar el cdigo del
programa.

e) Y finalmente para desplegar en la tarjeta utilizamos el botom


COM4 o el corresponiente al puerto sobre el que se instalado el
driver de la tarjeta

Nota final y enlaces de inters.

Es importante mencionar que el cdigo que estamos usando en este


ejemplo permite colocar una capa sobre el gestor del puerto USB, a fin
de hacer ms sencilla y prctica la tarea de enviar y recibir datos a travs
del puerto USB. Asimismo, es fundamental tener presente que la tarjeta
Programacin III
Tema: Control de una tarjeta Arduino a travs del
puerto USB desde Java
Tutores: Ing. Vladimir Robles Ing. Cristian Timbi
11

Arduino incorpora un conversor serial propio. Finalmente, en el siguiente


listado podr encontrar las diferentes libreras que se han usado para este
ejemplo:

Librera original para manejar el puerto USB a travs de la capa


RXTX2: http://rxtx.qbang.org/wiki/index.php/Download (sin soporte para Windows).
Librera que agrega soporte para Windows en RXTX2:
https://code.google.com/p/nrjavaserial/
Sitio oficial de descarga del IDE de Arduino:
http://www.arduino.cc/en/Main/Software

Vous aimerez peut-être aussi