Como el encoder que estamos usando parece que no produce resultados adecuados, decidimos cambiarlo y compramos otro de mejor resolución. Buscamos en Ebay y vemos uno que parece de tipo óptico, de 600 pulsos por vuelta. La referencia es: Encoder 600P/R Incremental Rotary Encoder AB 2 phase 6mm Shaft 5V-24V +coupling:
Cuando lo recibimos, nos damos cuenta de que no es óptico, o al menos no lo dice, pero lo probamos. Tenemos que cambiar la forma de acoplarlo al motor, usando otro listón y pegándolo con termofusible para que no se mueva. Finalmente queda:
Lo conectamos al Arduino maestro y probamos con el mismo programa que tenemos:
El resultado no es alentador. Se muestra igual de caótico en el movimiento. Probamos a medir la salida del encoder y parece que todo funciona correctamente, pero el sistema no controla la posición. Movemos el eje con la mano y parece producir números correctos, aunque cuando se pone en funcionamiento el motor, todo se estropea. Probamos con varias versiones de programa, por si el encoder se puede leer de otra manera, pero sin resultado positivo.
Finalmente escribimos la duda en el foro de Arduino. Pensamos que el problema puede estar en el tratamiento de la lectura del encoder, que se hace con interrupciones. Un par de días después, dos personas responden y parecen confirmar que la velocidad aproximada del eje de salida del motor, multiplicada por 600 pulsos por vuelta del encoder y 4 interrupciones que produce cada pulso, hacen un número demasiado grande para que el Arduino UNO las pueda manejar.
Entonces, decidimos probar a cambiar el encoder al segundo eje, que como tiene una reductora de tornillo sinfin de relación 18:1, esperamos que sea más controlable. Para adelantar la prueba, el profesor se encarga de preparar el cambio del encoder. Quitamos el encoder del eje de salida del motor, ponemos un soporte, por si el tornillo sinfin de salida se tuerce, algo casero, colocamos el acoplador de ejes con el encoder en el segundo eje, y lo apoyamos en una extensión de la base de todo el sistema. Al final queda así:
Lo probamos con el programa maestro y el resultado tiene otro cariz. Ahora parece que es más estable y reproduce mejor los movimientos.
El código que finalmente empleamos es:
y el codigo
Hola Fernando. La entrada del blog era antigua y por error no se añadió el código. Ya lo hemos puesto.