Maquina Single Flank test para engranajes

Buenas tardes a todos.
Decir que quiero hacer una máquina para realizar test de Single Flank es apuntar bastante alto, así que me voy a limitar a tratar de ver hasta dónde puedo llegar.
Os comento un poco. Soy un aprendiz de demasiadas cosas y maestro de ninguna, pero se me da bien buscar información y consigo hacer algunas cosas.
Este proyecto es un reto, personal y no tiene ninguna vinculacion profesional, aunque estas máquinas existen y son muuuuyyyyy caras.
SI NO QUIERES CHAPA GOTO N1
Qué son? Desde hace unos cuantos años, aproximadamente un sigo y principalmente con el despegue de las tecnologías de fabricación en la Segunda Guerra Mundial el tema de la calidad tomó un impulso importante para poder "certificar" que algo funcionaba antes de montarlo en la máquina (vehiculo, tanque, avion...). Los engranajes también. En aquella época se hacía un tipo de test que se llama double flank (entre otros muchos, pero este es que nos lleva al otro) consiste en rodar una rueda dentada con otra llamada (máster) o patrón. Esto se hacía en una máquina que permitía desplazarse al carro del engranaje a testear y asi detectar y cuantificar su oscilación. En todo momento los dos flancos del diente del engranaje estaban en contacto, por lo que no es una medición muy real de lo que luego va a suceder. Esta oscilación no inica solo el salto de la pieza, también puede indicar errores de tallado (unos dientes mas gordos que otros) y otra serie de cosas.
En 1960 (creo que por ahí) a alguien se le ocurrio el single flank test. Esta vez la pieza a medir no se le deja desplazarse, sino que se coloca en la posción fija de futuro funcionamiento. Tanto en la pieza patron como en la a testear se colocan dos encoders (creo que he llegado a leer por ahí de hasta 560000 ppr) y se da una vuelta de leyendo simultaneamente los encoders. Aunque de primeras nos parecería que la lectura sería lineal, la verdad es que no, cada diente del engranaje describe una pequeña curva que indica una serie de calidades para el tallado.

N1

Vale, ahora viene lo que quiero hacer.
Leer dos encoder simultaneamente. De momento he cogido dos chinos de 600ppr que espero poder subir a 2400 señales medibles por revolucion. Tambíen estoy esperando que me llega un arduino Mega. He estado leyendo estos días bastante sobre el tema y sin tener todavia ni una línea de código os comento como querría hacer todo a ver cómo lo veis.
Ordenador (o raspberry pi) conectada al Mega. La Rasp pone un motor nema17 a un número de revoluciones concreto (generalmente entre 5RPM y 10; pongamos 7RPM). Cuando esta velocidad este conseguida (teoricamente) me gustaría iniciar el arduino (creo que sería iniciando el puerto serie) y el Mega leeria los dos encoders.
He estado leyendo también sobre la velocidad de lectura. Yo aqui me voy a 2400ppr a 7rpm X2. O sea unos 560 lecturas por segundo. Esto durante el tiempo que le cuesta al engranaje mas grande dar una vuelta (si es relación 1 a 1 ambos encoders darán 1 vuelta, si es relación 1:4 el grande dara una vuelta y el pequeño 4). El skecth debería funcionar de las siguiente manera.
Meter los cambios del encoder pequeño en una variable. Por cada pulso +1. Leer los cambios en el encoder grande por cada cambio guardar el cambio de el encoder grande y cómo va el contador del pequeño.
Bueno, por si hay alguien que aún sigue conmigo. En una relación de 1 a 1 las lecturas teóricas que querria grabar serían
1;1
2;2
3;3
... hasta 2400;2400

En uno de 1 a 4 sería
1;4
2;8
3;12
... hasta 2400;9600
Estó no se donder se podría guardar ni como, Pero lo averiguaré. Despues se pasaría a la raspberry pi la información y se harían unas tablas y un tratamiento de datos.
No sé que os parece, si es viable o no veis que el arduino sea la herramienta idonea para ello.
Un saludo y siento la chapa, pero me gusta explicar las cosas que sí se.
Si teneis dudas (bien para ayudarme o bien para saber más sobre esto del single flank test) no dudeis en comentar.
Un saludo y gracias.

Buenas tardes,
Voy a ir poniendo aquí los materiales que voy a utilizar tratando de dar la mayor información posible sobre ellos.

