Editorial
Editorial
Editorial
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