Programa Simulación Mecanismo de 2 Barras con 2 Grados de libertad

Regresar Me lo bajo

Este texto es un ejemplo sencillo de cómo usar la HP para simular el movimiento de un brazo robot controlado con unas pocas teclas. El ejemplo no es excesivamente espectacular como podrás comprobar, pero sirve de ejemplo de varias técnicas de programación como podrás ver: uso de variables locales, funciones gráficas, uso de menús personalizados, estructuras CASE, detección de teclas, bucles infinitos, etc...

Este programa ha sido propuesto como ejemplo en uno de los cursos de programación de HP-48 que he impartido en la E.T.S.I.I. de Vigo, y su propósito es meramente educativo, por lo que evidentemente se puede mejorar mucho, sobre todo gráficamente.


Introducción teórica:

El brazo mecánico que trataremos de simular está esquematizado en la figura siguiente:

Esquema1 Las ecuaciones que rigen este movimiento son:

X1 = Xr + l1 * cos(F) ; Y1 = Yr + l1 * sin(F)

X2 = X1 + dX = X1 + l2 * cos(A) ; Y2 = Y1 + dY = Y1 + l2 * sin(A)

La representación es sencilla en el sentido de que sólo hay que ir determinando los puntos dentro de un bucle.


A continuación se muestra el código del programa con los comentarios pertinentes:


« DEG FUNCTION		@Modo grados y funciones reales
-20 20 XRNG 0 13 YRNG	@Establezco rango de representación
0 3 5 5 45 -20 15 15
RCLMENU \-> \<-XR \<-YR		@Inicio estructura de variables locales
L1 L2 F A INC1 INC2	@anotando longitud barras(L1,L2), Fi y Alfa
MenuAct			@iniciales(F,A),Incrementos de ángulo 
				@por paso y el menú actual.
  «
    DO 			@Inicio un bucle DO-UNTIL-END
\<-XR L1 F COS * + 	@hallo x1
\<-YR L1 F SIN * + 	@hallo y1
L2 A COS *		@hallo ›x para x2
L2 A SIN * 		@hallo ›y para y2
\-> X1 Y1 DX DY		@Los anoto para usarlos en una 
				@subestructura de variables locales
      « ERASE \<-XR		@En esta estructura lo único que se 
\<-YR R\->C X1 Y1 R\->C		@hace es dibujar las lineas que 
LINE X1 Y1 R\->C X1		@representan a las barras a partir de 
DX + Y1 DY + R\->C		@sus coordenadas.
LINE 
{ # 0d # 0d } PVIEW	@muestro la imagen
3 FREEZE » 			@y la congelo para hacerla persistente

{ "\|^\Gh" "\|v\Gh" "\|^\Ga"
"\|v\Ga" " "End"} TMENU 		@muestro el menú indicado (movimiento)
-1 WAIT			@espero a la pulsación de una tecla
  CASE DUP 11.1 ==	@Si es la A, sumo INC1 al ángulo F
        THEN 'F'
INC1 STO+
        END
DUP 12.1 ==		@Si es la B, resto INC1 a F
        THEN 'F'
INC1 STO-
        END
DUP 13.1 ==		@Si es la C, sumo INC2 al ángulo A
        THEN 'A'
INC2 STO+
        END 
DUP 14.1 ==		@Si es la D, resto INC2 a A
        THEN 'A'
INC2 STO-
        END
DUP 16.1 ==		@Si es la F, limpio la pila, borro PPAR
        THEN DROP	@y salgo del programa.
'PPAR' PURGE
MenuAct MENU KILL
        END
      END 
DROP			@borro la tecla de la pila (no la necesito más)
UNTIL 0		@Pongo un 0 para hacer el bucle infinito.
    END		@A partir de aquí se repite indefinidamente el
  »			@proceso anterior.
»
Una imagen del programa en funcionamiento se puede ver en la siguiente figura:
Brazo_funcionamiento

Este texto es © José M. Alarcón Aguín 1997 y no puede ser utilizado ni reproducido en ningún curso, libro, etc.. sin el permiso expreso del autor.