09.11.2013 Views

Editorial

Editorial

Editorial

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Computadoras de Bolsillo como una Alternativa para el Control de Servomotores en Robótica<br />

En el caso de recibir datos provenientes del<br />

microcontrolador, un byte en el buffer del puerto<br />

automáticamente dispara el evento correspondiente.<br />

MSCOMM incorpora todas las funciones para configurar el<br />

puerto; sus propiedades más importantes son las siguientes:<br />

ComPort: Activa y regresa el número del puerto serial<br />

(Comm1, Comm2).<br />

PortOpen: Activa y regresa el acceso al puerto.<br />

Input: Regresa los caracteres del buffer receptor.<br />

Output: Escribe una cadena sobre el buffer Transmisor.<br />

Settings: Activa y regresa la razón de Baudios, paridad,<br />

número de bits, bits de paro. En el caso particular de este<br />

trabajo se configuró la cadena 2400, n, 8, 1, con Handshaking<br />

puesto a cero, debido a que no se realiza ningún control sobre el<br />

flujo de información.<br />

Dentro del programa escrito para este proyecto, se hace<br />

referencia al control MSCOMM a través del objeto declarado<br />

como Comm1. Una aproximación al procedimiento inicial del<br />

programa se lista a continuación.<br />

Private Sub Adquirir_Click()<br />

Comm1.PortOpen = True<br />

Comm1.RThreshold = 1<br />

Comm1.SThreshold = 0<br />

Comm1.InputLen = 0<br />

Comm1.DTREnable = False<br />

End Sub<br />

El objeto Comm1 responde al evento OnComm, el cual<br />

genera una interrupción, indicando cuando hay comunicación o<br />

si algún error ha ocurrido en la transferencia de la información.<br />

Una vez abierto el puerto, se procede a interactuar con el<br />

microcontrolador enviando y recibiendo palabras de datos. Las<br />

instrucciones básicas se listan a continuación, sólo de manera<br />

indicativa.<br />

Comm1.Output = DatoEnviar.Text & vbCr<br />

ValorLeido = Comm1.Input<br />

La Fig. 5 muestra la interfaz para los servomotores, tanto en<br />

tiempo de diseño como en tiempo de ejecución. En esta<br />

aplicación se utiliza un monitor de mensajes y una caja de texto<br />

para validar una acción. Así mismo, es posible seleccionar el<br />

servomotor a operar.<br />

Fig. 5. Interfaz para los servomotores<br />

en tiempo de diseño y en ejecución<br />

Se puede apreciar en ambos casos que es posible abrir y<br />

cerrar el puerto en cualquier momento para controlar la<br />

comunicación con el microcontrolador.<br />

IV. SERVOMOTORES Y PROGRAMACIÓN DEL<br />

MICROCONTROLADOR<br />

Los servomotores utilizados son de la marca Futaba modelo<br />

s3003 (Fig. 6), con un rango de movimiento de 0º a 180º. Para<br />

posicionar el eje de este servomotor se requieren trenes de<br />

pulsos con anchos de 0.3 ms. y hasta 2.3 ms. para conseguir el<br />

máximo ángulo.<br />

Fig. 6. Servomotor Futaba s3003.<br />

El microcontrolador se encarga de recibir serialmente el dato<br />

proveniente del PDA en formato estándar binario (también<br />

podría enviarse en formato ASCII) con una velocidad<br />

predeterminada de 2400 baudios, sin paridad y con un bit de<br />

paro. A través de una palabra codificada es posible controlar las<br />

condiciones del servomotor, antes mencionadas.<br />

El programa fuente escrito en lenguaje de alto nivel<br />

PicBasic, se lista parcialmente a continuación [7]. En éste,<br />

entiéndase serin como la instrucción que permite al<br />

microcontrolador recibir datos provenientes del puerto serie del<br />

PDA y serout como la contraparte que permite enviar datos del<br />

microcontrolador hacia el PDA. Para simplificar el código sólo<br />

se atañe un servomotor; el código se hace extensivo en el caso<br />

de los dos motores indicados en el diagrama de la Fig. 7. En<br />

este mismo diagrama, el monitor serial se sustituye por el<br />

puerto serie del PDA en cuestión. Las líneas 0 y 1 del puerto B<br />

se utilizan para controlar los servomotores.<br />

aux = 230 'Con 1 Ms, extrema izq.<br />

servo1: pause 500<br />

PORTB.1 = 0<br />

letra:<br />

pause 1000<br />

serout PORTA.2, N2400, ["Introduce Posición",13,10]<br />

serout PORTA.2, N2400, ["1)-90º 2)-45º 3)0º 4)+45º<br />

5)+90º",13,10]<br />

serin PORTA.0, N2400, tiempo<br />

if (tiempo < $31 OR tiempo > $35) then<br />

serout PORTA.2, N2400, ["Sólo valores entre 1 y 5",13,10]<br />

pause 250<br />

goto letra<br />

else<br />

call deco<br />

aux = dato<br />

pause 250<br />

endif<br />

envia: if dato = 231 then goto regre<br />

dato=dato + 1<br />

pulsout PORTB.1, dato<br />

pause 20<br />

goto envia<br />

regre: if dato = aux then goto letra<br />

77 Polibits (38) 2008

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!