1- Arduino Mega 2560 → 10.75€

2- Encoders (2x) → 16.99x2=33.98€

Descripción del producto

Especificación
Tamaño del codificador: 39 x 35,5 mm, Eje 6 x 13 mm
Plataforma de tope de eje: Alto 5 mm, 20 mm
Fijo vacío como: tres orificios de tornillo de 3 mm de distribución de 120 grados o seis orificios de tornillo de 3 mm en una distribución de 60 grados, hasta la distancia central de 14 mm.
Longitud de los alambres: 188cm / 74 "

Detalle
Color: como muestra la imagen
Modelo: encoders rotativos incrementales, dos fases AB
600P / R-600 pulsos por revolución.
Fuente de alimentación DC 5-24V.
Velocidad mecánica máxima de 6000 rev / min.
La frecuencia de respuesta: 0-20KHz

Salida
AB pulso rectangular de salida en cuadratura de dos fases, la salida del circuito es del tipo de salida de colector abierto NPN, la salida de este tipo puede y con resistencia interna de pull-up está conectada directamente a MCU o PLC, como el PLC sencillo 51 o Mitsubishi (modo de entrada PLC debe estar conectado a la función de interruptor 0V).

Nota:
Si el codificador no está conectado al dispositivo, no puede ser directamente osciloscopio de osciloscopio (salida de colector abierto sin resistencia de pull-up cuando no hay salida de voltaje) Si desea que el osciloscopio tenga una salida bifásica AB con dos resistencias de pull-up.

Salida de cableado:
Una fase, fase B, alimentación Vcc positiva, V0, el cable de protección.

Conexión:
Verde = fase A, blanco = fase B, rojo = potencia +, negro = potencia -

Nota:
Las salidas AB de dos fases no deben conectarse directamente a VCC, de lo contrario, quemarán el transistor de salida.

Bueno ayer hice la primera prueba con la librería encoder.h y directamente el ejemplo "TwoKnobs.pde". Bastante bien. Los encoder con las señales conectadas a los PIN 18-19 Y 20-21. Con el programa de ejemplo ya empezó a funcionar relativamente bien. Moviendo con la mano el encoder se saltaba algunos pasos y al conectar los dos aún más.
Aumente los baudios de 9600 a 115200 y mejoró. No se si sirve de algo, pero en mi IDE aparece la posibilidad de 230400 y lo cambie, me dio la sensación de que no perdía pulsos a una velocidad (manual o sea que no muy exacta) de 1 revolución por segundo (unas 60rpm).
Yo voy a tener que trabajar entre 6 y 12 veces menos velocidad así que supongo que no tendré mucha perdida.
Además el programa tiene dos serial.print que no necesito más que para pruebas y por lo que he leído ralentiza el programa algo.
Siguiente paso será almacenar las lecturas para evitar el serial print y sacarlas al final.
Veremos como lo hago...

Hola, @harana, bienvenido(a) al foro Arduino.
Muy interesante tu proyecto, y como tal me da gusto la forma en la que lo presentas.
Normalmente llamo la atención a todos los foreros porque no saben presentar un proyecto con todas la letras a otro que solo es copia de algo visto en Youtube o en una web.

La presentación ha sido muy interesante y aunque explicas perfectamente que es el sigle Flank creo que te faltó si me permites esto Sigle Flank que ayuda a VER mejor a quienes te vamos a seguir para ponerse mejor en tema.

Respecto del programa, lo mejor es lo que has inferido.
Guarda los datos en un buffer (ya te guiaremos) y esa información en memoria se vuelva de una vez. Habrá que establecer en qué momento eso no provoca problemas.
Tal vez considerar almacenar la info en una SD o simplemente enviarla por Serial.

Cuando dura la prueba, tienes un estimado?

Buenas, gracias por contestar. La prueba depende de la relación del engranaje. El engranaje pequeño (con menos dientes y menor diámetro) da las vueltas necesarias hasta que el engranaje grande ha completado una vuelta. El que gira a entre 5 y 10 rpm es el pequeño. La relación máxima que he visto (e incluso sería inusual) sería 1:9. Pongamos relación máxima 1:10 con el pequeño girando a 10rpm sería un minuto. De ahí para abajo.
Tengo ya el sketch (estoy en un camping sin conexión en el ordenador y no puedo enviarlo) que recoge los pares de datos tal y como yo quiero.
Cuando el encoder del engranaje grande da un paso se imprime por serial.print la posición del engranaje ese (1 es la primera) y la posición en la que está el otro encoder...
Cuando llega a 2400 se para. Eso que se imprime en el monitor serie es lo que me gustaría meter en un archivo o enviar a un ordenador que pueda "procesarlo".
El proceso completo es esos 2400 pares en un sentido y otros 2400 pares en el otro, pero eso será el siguiente paso.
De momento necesito "solo" guardar lo que consigo imprimir en el monitor serie en un archivo... Y no se cómo hacerlo...

