primero gracias por responder y perdón por no ser mas especifico
el proyecto es manejar un brazo robotico (ya construido) por medio de un pic 18f4550 utilizamos pic o pcw para programar, este se puede manejar por dos tipos con potenciometros es decir utilizando un cad del pic o con un teclado determinando asi cuantos grados quieren moverse (obviamente por el teclado)
pero yo se hacer todo eso el unico problema que tengo es que al ingresar los grados por el teclado matricial 4*3 por ejemplo si ingreso 10 grados este se mueve 90 grados lo cual no es correcto entonces busque un poco acerca de esto y me encontre que esto se determina con la ecuacion de la recta pero de alli es lo que no entiendo
gracias por responder de antemano
Amigo
andres1594, Salu2!
Bueno, ahora que te has explicado mejor, se me ocurre un método mas "lineal" que usar una fórmula, el cual tiene varias "etapas" por decirlo de alguna forma.
Pero para que funcione necesito saber como estas determinando la posición del brazo sobre su eje horizontal (es decir, que en el plano X.Y, el brazo gira estando en el centro, z = 0) a partir de el valor que lees del potenciómetro con el ADC. Porque sé que hay varias formas. (Mencionaré algunas;
modulación pwm:según sea el ancho de un pulso, así serán los grados de giro; por
valores de voltaje en una tabla que relacione voltaje vs posición X.Y; por
tiempo de carga, según sea el valor del potenciómetro, un condensador se carga mas rápido o lento, y el brazo gira hasta que se cargue el condensador, el ADC sirve como comparador de voltaje, siendo el mayor grado de giro el mayor tiempo de carga, etc).
Sin importar que método uses, aqui vá mi planteamiento:
1-
Rutina que maneja el teclado matricial, y arroja un valor GGG (grados).
2-
Rutina que Calcula la posición actual del brazo (eje X.Y): Esta rutina determina cual es el valor real a posicionar. Por ejemplo el brazo (BRZ desde ahora), tiene un valor inicial de 0°, el primer valor ingresado fué de 70°, luego -sin reiniciar el brazo a su posición por defecto- se ingresa 20°, El BRZ debería retroceder 50°. Según sea la técnica que estés usando para controlar los motores, así será la operación matemática que realizará esta rutina. Quizá y no se necesite si ya tienes integrado este paso en el control de motores.
3-
Rutina que convierte los grados ingresados a posición del brazo: esta rutina o método recibe un valor GGG (entero o flotante según sea la precisión que manejes en tus motores), convierte esto a un valor tipo QQQ y llama a la rutina de posicionamiento según sea el método que estés usando, que usará la variable tipo QQQ (depende de tú programa).
------------------------------------------
Por otro lado, haciendo un poco de matemáticas, puedes usar pitágoras para calcular las coordenadas X.Y dado un ángulo en grados:
Busca el apartado
"De polares a cartesianas" en este enlance:
Coordenadas polares y cartesianas
Pero tendrás que usar al menos
las funciones trigonométricas seno y coseno en el PIC18F4550 y según el compilador C que estés usando
esto no debería ser un problema.
Entonces, la rutina
2 usaría esta función trigonométrica (en caso tu uses coordenadas cartesianas para posicionar el BRZ).
Salu2! y esperó te sirva!.
PD: Si me comentas como controlas la posición del BRZ, entonces quedará mas claro aún.