domingo, 8 de agosto de 2010

Girar robots con potenciómetros.

Hoy me rondaba una duda por la cabeza: ¿Es factible hacer girar un robot (O simulación del ya mencionado) con un potenciómetro? Se me plantea esta duda, pues recuerdo que los valores analógicos que me devolvía este cacharro, no eran para nada estables: Varían demasiado, por lo que un supuesto robot, haría eses.


He intentado buscar varias soluciones a esto. La primera, suponiendo que P1 (Potenciómetro) nos devuelva un valor entero, (1024-1) en un rango de 180º, tendríamos una gran precisión de giro, el cual se efectuaría cada 5,68 cambios (Osea, casi nada)

Esto es mucha precisión como he dicho, pero, la inestabilidad de P1 y el poco pulso que tenemos los humanos, provocaría un rumbo inestable.

Lo siguiente que pensé, dividir el giro en 11 cambios, lo que sería (1024-1)/11. Tendría un total de 11 posibilidades de movimiento (1 sin giro, 5 giros a la izquierda, 5 giros a la derecha) con unos enormes cambios de 93. Esto, sería bastante estable, pero los giros son bastante lentos y muy bruscos.

Entre cuentas (Y una ronda de preguntas a algunos contactos) ideo algo: Obtener varios valores y guardar el resultado de una media, el cual será usado para girar, pudiendo tener algo mas de estabilidad y pudiendo contar, evidentemente, con mas posibilidades de giro.

Pero, siendo prácticos, y pensando que interactuamos con un robot: ¿Es eficiente pedir al microcontrolador que registre valores y haga la media, cientos de veces cada segundo? Descarto la idea, pues esto no es un ordenador si no un atmega328.

Y por fin, llega la inspiración, de manos de mi padre.

La idea es sencilla, tomar 2 variables en vez de 1, a las que vamos a llamar:

XV, la encargada de la velocidad de giro
XG,
la encargada de gestionar el giro

La teoría es sencilla: XG tiene 3 estados: FORWARD, LEFT y RIGHT. suponiendo que dividimos, por ejemplo, el giro en 11 pasos, forward sería 0, right de 1 a 5 y left de -1 a -5. Por lo cual, haciendo comprobaciones condicionales al potenciómetro, podemos obtener el estado para XG, lo cual indicará la dirección e giro.
La gestión de XV también es sencilla: Contra mas se acerquen los valores del potenciómetro a los extremos del rango (en casi de 11, sería -5 y 5) el robot girará a mas velocidad; Esto se hace igualmente con comprobaciones condicionales.

Por lo cual, y según lo dicho, si dividimos el giro en 11 pasos y queremos hacer un leve giro a la derecha, sería...

XG RIGHT, XV 1

En cambio, para hacer un giro brusco a la izquierda...

XG LEFT, XV -4

Es solo un ejemplo, como veis, tenemos un amplio espectro de valores para girar nuestro robot.

No hay comentarios:

Publicar un comentario