Vous êtes sur la page 1sur 214

UNIVERSIDAD NACIONAL DE COLOMBIA SEDE MEDELLN FACULTAD DE CIENCIAS - ESCUELA DE FSICA INGENIERA FSICA GRUPO DE INSTRUMENTACIN CIENTFICA E INDUSTRIAL

NOTAS DE CLASE PARA EL CURSO SOBRE REDES INALMBRICAS


Anlisis, Diseo e Implementacin de Instrumentos Virtuales como JavaBeans con comunicacin RS232 y Tecnologas Anexas
-Implementacin de una Red Inalmbrica de Sensores-

DIEGO LUIS ARISTIZBAL RAMREZ M.Sc. en Fsica Profesor Asociado de la Escuela de Fsica

24 de julio de 2008

Agradecimientos
e mis pdres quienes me infundieron l ti y el rigor que gun mi trnsitr por l vidF e mi espos trii y mi hij gmil por su omprensin durnte este o que le dediqu este trjoF e l niversidd xionl de golomi que me h permitido reer profesionlmenteF v llevo muy dentro de mF e mis omperos de l isuel de psi que relizron prte de mi lor doente durnte este o stioF

Lo ms valioso que posee un hombre es la vida. Se le da una sola vez y por eso debe aprovecharla.

xioli hvstrosky
Enorgullecerse del conocimiento, es estar ciego con luz.

fenjmin prnklin
Un excelente crtico sera un artista con mucha ciencia y gusto, sin perjuicio y sin envidia. Esto es difcil de encontrar.

prnois wrie erouet oltire

Resumen