2400 pares es TOO MUCH para la RAM del Arduino.
Asi que PLAN B,C,D...etc.

Como todo es lento lo único que necesitas es enviarlos por serial a la PC y que esta almacene y grafique. Tengo por ahi programas que hacen eso.
El simple Termite que es una consola Serial almacena datos recibidos por el Serial en la PC. Pero hay mucho mejores que ademas de almacenar grafican con todo tipo de personalizaciones como indicar los ejes, tiempo, etc.
Lo busco y lo comparto.
Creo que estaban en la sección Documentación pero como son pocas las personas que consultas o requieren de esas cosas, por ahora lo mejor son la serie de Tutoriales de Metaconta donde explica como comunicarse por Serial con la PC usando diferentes lenguajes.

Ahora reviso y completo esta respuesta.

EDITO:
Una serie de programas que hacen la tarea algunos que denominaré SIMPLES y otros PROFESIONALES
SIMPLES
Realterm también puedes ver este tutorial donde usa Realterm y KST para enviar datos y plotearlos
Termite
Parallax no se si funcionará aún

Acá los que llamo Profesionales (si se permite la expresión aunque algunos lo son):
SerialComGrapher
MegulinoLink versión Lite la versión Pro cuesta 30 USD
http://www.makerplot.com/ por 59 USD
ArduinoPLot free
ArduinoPlotter free
Bridge Control Panel free
RealTimePlotter free

Resumo todos estos en un post que dejaré en Documentación. Serial data plotting programs Stack Exchangeaquí.

Muchas gracias de verdad, y la verdad es que no he hecho esos deberes, mañana lo intento que estoy de fin de semana fuera de casa...
La idea inicial era enviar o crear un CSV (porque lo utilice para otro proyecto gráficandolo con gnuplot directamente en Python) y sin muy manejables y ligeros... Por eso lo tenía para trabajo posterior más o menos ya controlado. O al menos por dónde iba a ir...
Vere cómo lo hago...

Bueno si manejas Python puedes hacerlo con Matplotlib por ejemplo

Buenas a todos. Voy poniendo hasta donde he avanzado y lo que me queda por hacer.
Tenía a la placa leyendo los dos encoders. Cuando cambia El encoder 2 de paso (no es realmente así, es cuando hay un cambio en uno de sus pines) lee en que pasó está el otro encoder (1) y me saca por serial la pareja separada por una coma. Moviéndolo a mano no pierde ningún paso (casi nunca...)
Buscando en internet por medio del pyserial consigo leer en el ordenador con un pequeño programa en Python esa salida serial. (No voy a entrar en mucho detalle a partir de aquí porque esto es un foro de Arduino), el programa lo lee y lo mete en una lista. Cuando ha acabado (2400) crea un archivo . CSV que da todos los pares.
Con esto ya puedo jugar porque los abro perfectamente en dos columnas de OpenOffice Calc y lo puedo graficar antes de meterme a programarlo con el matplotlib (me serviría como lo tengo, pero quiero que sea automático, no tener que andar abriendo archivos manualmente)
Ahora me toca:
Comprobar que no se ha perdido ningún paso de ser así debería de salir un mensaje de error y rehacer la prueba más despacio.
De momento voy a intentar hacer un útil para poder poner dos engranajes y ver si las lecturas encajan con la teoría del single flank test.
También tengo pendiente que sketch de Arduino solo imprima los valores del 2400 a 4800 (segunda vuelta) para evitar el lag de la apertura del puerto serie.
Y bueno por aquí voy. No se si a partir de aquí debo (se puede) ir detallando el proyecto ya que básicamente la parte de Arduino está terminada (faltarán varios retoques, pero son detalles)...

El foro es de arduino y tu proyecto ha comenzado asi. No hay problema en que aportes como haces las cosas con Python, de hecho es instructivo para quien le interese.
Yo lo uso y también Matplotlib.