He estado busacndo en el foro y solo encuentro ejemplos de como mover el servo, pero no del control de velocidad.
Tengo un proyecto de minirobotica, exactamente es un hexápodo, estoy usando el pic 16F876A.
Hasta el momento ya hice que caminara, dejo un ejemplo del programa que tengo:
'SE MODIFICA LA PALABRA DE CONFIGURACIÓN DEL PIC 16F876A'
@ device pic16F876A, xt_osc, wdt_off, pwrt_on, lvp_off, protect_off, bod_off
'****************************************************************'
adcon1 = 7 'se desactivan entradas analógicas'
cmcon = 7 'se desactivan los comparadores (I/O digitales)'
trisa = 0 'se programa el puerto A como salida'
trisb = 0 'se programa el puerto B como salida'
trisc = 0 'se programa el puerto C como salida'
;=================================================================
'SE ASIGNAN ALIAS A LOS PINES DE CADA PUERTO'
'Servomotores: HITEC HS-475 HB, HITEC HS-422, FUTABA 3004'
;PATA 1
servo11 var portb.4: servo12 var portb.2: servo13 var portb.3
;PATA 2
servo21 var portb.1: servo22 var portb.0: servo23 var portc.7
;PATA 3
servo31 var portc.6: servo32 var portc.5: servo33 var portc.4
;PATA 4
servo41 var portc.1: servo42 var portc.2: servo43 var portc.3
;PATA 5
servo51 var portc.0: servo52 var porta.1: servo53 var porta.0
;PATA 6
servo61 var portb.6: servo62 var portb.5: servo63 var portb.7
'======================================================================='
'DEFINICION DE VARIABLES'
POSICION11 VAR BYTE: POSICION12 VAR BYTE: POSICION13 VAR BYTE ;PATA 1
POSICION21 VAR BYTE: POSICION22 VAR BYTE: POSICION23 VAR BYTE ;PATA 2
POSICION31 VAR BYTE: POSICION32 VAR BYTE: POSICION33 VAR BYTE ;PATA 3
POSICION41 VAR BYTE: POSICION42 VAR BYTE: POSICION43 VAR BYTE ;PATA 4
POSICION51 VAR BYTE: POSICION52 VAR BYTE: POSICION53 VAR BYTE ;PATA 5
POSICION61 VAR BYTE: POSICION62 VAR BYTE: POSICION63 VAR BYTE ;PATA 6
x var byte: y var byte : z var byte
vel var byte
veces VAR BYTE
'======================================================================='
;PROGRAMA PRINCIPAL
INICIO:
'Inicia con centrado del hexápodo'
vel = 20
veces = 5
GOSUB centrado
'INICIA SUB-RUTINA DE CAMINAR HACIA ENFRENTE'
vel = 18
GOSUB posicion_caminar
vel = 16
veces = 5
gosub caminar
'================ SUB-RUTINAS DE MOVIMIENTO ====================
centrado:
for y = 0 to veces
posicion11 = 150 : posicion12 = 150 : POSICION13 = 150 ;pata 1
posicion21 = 150 : posicion22 = 150 : POSICION23 = 150 ;pata 2
posicion31 = 150 : posicion32 = 150 : POSICION33 = 150 ;pata 3
posicion41 = 150 : posicion42 = 150 : POSICION43 = 150 ;pata 4
posicion51 = 150 : posicion52 = 150 : POSICION53 = 150 ;pata 5
posicion61 = 150 : posicion62 = 150 : POSICION63 = 150 ;pata 6
gosub servos
next y
return
posicion_caminar:
for y = 0 to 8
lookup y,[150,150,150,123],POSICION11
lookup y,[150,150,150,185,144],POSICION12
lookup y,[150,150,150,155],POSICION13
lookup y,[150,150,150,150,150,173],POSICION21
lookup y,[150,150,150,150,150,185,146],POSICION22
lookup y,[150,150,150,150,150,158],POSICION23
lookup y,[150,119],POSICION31
lookup y,[150,185,150],POSICION32
lookup y,[150],POSICION33
lookup y,[150,150,150,150,150,150,150,175],POSICION41'FUTABA'
lookup y,[150,150,150,150,150,150,150,185,150],POSICION42
lookup y,[150,150,150,150,150,150,150,179],POSICION43'FUTABA'
lookup y,[150,150,150,150,150,150,150,173],POSICION51
lookup y,[150,150,150,150,150,150,150,185,150],pOSICION52
lookup y,[150,150,150,150,150,150,150,120],POSICION53
lookup y,[150,181],POSICION61
lookup y,[150,185,150],POSICION62
lookup y,[150],POSICION63'Servo reparado'
GOSUB SERVOS
NEXT y
RETURN
caminar:
For x = 0 to veces
for y = 0 to 8
lookup y,[123],POSICION11
lookup y,[145,145,145,185,144],POSICION12
lookup y,[134,134,134,155],POSICION13
lookup y,[173],POSICION21
lookup y,[150,150,150,150,150,185,146],POSICION22
lookup y,[133,133,133,133,133,158],POSICION23
lookup y,[150,119],POSICION31
lookup y,[150,185,150],POSICION32
lookup y,[150],POSICION33
lookup y,[175],POSICION41'FUTABA'
lookup y,[150,150,150,150,150,150,150,185,150],POSICION42
lookup y,[150,150,150,150,150,150,150,179],POSICION43'FUTABA'
lookup y,[173],POSICION51
lookup y,[150,150,150,150,150,150,150,185,150],pOSICION52
lookup y,[150,150,150,150,150,150,150,120],POSICION53
lookup y,[150,181],POSICION61
lookup y,[150,185,150],POSICION62
lookup y,[150],POSICION63 'servo reparado'
GOSUB SERVOS
NEXT y
next x
RETURN
'==================================================================
' SE ENVIAN LAS SEÑALES DE POSICIONAMIENTO A LOS SERVOS'
SERVOS:
porta = 0 'LOS PUERTOS INICIAN CON UN PULSO EN 0'
portb = 0
portc = 0
FOR z = 0 TO vel ' VELOCIDAD ENTRE MOVIMIENTOS'
PULSOUT servo11,POSICION11
PULSOUT servo12,POSICION12
PULSOUT servo13,POSICION13
PULSOUT servo21,POSICION21
PULSOUT servo22,POSICION22
PULSOUT servo23,POSICION23
pulsout servo31,POSICION31
pulsout servo32,POSICION32
pulsout servo33,POSICION33
pulsout servo41,POSICION41
pulsout servo42,POSICION42
pulsout servo43,POSICION43
pulsout servo51,POSICION51
pulsout servo52,POSICION52
pulsout servo53,POSICION53
pulsout servo61,POSICION61
pulsout servo62,POSICION62
pulsout servo63,POSICION63
NEXT z
RETURN 'regresa a la subrutina desde la cual se envía los pulsos'
Estoy usando unos servos Hitec 475 y unos futaba 3003. y haber si me consigo unos mg995 que estan de lujo.
Ahora lo que estoy intentando hacer es que tenga movimiendos mas naturales (lentos), pero no encuentro la forma.
hasta ahora como ven puedo controlar el tiempo que hay entre cada movimiento del servo, pero eso no me sirve.
Lo que se me ocurre es mover el servo grado por grado, por ejemplo de 90° a 150°
He usado el comando Lookup2 que es casi lo mismo que el lookup, pero podemos meter una variable dentro y extraer todos los datos, por ejemplo:
for a = 90 to 150
for y = 0 to 8 ------> no sabemos por que no ocurre nada cuando cambiamos este valor, se supone que seria de 0 to 59 (cantidad de grados de 90 a 150)
lookup y,[a],POSICION11
next y
next a
El problema que tengo es que genera tres veces más codigo que el lookup normal, aparte de que solo puedo mover simultaneamente varios servos con esa instruccion, pero no puedo moverlos individualmente.
Espero que me ayuden, de antemano muchas gracias