Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola a todos. Ya he terminado el proyecto de mi robot de 4 patas, al cual le dado muchas vueltas, por que no sabia si era el diseño era adecuado, aunque sigo sin estar seguro. 😕
Esta diseñado con autocad 2005, pongo una imagen para que hagais una idea.
El material que voi a utilizar es pvc de 3mm.8 servos futaba s0003 para moverse, cada uno con un doble eje. la controladora con 16f84 y programada en C.
Espero vuestras criticas constructivas 😉
Gracias por la explicación.rashii. 😀 😀
necesito mover dos servos de mi robot a la vez. Los quiero poner en la misma posicion
Si en dado caso los servos siempre se moverán al mismo tiempo y con el mismo ancho de pulso, lo más lógico es conectarlos a la misma señal de pulso, es decir literalmente conectados en paralelo, las entradas de señal de ambos servos conectadas a una única salida de pulso PWM. No sería necesario programar para ambos, si no que basta como si se tratara de un solo servo.
for(cuenta=1;cuenta<100;cuenta++)
{
output_b(0x03); //pone a 1 la salida 0 y 1
delay_us(2150);
output_b(0x00);
delay_us(17850);
}
Si se trata de mantener el PWM de x cantidad de salidas, según mi entender, hay que establecer una frecuencia permanente y constante. Esto significa que nuestra variacion de pulso debe de ir en un ciclo infinito condicionado (while en este caso), en vez de un ciclo for. La frecuencia según el fabricante podría ser de 50Hz, con un periodo de 20ms.
Si asignamos una variable para el pulso de alta (pulsoh por ejemplo), el pulso de baja sería: 20000 - pulsoh
while condicion = 0
{
output_b(0x03) //Pulso de alta en bits 0 y 1
delay_us(pulsoh) //Duración del pulso de alta en ambos bits.
output_b(0x00) //Pulso de baja en bits 0 y 1
delay_us(20000-pulsoh) //Duración del pulso de baja en ambos bits.
//rutina para variar a pulsoh de 1ms a 2ms (0 - 180 grados)
//rutina para cambiar o no el valor de condicion y salir del bucle
}
La rutina para variar el pulsoh, puede ser por medio de lectura del teclado, asignando teclas (las flechas por ejemplo) para incrementar o decrementar el valor de pulsoh del limite inferior al superior y viceversa. Los limites dependen del fabricante, para el ejemplo puede ser de 1ms a 2ms. Estos los controlas con condiciones if para no salir del rango.
La rutina para salir del buble, puede ser por medio de lectura del teclado también, con la tecla ESC por ejemplo y desde luego un if.
Observa la siguiente imagen, puede que te aclare lo que te comento:
En el caso de movimiento simultaneo pero en diferente posición angular relativa, si deben ir conectados en salidas de pulso diferentes. Cada bit debe de salida debe tener su propio pulso PWM y su rutina de control por separado.
Si el desfase es permanente, creo que la solución mas fácil no es por medio de código si no que desfasar los servos mecánicamente, es decir colocar a distintos ángulos las partes móviles respecto de los limites mecánicos de cada servo.
Muchas gracias DrakerDG por contestar 😀 Ya me ha funcionado bien.
necesito mover dos servos de mi robot a la vez. Los quiero poner en la misma posicion
No puedo ponerlos a la misma salida por que esos servos tienen que hacer despues mas movimientos independientes. Tiene que ser atraves de programacion.Pero esto ya no es problema.
Se pueden mover dos servos a la vez pero en distintas posiciones??
Los tengo en salidas diferentes y les aplico distintos pwm pero claro, ya no serira un movimiento simultaneo porque hace uno y de que acaba hace el otro. Lo del desfase mecanico es wena idea pero no es permanente solo un par de movimientos.
gracias de nuevo por la explicación.Saludossss
Los tengo en salidas diferentes y les aplico distintos pwm pero claro, ya no serira un movimiento simultaneo porque hace uno y de que acaba hace el otro.
Si se pueden variar los PWM en distintas salidas de forma simultanea, solo debes de enmascarar cada bit de cada salida de pulso, para controlar. Juegas con los tiempos de retardo (anchos de pulso de alta) conjuntamente con los valores de cada bit. Por ejemplo si el bit 0 tiene un PWM de 180 grados (2ms por ejemplo), pero el bit 0 tiene un PWM de 90 grados (1.5ms), se puede programar de la siguiente manera:
//Para un pulsoh = 15000 y un desfase de 90 grados (desf1=5000)
output_b(0x03) //Pulso de alta en bits 0 y 1
delay_us(pulsoh) //Duración del pulso de alta en ambos bits.
output_b(0x01) //Pulso de alta solo en bit 0 y baja en bit 1
delay_us(desf1) //Duración restante del pulso de alta del bit 0 y baja del bit 1.
output_b(0x00) //Pulso de baja en ambos bits
delay_us(20000-pulsoh-desf1) //Duración del pulso de baja del bit 0 y restante del bit 1.
Controlando el valor de desf1 puedes variar el desfase a voluntad dependiendo del ángulo necesario. Solo ten en cuenta los limites de cada ancho de pulso para no exceder el ancho del mismo o bien hacer lo mas corto del valor mínimo.
Hola a todos, por fin anda¡¡ 😈 va hacia delante de momento, no demasiado bien.. pero si avanza que es lo que buscaba. Intentare hacer que ande hacia atras y gire pronto luego espero ponerle los sensores.
Al final he modificado las patas y la distribucion del robot.
el video es del telefono con mala calidad.
http://www.youtube.com/watch?v=0vI_e4Q1T_k
Gracias DrakerDG por lo de como mover los servos a la vez.