Cuenta vueltas con salida a rele

Hola, amigos del foro, ante todo daros las gracis por los comentarios y respuestas que dais, ya que he aprendido mucho de Arduino gracias a ellas. Ho me toca hacer una pregunata a ver si podéis ayudarme, he hecho un sencillo programa con Arduino para contar las revoluciones que da un disco, que gira a unas 200 revoluciones por minuto aproximadamente, la forama de detectar las vueltas es a través de un sensor inductivo que lee un pequeño tope metalico fijado en el disco. El programa de arduino cuenta 50 vueltas y a traves de una salida conectada a un transistor para el motor. En princiopio funciona todo bien si el disco gira mas despacio de 200 rpm. pero a mas revoluciones no es capaz de leer el sensor. Este problema vienen dado porque el sensor que si tienne capacidad para leer a esa velocidad y mas es de tipo pnp industrial y lo que me da como salida de señal los mismos 12 voltios con los que se alimenta, los cuales no puedo ponerlos directamente a la entrada del arduino, por lo que opte por colocar un optoacoplador, y hacer que este de los 5 vv que necesita la entrada, pero claro este sistema no es suficientemente rapido para que haga una lectura correcta. Os agradecería vuestras respuestas, Muchas gracias por todo.

Pdata resumiendo, necesito bajar los 12v del sensor a una señal de 5v para poner a la entrada del arduino

No es el optoacoplador, probablemente sea algo mas del circuito, algun condensador de filtro u otra cosa.

Mira hasta que frecuencias trabaja un opto normalito:

Si puedes poner el esquema, igual podemos indicarte.

Ah ¿empleas un sensor hall o de voltage creo se llamaban VDL? lo digo porque el hall si te da una onda cuadrada pero el otro es mas bien una senoide.

Hola Heke, muchas gracias por tu respuesta tan rapida la verdad es que voy un poco perdido con este tema y como no me urge por que me habia comprometido con un amigo a solucionarle así un tema. Te especifico mas concretamente todo, el proyecto se trata de una atornilladora eléctrica a la que hay que limitarle que pare cuando dé cincuenta vueltas, le he acoplado un disco de plastico torneado en el brocal con un tornillo que le sirve de señal al sensor, este sensor es un sensor inductivo industrial de la casa Contrinex puedes ver la ficha en http://www.contrinex.ch/xml/productSheet.aspx?src=ps_DW-AD-623-M12&langage=Spanish&typeFolder=IND, bueno te adjunto tambien la hoja.
Este tipo de sensores lo he usado a menudo con buenos resultados pero no con Arduino. Despues lo he conectado a un optoacoplador como el esquema que me has enviado con un 2N25, en el programa que te pongo a continuación , la cosa es sencilla creo... (estoy pez en lenguaje Arduino solo hago mis pinitos) le digo que lea en la enrada 7 que cuente y que cuando llegue a 50 en la salida 8 de una señal que através de un transistor arme un relé. El circuito me funciona bien a simple vista, es decir muevo el disco de la maquina con la mano y al llegar a 50 vueltas el rele se arma, hasta aqui todo bien, pero si le doy y gira a mas de 200rmp, no lee y el rele no se arma.
En fin no quiero abusar mas de tu paciencia, y de la de lo demas foreros.
Muchas gracias a todos y si necesitais algo de mí ya sabesis donde estoy.. Un saludo

Conta_prueba_17a.pde (1.01 KB)

Prueba con interrupciones, Igor tiene en su blog un ejemplo de como medir las revoluciones de un coche.

Eso si a la frecuencia que trabaja deberia de funcionar tu codigo.
Saludos.

Si vas a usar un optoacoplador casi mejor quita el inductivo y usa el optoacoplador para contar. La placa de metal que comentas le das un poco de altura y cuando cruce el optoacoplador tipo U cuentas.

TAmbién se me ocurre que pudes usar un CNY70 si pintas el disco de negro y le pones una pegatina blanca contaría las vueltas.
http://ersonelectronica.com/images/143-CNY70.jpg

Seguramente serán más baratos que el detector inductivo. Salu2

Hola,

Con una resistencia de valor muy grande en serie con la salida del sensor hacia la entrada digital del micro, no deberías necesitar nada más para adaptarlo, ya que las entradas del microcontrolador tienen diodos de protección. Si quieres estar seguro, le puedes poner un diodo entre la señal y los 5 voltios.

El programa lo haría usando interrupciones. Puedes ver el link que te han puesto por arriba, o hace poco también puse otro código en Problema con velocimetro - #8 by system - Español - Arduino Forum por si quieres algo como referencia para adaptarlo a tu aplicación.

Salu2

Igor R.

Compañero, te lo han dicho todo.

La opcion de IgorR es la mas barata y sencilla, un imple divisor de tension y listo, si no te fias, le pones un zener y arreglado.

Yo sigo pensando que algo hay mal en el circuito, el datasheet que has puesto dice que el sensor aguanta hasta 2khz, lo que me da, salvo que haya otra historia, es que el iman o el metal no le d un flanco limpio o este sea muy breve.

El arduino, sin interrupciones es capaz de leer frecuencias de 200 hz en entradas y se queda tan pancho.

Algo falla, tienes que investigar.

Mi consejo:
1.- ponle un osciloscopio y mira la señal del Hall (si no tienes uno, cogete un pc viejo, le montas la tarjeta de sonido y empleas los osciloscopios gratuitos que existen por software a traves de la tarjeta de sonido, que tienen ancho de banda el de audio, 20khz. suficiente para pruebas)

