[Ayuda] Novato. Proyecto con Encoder.

Buenos dias!

Lo primero de todo, decir que soy un novatísimo en esto de Arduino (no vi nada de programación jamás) y que por las cosas de la vida me encuentro con que se me pide que haga funcionar lo siguiente:

Tengo un encoder rotatorio (el de esta imagen) con sólo 3 cables (rojoynegro por un lado y una salida A, cable blanco, por otro)

Salidas:

Bien, lo que ando buscando es la forma de hacer un contador de pulsos de manera que al girar el encoder, me vaya sumando el número de éstos. He probado a conectar el encoder de la manera más simple, y con la librería de "Encoder" que existe en el playground, y poniendo el ejemplo "Basic" consigo que me esté devolviendo 0 y 1's pero claro, no me los cuenta.

Me ha comentado mi tutor en este aspecto que para ello necesitaré un contador con interrupciones, pero claro, me suena a chino. Por ello busco un poco de ayuda, sé que tiene que ser simple y que mucha gente lo tendrá hecho, pero no se cómo buscar y cómo aplicarlo.

Cualquier ayuda será enormemente agradecida. :slight_smile:

Un saludo a toda la comunidad Arduino!

Bueno, ante sque nada, nos puede decir que tipo de encoder tiene para ver sus carácterísticas.

Por supuesto, no se aprecia muy bien en la foto, es un encoder rotatorio de la marca Omron modelo E6A-CS200 , modelo del cual yo encuentro muy poca información en Internet.

Gracias por tu atención!

Hola:

Por lo que se ve, tiene tres cables, dos de alimentación y uno de datos. Averigua que protocolo de comunicación se trata, es lo que tiene que saber Arduino.

Un saludo.

¿Cómo puedo averiguar el protocolo de comunicación? Ya digo que estoy muy muy verde...

En el datasheet del encoder (este de aqui: http://www.ia.omron.com/data_pdf/cat/e6a2-c_ds_e_6_1_csm490.pdf?id=486) no viene nada especificado que yo vea o entienda.

De todas formas, seguro que existe alguien que haya hecho un proyectito similar, se trataría al fin y al cabo de un contador de pulsos, y según me ha dicho mi tutor, debo mirar por contador con interrupciones, pero no tengo ni idea....

Gracias por vuestro tiempo en contestar!

El cable blanco indica salida, Output. Lo que on se si es un tacometro para medir la velocidad del motor y poder controlarlo. Aquí ya no tiene nada que ver con protocolo de comunicación como creía. Solo recibe velocidad del giro del motor y luego arduino lo interpreta en las entradas analógicas.

Gracias de todas formas Metaconta, si alguien tiene idea de esto y es tan amable de echarme un cable se lo agradecería muchisimo.

Se trataría, repito, de poder contar cúantas veces pasa la señal (en este caso dada por el cable blanco únicamente) de nivel bajo a nivel alto.

Un saludo!

Si te refieres cuantos giro da el motor, pues...

En los ventiladores cooler, los de PC tienen 12V, su tacómetro suelta 5V y se puede conectar directamente a un PIC o Arduino. Tendrás que buscar en google la fórmula del cálculo para saber su velocidad del motor y las vueltas que da.

Saludo.

Si has conseguido recibir pulsos en un pin de entrada, tal vez deberías echar un vistazo a la referencia de attachinterrupt. Creo que es lo que estás buscando.

Lo único que he conseguido es, utilizando la librería "Encoder" que viene en la página oficial, que con el ejemplo llamado "Basic" me devuelva unos y ceros.

Lo de attachinterrupt es lo que tendría que hacer, claramente, pero ¿se podría hacer "añadiendolo" de alguna forma al código del ejemplo "Basic" que es el único que me funciona?

No se si me he explicado correctamente, de todas formas gracias y un saludo!

Es que por lo que he leído, los encoders utilizan al menos dos salidas, y la combinación (o mejor dicho, el cambio de combinación) de esas salidas es lo que el arduino debe interpretar como avance o retroceso de motor.
El datasheet que mencionas, habla de tres cables de salida (black, white, orange). Sin embargo, el tuyo sólo tiene uno, de lo que deduzco que la librería encoder no te sirve.
Si lo que quieres es sencillamente contar los pulsos que envía tu pin, no hace falta ninguna librería. Modificando ligeramente el ejemplo que tienes en la referencia atachinterrupt, lo tendrías hecho:

volatile unsigned int pulsos = 0;

void setup()
{
  pinMode(2, INPUT); // Entrada del contador en pin 2
  attachInterrupt(0, cuentaPulsos, RISING); // interrupción 0 (pin 2), en flanco ascendente, a la función cuentapulsos.
}

void loop()
{
Serial.print(pulsos);
Serial.println(" pulsos");
}

void cuentaPulsos()
{
pulsos++;
}

Supongo que eso sea lo que quieres.
Saludos.