vs redes inlmris @wirelessA estn en onstnte reimiento de tl form que d d vn reemplzndo l tenolog de redes leds dds su )exiilidd y fil instlinF u desrrollo y tenolog h sido pz de integrr en sts pequeos dispositivos llmdos sensoresF isto nos llev onoer un tenolog reienteD innovdorD pz de soluionr prolems de form rpid y on(leF v pidd de monitorer y mnipulr elementos o fenmenos fsios present enormes posiiliddes pr si ulquier disiplin ient(F epliiones interesntes son el monitoreo mientl y l griultur de preisinY est ltim on el (n de ontriuir l desrrollo de nuestro ps el ul tiene grndes poteniliddes en ste setorF v pltform hrdwreEsoftwre que se dise e implement en ests nots soi los sensores instrumentos virtules uy omuniin @trnsfereni de dtosA emple los protoolos igfee y PQPF v instrumentin virtul @sA es un onepto introduido por l omp xtionl snstruments on su softwre vortory irtul snstrument ingineering orkenh @vsiAY l s permite utilizr l omputdor personl @gA omo un instrumento pr relizr mediionesF esD el onepto de s se onie omoD un instrumento que no es relD se ejeut en un omputdor y tiene sus funiones de(nids por softwreF v pltform desrrolld se puede dptr on peques modi(iones otrs pliiones tles omo l utomtizin distriuidF in ls dos primers uniddes se desrrolln los instrrumentos virtules omo entes denomindos tvfensD que son lses espeiles onstruids on el lenguje de progrmin tv y que dn grn funionliddY en ls uniddes tres y utro se desrrolln tvfens visulizdores de tls U

de dtos y de gr(sF in l unidd ino se disuten ls ides sis sore redes inlris igfee de sensores y se desrie el desrrollo del hrdwre pr tl pltformF in l unidd seis se implementn ls lses que proveen l omuniin seril @PQPAF in l unidd siete se omplet l implementin del softwre que dministr l red inlmri de sensores y que tmin permite l interin del usurio on stF

ndice general

1. LA INSTRUMENTACIN VIRTUAL

21

IFIF sntroduin F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IFPF snstrumentin virtul vs instrumentin rel F F F F F F F F F F F F F F F F F F F IFQF il softwre F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IFRF equerimiento en onoimiento F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IFSF elne de ls nots F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
2. JAVABEAN: INSTRUMENTO VIRTUAL

PI PQ PR PS PS
27

PFIF grterstis de un tvfen F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F PFPF ropieddes del tvfen F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F PFQF hisendo e implementndo el tvfen F F F F F F F F F F F F F F F F F F F F F F F F F PFQFIF hesripin de tvfen y su diseo F F F F F F F F F F F F F F F F F F F F F F F PFQFPF gontruyendo un tvfens on el xetfens F F F F F F F F F F F F F F F F F F F PFQFQF gompletr el digo del tvfen F F F F F F F F F F F F F F F F F F F F F F F F PFQFRF histriuin del tvfen F F F F F F F F F F F F F F F F F F F F F F F F F F F F F PFQFSF smplementndo un proyeto que use el tvfen F F F F F F F F F F F F F F F F
3. JAVABEAN: GRAFICADOR

PU PV QH QH QP RH RW SH
61

QFIF sntroduin F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F QFPF grein del tvfens qr( usndo el tpreeghrt F F F F F F F F F F F F F F F F W

TI TP

QFQF hesrrollo de un proyeto que use los dos ens onstruidos F F F F F F F F F F F F F F


4. JAVABEAN:TABLA DE DATOS

TW
81

RFIF sntroduin F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F RFPF ropieddes del tvfen l F F F F F F F F F F F F F F F F F F F F F F F F F F F F F RFQF grein del tvfens l F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F RFRF hesrrollo de un proyeto que use los tres ens onstruidos F F F F F F F F F F F F F F
5. RED ZigBee DE SENSORES

VI VI VP WH
95

SFIF sntroduin F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F SFPF igfee F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F SFPFIF ropgin y modulin F F F F F F F F F F F F F F F F F F F F F F F F F F F F F SFPFPF gps ys F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

WS WT WT WW

SFPFQF opolog F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHH SFPFRF v trm F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHH SFQF il hrdwre F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHP SFQFIF nidd sensorGemisor F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHQ SFQFPF nidd reeptor F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHR SFQFQF il hip fee F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHR SFQFRF vos sensores F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHR SFQFSF rogrm del sg ITfVUU F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHT SFQFTF lnos de ls js de los iruitos F F F F F F F F F F F F F F F F F F F F F F F F IIH SFQFUF lnos de los iruitos F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IIH
6. PAQUETE: COMUNICACIN 121

TFIF sntroduin F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPI TFPF il hrdwre PQP F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPI TFPFIF gonexiones desde el hi F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPP TFPFPF gonstruin fsi F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPP TFPFQF grterstis eltris de d iruito F F F F F F F F F F F F F F F F F F F F IPQ IH

TFPFRF he(niin de los iruitos ms omunes en un hfW F F F F F F F F F F F F F F F IPR TFPFSF gle de onexin F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPT TFPFTF il hip we PQP F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPT TFPFUF gonstruin le seril pr onetr dos g F F F F F F F F F F F F F F F F F IPU TFPFVF gonversin f eril F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPU TFQF smplementin del pquete com_sensor F F F F F F F F F F F F F F F F F F F F F F F F IPW TFQFIF edeuin del thu F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IQH TFQFPF smplementin de com_sensor F F F F F F F F F F F F F F F F F F F F F F F F F IQH
7. APLICACIN: RED de sensores ZigBee 169

UFIF sntroduin F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ITW UFPF v estrutur de l pliin F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IUH UFPFIF v lse Monitoreo.java F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IUH UFPFPF v lse ColorMethalTheme.java F F F F F F F F F F F F F F F F F F F F F F F IUH UFPFQF v lse TableroControl.java F F F F F F F F F F F F F F F F F F F F F F F F F F IUH UFPFRF v lse DespliegueVistas.java F F F F F F F F F F F F F F F F F F F F F F F F F IUH UFPFSF v lse Datos.java F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IUQ UFQF smplementin de l pliin F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IUQ

II

IP

Lista de Figuras

IFIF IFPF IFQF PFIF PFPF PFQF PFRF PFSF PFTF PFUF PFVF PFWF

Osciloscopio real

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

PP PP PS QI QP QQ QR QR QS QT QU QU QV QV QW QW RH RI RW

Osciloscopio virtual

Software HelloDevice de Sena Technologies

JavaBean de un instrumento virtual Vista inicial del NetBeans

F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

Ventana de creacin de proyecto del NetBeans

Ventana de creacin de nueva aplicacin del NetBeans Aspecto actual del panel del proyecto

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

Ventana para crear nuevo paquete con NetBeans

Aspecto del panel Projects con el nuevo paquete mis|underlina beans Creacin de nueva clase con NetBeans

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

Ventana de cracin de una nueva clase con NetBeans

PFIHF Aspecto PFIIF Nodo

del IDE NetBeans con la creacin de la nueva clase

Beans Patterns de la clase GaugeCircular

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

PFIPF Popmen PFIQF Ventana PFIRF Cdigo

para asignar las propiedades del javabean

para asignar las propiedaes del javabean

F F F F F F F F F F F F F F F F F F F F F F F F F F

correspondiente a la propiedad ValorMinimo del javabean GaugeCircular de la ventana de propiedades para dar color al fondo del GaugeCircular para abrir proyecto

PFISF Aspecto PFITF Ventana

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IQ

PFIUF Ventana PFIVF Aspecto PFIWF Abrir PFPHF Creando PFPIF Aspecto PFPPF El

para abrir proyecto

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

SH SI SI SP SQ SQ SR SR SS SS ST SU SU SV SV SW SW TI TP TQ TQ TR TS UH UH UI UI UP UP

del IDE ala brir el proyecto UsarGaugeCircular

una case del tipo JFrame

la calse TableroInstrumentos

del IDE con una instancia de la clase TableroInstrumentos

Palette Manager

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

PFPQF egregndo el jens F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F PFPRF Agregando PFPSF Agregando PFPTF Agregando PFPUF Aspecto PFPVF Una PFPWF Cuatro PFQIF Aspecto PFQPF El PFQQF Aspecto QFIF QFPF QFQF QFRF QFSF QFTF QFUF QFVF QFWF
el javabeans el javabeans el javabeans

de la ventana palette con el nuevo javabeans

instancia del javabeans GaugeCircular

instancias del javabeans GaugeCiecular

PFQHF Cambiar

las propiedades de las instancias de GaugeCircular

del tablero de control

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

poanel Inspector

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

de la ventana despus de ejecutar la aplicacin

Grcas realizadas con JFreeChart

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

Aspecto del JavaBean que graca el modo XY Ventana para crear una nueva clase

Aspecto del panel Projects despus de crear GracaXY Asignar propiedades Agrregar libreras

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

Ventana para crear un nuevo proyecto

Ventana para crear una nueva aplicacin

Aspecto del panel Projects con el proyecto UsarMisBeans de una aplicacin de tipo JFrame

QFIHF Inicio

QFIIF Conguracin QFIPF Aspecto

de la aplicacin TableroInstrumentos

del panel Projects con la aplicacin TableroInstrumentos

IR

QFIQF Aspecto QFIRF Palette

del panel Design con la aplicacin TableroInstrumentos Manager

F F F F F F F F F F F F

UQ UR UR US UT UT UU UU UV UV UW VP VQ VR VR VS WH WH WI WP WP WR WT WU WV WW

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

QFISF Adicionar QFITF Adicionar QFIUF Aspecto QFIVF Dar

los beans al IDE

paquetes de JFreeChart

del panel Inspector

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

formato GridLayout

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

QFIWF Aspecto QFPHF Agregar

del JFrame de la GUI TableroInstrumentos

alios a la GUI de la aplicacin TableroInstrumentos la GUI de la aplicacin TableroInstrumentos

QFPIF Customizar QFPPF Organizar QFPQF Nuevo RFIF RFPF RFQF RFRF RFSF RFTF RFUF RFVF RFWF

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

nombres de variables (dar ms legibilidad al cdigo)

aspecto de la GUI de la aplicacin TableroInstrumentos

GUI de una aplicacin de monitoreo y controlF Aspecto del JavaBean que se disear Ventana para crear una nueva claseF

F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

Aspecto del panel Projects con la clase Tabla.java creadaF Asignar propiedades al JavaBean Tabla. Documentar los beansF

F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

Aspecto del panel ProjectsF Aspecto del panel Design.

Agregar instancias de TablaF

RFIHF Cambiar

los nombres de las variables. las propiedades

RFIIF Customizar SFIF SFPF SFQF SFRF SFSF SFTF

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

Comparacin entre diferentes tecnologas inalmbricasF Aplicaciones ZigBee

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

Canales ZigBee para la banda de 2.4 GHz. Modelo OSI en las redes ZigBee. Topologa ZigBee Tramas ZigBee

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHI

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHP IS

SFUF SFVF SFWF

Estacin de red.

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHQ F F F F F F F F F F F F F F F F F F F F F F F F F F F IHQ F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHR F F F F F F F F F F F F F F F F F F F F F F F F F F F F F III F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IIP F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IIR F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IIS

Foto de una unidad sensora/emisora Foto de unidad receptora XBee-Pro

SFIHF Chip SFIIF Tapa SFIPF Tapa SFIQF Caja SFIRF Tapa SFISF tapa SFITF Caja

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHS

superior de la caja sensora inferior de la caja sensora sensora

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IIQ

superior de la caja receptora inferior de la caja receptora receptora

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IIT F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IIU F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IIV F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IIW

SFIUF Circuito SFIVF Circuito SFIWF Circuito TFIF TFPF TFQF TFRF TFSF TFTF TFUF TFVF TFWF

del emisor del receptor

de los sensores

Conectores RS232

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPP F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPU F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPV F F F F F F F F F F F F F F F F F F F F F F F F F IQH

Conexin RS 232 a PC Chip MAX 232

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPV F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPW F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IQI F F F F F F F F F F F F F F F F F F F F F F F F F F IQP F F F F F F F F F F F F F F F F F F F IQQ F F F F F F F F F F F F F F F IQS F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IQQ

Condexin RS 232 entre dos PC Conversor de USB a Serial

GUI de la conguracin del puerto serial Ventana inicial del NetBeans 5.5

Ventana para crear un proyecto nuevo Ventana para crear la aplicacin

TFIHF Aspecto TFIIF Crear TFIQF Pasos TFIPF Aspecto

del IDE despus de crear la clase principal

el paquete com_sensor

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IQR

del IDE despus de creado el paquete com_sensor

para crear la clases

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IQT F F F F F F F F F F F F F F F F F F F F F F F IQU F F F F F F IQV

TFIRF Creacin TFISF Aspecto TFITF Creacin

de la clase ParametrosPuertoSerial

del IDE despus de la creacin de la clase ParametrosPuertoSerial de la clase ConguracionRS232

F F F F F F F F F F F F F F F F F F F F F F F F IRT

IT

TFIUF Creacin TFIVF Creacin TFIWF Creacin TFPHF Creacin TFPIF Creacin TFPPF Creacin TFPQF Creacin TFPRF Creacin TFPSF Creacin TFPTF Ventana TFPUF Conexin

de la clase ConguracionRS232 de la clase ConguracionRS232 de la clase ConguracionRS232 de la clase ConguracionRS232 de la clase ConguracionRS232 de la clase ConguracionRS232

F F F F F F F F F F F F F F F F F F F F F F F F IRU F F F F F F F F F F F F F F F F F F F F F F F F IRV F F F F F F F F F F F F F F F F F F F F F F F F IRV F F F F F F F F F F F F F F F F F F F F F F F F IRW F F F F F F F F F F F F F F F F F F F F F F F F ISH F F F F F F F F F F F F F F F F F F F F F F F F ISH F F F F F F F F F F F F F F F F F F F F F ITI F F F F F F F F F F F F F F F F F F F F F ITI F F F F F F F F F F F F F F F F F F F F F ITP F F F F F F F F F F F F F F F F F F F F F F ITU F F F F F F F F F F F F F F F F F F F F ITV

de la clase InstrumentoVirtualRS232 de la clase InstrumentoVirtualRS232 de la clase InstrumentoVirtualRS232 que sepliega la aplicacin

F F F F F F F F F F F F F F F F F F F F F F F F F F F F ITT

del mdulo receptor al USB del PC del mdulo sensor

TFPVF Ubicacin TFPWF Ventana UFIF UFPF UFQF UFRF UFSF UFTF UFUF UFVF UFWF

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ITU

que se despliega la ejecutar la aplicacin

GUI Tablero de Control

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IUI F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IUP F F F F F F F F F F F F F F F F F F F F IUR F F F F F F F F F F F F F F F F F IUR

GUI Tablero de Monitoreo Estructura de datos

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IUQ

Importar los paquetes para el proyecto RedZigBee

Creacin de algunas clases e importacin de imgenes Creacin de la clase Datos.java Agregar los JavaBeans

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IUS F F F F F F F F F F F F F F F F F F F IVR F F F F F F F F F F F F F F F F F F F IVS F F F F F F F F F F F F F F F F F F F PHV

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IVH

Agregar los componentes a la clase TableroControl Agregar los componentes a la clase TableroControl receptora acoplada al PC por el puerto USB sensoras sensoras

UFIHF Unidad

UFIIF Unidades UFIPF Unidades UFIQF Tablero UFISF Tablero UFIRF Ventana UFITF Ventana

F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F PHV F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F PHV F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F PHW F F F F F F F F F F F F F F F F F F F F F PIH F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F PIH F F F F F F F F F F F F F F F F F F F F F F PII

de Control

para congurar la comunicacin RS232

de Control

para monitorear una unidad sensora

IU

UFIUF Ventana

que despliega el monitoreo de una unidad sensora

F F F F F F F F F F F F F F F PIP

IV

Lista de Tablas

IFIF gomprin entre ls instrumentiones rel y virtul F F F F F F F F F F F F F F F

PR

SFIF ispei(iones del feeEro F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHS TFIF PQP F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPQ TFPF gonexin PQP entre dos g F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPU

IW

20

Captulo

1
instrumentacin virtual

LA INSTRUMENTACIN VIRTUAL

1.1.

Introduccin
ne prtir del uso del omputdor personl @gAD

il onepto de

omo form de reemplzr equipos fsios por softwreF il g se onvierte en un elemento entrl pr otener mediiones de seles omo temperturD presinD udlD luminosiddD etF il usurio intert on l omputdor omo si estuviese utilizndo un instrumento relD y sus iones se ejeutn trvs de un softwre que reliz ls misms funiones que un equipo relF iste onepto fue introduido por l omp xtionl snstruments en el o PHHID trvs de su softwre vE si IF n instrumento virtul es un ominin hrdwre G softwreD entrdo en el segundo y v ms ll de l simple mediin de orriente o voltjeY involur el proesmientoD nlisisD lmenmientoD distriuin y despliegue de los dtos e informin reliondos on l mediin de un o vris selesD interfz homreEmquinD visulizinD monitoreo remoto del proesoD l omuniin on otros equiposD et PF gomo ejemplo pinsese en el osilosopio trdiionl que tiene un funionlidd y prede(nid desde l fri donde lo disenD produen y ensmlnF is deirD l funionlidd de este tipo de instrumento es de(nid por el frinte del equipoD y no por el usurio mismoF il
osciloscopio virtual

ne preismente prtir del heho de que el g

se puede dptr medinte un ominin propid de hrdwreGsoftwre pr desemper l funin de osilosopioY sin emrgo el softwreD de(ne su funionlidd y prieni y por ello se die que se virtuliz el osilosopioD y que su funionlidd puede ser de(nid un y otr vez por PI

22

CAPTULO 1.

LA INSTRUMENTACIN VIRTUAL

el usurio y no por el frinte @ver pigur IFI y pigur IFPAF il instrumento virtul es de(nido

pigur IFIX

Osciloscopio real

pigur IFPX

Osciloscopio virtual

entones omo un p de softwre y hrdwre que se le greg un g en tl form que permite los usurios intertur on el omputdor omo si estuviesen utilizndo su propio instrumento eletrnio 4heho l medid4F

1.2 Instrumentacin virtual vs instrumentacin real

23

1.2.

Instrumentacin virtual vs instrumentacin real

in l instrumentin virtulD el g es utilizdo pr relizr mediiones de fenmenos fsios representdos en seles de orriente on rngos entre REPH me yGo de voltje on rngos entre HES dF r onstruir un instrumento virtulD se requerir de un gD de un trjet de dquisiin de dtos y el softwre propidoF e vees es neesrio un ondiiondor de selesD dependiendo de l sel yGo pliinD y que se puede o no requerir mpli(inD tenuinD (ltrjeD islmientoD etF i l sel est en el rngo de los CGE S d y no se requiere de islmiento o (ltrjeD l mism puede ser onetd diretmente l trjet de dquisiin de dtosF in el instrumento virtulD el softwre es l lve del sistemD difereni del instrumento trE diionlD donde l lve es el hrdwreF gon el sistem indido nteriormenteD se podr onstruir un osilosopio personlizdoD on l interfz gr( que uno deseeD gregndole inlusive ms funE ionliddX visulizr l ond y simultnemente su espetro de poteniF es mismoD este sistem puede tmin ser utilizdo en l mediin de temperturD o en el ontrol de rrnqueGprd de un om entrfugF is ll donde rdi uno de los priniples ene(ios del instrumento virtulD su )exiilidd QF v l IFI indi lguns de ls priniples diferenis entre el instrumento onE venionl o trdiionlD y el instrumento virtulX v )exiiliddD el jo osto de mntenimientoD l reusiliddD l personlizin de d instrumentoD l rpid inorporin de nuevs tenologsD el jo osto por funinD el jo osto por nlD etF son lgunos de los ene(ios que ofree l instrumentin virtulF v instrumentin virtul puede tmin ser implementd en equipos mviles omoX ompuE tdores porttiles @lptopsAD equipos distriuidos en mpo @ERVSAD equipos distni @onetdos v rdioD snternetD etFAD equipos industrilesD omputdores de mno @heX ersonl higitl esE sistntsAD telfonos elulresF ixiste un trjet de dquisiin de dtos pr si ulquier us o nl de omuniin en g @fD seril EPQPGRVSD prleloD etFAD y existe un driver pr si ulquier sistem opertivo @sxhyD hyD nixD vinuxD weg yD etFAF

24

CAPTULO 1.

LA INSTRUMENTACIN VIRTUAL

l IFIX

Comparacin entre las instrumentaciones real y virtual

Instrumento Real
Denido por el fabricante Funcionalidad especca, con conectividad limitada Hardware es la clave Alto costo/funcin

Instrumento Virtual
Denido por el usuario Funcionalidad ilimitada, orientado a aplicaciones, conectividad amplia Software es la clave Bajo costo/funcin, variedad de funciones, reusable

Arquitectura cerrada Lenta incorporacin de nuevas tecnologa

Arquitectura abierta Rpida incorporacin de nuevas tecnologas, gracias a la plataforma PC

Bajas economas de escala, alto costo de mantenimiento

Altas economas de escala, bajos costos de mantenimiento

1.3.

El software

il ojetivo de ls presentes nots es enser l p de softwre orrespondiente un instruE mento virtulF r esto se empler el lenguje de progrmin de ltim generinD tv y los omponentes que se desrrollrn sern los denomindos tvfensF n tvfen o en es un omponente heho en softwre que se puede reutilizr y que puede ser mnipuldo visulmente por un herrmient de progrmin en lenguje tvF in l industri eletrni omo en otrs industris se ostumr utilizr omponentes pr onstruir plsD trjetsD etF in el mpo del softwre l ide es l mismF e puede rer un interfz de usurio en un progrm tv on se en omponentesX pnelesD otonesD etiquetsD j de listsD rrs de desplzmientoD dilogosD mensD etF n ejemplo de softwre omeril que permite onstruir instrumentos virtules es el relloheviE eD pigur IFQ y pertenee l empres en ehnologies RD l ul se dedi proveer soluiones de redes que onetn si ulquier dispositivo y equipo eletrnio l red de snternet o itherE net medinte protoolos de estndres iertosF in ests nots se enser desrrollr tvfens

1.4 Requerimiento en conocimiento

25

pigur IFQX

Software HelloDevice de Sena Technologies

propios permitiendo el horro de ostos y l implementin de soluiones l medid en proyetos de ingenier donde l instrumentin eletrni est presenteF e h esogido el lenguje de proE grmin tv deido que es de distriuin grtuit SD es rousto y dems multipltformF gomo miente de desrrollo se utiliz el xetfens SFS TD tmin de lire distriuinF emos son de propiedd de un wirosytems UF

1.4.

Requerimiento en conocimiento

r similr el mteril expuesto en ests notsD es neesrio ser progrmr en lenguje tv on el miente de desrrollo @shiA xetfens y tener muy lro los oneptos reliondos on l progrmin orientd ojetosF es mismo deer tener onoimientos sios sore el protoolo de omuniin PQPF

1.5.

Alcance de las notas

vogrr implementr un red inlmri de sensores emplendo instrumentos virtules medinte el uso de l tenolog de los tvfensF

26

CAPTULO 1.

LA INSTRUMENTACIN VIRTUAL

Captulo

JA VABEAN: INSTRUMENTO VIRTUAL

2.1.

Caractersticas de un JavaBean

gomo se de(ni en l sein IFQD un tvfen o en es un omponente heho en softwre que se puede reutilizr y que puede ser mnipuldo visulmente por un herrmient de progrmin en lenguje tvF r elloD se de(ne un interfz pr el momento del diseo @design timeA que permite l herrmient de progrmin o shiD interrogr @queryA l omponente y onoer ls propieddes @propertiesA que de(ne y los tipos de suesos @eventsA que puede generr en respuest diverss iones VF eunque los ens individules pueden vrir mplimente en funionlidd desde los ms simples los ms omplejosD todos ellos omprten ls siguientes rterstisX
IntrospeccinX

ermite nlizr l herrmient de progrmin o shi omo trj el

en
CustomizacinX EventosX

il progrmdor puede lterr l prieni y l ondut del enF

snform l shi de los suesos que puede generr en respuest ls iones del

usurio o del sistemD y tmin los suesos que puede mnejrF


PropiedadesX

ermite mir los vlores de ls propieddes del en pr personlizrlo

@ustomiztionAF PU

28 PersistenciaX

CAPTULO 2.

JAVABEAN: INSTRUMENTO VIRTUAL

e puede gurdr el estdo de los ens que hn sido personlizdos por el

progrmdorD mindo los vlores de sus propieddesF in generlD un en es un lse que oedee ierts reglsX n en tiene que tener un onstrutor por defeto @sin rgumentosAF n en tiene que tener persisteniD es deirD implementr el interfe
SerializableF

n en tiene que tener introspeinF vos shi reonoen ierts puts de diseoD nomres de ls funiones miemros o mtodos y de(niiones de ls lsesD que permiten l herrmient de progrmin mirr dentro del en y onoer sus propieddes y su ondutF

2.2.

Propiedades del JavaBean

n propiedd es un triuto del tvfen que fet su prieni o su ondutF or ejemploD un otn puede tener ls siguientes propieddesX el tmoD l posiinD el ttuloD el olor de fondoD el olor del textoD si est o no hilitdoD etF vs propieddes de un en pueden exminrse y modi(rse medinte mtodosD que eden dih propieddD y pueden ser de dos tiposX wtodo getxomreropieddX lee el vlor de l propieddF wtodo setxomreropieddX mi el vlor de l propieddF n shi que umpl on ls espei(iones de los tvfens se omo nlizr un en y onoer sus propieddesF edemsD re un representin visul pr d uno de los tipos de propieddesD denomind editor de propieddesD pr que el progrmdor pued modi(rls filmente en el momento del diseoF gundo un progrmdorD oge un en de l plet de omponentes y lo deposit en un pnelD el shi muestr el en sore el pnelF gundo se seleion el en pree un hoj de propieddesD que es un list de ls propieddes del enD on sus editores soidos pr d un de ellsF il shi llm los mtodos que empiezn por getD pr mostrr en los editores los vlores de ls propieddesF i el progrmdor mi el vlor de un propiedd se llm un mtodo uyo nomre

2.2 Propiedades del JavaBean

29

empiez por setD pr tulizr el vlor de dih propiedd y que puede o no fetr l speto visul del en en el momento del diseoF vs espei(iones tvfens de(nen un onjunto de onveniones @design ptternsA que el shi us pr inferir qu mtodos orresponden propieddesX

 INICIO DEL CDIGO 

public void setNombrePropiedad(TipoPropiedad valor) public TipoPropiedad getNombrePropiedad( )

 FIN DEL CDIGO 


gundo el shi rg un enD us el menismo denomindo reexin pr exminr todos los mE todosD (jndose en quellos que empiezn por set y getF il shi de ls propieddes que enuentr l hoj de propieddes pr que el progrmdor personlie el enF vs espei(iones de un tvfens de(ne los siguientes tipos de propieddes pr un enX
Simples (Simple)-

propiedd que represent un nio vlor y es independiente de los mios de

ulquier otr propieddF ijemploX

 INICIO DEL CDIGO 

public void setNumeros(int[ ] nuevoValor){ numeros=nuevoValor; } public int[ ] getNumeros(){ return numeros; } //mtodos get y set para un elemento de array public void setNumeros(int indice, int nuevoValor){ numeros[indice]=nuevoValor; } public int getNumeros(int indice){ return numeros[indice];

30

CAPTULO 2.

JAVABEAN: INSTRUMENTO VIRTUAL

 FIN DEL CDIGO 


Ligadas (Bound)-

vos ojetos de un lse que tiene un propiedd ligd noti(n otros ojetos

@listenersA interesdosD undo el vlor de dih propiedd miD permitiendo estos ojetos reliE zr lgun inF gundo l propiedd miD se re un ojeto @eventA que ontiene informin er de l propiedd @su nomreD el vlor previo y el nuevo vlorAD y lo ps los otros ojetos @listenersA interesdos en el mioF
Restringidas (Constrained)-

n propiedd restringid es similr un propiedd ligd slvo que

los ojetos @listenersA los que se les noti( el mio del vlor de l propiedd tienen l opin de vetr @vetoA ulquier mio en el vlor de dih propieddF in est unidd se rer un tvfens que desplegr el speto visul de un instrumento virtulY slo se signrn propieddes simples que fundmentlmente tendrn que ver on su prieni grE ( @es un en visulAF r esto se empler el shi xetfensY s mismo on el mismo xetfens se relizr un pequeo proyeto que utilie este tvfensF

2.3.

Diseando e implementando el JavaBean

2.3.1. Descripcin de JavaBean y su diseo


il tvfen onstruir es un instrumento que tendr l form de l pigur PFIF @en ell se ilustr un
luxometro X

medidor de intensidd luminos o mejor de iluminniAF vs propieddes que

en prinipio se le signrn son ls siguientes @tods simplesAX lor mnimo @winimoA X ipo intF lor mximo @wximoAX tipo intF xmero de divisiones @xumerohivisionesAX ipo intF xmero de sudivisiones @xumeroudivisionesAX ipo intF golor del fondo @golorpondoAX ipo golorF

2.3 Diseando e implementando el JavaBean

31

golor de l tp @golorpAX ipo golorF golor del orde @golorfordeAX ipo golorF golor del disply @golorhisplyAX ipo golorF golor de ls letrs @golorvetrsAX ipo golorF golor de ls rys grndes @golorysqrndesAX ipo golorF golor de ls rys peques @golorysequensAX ipo golorF golor del primer terio @golorrimererioAX ipo golorF golor del segundo terio @goloregundoerioAX ipo golorF golor del terer terio @golorerererioAX ipo golorF niddes @niddesAX ipo tringF vetur @veturAX ipo douleF

pigur PFIX

JavaBean de un instrumento virtual

32

CAPTULO 2.

JAVABEAN: INSTRUMENTO VIRTUAL

gd propiedd tendr signd un variable de instanciaD un mtodo set y un mtodo getY por ejemplo pr el olor de l guj @goloregujAX

 INICIO DEL CDIGO 


private Color colorAguja;

public Color getColorAguja() { return this.colorAguja; } public void setColorAguja(Color colorAguja) { this.colorAguja = colorAguja; }

 FIN DEL CDIGO 


il tvfen se heredr de JComponent filitndo su despliegue gr(o y ls tres de diujo que sern neesris her soresriiendo el mtodo paintComponentF il nomre del tvfen es GaugeCircular y el tmo preferido es PSH de nho por PSH de lto @en pixelesAF

2.3.2. Contruyendo un JavaBeans con el NetBeans


in est sein se onstruir un tvfen que servir omo un poderoso instrumento virtulF
Paso 1.

erir el shi xetfens SFSF il estdo de l ventn es el de l pigur PFPF erir el proyetoX rer li en pile bxew rojetF F F y se rir l ventn de l pigur PFQF ilegir GeneralbJava Application y Next y se desplieg l ventn de l pigur PFRF in el mpo Project Name esriir MisBeans @o el nomre desedo del proyetoAY en el

Paso 2F

Paso 3F

Paso 4F

mpo Project Location elegir el diretorio donde uir este proyetoF hestivr los hekox y her li en FinishF il pnel Projects del shi dee tener el speto de l pigur PFS @ver reE tngulo rojoAF

2.3 Diseando e implementando el JavaBean

33

pigur PFPX

Vista inicial del NetBeans

pigur PFQX

Ventana de creacin de proyecto del NetBeans

34

CAPTULO 2.

JAVABEAN: INSTRUMENTO VIRTUAL

pigur PFRX

Ventana de creacin de nueva aplicacin del NetBeans

pigur PFSX

Aspecto actual del panel del proyecto

2.3 Diseando e implementando el JavaBean


Paso 5F

35

ir el ursor en el nodo del proyeto @MisBeansA y her li derehoY en el popmen

desplegdo seleionr NewsbJava Package F F F @pigur PFTAF

pigur PFTX
Paso 6F

Ventana para crear nuevo paquete con NetBeans

in l ventn desplegd esriir en el mpo Package Name, mis beans @o el nomre

desedoAD y her li en FinishF il speto del pnel Projects es el de l pigur PFUF


Paso 7F

ir el ursor en el nodo mis beans y her li derehoY se desplieg el popmen de l

pigur PFVF

36

CAPTULO 2.

JAVABEAN: INSTRUMENTO VIRTUAL

pigur PFUX

Aspecto del panel Projects con el nuevo paquete mis|underlina beans

Paso 8F

isoger tv glss ldots y se desplieg l ventn de l pigur PFWF

in el mpo Class NameD esriir GaugeCircular @este ser el nomre del tvfens onstruirAF il speto del shi es el de l pigur PFIHF yservr que dems pree el digo generdo en el pnel derehoF
Bean Patterrns
Paso 9F

irse en el nodo

de l lse GaugeCircular.java @ver pigur PFIIA y her li dereho y se desE

plegr un popmen @er pigur PFIPA Y esoger Add y her li en Property y se desplegr l ventn de l pigur PFIQF

r implementr l propiedd ValorMinimo llenr los mpos tl y omo preen en l piguE r PFIQF in el digo fuente de l lse GaugeCircular.java dee preer ls lnes de digo orrespondiente est propiedd @pigur PFIRX pnel dereho del shiAF r implementr l propiedd ColorFondo se sigue el mismo pso W pero en l ventn se llenn

2.3 Diseando e implementando el JavaBean

37

pigur PFVX

Creacin de nueva clase con NetBeans

pigur PFWX

Ventana de cracin de una nueva clase con NetBeans

38

CAPTULO 2.

JAVABEAN: INSTRUMENTO VIRTUAL

pigur PFIHX

Aspecto del IDE NetBeans con la creacin de la nueva clase

pigur PFIIX

Nodo Beans Patterns de la clase GaugeCircular

2.3 Diseando e implementando el JavaBean

39

pigur PFIPX

Popmen para asignar las propiedades del javabean

pigur PFIQX

Ventana para asignar las propiedaes del javabean

40

CAPTULO 2.

JAVABEAN: INSTRUMENTO VIRTUAL

pigur PFIRX

Cdigo correspondiente a la propiedad ValorMinimo del javabean GaugeCircular

los mpos tl y omo se ilustr en l pigur PFISF es se sigue proediendo hst ompletr tods ls propieddes desedsF

2.3.3. Completar el cdigo del JavaBean


F sr l pnel del digo de l lse GaugeCircular.java y gregr el digo que import los pquetes neesriosD

 INICIO DEL CDIGO 


import javax.swing.*; import java.awt.*; import java.awt.geom.*; import java.io.Serializable;

 FIN DEL CDIGO 


egregr el digo que extiend l lse GaugeCircular de JComponent y que implemente l interfe SerializableX

 INICIO DEL CDIGO 


public class GaugeCircular extends JComponent implements Serializable {

2.3 Diseando e implementando el JavaBean

41

pigur PFISX

Aspecto de la ventana de propiedades para dar color al fondo del GaugeCircular

 FIN DEL CDIGO 


el implementr l interfe erilizle le greg l tvfens l rtersti de persisteniF egregr el siguiente digo l lse @el fltnteAD

 INICIO DEL CDIGO 


//variables private int ancho; private double radio;

public class GaugeCircular extends JComponent implements Serializable {

private double desplazamiento_aguja_en_radianes; private double paso;

 FIN DEL CDIGO 


in ese digo se de(ne vriles de instni uxilires que se neesitrn pr relizr lgunos lulos y logrr diujr el enF in el digo del onstrutor por defeto gregr el siguiente digoD

 INICIO DEL CDIGO 

42

CAPTULO 2.

JAVABEAN: INSTRUMENTO VIRTUAL

public GaugeCircular() { //tamao preferido this.setPreferredSize(new Dimension(250,250)); //Valores por defecto maximo=200; minimo=0; lectura=0.0; numeroDivisiones=50;//Requisito:(maximo-minimo)/numero_divisiones debe ser entero numeroSubdivisiones=5; //paso; //Colores por defecto colorFondo=new Color(228,109,0); colorBorde=new Color(255,152,60); colorAguja=Color.orange; colorLetras=Color.orange; colorRayasPequenas=new Color(255,164,109); colorRayasGrandes=Color.orange; //unidades unidades="mm de Hg"; //Colores de los alios colorPrimerTercio=new Color(0,170,0,180); colorSegundoTercio=new Color(0,210,0,180); colorTercerTercio=new Color(230,230,120,180); colorDisplay=new Color(50,50,50); }

 FIN DEL CDIGO 


in ese digo se de(ne el tmo preferido del omponente y los vlores por defeto de ls propieE ddesF egregr l lse el siguiente mtodo responsle de relizr los lulosD

2.3 Diseando e implementando el JavaBean

43

 INICIO DEL CDIGO 


//Cllculos private void calculos(){ ancho=(int)(0.8*getWidth()); //calculo del radio radio=ancho/2; /*Suponiendo que la escala de lectura abarca solo un sector circular de 240 grados, el paso (grados por divisin) se calcula as:*/ paso=240.0/numeroDivisiones; setLectura(); } //lectura de la medicin con el instrumento private void setLectura(){ //En estado de no medicin, el instrumento debe marcar cero double desplazamiento_aguja_en_unidades_de_medida=(lectura-minimo); double valor_de_un_grado_en_unidades_de_medida=240.0/(maximo-minimo); /*Si se piensa que el punto de apoyo de la aguja esta en (0,0), el mnimo valor se est tomando cuando ella est rotada +60 grados*/ Double angulo_lectura_con_cero_calibrado= 60+ desplazamiento_aguja_en_unidades_de_medida*valor_de_un_grado_en_unidades_de_medida; desplazamiento_aguja_en_radianes=Math.toRadians(angulo_lectura_con_cero_calibrado); }

 FIN DEL CDIGO 


egregr hor el digo responsle de diujr el instrumentoF

 INICIO DEL CDIGO 


//dibujo del bean.

public void paintComponent(Graphics g) { //clculos necesarios para dibujar

44

CAPTULO 2.

JAVABEAN: INSTRUMENTO VIRTUAL

calculos(); //Contexto grfico en java 2 Graphics2D g2 = (Graphics2D) g; //Mejora la calidad del dibujo con el antialising de java 2 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.translate((int)(0.1*ancho),(int)(0.1*ancho)); //dibujemos el fondo del marco g2.setPaint(colorFondo); g2.fill(new Arc2D.Double(0,0,ancho,ancho,0,360,Arc2D.OPEN)); //dibujando las rayas mediante una transformacin afin de rotacin //inicia for for(int i=0;i<numeroDivisiones+1;i=i+1){ /*calculo local del ngulo que se debe rotar (esta es una transformacin afn la lnea para dibujarla*/ double teta=Math.toRadians(-120+paso*i); //Hacer la rotacin (transformacin afn) g2.rotate(teta,radio,radio); //Calibre de las rayas g2.setStroke(new BasicStroke((float)(ancho/200.0))); if((i%numeroSubdivisiones)==0){//i es mltiplo del numero_rayas_divisiones //rayas grandes g2.setColor(colorRayasGrandes); g2.draw(new Line2D.Double(radio,0,radio,0.15*ancho)); //marcar en las rayas garndes //calculemos el tamao de este tipo de letra en el dibujo //tipo letra int tamano_letra=(int)(ancho/20); Font tipo_letra= new Font("NewTimes", Font.PLAIN,tamano_letra);

2.3 Diseando e implementando el JavaBean

45

g.setFont(tipo_letra); //Medidor de tamao de letra FontMetrics medidor_dimensiones_letra=g2.getFontMetrics(tipo_letra); int alto_letra= medidor_dimensiones_letra.getHeight(); int ancho_letra= medidor_dimensiones_letra.stringWidth(""+i); int b=(int)(alto_letra/4.0); int a=(int)(ancho_letra/2.0); //marcar en el rango entre min y max double valor_division=(1.0*(maximo-minimo))/numeroDivisiones; g2.setColor(colorLetras); g2.drawString(""+(int)(i*valor_division+minimo),(int)(radio-0.5*ancho_letra), (int)(0.20*ancho)); else{ //rayas pequeas g2.setColor(colorRayasPequenas); g2.draw(new Line2D.Double(radio,0,radio,0.1*ancho)); } /*Regresa al estado inicial:Devuelve la rotacin (Repite la transformacin afn al revs*/ g2.rotate(-teta,radio,radio); }//fin for //dibujemos el borde marco g2.setPaint(colorBorde); g2.draw(new Arc2D.Double(0,0,ancho,ancho,0,360,Arc2D.OPEN)); //dibujemos la aguja g2.translate(radio,radio); g2.rotate(desplazamiento_aguja_en_radianes); //grosor de la aguja g2.setStroke(new BasicStroke((float)(ancho/200.0))); }

46

CAPTULO 2.

JAVABEAN: INSTRUMENTO VIRTUAL

g2.setPaint(colorAguja); GeneralPath aguja=new GeneralPath(); aguja.moveTo(-0.02*ancho,0); aguja.lineTo(0,0.40*ancho); aguja.lineTo(0.02*ancho,0); aguja.closePath(); g2.fill(aguja); g2.fill(new Arc2D.Double(-0.025*ancho,-0.025*ancho,0.05*ancho,0.05*ancho, 0,360,Arc2D.OPEN)); g2.rotate(-desplazamiento_aguja_en_radianes); g2.translate(-radio,-radio); //marcar las unidades y cosntruccin del display int tamano_letra=(int)(ancho/20); //Medidor de tamao de letra Font tipo_letra= new Font("NewTimes", Font.PLAIN,tamano_letra); g.setFont(tipo_letra); FontMetrics medidor_dimensiones_letra=g2.getFontMetrics(tipo_letra); int alto_letra= medidor_dimensiones_letra.getHeight(); //ancho del String de las unidades int ancho_letra= medidor_dimensiones_letra.stringWidth(unidades); //ancho del string del display //redondear a un slo a un decimal de la lectura double lectura_redondeada=(Math.round(lectura*Math.pow(10,1)))/(Math.pow(10,1)); int ancho_numeros_display= medidor_dimensiones_letra.stringWidth(""+lectura_redondeada); //a y b ayudarn a ubicar la posicin del String de la unidades int b=(int)(0.5*ancho_letra); int a=(int)(ancho/5);//(int)(ancho_letra*2.0); //b_b y a ayudarn a ubicar la posicin del String de los nmeros del display

2.3 Diseando e implementando el JavaBean

47

int b_b=(int)(0.5*ancho_numeros_display); g2.translate(radio,radio); //String de las unidades g2.setPaint(colorLetras); g2.drawString(unidades,-b,a); //display: MEJOR HacerJavaBean aparte NUMEROS g2.setPaint(colorDisplay); double b_1=0.2*ancho; g2.fill(new Rectangle2D.Double(-b_1,a+0.3*alto_letra, 2*b_1, 1.2*alto_letra)); g2.setPaint(colorLetras);//nmeros en el display g2.drawString(""+lectura_redondeada,-b_b,a+(int)(1.2*alto_letra)); g2.translate(-radio,-radio); //Alios float grosor=(float)(ancho/150.0); //coloreemos sectores de medida //primer tercio g2.setPaint(colorPrimerTercio);//debe ser con transparencia double ancho_sector_circular_externo=((ancho-2*grosor)); double ancho_sector_circular_interno=(ancho-2*(8*grosor)); Arc2D.Double sector_circular_externo_1 =new 210,-80,Arc2D.PIE); Arc2D.Double sector_circular_interno_1 =new Arc2D.Double (8*grosor,8*grosor,ancho_sector_circular_interno,ancho_sector_circular_interno, 210,-80,Arc2D.PIE); Area area_1_1 = new Area(sector_circular_externo_1); Area area_2_1 = new Area(sector_circular_interno_1); area_1_1.subtract(area_2_1); g2.fill(area_1_1); Arc2D.Double (grosor,grosor,ancho_sector_circular_externo,ancho_sector_circular_externo,

48

CAPTULO 2.

JAVABEAN: INSTRUMENTO VIRTUAL

//segundo tercio g2.setPaint(colorSegundoTercio);//debe ser con transparencia Arc2D.Double sector_circular_externo_2 =new Arc2D.Double (grosor,grosor,ancho_sector_circular_externo,ancho_sector_circular_externo, 130,-80,Arc2D.PIE); Arc2D.Double sector_circular_interno_2 =new Arc2D.Double (8*grosor,8*grosor,ancho_sector_circular_interno,ancho_sector_circular_interno, 130,-80,Arc2D.PIE); Area area_1_2 = new Area(sector_circular_externo_2); Area area_2_2 = new Area(sector_circular_interno_2); area_1_2.subtract(area_2_2); g2.fill(area_1_2); //tercer tercio g2.setPaint(colorTercerTercio);//debe ser con transparencia Arc2D.Double sector_circular_externo_3 =new Arc2D.Double (grosor,grosor,ancho_sector_circular_externo,ancho_sector_circular_externo,50, -80,Arc2D.PIE); Arc2D.Double sector_circular_interno_3 =new Arc2D.Double (8*grosor,8*grosor,ancho_sector_circular_interno,ancho_sector_circular_interno,50, -80,Arc2D.PIE); Area area_1_3 = new Area(sector_circular_externo_3); Area area_2_3 = new Area(sector_circular_interno_3); area_1_3.subtract(area_2_3); g2.fill(area_1_3); g2.translate(-(int)(0.1*ancho),-(int)(0.1*ancho)); }

 FIN DEL CDIGO 


ued implementdo el digo del jvfen que se empler en este ptuloF

2.3 Diseando e implementando el JavaBean

49

2.3.4. Distribucin del JavaBean


irse en el nodo del proyeto Mis BeansD her li dereho y en el popmen desplegdo @pigur PFITA esoger Build ProjectF il tvfen pr distriuir est en el diretorio del proyeto en l rpet dist @est en formto .jarX MisBeans.jarAF is reomendle her un diretorio donE de deposite los ensY por ejemploD un diretorio denomindo mis beansF egregue wisfensFjr en ese diretorioFegregue MisBeans.jar en ese diretorioF

pigur PFITX

Ventana para abrir proyecto

2.3.5. Implementando un proyecto que use el JavaBean


e trt de onstruir un tlero de monitoreo de vriles fsis de un estin tipo invernE deroF
Paso 1F

erir el proyetoX rer li en File bNew Project F F F y se rir l ventn de l piguE

r PFIUF
Paso 2F

ilegir GeneralbJava Application y

NextF

in l ventn desplegd destivr los

hekox y en el mpo Project Name esriir UsarGaugeCircular y her li en FinishF il

50

CAPTULO 2.

JAVABEAN: INSTRUMENTO VIRTUAL

pigur PFIUX

Ventana para abrir proyecto

speto del pnel Projects del shi es el de l pigur PFIVF


Paso 3F

ir el ursor en el nodo del proyeto UsarGaugeCircular y her li derehoF e

desplieg el popmen de l pigur PFIWF


Paso 4F

eleionr NewbJFrame Form F F F e desplieg l ventn de l pigur PFPHF

isriir en el mpo Class NameD TableroInstrumentos y her li en FinishF il shi tom l form de l pigur PFPIF
Paso 5F Adicionar el JavaBean al IDE

in el pnel lette del shi uir el ursor en fens y

her li derehoF e desplieg el popmen de l pigur PFPPF rer li en lete wngerF F F se desplieg l ventn de l pigur PFPQF

Paso 6F

rer li en Add from JAR F F F y se desplieg l ventn de l pigur PFPRF

2.3 Diseando e implementando el JavaBean

51

pigur PFIVX

Aspecto del IDE ala brir el proyecto UsarGaugeCircular

pigur PFIWX

Abrir una case del tipo JFrame

52

CAPTULO 2.

JAVABEAN: INSTRUMENTO VIRTUAL

pigur PFPHX

Creando la calse TableroInstrumentos

pigur PFPIX

Aspecto del IDE con una instancia de la clase TableroInstrumentos

2.3 Diseando e implementando el JavaBean

53

pigur PFPPX

El Palette Manager

pigur PFPQX egregndo el jens

54

CAPTULO 2.

JAVABEAN: INSTRUMENTO VIRTUAL

pigur PFPRX

Agregando el javabeans

rer li en Next y se desplieg l ventn de l pigur PFPSF rer li en Finish y se desplieg l ventn de l pigur PFPTF rer li en CloseF in el pnel Palette del shi pree el tvfens GaugeCircular disponile @pigur PFPUD retngulo rojoAF
Paso 7F Usarlo en el proyecto

errstrr desde el pnel Palette el tvfen GaugeCircular sore el JFrame TableroInstrumentos

del proyeto UsarGaugeCircularF in el pnel Project en Libraries pree hor Misy en el JFrame TableroInstrumentos pree hor insertdo un instni del tE

Beans.jar

vfen GaugeCircular @pigur PFPVAF


Paso 8F Armar un tablero con cuatro instancias del JavaBeans.

2.3 Diseando e implementando el JavaBean

55

pigur PFPSX

Agregando el javabeans

pigur PFPTX

Agregando el javabeans

56

CAPTULO 2.

JAVABEAN: INSTRUMENTO VIRTUAL

pigur PFPUX

Aspecto de la ventana palette con el nuevo javabeans

pigur PFPVX

Una instancia del javabeans GaugeCircular

2.3 Diseando e implementando el JavaBean

57

el tprme instrumentos sgnele omo dministrdor de diseo un qridvyout de P (ls y P olumE ns y rrstre desde el pnel Palette del shi otrs tres instnis del tvfen GaugeCircularF iste tprme tendr hor el speto de l pigur PFPWF

pigur PFPWX

Cuatro instancias del javabeans GaugeCiecular

Paso 9F Cambiar el aspecto de las instancias de los JavaBeansF

rer li sore el instrumento de l esquin superior izquierdX se desplieg el pnel PropertiesD pigur PFQHD que permite mir ls propieddes de est instni del tvfen @oloresDF F F AF is deir permite ustomizr l instni respetivF riendo mios en ls utro instnis se oE tuvo el tlero de l pigur PFQIF
Paso 10 X

r pulir l pliinD proeder mir los nomres de ls instnis del tvfens

en el pnel snspetor por los seldos en l pigur PFQPF gompilr l pliin y ejeutrlF e otiene l ventn ilustrd en l pigur PFQQF

58

CAPTULO 2.

JAVABEAN: INSTRUMENTO VIRTUAL

pigur PFQHX

Cambiar las propiedades de las instancias de GaugeCircular

pigur PFQIX

Aspecto del tablero de control

2.3 Diseando e implementando el JavaBean

59

pigur PFQPX

El poanel Inspector

pigur PFQQX

Aspecto de la ventana despus de ejecutar la aplicacin

60

CAPTULO 2.

JAVABEAN: INSTRUMENTO VIRTUAL

Captulo

JA VABEAN: GRAFICADOR

3.1.

Introduccin

n omponente de softwre muy importnte en un sistem de monitoreo y ontrol es un gr(E dorF in est unidd se onstruir un jven que se responsilie de est treY su elorin tomr omo se el pquete tpreeghrt W que es de lire distriuin y que permite gr(r todo tipo de dtos en diferentes tipos de vists @en modo de rrD de pstelD linelD et Epigur QFIEAF

pigur QFIX

Grcas realizadas con JFreeChart

TI

62

CAPTULO 3.

JAVABEAN: GRAFICADOR

il tvfen rer desplegr gr(s y tendr el speto de l pigur QFPF

pigur QFPX

Aspecto del JavaBean que graca el modo XY

3.2.

Creacin del JavaBeans GracaXY usando el JFreeChart

iste tvfens hr prte del pquete mis ens que se empez rer en l unidd PF
Paso 1F Paso2F

in el shi NetBeans rir el proyeto MisBeans de l unidd PF egregr un lse en el pquete mis beans denomind GracaXYF r logrr estoD

uir el ursor en el nodo del proyeto @MisBeansAD her li dereho y en el popmen desplegdo esoger NewbJava Class F F F y se desplegr l ventn de l pigur QFQF in el mpo Class Name esriir GracaXY y her li en el otn FinishF il speto del pnel Projects es hor el de l pigur QFRF
Paso 3F

grer ls siguientes propieddesX

golor del ponfo @golorpondoAX ipo golorF golor del pondo de l qr( @golorpondoqr(AX ipo golorF golor de l lne @golorvineAX ipo golorF golor de l lne de diujo @golorvinehiujoAX ipo golorF golor de los nmeros de ije @golorxumerosijeAX ipo golorF

3.2 Creacin del JavaBeans GracaXY usando el JFreeChart

63

pigur QFQX

Ventana para crear una nueva clase

pigur QFRX

Aspecto del panel Projects despus de crear GracaXY

64

CAPTULO 3.

JAVABEAN: GRAFICADOR

r esto uir el ursor en el nodo Bean Patterns de l lse GracaXY.javaD pigur QFSEeF rer li dereho y en el popmen desplegdo elegirD AddbProperty y se desplegr l ventn de l pigur QFSEfF in el mpo xme esriir golorpondo y en el mpo ype esriir golorF se

pigur QFSX

Asignar propiedades

le greg l propiedd simple golorpondo l tvfen qr(F epetir este pso pr ls dems propieddesF
Paso 4F Agregar las libreras necesarias de JFreeChart para construir esl javaBean Gra-

caXYF

ir el ursor en el nodo Libraries del proyeto MisBeansD her li dereho en Add JAR/Flder F F F D pigur QFTEeF se desplegr un ventn que le permite uir los rhivos desedosF egregrX
jfreechart-1.0.0-rc1.jar

y jcommon-1.0.0-rc1.jarF il pnel Projects doptr l form de l

pigur QFTEfF
Paso 5

egregr l lse Graca.java el digo que import los pquetes neesrios pr l

onstruin del tvfen qr(FjvX

 INICIO DEL CDIGO 


import javax.swing.*; import java.awt.*;

import java.io.Serializable;

3.2 Creacin del JavaBeans GracaXY usando el JFreeChart

65

pigur QFTX

Agrregar libreras

import javax.swing.*; import org.jfree.data.*; import org.jfree.chart.*; import org.jfree.chart.plot.*; import org.jfree.data.xy.XYSeries; import java.awt.image.*; import org.jfree.data.xy.XYSeriesCollection; import org.jfree.chart.JFreeChart; import org.jfree.data.xy.XYDataset; import org.jfree.chart.title.LegendTitle; import org.jfree.ui.RectangleEdge; import org.jfree.chart.axis.*; import org.jfree.chart.renderer.category.CategoryItemRenderer; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.renderer.xy.XYItemRenderer;

66

CAPTULO 3.

JAVABEAN: GRAFICADOR

import org.jfree.chart.renderer.xy.StandardXYItemRenderer;

 FIN DEL CDIGO 


Paso 6F

egregr el digo que extiende l lse de JComponent y que implement l interfe

SerializableF

 INICIO DEL CDIGO 


public class GraficaXY extends JComponent implements Serializable {

 FIN DEL CDIGO 


Paso 7F

egregr el digo que implement ls vriles diionles neesris pr l onstruin

de este tvfensF

 INICIO DEL CDIGO 


private int ancho=300; private String nombreEjeX=null; private String nombreEjeY=null; private String titulo=null; private BufferedImage grafica = null; private XYSeries series = new XYSeries("Evolucion");

 FIN DEL CDIGO 


Paso 8F

 INICIO DEL CDIGO 


public GraficaXY() { //tamao preferido

egregr el digo que iniiliz ls vriles on sus vlores por defetoF

this.setPreferredSize(new Dimension(250,250)); //Valores por defecto colorLineaDibujo=Color.BLUE; colorLinea=Color.GREEN; colorFondo=Color.BLACK; colorFondoGrafica=Color.BLACK;

3.2 Creacin del JavaBeans GracaXY usando el JFreeChart

67

colorNumerosEjeY=Color.GREEN; }

 FIN DEL CDIGO 


Paso 9F

egregr el digo de los mtodos diionles neesrios pr l onstruin de este tvE

fensF

 INICIO DEL CDIGO 


//mtodo para llevar los datos a la grfica public void setDato(double x, double y){ series.add(x,y); } //mtodo para borrar los datos de la grfica public void borrarDatos(){ serie.clear(); } //mtodo para crear la imagen que contendr el grfico private BufferedImage crearImagen(int ancho) { XYDataset datos= new XYSeriesCollection(series); JFreeChart chart = ChartFactory.createXYLineChart(titulo,nombreEjeX, nombreEjeY,datos,PlotOrientation.VERTICAL,false,false,true); //cambiar aspecto chart.setBackgroundPaint(colorFondo); chart.setBorderVisible(false); //customizar final XYPlot plot = chart.getXYPlot(); plot.setBackgroundPaint(colorFondoGrafica); //fondo grfica plot.setDomainGridlinesVisible( true ); //grillas plot.setRangeGridlinesVisible(true);//grillas plot.setDomainGridlinePaint(colorLinea);//color grillas plot.setRangeGridlinePaint(colorLinea);//color grillas

68

CAPTULO 3.

JAVABEAN: GRAFICADOR

//eje y NumberAxis y = (NumberAxis)plot.getRangeAxis(); y.setTickLabelsVisible(true); y.setTickMarksVisible(true); y.setAxisLineVisible(true); y.setNegativeArrowVisible(false); y.setPositiveArrowVisible(true); y.setVisible(true); y.setLabelFont(new Font("Dialog", Font.PLAIN, 8)); y.setTickLabelFont(new Font("Dialog", Font.PLAIN, 8)); y.setLabelPaint(Color.green); y.setTickLabelPaint(colorNumerosEjeY); //eje x NumberAxis x = (NumberAxis)plot.getDomainAxis(); x.setTickLabelsVisible(false); x.setTickMarksVisible(false); x.setAxisLineVisible(true); x.setNegativeArrowVisible(false); x.setPositiveArrowVisible(true); x.setVisible(true); //color de la lnea para dibujar final XYItemRenderer renderer = plot.getRenderer(); renderer.setSeriesPaint(0, colorLineaDibujo); BufferedImage image = chart.createBufferedImage(ancho,ancho); return image; } //mtodo para pintar la imagen en pantalla. public void paintComponent(Graphics g) { //Contexto grfico en java 2

3.3 Desarrollo de un proyecto que use los dos beans construidos

69

ancho=this.getWidth(); Graphics2D g2 = (Graphics2D) g; //Mejora la calidad del dibujo con el antialising de java 2 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); grafica = this.crearImagen((int)(0.8*ancho)); g2.drawImage(grafica,(int)(0.1*ancho),(int)(0.1*ancho),null); }

 FIN DEL CDIGO 


est listo el tvfensF
Paso 10 X Distribucin del JavaBeans

ir el ursor en el nodo del proyetoD MisBeansD y her li derehoF in el popmen desplegdo her li en Build ProjectF hirigirse l rpet dist del diretorio donde se enuentr lojdo el proyeto y se enontrr el rhivo MisBeans.jarF iste rhivo ontiene los dos ens que hst hor se hn onstruidoX GaugeCircular y GracaXYF iste rhivo es el que se distriuye pr ser usdo en los proyetosF

3.3.

Desarrollo de un proyecto que use los dos beans construidos


sndo el shi NetBeans rir un proyetoF r estoD esoger FilebNew Poject y

Paso 1 X

se desplegr l ventn de l pigur QFUF isoger GeneralbJava AplicattionD heer li en Next y se desplegr l ventn de l pigur QFVF in el mpo Project Name esriir UsarMisBeansY destivr los hekox y her li en FinishF il speto del pnel rojets del shi es el de l pigur QFWF
Paso 2F

ir el ursor en Source Package y her li derehoF in el popmen desplegdo

esoger NewbJFrame Form F F F D pigur QFIHF e desplegr l ventn de l pigur QFIIF in el mpo Class Name esriir TableroInstrumentos y her li en FinishF il pnel Projects del shi dopt l form de l pigur QFIPF

70

CAPTULO 3.

JAVABEAN: GRAFICADOR

pigur QFUX

Ventana para crear un nuevo proyecto

pigur QFVX

Ventana para crear una nueva aplicacin

3.3 Desarrollo de un proyecto que use los dos beans construidos

71

pigur QFWX

Aspecto del panel Projects con el proyecto UsarMisBeans

pigur QFIHX

Inicio de una aplicacin de tipo JFrame

72

CAPTULO 3.

JAVABEAN: GRAFICADOR

pigur QFIIX

Conguracin de la aplicacin TableroInstrumentos

pigur QFIPX

Aspecto del panel Projects con la aplicacin TableroInstrumentos

3.3 Desarrollo de un proyecto que use los dos beans construidos


Paso 3FAgregar al IDE los beans de MisBeans

73

etivr el modo Design del shiD pigur QFIQF

pigur QFIQX
Paso 4F

Aspecto del panel Design con la aplicacin TableroInstrumentos

in el pnel Palette her li dereho sore ens y se desplegr el popmen de l piguE isoger beans bAdd from JAR F F F e desplegr un ventn que le permitir inorporr

r QFIREeF rer li en alette Manager y se desplegr l ventn de l pigur QFIREfF


Paso 5F

el pquete MisBeans.JarF hespus de este pso el pnel Palette deer tener l form de l piE gur QFISD en donde preen los dos ens inorpordos l shi @GaugeCircular y GracaXYAF
Paso 6 X Adicionar los paquetes que usa los javabeans de MisBeansF

r onstruir los ens se usron dos pquete de jFreeChartX jfreechart-1.0.0-rc1.jar y jcommon1.0.0-rc1.jarF

or esto es neesrio gregrlos ls lirers del proyetoF r esto uir el ursor

en el nodo virries del proyeto UsarMisBeansD her li dereho en Add JAR/FlderF F F D pigur QFITEeF y se desplegr un ventn que le permite uir los rhivos desedosF egregrX
jfreechart-1.0.0-rc1.jar

y jcommon-1.0.0-rc1.jarF il pnel Projects doptr l form de l

74

CAPTULO 3.

JAVABEAN: GRAFICADOR

pigur QFIRX

Palette Manager

pigur QFISX

Adicionar los beans al IDE

3.3 Desarrollo de un proyecto que use los dos beans construidos

75

pigur QFITEfF
Paso 7 X Usar los beansF

pigur QFITX

Adicionar paquetes de JFreeChart

in el pnel Inspector @pigur QFIUA uir el ursor en el nodo JFrameD her li dereho y en el popmenu desplegdo @pigur QFIVA elij Set LayoutbGridlayoutF iste gridlyout tmelo de R olumns y P (lsF
Paso 8 X

errstre desde Palette hi el JFrameD R instnis del en GaugeCircular y R insE e d unos de los V omponentes diionrles ordes mrdos omo lo ilustr l in d uno de los ens de los medidores mir ls propieddes de enomre el nomre de ls instnis de

tnis del en GracaXY de tl form que el JFrame dquier l form de l pigur QFIWF
Paso 9 XAliosF

pigur QFPHF
Paso 10 XCustomizacinF

tl form que el tlero de ontroles dopte l form de l pigur QFPIF


Paso 11 XOrganizar los nombres de las variablesF

uerdo l pigur QFPPF


Paso 12 X

ijeute l pliinF e otendr un vist omo l de l pigur QFPQF

ListoF

76

CAPTULO 3.

JAVABEAN: GRAFICADOR

pigur QFIUX

Aspecto del panel Inspector

pigur QFIVX

Dar formato GridLayout

3.3 Desarrollo de un proyecto que use los dos beans construidos

77

pigur QFIWX

Aspecto del JFrame de la GUI TableroInstrumentos

pigur QFPHX

Agregar alios a la GUI de la aplicacin TableroInstrumentos

78

CAPTULO 3.

JAVABEAN: GRAFICADOR

pigur QFPIX

Customizar la GUI de la aplicacin TableroInstrumentos

pigur QFPPX

Organizar nombres de variables (dar ms legibilidad al cdigo)

3.3 Desarrollo de un proyecto que use los dos beans construidos

79

pigur QFPQX

Nuevo aspecto de la GUI de la aplicacin TableroInstrumentos

80

CAPTULO 3.

JAVABEAN: GRAFICADOR

Captulo

JA VABEAN:TABLA DE DATOS

4.1.

Introduccin

n form de visulizr dtos es desplegndolos en un tlF v lirer jvxFswing de tv posee l lse tle que permite relizr estoY sin emrgo l in repetitiv @es deirD si es neesrio her uso de vris tlsA es engorros pr el progrmdorF r filitr est in se onstruir un tvfen que permit usr tls de mner senillF or ejemplo en l pigur RFI se ilustr un pliin que desplieg utro tlsF iss tls son instnis @utro en este soA del tvfen que se explir su implementin en l presente uniddF

4.2.

Propiedades del JavaBean Tabla

il tvfen h implementr se denominr lFjv y sus propieddes ustomizles sern @pigur RFPAX golor del fondo @golorpondoAX ipo golorF golor de los nmeros @golorxumerosAX ipo golorF golor de ls grills @golorqrillsAX ipo golorF xomre de l olumn x @xomregolumnAX ipo tringF VI

82

CAPTULO 4.

JAVABEAN:TABLA DE DATOS

pigur RFIX

GUI de una aplicacin de monitoreo y controlF

xomre de l olumn y @xomregolumnAX ipo tringF wostrr ls lnes horizontles @wostrrvinesrorizontlesAX ipo oolenF wostrr ls lnes vertiles @wostrrvinesertilesAX ipo oolenF wostrr ls grills @wostrrqrilsAX ipo oolenF

4.3.

Creacin del JavaBeans Tabla

iste tvfens hr prte del pquete mis ens que se empez rer en l unidd P y se ontinu en l unidd QF
Paso 1F Paso2F

in el shi xetfens rir el proyeto wisfens de l unidd QF

egregr un lse en el pquete misunderline ens denomind TablaXYF r logrr estoD

uir el ursor en el nodo del proyeto @MisBeansAD her li dereho y en el popmen desplegdo esoger NewbJava ClassF F F y se desplegr l ventn de l pigur RFQF in el mpo Class Name

4.3 Creacin del JavaBeans Tabla

83

pigur RFPX

Aspecto del JavaBean que se disear

esriir Tabla y her li en el otn FinishF il speto del pnel Projects es hor el de l pigur RFRF
Paso 3F

grer ls siguientes propieddesX

golor del fonfo @golorpondoAX ipo golorF golor de los nmeros @golorxumerosAX ipo golorF golor de ls grills @golorqrillsAX ipo golorF xomre de l olumn x @xomregolumnAX ipo tringF xomre de l olumn y @xomregolumnAX ipo tringF wostrr ls lnes horizontles @wostrrvinesrorizontlesAX ipo oolenF wostrr ls lnes vertiles @wostrrvinesertilesAX ipo oolenF wostrr ls grills @wostrrqrilsAX ipo oolenF r esto uir el ursor en el nodo Bean Patterns de l lse Tabla.javaD pigur RFSEeF rer li dereho y en el popmen desplegdo elegirD AddbProperty y se desplegr l ventn de l pigur RFSEfF in el mpo Name esriir ColorFondo y en el mpo Type esriir ColorF se le greg l propiedd simple ColorFondo l tvfen TablaF epetir este pso pr ls dems propieddesF

84

CAPTULO 4.

JAVABEAN:TABLA DE DATOS

pigur RFQX

Ventana para crear una nueva claseF

pigur RFRX

Aspecto del panel Projects con la clase Tabla.java creadaF

4.3 Creacin del JavaBeans Tabla

85

pigur RFSX
Paso 4 X

Asignar propiedades al JavaBean Tabla.

egregr l lse Tabla.java el digo que import los pquetes neesrios pr l onsE

truin del tvfen Tabla.javaX

 INICIO DEL CDIGO 


import javax.swing.*;

import java.io.Serializable; import javax.swing.table.*; import javax.swing.table.DefaultTableModel; import java.awt.*;

 FIN DEL CDIGO 


Paso 5F

 INICIO DEL CDIGO 

egregr el digo que extiende l lse JPanel y que implement l interfe SerializableD

public class Tabla extends JPanel implements Serializable{

86

CAPTULO 4.

JAVABEAN:TABLA DE DATOS

 FIN DEL CDIGO 


Paso 6F

egregr el digo que implement ls vriles diionles neesris pr l onstruin

de este tvfensD

 INICIO DEL CDIGO 


private DefaultTableModel modelo=new DefaultTableModel(); private JTable tabla=new JTable(); private JScrollPane pane; private long contador;

 FIN DEL CDIGO 


Paso 7F

 INICIO DEL CDIGO 


public Tabla() { //por defecto nombreColumnaX="x"; nombreColumnaY="y"; formateoTablas();

egregr el digo que iniiliz ls vriles on sus vlores por defetoD

/** Creates a new instance of Tabla */

pane=new JScrollPane(tabla); this.setLayout(new GridLayout(1,1)); this.add(pane); }

 FIN DEL CDIGO 


Paso 8F

egregr el digo de los mtodos diionles neesrios pr l onstruin de este tvE

fensD

 INICIO DEL CDIGO 


private void formateoTablas(){ modelo.addColumn("Dato"); //no estaba

4.3 Creacin del JavaBeans Tabla

87

modelo.addColumn(nombreColumnaX); modelo.addColumn(nombreColumnaY); tabla.setModel(modelo); } /** * Asigna los valores (x,y) para la tabla de datos */ public void setValoresTabla(double x, double y){ //incremetar dinmicamente el nmero de filas necesario contador=contador+1; Object [] fila = new Object[3]; fila [0]=""+contador; fila [1]=""+x; fila[2]=""+y; modelo.addRow(fila); } /** * Borra todos los datos de la tabla */ public void borrarDatos(){ while ( modelo.getRowCount() > 0 ) { modelo.removeRow(0); } contador=0; }

 FIN DEL CDIGO 


Paso 9F

gompletr el digo los siguientes mtodos enrgdos de ustomizr propieddes

del enX

88

CAPTULO 4.

JAVABEAN:TABLA DE DATOS

 INICIO DEL CDIGO 


public void setNombreColumnaX(String nombreColumnaX) { this.nombreColumnaX = nombreColumnaX; Object [] columna = new Object[3]; columna [0]="Dato"; columna [1]= nombreColumnaX; columna [2]= nombreColumnaY; modelo.setColumnIdentifiers(columna); } public void setNombreColumnaY(String nombreColumnaY) { this.nombreColumnaY = nombreColumnaY; Object [] columna = new Object[3]; columna [0]="Dato"; columna [1]= nombreColumnaX; columna [2]= nombreColumnaY; modelo.setColumnIdentifiers(columna); } public void setColorFondo(Color colorFondo) { this.colorFondo = colorFondo; tabla.setBackground(colorFondo); } public void setColorNumeros(Color colorNumeros) { this.colorNumeros = colorNumeros; tabla.setForeground(colorNumeros); } public void setMostrarGrillas(boolean mostrarGrillas) { this.mostrarGrillas = mostrarGrillas; tabla.setShowGrid(mostrarGrillas); }

4.3 Creacin del JavaBeans Tabla

89

public void setMostrarLineasHorizontales(boolean mostrarLineasHorizontales) { this.mostrarLineasHorizontales = mostrarLineasHorizontales; tabla.setShowHorizontalLines(mostrarLineasHorizontales); } public void setMostrarLineasVerticales(boolean mostrarLineasVerticales) { this.mostrarLineasVerticales = mostrarLineasVerticales; tabla.setShowVerticalLines(mostrarLineasVerticales); } public void setColorGrillas(Color colorGrillas) { this.colorGrillas = colorGrillas; tabla.setGridColor(colorGrillas); }

 FIN DEL CDIGO 


est listo el tvfensF
Paso 10 X Distribucin del JavaBeans

ir el ursor en el nodo del proyetoD MisBeansD y hE

er li derehoF in el popmen desplegdo her li en Build ProjectF hirigirse l rpet dist del diretorio donde se enuentr lojdo el proyeto y se enontrr el rhivo MisBeans.jarF iste rhivo ontiene los tres ens que hst hor se hn onstruidoX GaugeCircularD GracaXY y
TablaF

iste rhivo es el que se distriuye pr ser usdo en los proyetosF r filitr el uso por tereros del pquete mis ens es neesrio herle l doumenE

Paso 11F

tin on javadocF r esto esoger BuildbGenerate Javadoc for MisBeans @pigur RFTA y se generr l doumentin respetiv l ul se uir en l rpet dist en un surpet denomind javadocF v doumentin mejorr en l medid que se greguen yuds en los oE mentrios de los ensD por ejemploX iste mtodo sirve pr mir el nomre de l olumn F F F F in de(nitiv en l distriuin de los ens se entregr tod l rpet distF

90

CAPTULO 4.

JAVABEAN:TABLA DE DATOS

pigur RFTX

Documentar los beansF

4.4.

Desarrollo de un proyecto que use los tres beans construidos


gomo ejemplo de uso del en Tabla se extender el proyeto desrrolldo en l sein

Paso 1

unidd nteriorF r esto rir el proyeto MisBeans que se desrroll en l sein es sein y vuelv importr MisBeans en Libraries @pigur RFUAF in este so MisBeans.jar ontendr los tres ens desrrolldos en ests notsX GaugeCircular.javaD GracaXY.java y Tabla.javaF
Paso 2 X

etive el pnel heisgn de l lse ableroInstrumentos.java @pigur RFVAF

pigur RFUX
Paso 3

Aspecto del panel ProjectsF

in el nodo JFrame del pnel Inspector mir el GridLayout Q (ls R olumns y

gregr utro instnis del en TablaX pr esto proed omo lo ilustr l pigur RFWF

4.4 Desarrollo de un proyecto que use los tres beans construidos

91

pigur RFVX

Aspecto del panel Design.

gmir los nomres ls vriles que se re(eren ests instnis del en tl y omo lo ilustr l pigur RFIHF
Paso 4F

r pror el funionmiento de ls tls gregue el digo l onstrutor de l lse

lerosnstrumentosFjvX

 INICIO DEL CDIGO 


public TableroInstrumentos() { initComponents(); this.setSize(800,600); //probar valores en tablas tabla_iluminancia.setValoresTabla(10,108); tabla_iluminancia.setValoresTabla(22,148); tabla_iluminancia.setValoresTabla(45,47); tabla_iluminancia.setValoresTabla(109,8); tabla_iluminancia.setValoresTabla(122,106);

92

CAPTULO 4.

JAVABEAN:TABLA DE DATOS

pigur RFWX

Agregar instancias de TablaF

pigur RFIHX

Cambiar los nombres de las variables.

4.4 Desarrollo de un proyecto que use los tres beans construidos

93

tabla_iluminancia.setValoresTabla(245,6); tabla_iluminancia.setValoresTabla(345,47); tabla_iluminancia.setValoresTabla(409,8); tabla_iluminancia.setValoresTabla(522,16); tabla_iluminancia.setValoresTabla(545,162); tabla_iluminancia_fotosintetica.setValoresTabla(10,108); tabla_iluminancia_fotosintetica.setValoresTabla(22,148); tabla_iluminancia_fotosintetica.setValoresTabla(45,47); tabla_iluminancia_fotosintetica.setValoresTabla(109,8); tabla_iluminancia_fotosintetica.setValoresTabla(122,106); tabla_iluminancia_fotosintetica.setValoresTabla(245,6); tabla_iluminancia_fotosintetica.setValoresTabla(345,47); tabla_iluminancia_fotosintetica.setValoresTabla(409,8); tabla_iluminancia_fotosintetica.setValoresTabla(522,16); tabla_iluminancia_fotosintetica.setValoresTabla(545,162); tabla_temperatura.setValoresTabla(10,28); tabla_temperatura.setValoresTabla(22,26); tabla_temperatura.setValoresTabla(45,27); tabla_temperatura.setValoresTabla(109,28); tabla_temperatura.setValoresTabla(122,26); tabla_temperatura.setValoresTabla(245,26); tabla_temperatura.setValoresTabla(345,27); tabla_temperatura.setValoresTabla(409,28); tabla_temperatura.setValoresTabla(522,26); tabla_temperatura.setValoresTabla(545,22); tabla_humedad_relativa.setValoresTabla(10,68); tabla_humedad_relativa.setValoresTabla(22,66); tabla_humedad_relativa.setValoresTabla(45,67); tabla_humedad_relativa.setValoresTabla(109,68);

94

CAPTULO 4.

JAVABEAN:TABLA DE DATOS

tabla_humedad_relativa.setValoresTabla(122,66); tabla_humedad_relativa.setValoresTabla(245,66); tabla_humedad_relativa.setValoresTabla(345,67); tabla_humedad_relativa.setValoresTabla(409,68); tabla_humedad_relativa.setValoresTabla(522,66); tabla_humedad_relativa.setValoresTabla(545,62); }

 FIN DEL CDIGO 


Paso 5 X

roed mir propieddes ustomizle de ls instnis del en TablaD por ejemplo

los olores @pigur RFIIAF gompile y ejeute l pliinF heer preer un ventn omo l ilustrd en l pigur RFIF visto3

pigur RFIIX

Customizar las propiedades

Captulo

RED ZigBee DE SENSORES

5.1.

Introduccin

vs tenologs inlmris @wirelessA se estn imponiendo sore ls tenologs lmris y hy diferentes rzones por ls ules suede estoX el lto osto de los les y de mno de orD el jo tiempo de implementin de los sistems wireless y su eso limpioD senillo y rto serviios y redes de eleomuniinF in los ltimos osD en prlelo l despliegue de l elefon mvil de terer generinD w @niversl woile elephone ervieAD se hn estndrizdo y desrrolldo un grn nmero de nuevs tenologs inlmrisX ls redes inlmris personles omo
Bluetooth

@su nomre proede del

rey dns y noruego rrld fltnd uy trduin l ingls ser rrold fluetoothD onoido por uen omunidor y por uni(r ls trius noruegsD sues y dnessY es el protoolo siii VHPFISFIA y
ZigBee

@su nomre proviene deX zumido de ls ejsY es el protoolo siii VHPFISFRAD ls redes @Worldwide Interoperility Mirowve AessY es el protoolo siii VHPFITAF

loles omo WiFi @Wireless FidelityY es el protoolo siii VHPFIIA y ls redes metropolitns omo
WiMAX

in l pigur SFI se ilustr un omprin en unto usos entre vris de ests tenologsF i se oservD igfee es l idel pr empler en un red inlmri de senosres pr efetos de monitoreo y ontrolD y que en este tipo de pliiones l trnsmisin de dtos no requieren un grn nho de ndD pero si un mnimo onsumo energtio y un j lteniF iste es el tipo de red que interes en ls presentes notsF in l pigur SFP se ilustr diferentes pliiones que se pueden WS

96

CAPTULO 5.

RED ZIGBEE DE SENSORES

implementr medinte un red inlmri igfeeF

pigur SFIX

Comparacin entre diferentes tecnologas inalmbricasF

5.2.

ZigBee

5.2.1. Propagacin y modulacin


igfee es un protoolo de omuniiones inlmris sdo en el estndr pr redes inlmE ris de re personl @exsA siii VHPFISFRF is un protoolo de grn senillezD provee un lto rendimiento en l trnsmisin de pquetes por rdio y un lt inmunidd en mientes on un j relin selGruidoD por lo que los dispositivos igfee son ms roustos frente interferenis

5.2 ZigBee

97

pigur SFPX

Aplicaciones ZigBee

98

CAPTULO 5.

RED ZIGBEE DE SENSORES

que los que siguen los estndres fluetooth o ipiF esD en entornos gresivos rdioeltrimenteD omo es l muy sturd nd de PFR qrzD igfee se omport muho mejorF v ond eletromgnti portdor en este protoolo orresponde un de ls siguientes ndsX PFR qrzX IT nles y veloidd de trnsmisin de dtos igul PSH kpsF gonoid omo nds sw @sndustrilD ienti( nd wedilX PFRHSEPFRVH qrzAF il nho de nd de los nles es S wrzF er pigur SFQF VTVFQ wrz X un nl y veloidd de trnsmisin de dtos igul PH upsFil nho de nd del nl es P wrzF WHPEWPV wrzX IH nles y veloidd de trnsmisin de dtos igul RH upsF il nho de nd de los nles es de P wrzF

pigur SFQX

Canales ZigBee para la banda de 2.4 GHz.

v myor de frintes optn por l primer nd @PFR qrzAD y que puede ser usd en todo el mundoD mientrs que ls dos ltims slo se plin en istdos nidos y iuropD respetivmenteF il lne es del orden de IH m @l tenolog de l red igfee implementd en ests nots permiten lnes del orden de IHH m
indoor

y de IFS km

outdoor AF

gomo interfz igfee utiliz l tni h @Diret SequeneSpred SpetrumA on distints modulionesX fu @Binry Phse Shift KeyingA pr ls freuenis VTV y WIS y yEu @O'set
Qudrture Phse Shift KeyingA

pr l nd sw PDR qrF respetivmenteF

5.2 ZigBee

99

5.2.2. Capas OSI


igfee posee un rquitetur sd en el modelo ys @ypen ystems snteronetinD snterE onexin de sistems iertosAF il siii VHPFISFR de(ne ls dos ps ms jsX l gp psi y l up de gontrol de eeso l wedio de l gp de inle de htosD l ul se enrg de islr los detlles de ls tenologs fsis l p de ontrol de eso l medioF ists ps son utilizds por igfee pr rer un mro de trjo pr ls pliionesF v gp psiD tl y omo se sel rriD puede trjr en uno de tres rngos de freuenisX VTV wrzD WIS wrz o PFR qrz on veloiddes de hst PH upsD RH ups y PSH upsF er pigur SFRF

pigur SFRX

Modelo OSI en las redes ZigBee.

100

CAPTULO 5.

RED ZIGBEE DE SENSORES

5.2.3. Topologa
v p de red @xuA une o sepr dispositivos trvs del ontroldor de redD implement seguriddD y enmin trms sus respetivos destinosF edemsD l p de red del ontroldor de red es responsle de rer un nuev red y signr direiones los dispositivos de l mism IHF v p de red soport mltiples on(guriones de red inluyendo estrellD rolD y mllD omo se muestr en l pigur SFSFn red igfee puede eslr hst TSFSQT nodos @216 AD grupdos en suredes de hst PSS nodos @fluetooth solo dmite V nodosAD lo que l he ms que su(iente pr urir ulquier neesiddF in ulquier de ls suredes siempre existe un nio nodo oordindor entrl @que puede tur omo un hu o un routerAD enrgdo de l dquisiin de dtos y gestin de ruts entre dispositivosF stos pueden tener funionlidd omplet o reduidF in este so durnte l myor prte del tiempoD mntienen el trnseiver igfee dormido on ojeto de reduir el onsumo l mnimoD pudiendo psr l estdo tivo en menos de IS milisegundosF il ojetivo es que un sensor equipdo on est tenolog pued ser limentdo on dos pils ee un periodo de entre seis meses y dos osD unque en l prti se h veri(do que se podrn onseguir si ino os de durin en ls pliiones de domti y seguriddF gomo se puede oservr en l pigur SFS igfee tiene tres tipos de dispositivosX il oordindor de redD que mntiene en todo momento el ontrol del sistemF is el ms so(stido de los tipos de dispositivosD requiere memori y pidd de omputinF il dispositivo de funin omplet @pphA pz de reiir mensjes del estndr VHPFISFRF iste puede funionr omo un oordindor de redF v memori diionl y l pidd de omputrD lo hen idel pr her ls funiones de outer o pr ser usdo en dispositivos de red que ten de interfe on los usuriosF il dispositivo de funin reduid @phA de pidd y funionlidd limitds @espei(d en el estndrA pr el jo oste y simpliiddF on los sensoresGtudores de l redF

5.2.4. La trama
v p fsi inluye diionlmente sistems de detein de energ reiid ih @inergy hetetionAD de indiin de l lidd del enle vs @vink ulity snditionA y de explorin de

5.2 ZigBee

101

pigur SFSX nl lire gge @gler ghnnel essestmentAF

Topologa ZigBee

oport tnto direiones de TR its @propuest de siiiA omo direiones orts de IT itsD que permiten el direionmiento de TSFSQT @216 A dispositivosD dems de posiilitr l soiin y disoiin de redesF r operrD el estndr oper on utro tipos o estruturs de trmX rm de lizdo pr l trnsmisin de lizs @feon frmesAF rms de dtosF rms de sentimiento pr on(rmr l reepin @eknowledgement frmeAF rms de omndos wegF xo vmos entrr en el detlle de tods ls trmsD mxime undo result similr otros protoolos de trnsmisin de dtos on on(rmin @eguAF xo ostnteD es importnte prrnos un momento en el primer tipo de trm desritoF in efetoD medinte ls supertrms on liz @Superframes with beaconA se permite l sinE ronizin de todos los dispositivos de un red sin neesidd que estn permnentemente en

102

CAPTULO 5.

RED ZIGBEE DE SENSORES

pigur SFTX

Tramas ZigBee

modo de esuhD on el importntsimo horro de energ que esto representF vos nodos solo despiertn undo se provo un rodst de un supertrmY si l direin no oinide on l del nodoD se vuelv l estdo dormidoF in l pigur SFT se represent el formto de un supertrmF e estlee priori un perodo entre lizsD que osil entre ISDQV msegF y PSP msegF il oorE dindor estlee en ese intervlo IT espios de tiempo o slots idntiosD por lo que el eso l nl es sin ontiendF il eso l nl individulD sin emrgoD est sdo en ontiendF in emrgoD el nodo oordindorD que de(niremos on posterioriddD siempre reserv U slots de d intervlo pr tr(o grntizdo @q gurnteed timed slotsA pr segurr un mejor liddF

5.3.

El hardware

v red que se implement en ests nots est ompuest por vris estionesD d un de ls ules posee vris uniddes sensorsGemisors igfeeD tl y omo se ilustr en l pigur SFUF n unidd reeptor igfee reoge ls seles @dtosA y los entreg un omputdor personl v el puerto seril PQPF e ontinuin se hr un desripin de los omponentes sios del hrdwre de l redF

5.3 El hardware

103

pigur SFUX

Estacin de red.

5.3.1. Unidad sensora/emisora


is l enrgd de otener los dtos de los sensores y envirlos l unidd reeptorF e ompone fundmentlmente deX un miroontroldor iITfVUUD un onversor de niveles v gwyD un modulo feeEy emisor y un onjunto de sensoresF in l pigur SFV se muestr un foto de un de ests uniddesF

pigur SFVX

Foto de una unidad sensora/emisora

104

CAPTULO 5.

RED ZIGBEE DE SENSORES

5.3.2. Unidad receptora


is l unidd que reie los dtos envidos por ls uniddes sensorsF osee IP nlesD y se puede progrmrD por ejemploD pr reiir por d uno de estos los dtos de uniddes sensors diferentes perteneientes l mism estinF in l rquitetur que se diseD d estin de uniddes sensors le orresponder un unidd reeptorF in l pigur SFW se ilustr un unidd reeptor opld un g trvs de su puerto serilF u limentin se puede relizr trvs de l red norml o de dos ters ee o trvs del g si se onet por el puerto serilF

pigur SFWX

Foto de unidad receptora

5.3.3. El chip XBee


il hip feeEro que poseen ls uniddes senors y emisors es frido por wxrem y posee ls espei(iones selds en l l SFIF v foto del mismo se ilustr en l pigur SFIHF iste hip es elelemnto fundment del red igfee IIF

5.3.4. Los sensores


r pror l red se empleronX I sensor de tempertur @LM335AZ
tor AD de National Semiconduc-

P de luminosidd @VT43N1

y VT400 de PerkinElmer Optoelectronics AD

I de infrrrojo @OP593

5.3 El hardware

105

pigur SFIHX

Chip XBee-Pro

frecuencia
Potencia Indoor Outdoor Rata de transmisin Nmero de canales Tamao Topologa de red Tipo espectro Voltaje Sensibilidad de recepcin Encriptacin

2.4 GHz
60 mW (18 dBm) 100 m 1.5 Km 250 Kps 12 2.438 cm X 3.294 cm peer-peer, punto-punto y punto-multipunto DSSS 2.8-3.4 V -100 dBm 128-bit AES

l SFIX ispei(iones del feeEro

106
de Optek technology .inc A

CAPTULO 5.

RED ZIGBEE DE SENSORES

y I detetor de preseni de mpo mgntio @AU-MS-03R

de AUPAX

INDUSTRIAL(HK) CO., LIMITED AF

5.3.5. Programa del PIC 16f877a


in este progrm se inluye un rutin pr l letur del sensor de humedd y tempertur shtII de sesirion D el softwre en que se relizo l progrmin es sgEgF

 INICIO DEL CDIGO 


#include <16F877A.h> #DEVICE ADC=10 #use delay(clock=4000000)

#use rs232(baud=9600, xmit=pin_c6,rcv=pin_c7) #include <sht11.h> int pp=3; long lectura_adc[4]; void lectura_sht11(); void mostrar_temp_hum(); void ADC(); unsigned int8 temp_actual, humedad_actual; typedef union { int16 i; float f; } valor; valor humedad, temperatura; byte errorsht11,checksum; void main()

5.3 El hardware

107

{ setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(FALSE); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); sht11_hard_reset(); while(true) { output_b(32); delay_ms(30); output_b(16); delay_ms(30); output_b(8); delay_ms(30); output_b(4); delay_ms(30); output_b(2); delay_ms(30); output_b(1); lectura_sht11(); ADC(); mostrar_temp_hum(); DELAY_MS(1000);

108

CAPTULO 5.

RED ZIGBEE DE SENSORES

} } /*Funcion que se encarga de la lectura del sensor Humedad y Temperatura*/ void lectura_sht11(void) { errorsht11=0; //measure humidity errorsht11+=sht11_medicion((byte*) &humedad.i, &checksum, HUMI); //measure temperature errorsht11+=sht11_medicion((byte*) &temperatura.i, &checksum, TEMP); //in case of an error: connection reset if(errorsht11!=0) { printf("\n\rerror:%U", errorsht11); sht11_hard_reset(); } else { //converts integer to float humedad.f=(float)humedad.i; //converts integer to float temperatura.f=(float)temperatura.i; //calculate humidity, temperature sht11_calculos(&humedad.f, &temperatura.f); temp_actual = temperatura.f; humedad_actual = humedad.f; } }

5.3 El hardware

109

/** funcion que envia por el serial los datos */ void mostrar_temp_hum(void) { printf("%c",'A'); printf("%uA",1); printf("%c",'B'); printf("%uB",1); printf("%c",'C'); printf("%LuC",lectura_adc[0]); printf("%c",'C'); printf("%uC",temp_actual); printf("%c",'C'); printf("%uC",humedad_actual); FOR(pp=2;pp<4;pp++){ printf("%c",'C'); printf("%u",0); printf("%c",'C'); } pp=0; printf("%c",'\n'); delay_ms(500);

110

CAPTULO 5.

RED ZIGBEE DE SENSORES

} /*funcion que hace las lecturas ADC*/ void ADC(){ setup_adc(ADC_CLOCK_INTERNAL); setup_adc_ports(ALL_ANALOG); set_adc_channel(0); delay_us(10); lectura_adc[0]=read_adc(); setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); }

 FIN DEL CDIGO 


5.3.6. Planos de las cajas de los circuitos
in ls pigurs SFIID SFIPD SFIQD SFIRD SFIS y SFIT se ilustrn los plnos de ls js de los iruitosF

5.3.7. Planos de los circuitos


in ls pigurs SFIUD SFIVD y SFIW se ilustrn los plnos de los iruitosF

5.3 El hardware

111

pigur SFIIX

Tapa superior de la caja sensora

112

CAPTULO 5.

RED ZIGBEE DE SENSORES

pigur SFIPX

Tapa inferior de la caja sensora

5.3 El hardware

113

pigur SFIQX

Caja sensora

114

CAPTULO 5.

RED ZIGBEE DE SENSORES

pigur SFIRX

Tapa superior de la caja receptora

5.3 El hardware

115

pigur SFISX

tapa inferior de la caja receptora

116

CAPTULO 5.

RED ZIGBEE DE SENSORES

pigur SFITX

Caja receptora

5.3 El hardware

117

pigur SFIUX

Circuito del emisor

118

CAPTULO 5.

RED ZIGBEE DE SENSORES

pigur SFIVX

Circuito del receptor

5.3 El hardware

119

pigur SFIWX

Circuito de los sensores

120

CAPTULO 5.

RED ZIGBEE DE SENSORES

Captulo

PAQUETE: COMUNICACIN

6.1.

Introduccin

EPQP @tmin onoido omo iletroni sndustries elline EPQPgA es un protoolo de oE muniin pr el intermio en serie de dtos inrios entre un hi @Dt Terminl EquipmentA y un hgi @Dt Communition EquipmentAF in osiones interes onetr otro tipo de equiE pmientosD omo pueden ser omputdoresF ividentementeD en el so de interonexin entre los mismosD se requerir l onexin de un hi on otro hiF in est unidd se implementr el pquete de omuniin PQP @com_sensorA el ul se emE pler pr ls omuniiones de los sensoresF in l sein TFQ se hr est implementinF in l siguiente sein se hr un reve desripin del hrdwre soido este protoolo de omuE niin @PQPAF

6.2.

El hardware RS232

il EPQP onsiste en un onetor tipo hfEPS @de PS pinesAD unque es norml enontrr l versin de W pines @hfEWAD ms rto e inluso ms extendido pr ierto tipo de perifrios @omo el rtn serie del gAD pigur TFIF IPI

122

CAPTULO 6.

PAQUETE: COMUNICACIN

pigur TFIX

Conectores RS232

6.2.1. Conexiones desde el DTE


in l l TFI se reportn ls onexiones desde el hi en el estndr PQPD IPF

6.2.2. Construccin fsica


v interfz EPQP est dised pr distnis ortsD de unos IS metros o menosD y pr un veloiddes de omuniin jsD de no ms de PH uF e pesr de elloD muhs vees se utiliz myores veloiddes on un resultdo eptleF v interfz puede trjr en omuniin snron o snron y tipos de nl simplexD hlf duplex o full duplexF in un nl simplex los dtos siempre vijrn en un direinD por ejemplo desde hgi hiF in un nl hlf duplexD los dtos pueden vijr en un u otr direinD pero slo durnte un determindo periodo de tiempoY luego l lne dee ser onmutd ntes que los dtos puedn vijr en l otr direinF in un nl full duplexD los dtos pueden vijr en mos sentidos simultnementeF vs lnes de hndshking de l EPQP se usn pr resolver los prolems soidos on este modo de operinD tl omo en qu direin los dtos deen vijr en un instnte determindoF i un dispositivo de los que estn onetdos un interfz EPQP proes los dtos un veloidd menor de l que los reie deen de onetrse ls lnes hndshking que permiten relizr un ontrol

6.2 El hardware RS232

123

Seal
Carrier Detect Received Data Transmit Data Data Terminal Ready System Ground Data Set Ready Request to Send Clear to Send Ring Indicator CD RXD TXD DTR GND DSR RTS CTS RI

PIN DB9
1 2 3 4 5 6 7 8 9

Direccin

l TFIX PQP de )ujo tl que l dispositivo ms lento le de tiempo de proesr l informinF vs lnes de 4hnd shking4que permiten her este ontrol de )ujo son ls lnes y gF vos disedores del estndr no oniieron ests lnes pr que funionen de este modoD pero dd su utilidd en d interfz posterior se inluye este modo de usoF

6.2.3. Caractersticas elctricas de cada circuito


vos siguientes riterios son los que se plin ls rterstis eltris de d un de ls lnesX v mgnitud de un voltje en iruito ierto no exeder los PS F il ondutor ser pto pr soportr un orto on ulquier otr lne en el le sin do s mismo o otro equipmientoD y l orriente de ortoiruito no exeder los HDS eF vs seles se onsiderrn en el estdo de MARCAD @nivel lgio IAD undo el voltje se ms negtivo que E Q on respeto l lne de Signal GroundF vs seles se onsiderrn en el estdo de ESPACIOD @nivel lgio HAD undo el voltje se ms positivo que CQ on respeto l lne Signal GroundF v gm de voltjes entre EQ y CQ se de(ne omo l regin de trnsiinD donde l ondiin de sel no est de(nidF

124

CAPTULO 6.

PAQUETE: COMUNICACIN

v impedni de rg tendr un resisteni hg de menos de UHHH l medir on un voltje plido de entre Q PS pero myor de QHHH undo se mid on un voltje de menos de PS F gundo l resisteni de rg del termindor enuentr los requerimientos de l regl R nE teriormente dihD y el voltje del termindor de iruito ierto est H D l mgnitud del potenil de ese iruito on respeto ignl qround estr en el rngo de S IS F il driver de l interfz mntendr un voltje entre ES EIS reltivos l sel de Signal
Ground

pr representr un ondiin de wegeF il mismo driver mntendr un voltje

de entre S IS reltivos Signal Ground pr simolizr un sel de iegsyF ysrvese que est regl junto on l egl QD permite P de mrgen de ruidoF in l prtiD se utilizn EIP y IP respetivmenteF il driver mir el voltje de slid hst que no se exedn QH V /sD pero el tiempo requerido l sel pr psr de EQ CQ de l regin de trnsiin no podr exeder I msD o el 4 % del tiempo de un itF v desviin de pitni del termindor no exeder los PSHH pF D inluyendo l piE tni del leF ysrvese que undo se est usndo un le norml on un pitni de RH SH pF/pie de longitudD esto limit l longitud de le un mximo de SH piesD @IS mAF n pitni del le inferior permitir reorridos de le ms lrgosF v impedni del driver del iruito estndo pgdo deer ser myor que QHH F

6.2.4. Denicin de los circuitos ms comunes en un DB9


1 DCD, Data Carrier Detect, Portadora de datos detectada.

st es l sel por

medio del ul el hgi inform l hi que tiene un portdor entrnteF uede ser usdo por el hi pr determinr si el nl est desoupdoD y que el hi pued pedir un F elgunos his deen tener un hgh entrnte ntes que ellos puedn operrF in este soD est sel dee ser trd desde el hgiD o proved @pF ejF desde hA por un ortoD lolmente l hiF

6.2 El hardware RS232

125

2 RXD, Receive Data, Datos de recepcin.

ist lne es el reorrido por medio del ul

los dtos se envn desde el hgi l hiF ist lne dee estr presente si los dtos deen vijr en es direin en un momento ddoF
3 TXD, Transmit Data, Datos de transmisin.

iste iruito es l tryetori por medio

del ul los dtos se envn desde el hi l hgiF iste iruito dee estr presente si los dtos deen vijr en es direin en ulquier momentoF
4 DTR, Data Terminal Ready, Terminal de datos listo.

ist lne provee l sel

que inform l hgi que el hi est vivo y ienF is normlmente puest yx por el hi l enenderse esteF n hgi tpio deer tener un h entrnte (n de desemperse normlmenteF ist sel deer ser trd desde el hiD o provedo por un orto lolmente l hgi si no existe @pF ejF desde hAF ore el ldo del hiD est sel est si siempre presenteD y puede volverse trs @pF ejF hD g o hghA pr stisfer ls selesD @pF ejF hnd shkingA requeridsD uy funin tmpoo est implementdF
5 CG, Chassis Ground, Tierra del chasis.

iste iruito @tmin llmdo prme qround

ms del udroA es un menismo pr segurr que los hsis de los dos dispositivos estn l mismo potenilD y pr impedir un desrg eltri l operdorF iste iruito no es usdo omo refereni por ningn otro voltje y es opttivoF i se usD deer tomrse lgun preuin pr no rer ules de tierrF is l tierr de seguridd del sistemF
6 DSR, Data Set Ready, Datos prepadados.

ist lne es l sel que inform l hi

que el hgi est vivo y ienF is normlmente puest yx por el hgi l enenderse esteF n hi tpio deer tener un h entrnte (n de desemperse normlmenteF i no existe est lneD dee ser trd desde el hgiD o provist por un orto lolmente l hi @por ejemplo desde hAF ore el hgiD est sel est si siempre presenteD y puede volverse trs @ h o A pr stisfer ls seles requerids uy funin no est implementdF
7 RTS, Request To Send, Peticin de envo.

iste iruito es l sel que indi que el

hi dese envir dtos l hgiD @ningun otr lne est disponile pr l direin opuestD de qu en delnte el hi dee estr siempre listo pr eptr dtosAF in operin normlD

126

CAPTULO 6.

PAQUETE: COMUNICACIN

l lne de estr yppD @I lgio o wegeAF n vez que el hi tiene los dtos pr envirD y hn determindo que el nl no est oupdoD olor yxD @H lgio o iegsyAD y esperr un estdo yx en el g desde el hgiD l tiempo que puede entones omenzr envirF n vez que el hi ulmino el envoD vuelve (jr yppD @I lgio o wegeAF ore un nl full duplex o simplexD est sel puede olorse yx un vez en l iniilizin y quedr en est ondiinF elgunos hgis deen tener un entrnte (n de poder trnsmitirD @unque esto no sigue estritmente el estndrAF in este soD est sel deer ser trd desde el hiD o proved por un ortoiruito @pF ejF desde hAD lolmente l hgiF
8 CTS, Clear To Send, Limpieza de envo.

ist lne es l sel que indi que el hgi

est preprdo pr eptr dtos desde el hiF in operin normlD l lne g estr en l ondiin yppF gundo el hi on(rm D el hgi hr lo que se neesrio pr permitir que los dtos sen envidosD @pF ejF un mdem lzr l portdorD y esperr hst que se estilieAF in este momentoD el hgi olor g l ondiin yxD que permitir entones l hi envir dtosF gundo l lne desde el hi retorn l ondiin yppD el hgi desrg el nl @pF ejF un mdem jr l portdorAD y entones g restur l ondiin yppF n hi tpio dee tener un g entrnte ntes que pued trnsmitirF i no existe est selD deer ser trd desde el hgiD o proved por un ortoiruito lolmente l hi @pF ejF desde hAF

6.2.5. Cable de conexin


r relizr l onexin entre el g y nuestro iruito podemos usr diferentes lterntivsF n mner es utilizr un le serie mhoEhemr no ruzdoD y en el iruito un onetor hemr dW pr iruito impresoF gundo onetmos un miro l g normlmente slo usmos los pines D y qxhD sin emrgo en este tipo de les se llevn los W pinesD pigur TFPD IQF

6.2.6. El chip MAX 232


iste hip permite dptr los niveles PQP y vD permitendo onetr un g on un miE roontroldorF lo es neesrio este hip y R ondensdores eletroltios de PP miroEfrdiosF il

6.2 El hardware RS232

127

pigur TFPX esquem es el de l pigur TFQD IRF

Conexin RS 232 a PC

6.2.7. Construccin cable serial para conectar dos PC


in este so ser omunir dos hi @en este so dos omputdoresAD pigur TFR y l TFPF
DB9 PC1
Receive Data Transmit Data Data Terminal Ready System Ground Data Set Ready 2 3 4 5

DB9 PC2
3 2 6+1 5 4 8 7

rnsmit ht eeive ht ht et edy C grrier hetet ystem qround ht erminl edy gler to end equest to end

+ Carrier Detect

6+1 7 8

Request to Send Clear to Send

l TFPX gonexin PQP entre dos g

6.2.8. Conversin USB a Serial


ixisten dptdores que onvierten ulquier puerto f puerto serie @hfWAF on ideles pr otener ms puertos serie o pr dotr de este interfe en ordendores que no dispongn de l @los

128

CAPTULO 6.

PAQUETE: COMUNICACIN

pigur TFQX

Chip MAX 232

pigur TFRX

Condexin RS 232 entre dos PC

6.3 Implementacin del paquete com_sensor

129

ltimos porttilesAF v eletrni de l onexin se loj en el onetor hfWFhe diseo senillo y ompto en un solo leD pigur TFSF

pigur TFSX

Conversor de USB a Serial

6.3.

Implementacin del paquete com_sensor

e h preferido implementr un pquete de omuniin (com_sensor) pto pr ls oE muniiones de los sensores en lugr de un tvfenF in ests nots slo se implementr l omuniin PQPY sin emrgo on el tiempo se le puede diionr otros protoolosF il pquete com_sensor tendr tres lsesX un que mnejr los prmetros de omuniin seril PQP @veloidd de trnsmisinD its de los dtosD priddDF F F A y se denominr ParametrosPuertoSerial.javaD

otr lse se responsilizr de desplegr un qs @pigur TFTA que le

permitir l usurio on(gurr los prmetros de omuniin seril PQP y se denominr ConguracionRS232.java

y l ltim se responsiliz de estleer l omuniin PQP y reportr

los dtos que llegn l puerto seril y se denominr ComunicacionPuertoSerial.javaF

130

CAPTULO 6.

PAQUETE: COMUNICACIN

pigur TFTX

GUI de la conguracin del puerto serial

6.3.1. Adecuacin del JDK


r l implementin de com_sensor es neesrio gregr l pltform thu @Java Software Development Kit A

el pquete comm.jar el ul no form prte de l mismD unque si es propiedd

de l x mirosystemsF r esto se deen seguir los siguientes psos @en indowsAX vo primero que se he es otener el es de omuniionesY este se puede jr filmente de snternet y que no oup ms de QHH uF e desempquet el (heroF e opi el (hero inQPomFdll en GjreGinF e opi el rhivo ommFjr en GjreGliGextF e opi jvxFommFproperties en GjreGliF qued list l pltform thu pr her los desrrollosF sgulmenteD undo se distriuyn ls pliiones se deen seguir los mismos psos nteriores en el JRE (Java Runtime Environment)F

6.3.2. Implementacin de com_sensor


e ontinuin se hr on el xetfens SFS un proyeto que sirv simultnemente pr impleE mentr el pquete com_sensor y pr prorloF

6.3 Implementacin del paquete com_sensor


Paso 1F

131

erir el shi xetfens SFSF il estdo de l ventn es el de l pigur TFUF erir el proyetoX rer li en File b New Project. . . y se rir l ventn de l

Paso 2F

pigur TFUX pigur TFVF

Ventana inicial del NetBeans 5.5

so QF ilegir GeneralbJava Application y Next y se desplieg l ventn de l pigur TFWF F in el mpo Project Name esriir ProyectoPruebaComponenteSerial @o el nomre desedo del proyetoAY en el mpo Project Location elegir el diretorio donde uir este proyetoF in el mpo greate Main Class mir Main por PruebaComopneneteSerial y her li en
FinishF

il speto del shi es el de l pigur TFIHF smplementr l lse ParametrosPuertoSerial ir el ursor en el nodo del proyeto in l ventn desplegd @pigur TFIIA esriir en el mpo Package

Paso 4F

@ProyectoPruebaComponenteSerialA y her li derehoY en el popmen desplegdo seleionr


Newsbtava Package. . . Name com_sensor

y her li en FinishF il speto del pnel Projects es el de l pigur TFIPF

ir el ursor en el nodo com_sensor y her li derehoY se desplieg el popmen de l piguE r TFIQF isoger Java Class. . . y se desplieg l ventn de l pigur TFIRD

132

CAPTULO 6.

PAQUETE: COMUNICACIN

pigur TFVX

Ventana para crear un proyecto nuevo

6.3 Implementacin del paquete com_sensor

133

pigur TFWX

Ventana para crear la aplicacin

pigur TFIHX

Aspecto del IDE despus de crear la clase principal

134

CAPTULO 6.

PAQUETE: COMUNICACIN

pigur TFIIX

Crear el paquete com_sensor

6.3 Implementacin del paquete com_sensor

135

pigur TFIPX

Aspecto del IDE despus de creado el paquete com_sensor

in el mpo Class NameD esriir ParametrosPuertoSerialF il speto del shi es el de l pigur TFISD gompletr el digo de l lse on el siguiente digoD

 INICIO DEL CDIGO 


package com_sensor; import javax.comm.*; /*

Esta clase guarda los parmetros para el puerto serial. */ public class ParametrosPuertoSerial { private String nombrePuerto; private int baudiosRata; private int bitsdatos;

136

CAPTULO 6.

PAQUETE: COMUNICACIN

pigur TFIQX

Pasos para crear la clases

6.3 Implementacin del paquete com_sensor

137

pigur TFIRX

Creacin de la clase ParametrosPuertoSerial

138

CAPTULO 6.

PAQUETE: COMUNICACIN

pigur TFISX

Aspecto del IDE despus de la creacin de la clase ParametrosPuertoSerial

6.3 Implementacin del paquete com_sensor

139

private int bitsparada; private int paridad; /** Constructor por defecto. Asigna los parmetros al puerto, 9600 baud,datos ded 8 bits, 1 bit de parada, no paridad. */ public ParametrosPuertoSerial () { this("", 9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE ); } /** Constructor con parmetros. */ public ParametrosPuertoSerial(String nombrePuerto, int baudiosRata, int bitsdatos, int bitsparada, int paridad) { this.nombrePuerto = nombrePuerto; this.baudiosRata = baudiosRata; this.bitsdatos= bitsdatos; this.bitsparada = bitsparada; this.paridad = paridad; } /** Asigna nombre al puerto

140

CAPTULO 6.

PAQUETE: COMUNICACIN

*/ public void setNombrePuerto(String nombrePuerto) { this.nombrePuerto = nombrePuerto; } /* Obtiene el nombre del puerto. */ public String getNombrePuerto() { return nombrePuerto; } /** Asigna los baudios. */ public void setBaudiosRata(int baudiosRata) { this.baudiosRata = baudiosRata; } /** Asigna los baudios. */ public void setBaudiosRata(String baudiosRata) { this.baudiosRata = Integer.parseInt(baudiosRata); } /** Obtiene los baudios como un int */ public int getBaudiosRata() { return baudiosRata; } /**

6.3 Implementacin del paquete com_sensor

141

Obteiene los baudios como un String */ public String getBaudiosRataString() { return Integer.toString(baudiosRata); } /** Asigna los bits de los datos. */ public void setBitsdatos(int bitsdatos) { this.bitsdatos= bitsdatos; } /** Asigna los bits de los datos. */ public void setBitsdatos(String bitsdatos) { if (bitsdatos.equals("5")) { this.bitsdatos = SerialPort.DATABITS_5; } if (bitsdatos.equals("6")) { this.bitsdatos = SerialPort.DATABITS_6; } if (bitsdatos.equals("7")) { this.bitsdatos = SerialPort.DATABITS_7; } if (bitsdatos.equals("8")) { this.bitsdatos = SerialPort.DATABITS_8; } } /**

142

CAPTULO 6.

PAQUETE: COMUNICACIN

Obtiene los bits de los datos como un int */ public int getBitsdatos() { return bitsdatos; } /** Obtiene los bits de los datos como un String */ public String getBitsdatosString() { switch(bitsdatos) { case SerialPort.DATABITS_5: return "5"; case SerialPort.DATABITS_6: return "6"; case SerialPort.DATABITS_7: return "7"; case SerialPort.DATABITS_8: return "8"; default: return "8"; } } /** Obtiene los bits de parada. */ public void setBitsparada(int bitsparada) { this.bitsparada = bitsparada; } /**

6.3 Implementacin del paquete com_sensor

143

Obtiene los bits de parada. */ public void setBitsparada(String bitsparada) { if (bitsparada.equals("1")) { this.bitsparada = SerialPort.STOPBITS_1; } if (bitsparada.equals("1.5")) { this.bitsparada = SerialPort.STOPBITS_1_5; } if (bitsparada.equals("2")) { this.bitsparada = SerialPort.STOPBITS_2; } } /** Obtiene los bits de parada como un int */ public int getBitsparada() { return bitsparada; } /* Obtiene los bits de parada como un string. */ public String getBitsparadaString() { switch(bitsparada) { case SerialPort.STOPBITS_1: return "1"; case SerialPort.STOPBITS_1_5: return "1.5"; case SerialPort.STOPBITS_2:

144

CAPTULO 6.

PAQUETE: COMUNICACIN

return "2"; default: return "1"; } } /** Asigna la paridad */ public void setParidad(int paridad) { this.paridad = paridad; } /** Asigna la paridad */ public void setParidad(String paridad) { if (paridad.equals("None")) { this.paridad = SerialPort.PARITY_NONE; } if (paridad.equals("Even")) { this.paridad = SerialPort.PARITY_EVEN; } if (paridad.equals("Odd")) { this.paridad = SerialPort.PARITY_ODD; } } /** Obtiene la paridad como un int */ public int getParidad() {

6.3 Implementacin del paquete com_sensor

145

return paridad; } /** Obtiene la paridad como un string */ public String getParidadString() { switch(paridad) { case SerialPort.PARITY_NONE: return "None"; case SerialPort.PARITY_EVEN: return "Even"; case SerialPort.PARITY_ODD: return "Odd"; default: return "None"; } } /** Metodo para imprimir la configuracin del puerto */ public void print(){ System.out.println(nombrePuerto+", "+baudiosRata+", "+bitsdatos+", "+bitsparada+", "+getParidadString());} }

 FIN DEL CDIGO 


Paso 5F

smplementr l lse ConguracionRS232 ist lse es visul @pigur TFTAF ir el

ursor en el nodo com_sensor y her li derehoY se desplieg el popmen de l pigur TFITF

ilegir JFrame Form. . . y en l ventn desplegd @pigur TFIUA esriir en Class Name

146

CAPTULO 6.

PAQUETE: COMUNICACIN

pigur TFITX

Creacin de la clase ConguracionRS232

6.3 Implementacin del paquete com_sensor ConguracionRS232F

147

y her li en FinishF il ide tendr hor el speto de l @pigur TFIVAF

pigur TFIUX

Creacin de la clase ConguracionRS232

e ontinuin se le dr l form de l pigur TFT l JFrame de l pigurpigur TFIV @pnel


DesignAF

ir el ursor en el nodo JFrame del pnel InspectorF ilegir omo dministrdor de diseo
Gridlayout

T (ls I olumn y gregr T pneles on los nomres de l (gur TFIWF

el pnel jPanel_puerto_serial diionr @sin dministrdor de diseoY o se lire @Free DesignY si se quiere se puede utilizr otroA un etiquet y un j de selein on los nomres y spetos de l (gur TFIWF el pnel jPanel_velocidad_transferencia diionr @sin dministrdor de diseoY o se lire @Free DesignY si se quiere se puede utilizr otroA un etiquet y un j de selein on los nomres y spetos de l (gur TFIWF el jComboBox_velocidad_transferencia gregrles ls opionesX IPHHD RVHHD WTHHD IWVHHD IISPHH y por defeto seleionr WTHHF eguir onstruyendo l qs de tl form que el speto del pnel Inspector teng l form de l pigur TFPHF ener en uent

148

CAPTULO 6.

PAQUETE: COMUNICACIN

pigur TFIVX

Creacin de la clase ConguracionRS232

pigur TFIWX

Creacin de la clase ConguracionRS232

6.3 Implementacin del paquete com_sensor

149

que l jComboBox_bits_datos se le greg ls opionesX VD UD TY l jComboBox_bits_parada se le greg ls opionesX ID IFSD PY l jComboBox_bits_paridad se le greg ls opionesX xoneD yddD ivenD wrkD peF riendo el Preview de este tprme se otiene un ventn omo l de l pigur TFPIF

pigur TFPHX

Creacin de la clase ConguracionRS232

egregr hor los eventos los otonesF irse en d otn y her li dereho l rtnF in el popmen desplegdo elegir Events bAction bactionPerformed @pigur TFPPAF eutomtimente se originn los mtodos orrespondientes donde ms delnte se les grgr el digo neesrio pr otener los resultdos desedosF
Completar el cdigoF

hespus de l instruin package gregr el siguiente digo que import

lgunos pquetes neesriosD

 INICIO DEL CDIGO 


import java.util.Enumeration; import javax.comm.CommPortIdentifier;

150

CAPTULO 6.

PAQUETE: COMUNICACIN

pigur TFPIX

Creacin de la clase ConguracionRS232

pigur TFPPX

Creacin de la clase ConguracionRS232

6.3 Implementacin del paquete com_sensor

151

import javax.swing.JComboBox; import javax.comm.*;

 FIN DEL CDIGO 


egregr el digo pr ls siguientes vriles de instniD

 INICIO DEL CDIGO 

public ParametrosPuertoSerial parametros; public boolean estadoConfiguracion = false;

 FIN DEL CDIGO 


in el onstrutor despus de l lne initgomponents@A gregr el digo siguienteX

 INICIO DEL CDIGO 


initComponents();

public ConfiguracionRS232() { this.setSize(400,290); this.setResizable(false); jComboBox_velocidad_transferencia.setSelectedItem("9600"); //Asignacin de valores para el jComboBox de seleccion de puerto listPortChoices(); this.setEstadoConfiguracion(false); }

 FIN DEL CDIGO 


egregr los siguientes mtodosD

 INICIO DEL CDIGO 

//Metodo encargado de listar todos los puertos seriales que posee el PC //donde se ejecuta el programa private void listPortChoices() { System.out.println("Lista de puertos");

152

CAPTULO 6.

PAQUETE: COMUNICACIN

CommPortIdentifier portId=null; Enumeration en = CommPortIdentifier.getPortIdentifiers(); // iterate through the ports. while (en.hasMoreElements()) { portId = (CommPortIdentifier) en.nextElement(); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { jComboBox_puerto_serial.addItem(portId.getName()); }} //si no hay puerto disponible if(portId==null ){ jComboBox_puerto_serial.addItem("No hay Puerto disponible"); } }//fin de listPortChoices //Mtodo encargado de Transformar el valor seleccionado del jComboBox a un valor //int cuando es requerido private int getJComboBoxIntValue(JComboBox jCombo){ return new Integer((String)jCombo.getSelectedItem()).intValue(); }//fin de getJComboBoxIntValue /** Fija los parametros de la configuraci?n del puerto * @return Devuelve el valor de los parametros disponibles */ public ParametrosPuertoSerial getParametros(){ return parametros; }//fin de getParametros //Metodo encargado de leer los datos seleccionados en el cuadro de dialogo private void actualizarParametros() { //Esta parte es la encargada de crear el objeto con los valores // de configuracion del puerto serial parametros = new ParametrosPuertoSerial(

6.3 Implementacin del paquete com_sensor

153

//"COM3", (String)jComboBox_puerto_serial.getSelectedItem(), getJComboBoxIntValue(jComboBox_velocidad_transferencia), getJComboBoxIntValue(jComboBox_bits_datos), getJComboBoxIntValue(jComboBox_bits_parada), jComboBox_paridad.getSelectedIndex()); }//fin de actualizarParametros private void setEstadoConfiguracion(boolean nuevoEstado){ estadoConfiguracion = nuevoEstado; } public boolean getEstadoConfiguracion(){ return estadoConfiguracion; }

 FIN DEL CDIGO 


ehorD en el mtodo del evento del otn nelr gregrD

 INICIO DEL CDIGO 


this.dispose();

this.setEstadoConfiguracion(false);

 FIN DEL CDIGO 


y en el del otn eptrD

 INICIO DEL CDIGO 


actualizarParametros(); this.setEstadoConfiguracion(true); this.dispose();

 FIN DEL CDIGO 


Paso 6F

smplementr l lse ComunicacionPuertoSerialF

grer l lse ComunicacionPuertoSerial en el pquete om_sensor y on el siguiente digoD

 INICIO DEL CDIGO 

154

CAPTULO 6.

PAQUETE: COMUNICACIN

package com_sensor; import javax.comm.SerialPort; import javax.comm.CommPortIdentifier; import javax.comm.NoSuchPortException; import javax.comm.PortInUseException; import javax.comm.SerialPortEvent; import javax.comm.SerialPortEventListener; import javax.comm.UnsupportedCommOperationException; import java.io.InputStream; import java.io.OutputStream; import java.io.IOException; import java.util.TooManyListenersException; public class ComunicacionPuertoSerial implements SerialPortEventListener,Runnable{ private Thread hilo; public SerialPort port; public CommPortIdentifier portId; private OutputStream out; private InputStream in; private boolean trabajando; /** * Crea una nueva conexion para el puerto RS232 * Este es el constructor por defecto */ public ComunicacionPuertoSerial() { } /** * Contructor que requiere como parametro al nombre del puerto que se * va a utilizar. Este contructor posee una configuracin estandar y * no requiere nada ms para trabajar con el objeto que este crea

6.3 Implementacin del paquete com_sensor

155

* @param portName Nombre del puerto que se utilizara * @throws javax.comm.NoSuchPortException Excepcin lanzada si * no se selecciona un puerto adecuado * @throws javax.comm.PortInUseException Excepcin lanzada si el puerto * esta siendo utilizado por otro programa * @throws javax.comm.UnsupportedCommOperationException Excepcion * lanzada cuando se solicita una operacin que el puerto seleccionado no * soporta * @throws java.io.IOException Excepcion general lanzada por un sin numero * de posibles errores en el puerto */ public ComunicacionPuertoSerial(String portName) throws NoSuchPortException, PortInUseException, UnsupportedCommOperationException,IOException { hilo = new Thread(this); CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier(portName); port = (SerialPort) portId.open("Red de Sensores", 30000); //Esta captura de la excepcion es necesaria para que el //puerto serial funcione en linux try { port.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,SerialPort.PARITY_NONE); port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); } catch (Exception e) { port.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,SerialPort.PARITY_NONE); port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); } //activar en el puerto el evento de llegada de datos port.notifyOnDataAvailable(true);

156

CAPTULO 6.

PAQUETE: COMUNICACIN

in = port.getInputStream(); out = port.getOutputStream(); trabajando = true; }//fin del constructor /** * Contructor que requiere como parametro al nombre del puerto que se * va a utilizar * @param parametros Objeto que posee todos los parametros de configuracin del * puerto serial * @throws javax.comm.NoSuchPortException Excepcin lanzada si no se selecciona * un puerto adecuado * @throws javax.comm.PortInUseException Excepcin lanzada si el puerto esta * siendo utilizado por otro programa * @throws javax.comm.UnsupportedCommOperationException Excepcion * lanzada cuando se solicita una operacin que el puerto seleccionado no * soporta * @throws java.io.IOException Excepcion general lanzada por un sin numero * de posibles errores en el puerto */ public ComunicacionPuertoSerial(ParametrosPuertoSerial parametros) throws NoSuchPortException,PortInUseException, UnsupportedCommOperationException,IOException { hilo = new Thread(this); System.out.println(parametros.getNombrePuerto()); CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier (parametros.getNombrePuerto()); port = (SerialPort) portId.open("Red de Sensores", 30000); //Esta captura de excepcion es necesaria para que el puerto // serial funcione en linux...

6.3 Implementacin del paquete com_sensor

157

try { port.setSerialPortParams(parametros.getBaudiosRata(), parametros.getBitsdatos(), parametros.getBitsparada(), parametros.getParidad()); port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); } catch (Exception e) { port.setSerialPortParams(parametros.getBaudiosRata(), parametros.getBitsdatos(), parametros.getBitsparada(), parametros.getParidad()); port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); } //activar en el puerto el evento de llegada de datos port.notifyOnDataAvailable(true); in = port.getInputStream(); out = port.getOutputStream(); trabajando = true; }//fin del constructor /**Metodo encargado de registrar los eventos que se dan en el puerto *Cuando uno de estos eventos es lanzado, se ejecuta el metodo leerDatos() */ public void serialEvent(SerialPortEvent event) { switch (event.getEventType()) { case SerialPortEvent.DATA_AVAILABLE: leerDatos(); break; } }

158

CAPTULO 6.

PAQUETE: COMUNICACIN

/**Metodo encargado de interpretar los datos que se encuentran *en el input Stream *El caracter A es necesario mientras para reconocer donde finaliza *un dato y *comienza uno nuevo. Esto no es necesario si *la comunicacion se realiza utilizando *objetos, pero esto es imposible entre un pic y JAVA */ public String leerDatos() { // char login = 'A'; char login = '\n'; boolean aceptar; String str = new String(); int newData = 0;//entero correspondiente a los ASCII try {newData = in.read(); } catch (IOException ex) {System.err.println(ex); System.out.println("ERROR EN EL DATO"); return "no dato"; } if (newData != -1) { aceptar=true; while(aceptar){ try { //lee directamente el caracter if ((char)newData==login){aceptar=false; break; } if (newData != -1) str+=""+(char)newData; newData = in.read(); } catch (IOException ex) { System.err.println(ex);

6.3 Implementacin del paquete com_sensor

159

return "no dato"; } }//fin while } return str; } /**Metodo encargado de gobernar al hilo (esta clase) que esta constantemente *esperando que exista un nuevo dato en el buffer del puerto serial. *Para no cargar al equipo, este hilo se ejecuta cada n segundos leyendo todo *lo que hasta ese momento llego al puerto. */ public void run() { try { port.addEventListener(this); } catch (TooManyListenersException ex) { ex.printStackTrace(); } while (trabajando) { try { hilo.sleep(100); } catch (InterruptedException ex) { ex.printStackTrace(); } } } public void setTrabajando(boolean valor){ trabajando = valor; } public boolean getTrabajando(){

160

CAPTULO 6.

PAQUETE: COMUNICACIN

return trabajando; } public void cerrarPuerto(){ try { port.close(); in.close(); out.close(); } catch (IOException ex) { ex.printStackTrace(); } } }

 FIN DEL CDIGO 


Paso 7F

gompletr l pliin que us el pquete com_sensorF ist pliin servir pr

pror diho pqueteF grer un lse de tipo tprme en el pquete ProyectoPruebaComponenteSerial @pigur TFPQAD denomind InstrumentoVirtualRS232F smportr el pquete MisBeans y diionr un instni del tvfen GaugeCircularF e l lse
InstrumentoVirtualRS232

drle l form de l pigur TFPRF

el her un Preview de est lse tendr el speto de l pigur TFPSF egregr los eventos los otones OND OF y RS232F vuego se le implementr el digoF egregr hor el siguiente digo despus de l instruin pkgeF isto on el (n de importr pquetes neesriosF

 INICIO DEL CDIGO 


import com_sensor.ComunicacionPuertoSerial; import com_sensor.ConfiguracionRS232; import java.io.IOException;

6.3 Implementacin del paquete com_sensor

161

pigur TFPQX

Creacin de la clase InstrumentoVirtualRS232

pigur TFPRX

Creacin de la clase InstrumentoVirtualRS232

162

CAPTULO 6.

PAQUETE: COMUNICACIN

pigur TFPSX

Creacin de la clase InstrumentoVirtualRS232

import javax.comm.NoSuchPortException; import javax.comm.PortInUseException; import javax.comm.UnsupportedCommOperationException;

 FIN DEL CDIGO 


ist lse deer estr ontinumente revisndo el dto que se enuentr entrndo por el puerto serilF r logrr esto le implementmos l interfe RunnableD

 INICIO DEL CDIGO   FIN DEL CDIGO 

public class InstrumentoVirtualRS232 extends javax.swing.JFrame implements Runnable

egreguemos el digo que soport ls vriles de instniD

 INICIO DEL CDIGO 


//hilo de animacin

private ComunicacionPuertoSerial puerto;

6.3 Implementacin del paquete com_sensor

163

private Thread hilo; public ConfiguracionRS232 conf;

 FIN DEL CDIGO 


in el onstrutor gregrD

 INICIO DEL CDIGO 


this.setResizable(false);

 FIN DEL CDIGO 


on el (n de evitr que el usurio le mie de tmoF egregr los siguientes mtodosD

 INICIO DEL CDIGO 


//arrancar la animacin public void arrancar(){ hilo=new Thread(this); hilo.start(); } //parar la animacin public void detener(){ //mata el hilo hilo = null; } public void run(){

while(hilo != null){ try{ //leer los datos del puerto String cadena_dato=puerto.leerDatos(); //convertir la cadena a double double dato=convertirDato(cadena_dato); gauge_circular.setLectura(dato);

164

CAPTULO 6.

PAQUETE: COMUNICACIN

gauge_circular.repaint(); //dormir el hilo 500 milisegundos Thread.sleep(500); }//fin try catch(InterruptedException e){}//fin catch }//fin while } private double convertirDato(String cadena_dato){ double dato=0.0; int primera_posicion_c=cadena_dato.indexOf('C'); int proxima_posicion_c=cadena_dato.indexOf('C',primera_posicion_c+1); String cadena_numero_dato=cadena_dato.substring(primera_posicion_c+1, proxima_posicion_c); try{ dato=new Integer(cadena_numero_dato).intValue(); }catch(NumberFormatException ex){ System.out.println(cadena_numero_dato); System.out.println("La cadena del nmero del dato No es un nmero"); return dato; }

 FIN DEL CDIGO 


ehor se implementr los digos de los eventos de los tres otonesF r el otn RS232D se le implement el siguiente digoD

 INICIO DEL CDIGO 

jButton_configurar.setEnabled(false); jButton_on.setEnabled(true); conf=new ConfiguracionRS232(); conf.setVisible(true);

6.3 Implementacin del paquete com_sensor

165

 FIN DEL CDIGO 


r el otn ypD

 INICIO DEL CDIGO 


jButton_on.setEnabled(true); jButton_of.setEnabled(false); detener();

 FIN DEL CDIGO 


r el otn yxD

 INICIO DEL CDIGO 


try { this.puerto = new ComunicacionPuertoSerial(conf.parametros); } catch (NoSuchPortException ex) { ex.printStackTrace(); } catch (UnsupportedCommOperationException ex) { ex.printStackTrace(); } catch (PortInUseException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } jButton_on.setEnabled(false); jButton_of.setEnabled(true); arrancar();

 FIN DEL CDIGO 


il mtodo convertirDato(String cadena_dato)D se implement pr leer el dto reiido del sensor uido en el nl I de l unidd sensor @que posee ino nlesAD que en nuestro so es luminosiddF v den que env un unidd sensor tiene l siguiente estruturX e5ef5fg5gg5gg5gg5gg5g

166

CAPTULO 6.

PAQUETE: COMUNICACIN

intre ls A est l den que represent el nmero de l estin en l ul est uid l unidd sensorD entre ls B est l den del nmero que represent el nmero de l unidd sensor dentro de su estin de monitoreo y entre ls C estn ls dens que representn los vlores de ls mgnitudes fsis sensds y orgnizds respetivmente por nles @nl ID nl PDF F F y nl SAF gomo se menion trs en el nl I est onetdo el sensor de luminosiddF in l siguiente unidd se omprender mejor l topolog de l red de sensoresD plnted en ests nots @istinD mduloD nlAF or ultimo gregr l mtodo prinipl @minA de l lse PruebaComponenteSerial el digo que permit rer un instni de InstrumentoVirtualRS232F

 INICIO DEL CDIGO   FIN DEL CDIGO 

new InstrumentoVirtualRS232().setVisible(true);

el ompiler y ejeutr l pliin se deslieg el instrumento virtulD pigur TFPTF

pigur TFPTX

Ventana que sepliega la aplicacin

e ontinuin se pror l omuniin serilF e onet el mdulo reeptor l g @pigur TFPUA en un puerto seril @o f on dptdor

6.3 Implementacin del paquete com_sensor

167

serilA y se ui el mdulo sensor @pigur TFPVA en l regin donde se dese monitorer ls vriles fssF

pigur TFPUX

Conexin del mdulo receptor al USB del PC

pigur TFPVX

Ubicacin del mdulo sensor

e ejeut el progrm y se otendr @pigur TFPWAD r distriuir el pquete se reomiend herlo

Paso 7 Distribucin del paquete com_sensor

en un rhivo .jar y doumentrlo on su respetivo javadocF v form de her esto on xetfens SFS es l siguienteX

168

CAPTULO 6.

PAQUETE: COMUNICACIN

pigur TFPWX

Ventana que se despliega la ejecutar la aplicacin

erir un nuevo proyeto denomindo com_sensorF gopir el pquete com_sensor del proyeto nterior @PruebaComponenteSerialA en el nodo Source PackagesF gon el ursor uido en el proyeto com_sensorD ir l men y seleionr en BuildbGenerate
Javadoc for com_sensorF BuildbBuild Main Project

y listoF

in l surpet dist del proyeto estn el javadoc y el pquete com_sensor.jar pr distriuirF

Captulo

APLICACIN: RED de sensores ZigBee

7.1.

Introduccin

in est unidd se implementr un pliin de monitoreo de un red de sensores on proE toolo de omuniin inlmrioD igfeeF v red tendr l rquitetur propuest en l sein SFQX vrios mdulos sensores onformrn un estin de monitoreo y todos ellos se omuniE rn on un mdulo reeptor el ul su vez estr opldo un omputdor por un puerto seril @o fAF v estrutur de los dtos envidos por ls uniddes sensors l reeptor esD e5ef5fg5gg5gg5gg5gg5gY entre ls A est l den que represent el nmero de l esE tin en l ul est uid l unidd sensorD entre ls B est l den del nmero que represent el nmero de l unidd sensor dentro de su estin de monitoreo y entre ls C estn ls dens que representn los vlores de ls mgnitudes fsis sensds y orgnizds respetivmente por nles @nl ID nl PDF F F y nl SAF gomo se menion trs en el nl I se onetr el sensor de luminosiddD por el nl P el sensor de temperturD por el tres el de humedd reltivY los otros dos se dejrn liresF

ITW

170

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

7.2.

La estructura de la aplicacin

v pliin estr ompuest por ino lses que se denominrnX wonitoreoFjvD golorwetE hlhemeFjvD lerogontrolFjvD hespliegueistsFjv y htosFjvD on ls responsiliddes desrits ontinuinF

7.2.1. La clase Monitoreo.java


is l lse que ontiene el mtodo prinipl MainF u responsilidd es l de empezr l ejeuin de l pliinF min ontiene instruiones que mejorn l presentin de ls qsF

7.2.2. La clase ColorMethalTheme.java


il nio (n de est lse es yudr mejorr el speto gr(o @oloresA de ls qsF

7.2.3. La clase TableroControl.java


ist lse es visul y de tipo tprmeF el her un instni de ell se dee desplegr el tlero de l pigur UFI F gon este tlero el usurio podr eder l on(gruin del puerto serilD rir y errr l omuniin on l red de sensoresD errr l pliin y esoger el mdulo sensor monitorerF gomo se puede oservr el speto de los otones se h mejordo medinte imgenes que se les diionn omo ionosF

7.2.4. La clase DespliegueVistas.java


ist lse se enrg de desplegr los instrumentos virtulesD ls gr(s y ls tlsF n insE tni de ls misms tiene el speto de l pigur UFPF

7.2 La estructura de la aplicacin

171

pigur UFIX

GUI Tablero de Control

172

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

pigur UFPX

GUI Tablero de Monitoreo

7.3 Implementacin de la aplicacin

173

7.2.5. La clase Datos.java


ist lse mntiene los dtos en memori ew medinte un estrutur de prleleppedoD piE gur UFQF

pigur UFQX

Estructura de datos

7.3.

Implementacin de la aplicacin
grer el proyeto denomindo edigfee e importr los pquetes que preen en el

Paso 1F

pnel rojetsD pigur UFRF


Paso 2F

grer ls lses ColorMetalTheme.javaD DespliegueVistas.java @es un tprmeAD Mo@es un tprmeA tl omo se ilustr en el pnel projects en

nitoreo.javaD TableroControl.java

el nodo <default package>D pigur UFRF smportr tmin ls imgenes que se le vn diionr omo ionos los otonesF
Paso 3F

grer l lse datos.java en un pquete denomindo DatosD pigur UFTF

174

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

pigur UFRX

Importar los paquetes para el proyecto RedZigBee

pigur UFSX

Creacin de algunas clases e importacin de imgenes

7.3 Implementacin de la aplicacin

175

pigur UFTX
Paso 4F

Creacin de la clase Datos.java

egregr el digo ls lses ColorMetalTheme.javaD Monitoreo.java y datos.javaF

gdigo de l lse ColorMetalTheme.javaF

 INICIO DEL CDIGO 


import javax.swing.plaf.*; import java.awt.*;

import javax.swing.plaf.metal.*; public class ColorMetalTheme extends DefaultMetalTheme{ //verde private final ColorUIResource primary1 = new ColorUIResource(51, 102, 51); private final ColorUIResource primary2 = new ColorUIResource(102, 153, 102); private final ColorUIResource primary3 = new ColorUIResource(153,204,153);//(200,125,60)153, 204, 153); private final ColorUIResource secondary1 = new ColorUIResource( 111, 111, 111);

private final ColorUIResource secondary2 = new ColorUIResource(153, 204, 153); private final ColorUIResource secondary3 = new ColorUIResource(231, 215, 183); protected ColorUIResource getPrimary1() { return primary1; } protected ColorUIResource getPrimary2() { return primary2; }

176

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

protected ColorUIResource getPrimary3() { return primary3; } protected ColorUIResource getSecondary1() { return secondary1; } protected ColorUIResource getSecondary2() { return secondary2; } protected ColorUIResource getSecondary3() { return secondary3; } /** Creates a new instance of GreenMetalTheme */ public ColorMetalTheme() { } }

 FIN DEL CDIGO 


Cdigo de la clase Monitoreo.java

 INICIO DEL CDIGO 


import javax.swing.*; public class Monitoreo {

import javax.swing.plaf.metal.*; /** Creates a new instance of Monitoreo */ public Monitoreo() { } /** * @param args the command line arguments */ public static void main(String[] args) { //decoracin JDialog.setDefaultLookAndFeelDecorated(true); JFrame.setDefaultLookAndFeelDecorated(true); try { MetalLookAndFeel.setCurrentTheme(new ColorMetalTheme()); UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); } catch(Exception e) { e.printStackTrace();

7.3 Implementacin de la aplicacin

177

} java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new TableroControl().setVisible(true); } }); } }

 FIN DEL CDIGO 


Cdigo de la clase datos.javaF

 INICIO DEL CDIGO 


package datos; import java.util.Date;

public class Almacen_RAM_Datos { //Datos actuales de todos los sensores de la red en un muestreo //(muestreo actual) //estacion_de_la_red,unidad_sensora,numero_sensor public static double dato_actual_sensores[][][]=new double[13][13][8]; //Constructor public Almacen_RAM_Datos(){ } //la clase ComunicacionPuertoSerial se encarga de enviar los datos de una //unidad sensora de //una estacin a travs de este mtodo public static void setDatoSensoresUnidadSensora(int numero_estacion, int numero_unidad_sensora,int numero_sensor,double dato){ //meter el dato al arreglo tridimensional:numero_estacion-numero_unidad_sensora//numero_sensor dato_actual_sensores[numero_estacion][numero_unidad_sensora][numero_sensor] =getDatoCalibrado(numero_sensor,dato);

178

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

} private static double getDatoCalibrado(int numero_sensor,double dato){ double dato_calibrado=0.0; //S numero_sensor=1, luminosidad if(numero_sensor==1){ dato_calibrado=getDatoCalibradoLuminosidadUno(dato); } //S numero_sensor=2, temperatura if(numero_sensor==2){ dato_calibrado=getDatoCalibradoTemperatura(dato); } //S numero_sensor=3, humedad`relativa if(numero_sensor==3){ dato_calibrado=getDatoCalibradoHumedadRelativa(dato); } //S numero_sensor=4, Campo magntico if(numero_sensor==4){ dato_calibrado=getDatoCalibradoIntensidadCampoMagnetico(dato); } //S numero_sensor=5, Infrarrojo if(numero_sensor==5){ dato_calibrado=getDatoCalibradoLuminosidadDos(dato); } //Se pueden agregar ms sensores return dato_calibrado; } //mtodos de calibracin private static double getDatoCalibradoTemperatura(double dato){ double dato_calibrado_temperatura=0.0;

7.3 Implementacin de la aplicacin

179

//Aqu va el cdigo de la expresin de calibracin dato_calibrado_temperatura=dato; return dato_calibrado_temperatura; } private static double getDatoCalibradoLuminosidadUno(double dato){ double dato_calibrado_luminosidad_uno=0.0; //Aqu va el cdigo de la expresin de calibracin dato_calibrado_luminosidad_uno=dato; return dato_calibrado_luminosidad_uno; } private static double getDatoCalibradoHumedadRelativa(double dato){ double dato_calibrado_humedad_relativa=0.0; //Aqu va el cdigo de la expresin de calibracin dato_calibrado_humedad_relativa=dato; return dato_calibrado_humedad_relativa; } private static double getDatoCalibradoIntensidadCampoMagnetico(double dato){ double dato_calibrado_intensidad_campo_magnetico=0.0; //Aqu va el cdigo de la expresin de calibracin dato_calibrado_intensidad_campo_magnetico=dato; return dato_calibrado_intensidad_campo_magnetico; } private static double getDatoCalibradoLuminosidadDos(double dato){ double dato_calibrado_luminosidad_dos=0.0; //Aqu va el cdigo de la expresin de calibracin dato_calibrado_luminosidad_dos=dato; return dato_calibrado_luminosidad_dos; } }//fin de la clase

180

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

 FIN DEL CDIGO 


Paso 5F

gdigo de l lse DespliegueVistas.java y TablaA y drles los nomres ilustrdos en el pnel Inspector de l pigur UFUF

erir el pnel Design pr l lse DespliegueVistas.javaF egregr los JavaBeans @qaugeCircularD


GracaXY

pigur UFUX

Agregar los JavaBeans

e implementron ino instnis de los ens GaugeCircularD GracaXY y TablaF in emrgo slo se usrn sensores pr los ens de temperturD luminosidd y humedd reltivF egregrle hor l lse l instruin pr imortrDGG

 INICIO DEL CDIGO 

import datos.*;

7.3 Implementacin de la aplicacin

181

 FIN DEL CDIGO 


gompletr el digo del onstrutorD

 INICIO DEL CDIGO 


initComponents();

public DespliegueVistas() { this.setSize(1000,600); this.setResizable(false); this.setLocation(200,50); }

 FIN DEL CDIGO 


egregr los siguientes mtodos on el respetivo digoD

 INICIO DEL CDIGO 

public void actualizarTablero(int tiempo,int numero_estacion, int numero_unidad_sensora){ gaugeCircular_luminosidad.setLectura(Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][1]); graficaXY_luminosidad.setDato(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][1]); gaugeCircular_luminosidad.repaint(); graficaXY_luminosidad.repaint(); tabla_luminosidad.setValoresTabla(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][1]); gaugeCircular_luminosidad_fotosintetica.setLectura(Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][2]);

182

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

graficaXY_luminosidad_fotosintetica.setDato(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][2]); gaugeCircular_luminosidad_fotosintetica.repaint(); graficaXY_luminosidad_fotosintetica.repaint(); tabla_luminosidad_fotosintetica.setValoresTabla(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][2]); gaugeCircular_temperatura.setLectura(Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][3]); graficaXY_temperatura.setDato(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][3]); gaugeCircular_temperatura.repaint(); graficaXY_temperatura.repaint(); tabla_temperatura.setValoresTabla(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][3]); gaugeCircular_humedad_relativa.setLectura(Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][4]); graficaXY_humedad_relativa.setDato(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][4]); gaugeCircular_humedad_relativa.repaint(); graficaXY_humedad_relativa.repaint(); tabla_humedad_relativa.setValoresTabla(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion]

7.3 Implementacin de la aplicacin

183

[numero_unidad_sensora][4]); gaugeCircular_x.setLectura(Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][5]); graficaXY_x.setDato(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][5]); gaugeCircular_x.repaint(); graficaXY_x.repaint(); tabla_x.setValoresTabla(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][5]); this.setTitle("Estacin " } public void borrarDatos(){ graficaXY_luminosidad.borrarDatos(); graficaXY_luminosidad_fotosintetica.borrarDatos(); graficaXY_temperatura.borrarDatos(); graficaXY_humedad_relativa.borrarDatos(); graficaXY_x.borrarDatos(); tabla_luminosidad.borrarDatos(); tabla_luminosidad_fotosintetica.borrarDatos(); tabla_temperatura.borrarDatos(); tabla_humedad_relativa.borrarDatos(); tabla_x.borrarDatos(); "+numero_estacion+ Mdulo "+numero_unidad_sensora);

 FIN DEL CDIGO 


Paso 6F

gdigo de l lse TableroControl.java

184

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

erir el pnel Design pr l lse TableroControl.javaF egregr los omponentes que se indin en el pnel Inspector de l pigur UFV y drles los mismos nomresF

pigur UFVX

Agregar los componentes a la clase TableroControl

e los tpnel jPanel_abajo_izquierdo y jPanel_abajo_derecho gregrles los omponentes ilustrdos en el pnel InspectorDpigur UFWF henominrlos on los mimos nomresF egregr el digo pr importr pquetesD

 INICIO DEL CDIGO 

import com_sensor.ComunicacionPuertoSerial;

7.3 Implementacin de la aplicacin

185

pigur UFWX

Agregar los componentes a la clase TableroControl

import com_sensor.ConfiguracionRS232; import java.io.IOException; import javax.comm.NoSuchPortException; import javax.comm.PortInUseException; import javax.comm.UnsupportedCommOperationException; import java.awt.*; import javax.swing.*; import datos.*;

 FIN DEL CDIGO 


gdigo pr implementr l interfe RunnableD

 INICIO DEL CDIGO 

public class TableroControl extends javax.swing.JFrame implements Runnable {

186

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

 FIN DEL CDIGO 


gdigo de ls vriles de instniD

 INICIO DEL CDIGO 

private ImageIcon imagen_icono_boton_monitoreo_empezar, imagen_icono_boton_monitoreo_terminar,imagen_icono_boton_serial, imagen_icono_boton_uno_1,imagen_icono_boton_dos_1, imagen_icono_boton_tres_1,imagen_icono_boton_cuatro_1, imagen_icono_boton_cinco_1,imagen_icono_boton_seis_1, imagen_icono_boton_siete_1,imagen_icono_boton_ocho_1, imagen_icono_boton_nueve_1,imagen_icono_boton_diez_1, imagen_icono_boton_once_1,imagen_icono_boton_doce_1, imagen_icono_boton_uno,imagen_icono_boton_dos, imagen_icono_boton_tres,imagen_icono_boton_cuatro, imagen_icono_boton_cinco,imagen_icono_boton_seis, imagen_icono_boton_siete,imagen_icono_boton_ocho, imagen_icono_boton_nueve,imagen_icono_boton_diez, imagen_icono_boton_once,imagen_icono_boton_doce, imagen_icono_boton_uno_amarillo, imagen_icono_boton_dos_amarillo, imagen_icono_boton_tres_amarillo, imagen_icono_boton_cuatro_amarillo, imagen_icono_boton_cinco_amarillo, imagen_icono_boton_seis_amarillo, imagen_icono_boton_siete_amarillo, imagen_icono_boton_ocho_amarillo, imagen_icono_boton_nueve_amarillo, imagen_icono_boton_diez_amarillo, imagen_icono_boton_once_amarillo, imagen_icono_boton_doce_amarillo,

7.3 Implementacin de la aplicacin

187

imagen_icono_salir; private DespliegueVistas vistas; private int numero_estacion=1; private int numero_unidad_sensora=1; public ComunicacionPuertoSerial puerto; private int tiempo=0; //hilo de animacin private Thread hilo; public ConfiguracionRS232 conf;

 FIN DEL CDIGO 


gdigo en el onstrutor despus de initComponents()D

 INICIO DEL CDIGO 


this.setSize(300,420); //cargar imgenes iconos

jButton_unidad_uno.setBackground(new Color(254,115,80)); imagen_icono_boton_monitoreo_empezar = new ImageIcon (TableroControl.class.getResource("comunicacion_sensores_empezar.JPG")); imagen_icono_boton_monitoreo_terminar = new ImageIcon (TableroControl.class.getResource("comunicacion_sensores_terminar.jpg")); imagen_icono_boton_serial = new ImageIcon (TableroControl.class.getResource("serial.JPG")); //numeros imagen_icono_boton_uno_amarillo=new ImageIcon (TableroControl.class.getResource("uno_amarillo.gif")); imagen_icono_boton_dos_amarillo=new ImageIcon (TableroControl.class.getResource("dos_amarillo.gif")); imagen_icono_boton_tres_amarillo=new ImageIcon (TableroControl.class.getResource("tres_amarillo.gif"));

188

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

imagen_icono_boton_cuatro_amarillo=new ImageIcon (TableroControl.class.getResource("cuatro_amarillo.gif")); imagen_icono_boton_cinco_amarillo=new ImageIcon (TableroControl.class.getResource("cinco_amarillo.gif")); imagen_icono_boton_seis_amarillo=new ImageIcon (TableroControl.class.getResource("seis_amarillo.gif")); imagen_icono_boton_siete_amarillo=new ImageIcon (TableroControl.class.getResource("siete_amarillo.gif")); imagen_icono_boton_ocho_amarillo=new ImageIcon (TableroControl.class.getResource("ocho_amarillo.gif")); imagen_icono_boton_nueve_amarillo=new ImageIcon (TableroControl.class.getResource("nueve_amarillo.gif")); imagen_icono_boton_diez_amarillo=new ImageIcon (TableroControl.class.getResource("diez_amarillo.gif")); imagen_icono_boton_once_amarillo=new ImageIcon (TableroControl.class.getResource("once_amarillo.gif")); imagen_icono_boton_doce_amarillo=new ImageIcon (TableroControl.class.getResource("doce_amarillo.gif")); imagen_icono_boton_uno = new ImageIcon (TableroControl.class.getResource("uno.gif")); imagen_icono_boton_uno_1 = new ImageIcon (TableroControl.class.getResource("uno_1.gif")); imagen_icono_boton_dos = new ImageIcon (TableroControl.class.getResource("dos.gif")); imagen_icono_boton_dos_1 = new ImageIcon (TableroControl.class.getResource("dos_1.gif")); imagen_icono_boton_tres = new ImageIcon (TableroControl.class.getResource("tres.gif")); imagen_icono_boton_tres_1 = new ImageIcon

7.3 Implementacin de la aplicacin

189

(TableroControl.class.getResource("tres_1.gif")); imagen_icono_boton_cuatro = new ImageIcon (TableroControl.class.getResource("cuatro.gif")); imagen_icono_boton_cuatro_1 = new ImageIcon (TableroControl.class.getResource("cuatro_1.gif")); imagen_icono_boton_cinco = new ImageIcon (TableroControl.class.getResource("cinco.gif")); imagen_icono_boton_cinco_1 = new ImageIcon (TableroControl.class.getResource("cinco_1.gif")); imagen_icono_boton_seis = new ImageIcon (TableroControl.class.getResource("seis.gif")); imagen_icono_boton_seis_1 = new ImageIcon (TableroControl.class.getResource("seis_1.gif")); imagen_icono_boton_siete = new ImageIcon (TableroControl.class.getResource("siete.gif")); imagen_icono_boton_siete_1 = new ImageIcon (TableroControl.class.getResource("siete_1.gif")); imagen_icono_boton_ocho = new ImageIcon (TableroControl.class.getResource("ocho.gif")); imagen_icono_boton_ocho_1 = new ImageIcon (TableroControl.class.getResource("ocho_1.gif")); imagen_icono_boton_nueve = new ImageIcon (TableroControl.class.getResource("nueve.gif")); imagen_icono_boton_nueve_1 = new ImageIcon (TableroControl.class.getResource("nueve_1.gif")); imagen_icono_boton_diez = new ImageIcon (TableroControl.class.getResource("diez.gif")); imagen_icono_boton_diez_1 = new ImageIcon (TableroControl.class.getResource("diez_1.gif"));

190

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

imagen_icono_boton_once = new ImageIcon (TableroControl.class.getResource("once.gif")); imagen_icono_boton_once_1 = new ImageIcon (TableroControl.class.getResource("once_1.gif")); imagen_icono_boton_doce = new ImageIcon (TableroControl.class.getResource("doce.gif")); imagen_icono_boton_doce_1 = new ImageIcon (TableroControl.class.getResource("doce_1.gif")); imagen_icono_salir=new ImageIcon (TableroControl.class.getResource("salir.GIF")); jButton_empezar_monitoreo.setIcon (imagen_icono_boton_monitoreo_empezar); jButton_terminar_monitoreo.setIcon (imagen_icono_boton_monitoreo_terminar); jButton_cerrar.setIcon(imagen_icono_salir); jButton_estacion_uno.setIcon(imagen_icono_boton_uno_amarillo); jButton_estacion_dos.setIcon(imagen_icono_boton_dos); jButton_estacion_tres.setIcon(imagen_icono_boton_tres); jButton_estacion_cuatro.setIcon(imagen_icono_boton_cuatro); jButton_estacion_cinco.setIcon(imagen_icono_boton_cinco); jButton_estacion_seis.setIcon(imagen_icono_boton_seis); jButton_estacion_siete.setIcon(imagen_icono_boton_siete); jButton_estacion_ocho.setIcon(imagen_icono_boton_ocho); jButton_estacion_nueve.setIcon(imagen_icono_boton_nueve); jButton_estacion_diez.setIcon(imagen_icono_boton_diez); jButton_estacion_once.setIcon(imagen_icono_boton_once); jButton_estacion_doce.setIcon(imagen_icono_boton_doce); jButton_unidad_uno.setIcon(imagen_icono_boton_uno_amarillo); jButton_unidad_dos.setIcon(imagen_icono_boton_dos_1);

7.3 Implementacin de la aplicacin

191

jButton_unidad_tres.setIcon(imagen_icono_boton_tres_1); jButton_unidad_cuatro.setIcon(imagen_icono_boton_cuatro_1); jButton_unidad_cinco.setIcon(imagen_icono_boton_cinco_1); jButton_unidad_seis.setIcon(imagen_icono_boton_seis_1); jButton_unidad_siete.setIcon(imagen_icono_boton_siete_1); jButton_unidad_ocho.setIcon(imagen_icono_boton_ocho_1); jButton_unidad_nueve.setIcon(imagen_icono_boton_nueve_1); jButton_unidad_diez.setIcon(imagen_icono_boton_diez_1); jButton_unidad_once.setIcon(imagen_icono_boton_once_1); jButton_unidad_doce.setIcon(imagen_icono_boton_doce_1); jButton_configurar_comunicacion.setIcon(imagen_icono_boton_serial); jButton_empezar_monitoreo.setEnabled(false); jButton_terminar_monitoreo.setEnabled(false); this.setResizable(false); vistas=new DespliegueVistas();

 FIN DEL CDIGO 


egregr los siguientes mtodos on el respetivo digoD

 INICIO DEL CDIGO 


//arrancar la animacin public void arrancar(){ hilo=new Thread(this); hilo.start(); } //parar la animacin public void detener(){ //mata el hilo hilo = null; } public void run(){

192

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

while(hilo != null){ tiempo=tiempo+1; try{ //dormir el hilo 50 milisegundos String cadena_dato=puerto.leerDatos(); almacenarDatoRam(cadena_dato); vistas.actualizarTablero(tiempo,numero_estacion,numero_unidad_sensora); Thread.sleep(500); }//fin try catch(InterruptedException e){}//fin catch }//fin while } private void almacenarDatoRam(String str) { int numero_estacion=0; int numero_modulo=0; int numero_sensores=5; //para 10 sensores por mdulo int[] numero_datos=new int[numero_sensores+1]; int numero_sensor=0; boolean es_numero_estacion=true; boolean es_numero_modulo=true; boolean es_numero_dato=true; //subcadena que contiene el nmero de la estacin int primera_posicion_a=str.indexOf('A'); int proxima_posicion_a=str.indexOf('A',primera_posicion_a+1); String cadena_numero_estacion=str.substring(primera_posicion_a+1, proxima_posicion_a); //solo si el dato es vlido

7.3 Implementacin de la aplicacin

193

try{ numero_estacion=new Integer(cadena_numero_estacion).intValue(); }catch(NumberFormatException ex){ es_numero_estacion=false; } //subcadena que contiene el nmero del mdulo int primera_posicion_b=str.indexOf('B'); int proxima_posicion_b=str.indexOf('B',primera_posicion_b+1); String cadena_numero_modulo=str.substring(primera_posicion_b+1, proxima_posicion_b); //solo si el dato es vlido try{ numero_modulo=new Integer(cadena_numero_modulo).intValue(); }catch(NumberFormatException ex){ es_numero_modulo=false; } //subcadenas que contienen los nmeros de los datos int primera_posicion_c=0; int proxima_posicion_c=0; primera_posicion_c=str.indexOf('C'); for(int i=1;i<numero_sensores+1;i++){ //primera_posicion_c=str.indexOf('C'); proxima_posicion_c=str.indexOf('C',primera_posicion_c+1); String cadena_numero_dato=str.substring(primera_posicion_c+1,proxima_posicion_c); //solo si el dato es vlido try{ numero_sensor=numero_sensor+1; numero_datos[numero_sensor]=new Integer(cadena_numero_dato).intValue(); }catch(NumberFormatException ex){

194

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

es_numero_dato=false; } primera_posicion_c= proxima_posicion_c+1; //Exportar los datos al almacn if(es_numero_dato==true&&es_numero_estacion==true&&es_numero_modulo==true){ Almacen_RAM_Datos.setDatoSensoresUnidadSensora (numero_estacion,numero_modulo,numero_sensor,numero_datos[numero_sensor]); } }//fin for } private void colorOriginalBotonesUnidad(){ jButton_unidad_uno.setIcon(imagen_icono_boton_uno_1); jButton_unidad_dos.setIcon(imagen_icono_boton_dos_1); jButton_unidad_tres.setIcon(imagen_icono_boton_tres_1); jButton_unidad_cuatro.setIcon(imagen_icono_boton_cuatro_1); jButton_unidad_cinco.setIcon(imagen_icono_boton_cinco_1); jButton_unidad_seis.setIcon(imagen_icono_boton_seis_1); jButton_unidad_siete.setIcon(imagen_icono_boton_siete_1); jButton_unidad_ocho.setIcon(imagen_icono_boton_ocho_1); jButton_unidad_nueve.setIcon(imagen_icono_boton_nueve_1); jButton_unidad_diez.setIcon(imagen_icono_boton_diez_1); jButton_unidad_once.setIcon(imagen_icono_boton_once_1); jButton_unidad_doce.setIcon(imagen_icono_boton_doce_1); } private void colorOriginalBotonesEstacion(){ jButton_estacion_uno.setIcon(imagen_icono_boton_uno); jButton_estacion_dos.setIcon(imagen_icono_boton_dos);

7.3 Implementacin de la aplicacin

195

jButton_estacion_tres.setIcon(imagen_icono_boton_tres); jButton_estacion_cuatro.setIcon(imagen_icono_boton_cuatro); jButton_estacion_cinco.setIcon(imagen_icono_boton_cinco); jButton_estacion_seis.setIcon(imagen_icono_boton_seis); jButton_estacion_siete.setIcon(imagen_icono_boton_siete); jButton_estacion_ocho.setIcon(imagen_icono_boton_ocho); jButton_estacion_nueve.setIcon(imagen_icono_boton_nueve); jButton_estacion_diez.setIcon(imagen_icono_boton_diez); jButton_estacion_once.setIcon(imagen_icono_boton_once); jButton_estacion_doce.setIcon(imagen_icono_boton_doce); }

 FIN DEL CDIGO 


il digo de los eventos de los otonesD

 INICIO DEL CDIGO 

private void jButton_cerrarActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: System.exit(0); } private void jButton_unidad_doceActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_doce.setIcon (imagen_icono_boton_doce_amarillo); numero_unidad_sensora=12; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero

196

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

(tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_unidad_onceActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_once.setIcon (imagen_icono_boton_once_amarillo); numero_unidad_sensora=11; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_unidad_diezActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_diez.setIcon (imagen_icono_boton_diez_amarillo); numero_unidad_sensora=10; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); }

7.3 Implementacin de la aplicacin

197

private void jButton_unidad_nueveActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_nueve.setIcon (imagen_icono_boton_nueve_amarillo); numero_unidad_sensora=9; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_unidad_ochoActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_ocho.setIcon (imagen_icono_boton_ocho_amarillo); numero_unidad_sensora=8; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_unidad_sieteActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here:

198

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

colorOriginalBotonesUnidad(); jButton_unidad_siete.setIcon (imagen_icono_boton_siete_amarillo); numero_unidad_sensora=7; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_unidad_seisActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_seis.setIcon (imagen_icono_boton_seis_amarillo); numero_unidad_sensora=6; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_unidad_cincoActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_cinco.setIcon (imagen_icono_boton_cinco_amarillo);

7.3 Implementacin de la aplicacin

199

numero_unidad_sensora=5; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_unidad_cuatroActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_cuatro.setIcon (imagen_icono_boton_cuatro_amarillo); numero_unidad_sensora=4; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_unidad_tresActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_tres.setIcon (imagen_icono_boton_tres_amarillo); numero_unidad_sensora=3; vistas.borrarDatos(); tiempo=0;

200

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_doceActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_doce.setIcon (imagen_icono_boton_doce_amarillo); numero_estacion=12; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_onceActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_once.setIcon (imagen_icono_boton_once_amarillo); numero_estacion=11; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); }

7.3 Implementacin de la aplicacin

201

private void jButton_estacion_diezActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_diez.setIcon (imagen_icono_boton_diez_amarillo); numero_estacion=10; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_nueveActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_nueve.setIcon (imagen_icono_boton_nueve_amarillo); numero_estacion=9; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_ochoActionPerformed (java.awt.event.ActionEvent evt) {

202

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

// TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_ocho.setIcon (imagen_icono_boton_ocho_amarillo); numero_estacion=8; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_sieteActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_siete.setIco (imagen_icono_boton_siete_amarillo); numero_estacion=7; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_seisActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_seis.setIcon

7.3 Implementacin de la aplicacin

203

(imagen_icono_boton_seis_amarillo); numero_estacion=6; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_cincoActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_cinco.setIcon (imagen_icono_boton_cinco_amarillo); numero_estacion=5; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_cuatroActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_cuatro.setIcon (imagen_icono_boton_cuatro_amarillo); numero_estacion=4; vistas.borrarDatos();

204

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_tresActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_tres.setIcon (imagen_icono_boton_tres_amarillo); numero_estacion=3; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_configurar_comunicacionActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: jButton_configurar_comunicacion.setEnabled(false); jButton_empezar_monitoreo.setEnabled(true); conf=new ConfiguracionRS232(); conf.setVisible(true); } private void jButton_terminar_monitoreoActionPerformed

7.3 Implementacin de la aplicacin

205

(java.awt.event.ActionEvent evt) { // TODO add your handling code here: jButton_empezar_monitoreo.setEnabled(true); jButton_terminar_monitoreo.setEnabled(false); detener(); } private void jButton_empezar_monitoreoActionPerformed (java.awt.event.ActionEvent evt) { try { // TODO add your handling code here: this.puerto = new ComunicacionPuertoSerial(conf.parametros); } catch (NoSuchPortException ex) { ex.printStackTrace(); } catch (UnsupportedCommOperationException ex) { ex.printStackTrace(); } catch (PortInUseException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } jButton_empezar_monitoreo.setEnabled(false); jButton_terminar_monitoreo.setEnabled(true); vistas.setVisible(true); arrancar(); } private void jButton_unidad_dosActionPerformed (java.awt.event.ActionEvent evt) {

206

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

// TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_dos.setIcon (imagen_icono_boton_dos_amarillo); numero_unidad_sensora=2; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_unidad_unoActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_uno.setIcon (imagen_icono_boton_uno_amarillo); numero_unidad_sensora=1; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_dosActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_dos.setIcon

7.3 Implementacin de la aplicacin

207

(imagen_icono_boton_dos_amarillo); numero_estacion=2; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_unoActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_uno.setIcon (imagen_icono_boton_uno_amarillo); numero_estacion=1; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); }

 FIN DEL CDIGO 


gompilr el proyetoF
Paso 7F Ejecutar la AplicacinF

elie el montje del hrdwreF v unidd reeptor oplrl

l g por un puerto seril @o fA pigur UFIHF vs uniddes sensors uirls en donde se dese sensrD pigur UFII y pigur UFIPF

el ejeutr l pliin se desplieg l siguiente ventnD pigur UFIQF

208

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

pigur UFIHX

Unidad receptora acoplada al PC por el puerto USB

pigur UFIIX

Unidades sensoras

pigur UFIPX

Unidades sensoras

7.3 Implementacin de la aplicacin

209

pigur UFIQX

Tablero de Control

rer li en el otn del toollr orrspondiente l omuniin RS232 @izquierdo superiorAF e desplieg l ventn de l pigur UFIRF in ell on(gure l omuniin RS232 y her li en
aceptarF

v ventn de l pigur UFIQ pree on el otn pr her l omuniin on l red

de senores tivdo @segundo otn del toolrDpigur UFISAF rer li en ese otn y se desplieg l ventn de monitoreoD pigur UFITF

in l ventn de l (gur UFIS se peude esoger l unidd sensor pr monitorerFin l pigur UFIU

210

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

pigur UFIRX

Ventana para congurar la comunicacin RS232

pigur UFISX

Tablero de Control

7.3 Implementacin de la aplicacin

211

pigur UFITX

Ventana para monitorear una unidad sensora

212

CAPTULO 7.

APLICACIN: RED DE SENSORES ZIGBEE

se ilustr el resultdo de monitorer l unidd sednsor I uid en l estin sensor IF

pigur UFIUX
FIN.

Ventana que despliega el monitoreo de una unidad sensora

Bibliografa

I xtionl snstrumentsF

Our History

if httpXGGwwwFniFomGompnyGhistoryFhtm ltimo

eesoD PP septiemre PHHUF P F ghnF


La Instrumentacin Virtual en la Enseanza de la Ingeniera ElectrnicaF

ein

edggiDolF IID xoF IDppF UREVRD PHHPF Q xtionl snstrumentsF PHHUF R ixe igrxyvyqsiF septiemre PHHUF S vF vemy F T xetensF PHHUF U x wsgyiwF PHHUF V eF prnoF
Introduccin a los JavaBeans SUN Aprendiendo Java 2 en 21 dasF HelloDevice IDEF Qu es la Instrumentacin VirtualF

if httpXGGdigitlFniFomG worldE

wideGltmFnsfGweGllGHIiRfppVigWQSQPHVTPSTfTHHHTTWWSQ ltimo eesoD PP septiemre

if httpXGGwwwFsenFomG ltimo eesoD PP

ersonD IWWWF

IDE Netbeans

if httpXGGwwwFnetensForgG ltimo eesoD PT septiemre

if httpXGGwwwFsunFomG ltimo eesoD PT septiemre

if httpXGGwwwFsFehuFesGsweG(siG ursotE

vGppletsGjvfensGfundmentoFhtmG ltimo eesoD IH oture PHHUF PIQ

214

BIBLIOGRAFA

W yjet e(nery vimitedF IH noviemre PHHUF IH F wrtnF


JFreeChart

JFreeChart

if httpXGGwwwFjfreeForgGjfreehrtGltimo eesoD

if httpXGGwwwFexitFesGexitGpGexitFphpG doGedesEigfeeE

RQFhtmcsesionaeRdUUfSIPVeedeeQWWIRTHPQeG ltimo eesoD IH noviemre PHHUF II higiF


Mdulo XBee

if httpXGGwwwFdigiFomGprodutsGwirelessGpointEmultipointG xeeE

seriesIEmoduleFjsp ltimo eesoD PH noviemre PHHUF IP ikipediF PHHVF IQ tF qonzlezF


Comunicaciones en Serie, IEA Roboticas RS-232

if httpXGGenFwikipediForgGwikiGEPQP ltimo eesoD PQ enero

if httpXGGwwwFierootisFomG

proyetosGudernosGtIGtIFhtml ltimo eesoD PQ enero PHHVF IR weswF PHHVF


Products

if httpXGGwwwFmximEiFomGprodutsFfm ltimo eesoD PQ enero

Vous aimerez peut-être aussi