2.- cambio del tipo de sensor

3.- montar un divisor de tension y a otra cosa mariposa...

Un saludo.

Yo me refiero concrétamente a ésto (diodos rail-to-rail):

Es lo que se encuentra en cada entrada del microcontrolador, por lo que con una resistencia externa de alto valor, ya te valdría para conectar directamente el sensor, sin divisor de tensión.
En esta nota técnica de Atmel puedes ver unas figuras de osciloscopio para entenderlo mejor => Redirect Notice

Estaria bien ver tu codigo. Puede estar ocurriendo que la funcion loop tenga algun delay o algun bucle grande que haga que cada iteracion gaste mas tiempo de la cuenta. Si la velocidad del taladro es suficientemente baja, contaria sin problemas, pero a mayor velocidad, podria subir y bajar la señal de entrada antes de que tu funcion la evaluase. Si fueras tana amable de poner el codigo...

Pofenas, tienes el código en su segundo post (que efectivamente usa delay).

:wink:

Joer

Esto de que no aparezca el codigo !!!

Debia de haber una advertencia o no usar esa forma de ponerlo.

Yo no habia visto el codigo y resulta que no lo ves si no estas logueado, no aparece, y yo, no siempre hago login al ver el foro, lo hago al responder, por lo cual no he visto ninguna de las veces que habia puesto el codigo....

Vaya leche.

Pienso que debiamos de poner una advertencia que si no estas "logueado" no veras el codigo cuando se pone en... no se que forma se habra puesto...

Voy a hecharle un vistazo. ... hecho

Bueno, si hubiera visto antes que el codigo estaba puesto, podria confirmarte lo que apunta Profenas, que ha dado en el clavo.

Para el calculo de la segunda muestra le has añadido un retraso de 10ms si coges la formula para calcular la frecuencia:
F=1/T donde F es la frecuencia, T es el tiempo en segundos.

F= 1/0.01 (10mS) F= 100Hz.

Veras que te arroja una frecuencia de 100 hertzios, imposible medir nada por encima... es obvio.

Puedes reducirle a 1ms y probar a ver si hay algun otro problema...

Siento no haber visto el código antes, y me alegro de (aparentemente) haber dado con el problema. Nada que añadir al post de Heke. Ya nos contarás como te fue.

Hola Compañeros, perdon ante todo por haber tardado tanto en dar señales de vida, o mejor dicho de las señales con el cuentavueltas. Bueno, el tema esta solucionado, y gracias a vosotros también, os cuento que pasaba.

Bien en principio el primero en dar en el clavo la verdad fue Heke ya que me indico que el optoacoplador no tenía por que dar problemas al respecto, tambien tonto de mi de no haber mirado el datashet, le comenté en principio que estab asegun el esquema que posteaba,... pero repasando el circuito impreso me dí cuenta de un error y tambien gracias a vosostros que las solución mas sencilla habría sido emplear un simple divisor de tensión, cosa que hice y tema resuelto en cuanto a la lectura del sensor.

El tema de poner un retardo de 10ms en principio no debería dar problema ya que el giro en su momento maximo era de 200rpm, esto es 3,3 Hz, lo cual no es mucho, el motivo de colocarlo es que el funcionamiento delas maquinas, las cuales os posteo, es que atornillan por impacto, unos pernos que han de ser apretados 50 vueltas al principio las vueltas son uniformes y continuas, perlo las 10 últimas, las hace muy despacio girando el eje 10º por impacto o así y cuando en su traqueteo la señal para el sensor pasa por delanterebota con el impacto saliendo y enrando de nuevo, lo que produce un rebote, este es el motivo de introducir este rudimentario antirrebotes.
En cuanto a la indicación de ionhs, de usar otro tipo de sensor, de tipo infrarrojo, lo descarte por la propia naturaleza del proyecto, como veis en las fotos ha de ser un sistema muy robusto, resistente a condiciones meteorologicas, etc, aparte que el ejé donde va instalado lo que haya de leer el sensor tiene sus oscilaciones por lo que hay que descartar el de tipo U ya que una variacion de pocos mm se llevaria por delante el sensor y el de lectura directa, sería facil que se ensuciase la sperficie del disco donde ha de leer o que se vea influido por la luz solar al no poder ir muy pegdo al disco, por eso he optado por un sensor tipo inductivo muy fiable para estas condiciones y segun sus características suficientemente rápido.
Con lo que me he quedado es con el tema de hacer el programa con interrupciones, pero se escapa a mis escasos conocimientos con Arduino por el momento, lo miraré bien para seguir aprendendo al respecto, ya que hasta ahora mi experiencia al respecto se limitaba a hacer algunos programas en Leadder para reles programables tipo Zelio o similares, para algunos proyectos de trabajo.
Pues un placer pertenecer a este foro y muchas gracias por vuestras atenciones, espero tambien poder aportar algo de útilidad de mi cosecha a esta comunidad, Gracias de nuevo y un saludo

P1030847.JPG

P1030841.JPG

P1030848.JPG

Para aprender un poco sobre interrupciones igual te puede servir el tutorial que hay en el playground sobre interrupciones Arduino Playground - Guias

Salu2

usando dos interrupciones desfasadas 180º y haciendo que el conteo aumente solo cuando tras una interrupción salta la otra evitas el problema que comentas. Si se queda atascado en el interruptor de la interrupción, por mucho que pase no suma.