Arduino Forum

International => Español => Hardware => Topic started by: Mikel1985 on Jul 08, 2015, 12:51 am

Title: [SOLUCIONADO] Leer RPM de motor de Coche
Post by: Mikel1985 on Jul 08, 2015, 12:51 am
Buenos días!

He desarrollado proyectos con Arduino en los que he controlado sensores de temperatura, de proximidad, displays LCD, etc... peeeero sin embargo no tengo los conocimientos de electricidad necesarios para realizar el siguiente proyecto.
Es un shift Light para el coche de carreras (va encendiendo leds en base a las RPM del motor). Es un tema que veo por internet que está mas que hablado pero tienes que tener los conocimientos de electricidad / electrónica para saber interpretar los circuitos y demás...
Como ejemplo posteo el siguiente enlace:
https://www.clusterfsck.io/blog/2014/06/05/measuring-engine-rpm-with-arduino/ (https://www.clusterfsck.io/blog/2014/06/05/measuring-engine-rpm-with-arduino/)

La parte de código no me preocupa ya que soy programador, lo que me preocupa es el resto.

Objetivo:
- Leer número de pulsos en el cable de bobina para saber las RPM del motor.

Problemas:
- No quiero achicharrar el arduino (hay valores por ejemplo de 12V).
- No se muy bien todo lo que necesito para hacer funcionar el tema, por lo que he googleado estos días he comprado un optoacoplador (que casi no sé ni lo que es...).
Por supuesto en caso de reducir el voltaje de algún modo, no debe modificar lo que envía de actualmente por ese cable hasta su destino.
Estoy seguro de que he dicho una cantidad de tonterías que no son normales ...  :smiley-confuse:  

A ver si alguien puede iluminarme de lo que tengo que hacer en la protoboard...

Resumen: Leer pulsos, el origen viene con voltaje alto variable. No quiero que afecte lo que haga al circuito de origen.

Un saludo compañeros!



Title: Re: Leer RPM de motor de Coche
Post by: firius2010 on Jul 08, 2015, 07:27 am
Hola Mikel, saludos desde Colombia.

Arranco diciéndote pues que no tengo experiencia en cuanto al sistema eléctrico del coche, entonces no se que características tenga el cable de bobina que mencionas, pero por lo que veo del post que pusiste básicamente es un punto, que te permite obtener una señal eléctrica oscilante entre 0 y 12v o poco mas.

Comenzando con los problemas que mencionas y basándome en el circuito que plantean en el post que pusiste, pues con respecto al primer punto de miedo a achicharrar el arduino pues con ese circuito no hay de que preocuparse en caso de fallo a lo sumo se dañaria el 4n25, pero eso en caso de que el voltaje de entrada de la bobina se elevara demasiado, osea que por el arduino no te preocupes.

Con respecto a los componentes no entiendo porque dices que no los sabes si en dicho post te dan el listado.

Ahora ese circuito que posteas lo veo funcional ¿ya lo probaste?.

Por acá estaré si te puedo servir en algo mas.
Title: Re: Leer RPM de motor de Coche
Post by: Mikel1985 on Jul 08, 2015, 08:48 am
Gracias por contestar firius!
Pues el problema es el siguiente,  yo con esto soy como el que empieza a tocar la guitarra y no entiende nada de partituras, se va apañando con tablaturas o dibujos para niños.

Entiendo que esa es la lista de componentes e incluso intuyo la conexión entre unos y otros,  pero seguro que no lo hago bien.
Creo que voy a ir a una tienda,  consigo lo que me falta y lo situi todo en una protoboard y así podéis corregirme si no he sabido interpretar el circuito.

Quizá pueda simular esto con el programa fritzing que alguna vez he leído por ahí,  voy a mirar.

En todo caso quiero dejar claro que investigo lo que haga falta,  no es lo intención que nadie me de todo hecho "por que si", pero estaba entrando en estado de frustración y aquí estoy pidiendo ayuda... Evidentemente lo suyo seria aprender lo referente a electricidad antes de nada,  pero el tiempo me aprieta.

Title: Re: Leer RPM de motor de Coche
Post by: max_saeta on Jul 08, 2015, 03:15 pm
Saludos
En casi todos los modelos de los vehiculos existe un sensor que le indica al sistema cuando dar la chispa. En los carburados va debajo del distribuidor y creo que de allí puedes tomar la señal y no de una bobina que puede sacar facilmente 15000 V.
Title: Re: Leer RPM de motor de Coche
Post by: Mikel1985 on Jul 08, 2015, 06:10 pm
15000v  :o
Eso será en la salida de la bobina, la cuestión es leer los pulsos en la entrada de la bobina, los valores deben oscilar entre 0 y 12 mas o menos.
Los shift light profesionales van todos conectados utilizando este mismo sistema. Mi coche (un clio renault sport II) solo tiene esa forma de capturar el valor o accediendo por OBD a la ECU.

A ver si alguien me echa un cable.
Gracias por contestar compañero!

salu2
Title: Re: Leer RPM de motor de Coche
Post by: firius2010 on Jul 08, 2015, 06:33 pm
Es con gusto mikel. Mira que aunque ya había visto los esquemas de este programa fritizing que me parecían muy cheveres, nunca lo había trabajado me lo he descargado para mostrarte lo de las conexiones, mira acá te coloco las conexiones en proto aunque supongo que cuando lo implementes no lo meterás con protoboard y todo jejeje o eso espero.

(http://sia1.subirimagenes.net/img/2015/07/08/15070806184473134.png)


Me asusta un poco lo que dice max_saeta, de los altos voltajes en el bobinado, por ahí estuve  leyendo para enterarme un poco del sistema eléctrico de carros y pues según lo que leí esos altos voltajes se producen en el secundario del bobinado no en el primario ultimo en el cual esta alrededor de 12 a 14v o eso fue lo que lei,entonces por ese lado creo no hay problema, asegúrate de conectarlo al bobinado primario no al secundario.

El esquema que te puse es el equivalente en protoboard del post que pusiste, recuerda que ese esquema es funcional para el código que coloca el autor, sin embargo como dices vos sabes de programación me imagino que lo modificaras lo que si te comento es que desde código tienes que activar la resistencia de Pull Up ya sea en la patilla 2 o 3, que son las que el autor usa para leer los pulsos cualquier duda me comentas espero te salga bien.
Title: Re: Leer RPM de motor de Coche
Post by: GO_zalo on Jul 08, 2015, 10:25 pm
15000v  :o
Eso será en la salida de la bobina, la cuestión es leer los pulsos en la entrada de la bobina, los valores deben oscilar entre 0 y 12 mas o menos.
Los shift light profesionales van todos conectados utilizando este mismo sistema. Mi coche (un clio renault sport II) solo tiene esa forma de capturar el valor o accediendo por OBD a la ECU.

A ver si alguien me echa un cable.
Gracias por contestar compañero!

salu2
la conmutación de 12V en la entrada de la bobina (que es una carga fuertemente inductiva) provoca picos de tensión del orden de lo que habla max_saeta.
Title: Re: Leer RPM de motor de Coche
Post by: Mikel1985 on Jul 08, 2015, 10:31 pm
Tremendo Firius, te estoy muy agradecido :)
Voy a ir montando todo en la protoboard. Entiendo que para probar puedo meterle en casa una corriente de 5v intermitentes por ejemplo generada con otro arduino, en lugar de conectarlo al coche.

Tengo un par de dudas sobre el dibujo, las marco encima:
(http://sia1.subirimagenes.net/img/2015/07/08/150708102642553761.png)

1 -> No entiendo esa conexión. Saco de la misma fila  de la protoboard 2 cables a los pins 2 y 3 respectivamente? O es el mismo cable que al final de todo lo divido en 2 partes y lo pincho en los pins 2 y 3?  sé que seguramente sea una pregunta estúpida...


2-> Entiendo que eso quiere decir que conecto por ejemplo en la parte inferior el cable del coche y puenteo también hacia la parte superior con otro cable.

Me explico como un libro en llamas  :o  :smiley-confuse:
Title: Re: Leer RPM de motor de Coche
Post by: Mikel1985 on Jul 08, 2015, 10:33 pm
la conmutación de 12V en la entrada de la bobina (que es una carga fuertemente inductiva) provoca picos de tensión del orden de lo que habla max_saeta.

Gracias compañero, pero esto veo que es lo que hacen varias personas (hay muchos videos en youtube). No sé si es incorrecto o que más debería contemplar para "protegerme".

Un saludo.
Title: Re: Leer RPM de motor de Coche
Post by: GO_zalo on Jul 08, 2015, 10:46 pm
no digo que no se pueda hacer, digo que debes tenerlo en cuenta para adaptar la señal de forma segura
Title: Re: Leer RPM de motor de Coche
Post by: firius2010 on Jul 08, 2015, 11:05 pm
1 -> No entiendo esa conexión. Saco de la misma fila  de la protoboard 2 cables a los pins 2 y 3 respectivamente? O es el mismo cable que al final de todo lo divido en 2 partes y lo pincho en los pins 2 y 3?  sé que seguramente sea una pregunta estúpida...

Saca de la misma fila dos cablecitos. uno para el pin 2 y el otro para el pin 3 de la misma fila de la proto.

2-> Entiendo que eso quiere decir que conecto por ejemplo en la parte inferior el cable del coche y puenteo también hacia la parte superior con otro cable.

La idea es que identifiques en el primario de la bobina del coche, la tierra y la señal que manda los pulsos de 12 V, la tierra la metes en alguno de los puntos con cable negro y la señal pulsante de 12 V  a la entrada del D1
Title: Re: Leer RPM de motor de Coche
Post by: firius2010 on Jul 08, 2015, 11:17 pm
no digo que no se pueda hacer, digo que debes tenerlo en cuenta para adaptar la señal de forma segura

GO_zalo, comprendo la preocupacion con respecto al alza de voltajes por el swicheo en la bobina yo tambien tengo mis dudas.

Sin embargo, entre los dos podamos analizar algo: asi como el inductor se opone a los cambios en corriente el capacitor se opone a los cambios en voltaje protegiendo de esta forma la entrada del diodo del optoacoplador y ademas el diodo rectificador a la entrada del circuito impide el flujo de corrientes en esta rama del circuito por lo tanto en el momento de la alza de voltaje el diodo impide que fluyan corrientes a través de dicha rama con lo cual evitamos algún daño y la corriente del inductor se ira por el mismo lado que se iba ante de agregar este circuito, ¿no estas de acuerdo?.
Title: Re: Leer RPM de motor de Coche
Post by: Mikel1985 on Jul 08, 2015, 11:33 pm
Por ahora todo entendido, y agradezco igualmente el debate que has iniciado.

Me da pena no comprender plenamente esos conceptos pero me parece muy interesante lo que expones.

Mañana coloco todo en la protoboard.
Title: Re: Leer RPM de motor de Coche
Post by: firius2010 on Jul 08, 2015, 11:37 pm
No te preocupes, me comentas como te fue vale  :)  ojala resulte bien.
Title: Re: Leer RPM de motor de Coche
Post by: westay on Jul 09, 2015, 05:20 am
que interesante.. me apunto a ver que resulta.!!
yo no se nada de programacion.. y algo poco en la parte elec..

lo que si te puedo decir es que existen muchos tipo distintos de encendido en los automoviles.. ya sea si es el sistema mas antiguo de encendido con platinos, luego los que llevan un sensor hall en el distribuidor (ambos dan un pulso por cilindro cada dos vueltas)  o los un poco mas sofisticados que dicho sensor va al volante de inercia y mide alrededor de 32-60 impulsos por vuelta, ademas de ser miltipunto o de chispa perdida.. en este caso lo mejor es sacar la señal del OBDII

si el vehiculo es de encendido por platinos se pueden tener picos altos en la entrada del primario de la bobina cuando se abre el platino.. por eso hay que saber para que tipo de encendido es tu Shift Light..

a mi me gustaria hacer uno para una moto de un cilindro pero 2T

Saludos
Title: Re: Leer RPM de motor de Coche
Post by: Mikel1985 on Jul 09, 2015, 10:41 am
westay, este es mi coche. El tipo de motor es un F4R que de origen da 182cv.
El modelo exacto es Clio II Sport, la última fase que salió, las primeras tenían 172cv.
Los sistemas de encendido y demás deben ser idénticos en todos los Clio II Sport asi que es cuestión de investigar el tipo de encendido de cualquiera de ellos.

(https://farm4.staticflickr.com/3821/10510793025_49c3161d3f.jpg)


Ya tengo la protoboard montada.
He intentado probarlo conectando otro arduino que pone el pin5 en HIGH de manera intermitente (como un "blink").
¿Debería funcionarme esa prueba? o ¿estoy haciendo una tontería? o ¿Tiene lógica pero lo he montado mal?
No he conseguido resultado satisfactorio por el momento, siempre obtengo "0 RPM".

(http://sia1.subirimagenes.net/img/2015/07/09/150709103722641091.png)


Edito tras hacer unas pruebas. Si conecto directamente el pin del otro arduino despues de R2 funciona!!! algo es algo. Me lee las "RPM" (pulsos que emite el otro arduino) perfectamente.

Si lo conecto en cualquier otra parte, no llega al final del camino (supongo que no llega despues del octoacoplador).

He probado con un tester y mi poco conocimiento y veo que despues del segundo diodo, no sigue la corriente. Eso es lo primero que detecto. En C1 no mido nada de corriente.
Sin tener ni idea, veo que los diodos están "enfrentados", y la función del diodo es que la corriente fluya en una sola dirección (creo), por lo que no continua hacia delante. ¿puede ser?

Aun asi, tambien he detectado que si le pongo 5v directamente en la entrada del optoacoplador, al otro lado no veo resultados. Creo que algo me falta en esa parte tambien. Quizá algún positivo.

Bueno, vamos por partes, como jack el destripador!  Que gracias a vosotros voy poco a poco avanzando.

Un saludo!
Title: Re: Leer RPM de motor de Coche
Post by: westay on Jul 09, 2015, 03:18 pm
deberias colgar los codigos.. el que tienes en el uno y el del nano..
Mediste si los 5V provenientes del nano logran encender el optoacoplador y enviar la señal al uno??


Title: Re: Leer RPM de motor de Coche
Post by: Mikel1985 on Jul 09, 2015, 03:25 pm
deberias colgar los codigos.. el que tienes en el uno y el del nano..
Mediste si los 5V provenientes del nano logran encender el optoacoplador y enviar la señal al uno??



Hola westay, acabo de editar el post con unas pruebas, un saludo!
Title: Re: Leer RPM de motor de Coche
Post by: firius2010 on Jul 09, 2015, 05:38 pm
Si como dice el amable jack por partes.

He probado con un tester y mi poco conocimiento y veo que despues del segundo diodo, no sigue la corriente. Eso es lo primero que detecto. En C1 no mido nada de corriente.
Sin tener ni idea, veo que los diodos están "enfrentados", y la función del diodo es que la corriente fluya en una sola dirección (creo), por lo que no continua hacia delante. ¿puede ser?

Los diodos se encuentran enfrentados porque no son el mismo tipo de diodos el primero que va en la direccion correcta es un diodo rectificador que cumple la función que decís dejar pasar en un solo sentido la corriente (en este caso en la dirección de nuestro opto acoplador que es lo que queremos), sin embargo el otro diodo como lo ves se encuentra en sentido inverso en teoría según lo que sabes evitaría que fluya la corriente, sin embargo este no es un tipo cualquiera de diodo sino que es un diodo zener de 4.7V por lo tanto te explico asi de manera basica lo que hace.

Ese tipo de diodo es como un diodito normal evita el flujo o lo permite sin embargo si se polariza inversamente es decir esta evitando el flujo y ese voltaje de polarización inversa supera su voltaje umbral que para este diodo es un poquito mas arriba de 4.7V pues en ese caso el diodo empieza a conducir dejando entre sus bornes ese voltaje, por ende la prueba que estas haciendo no debería de funcionar recuerda que se diseño para 12V así 5 quedan en el zener otro poquito en la resistencia y el resto prende el optoacoplador para hacer pruebas intenta quitar el zener y nos comentas como te fue, espero que en tus pruebas no hayas colocado los 5v del micro en la patica que lleva el cable blanco del capacitor c1 porque si es asi lo  mas probable es que hayas quemado el diodo del optoacoplador.
Title: Re: Leer RPM de motor de Coche
Post by: firius2010 on Jul 09, 2015, 05:50 pm
Y otra cosita Mikel como dice Westay cuelga los codigos que tienes corriendo asi podemos verificar otras cosas yo por ejemplo quiero ver si prendiste las resistencias de pull up del micro como te recomende
Title: Re: Leer RPM de motor de Coche
Post by: Mikel1985 on Jul 09, 2015, 05:58 pm
Eres un crack,
por un lado quemé el LED que lleva el optoacoplador (o eso creo jeje) ya que conecté directamente 5v a esa patita para probar. Leyendo por internet aprendí que hay que pasar por resistencia si o si o te cargas el LED interno.
He cambiado el optoacoplador por otro nuevo y poniendo una resistencia... funciona desde ahí!
He ido yendo hacia atras y efectivamente el "tapón" se produce en ese punto que comentas. Muchisimas gracias por la explicación, no se si eres consciente pero me estas haciendo aprender un montón de cosas!

Aplicando tu teoría le he dado la vuelta al diodo zener, y efectivamente así si que funciona dejando todo lo demás igual.
Por tanto, ahora la cuestión es probar así con mis 5V (supongo que no hay problema... verdad?) y una vez que tenga el programa perfecto darle la vuelta al zener y enchufarle los 12V.

Si estoy haciendo alguna chapuza me lo dices!


Ahora el problema, sin revisar aún el código, es que me da algunas lecturas "falsas":
* El valor correcto para los pulsos que le estoy metiendo es exactamente 600 RPM

600 RPM
600 RPM
600 RPM
600 RPM
600 RPM
600 RPM
1200 RPM
1800 RPM
2400 RPM
....
..
600 RPM
600 RPM
600 RPM
600 RPM
600 RPM
600 RPM


Toca liarme con el código o puede ser debido a otra cosa?

Code: [Select]
volatile unsigned long timePointsOpen, timePointsClosed, lastChange;
volatile unsigned int numBangs;

void pointsOpening(){
    unsigned long t;
    t = millis();
    if (lastChange > 0){
        timePointsClosed += (t - lastChange);
    }
    lastChange = t;
    ++numBangs;
}

void setup(){
  pinMode(3, INPUT);
  digitalWrite(3, HIGH);
  Serial.begin(9600);
  Serial.print("Inicializado ");
}

void loop(){
  // Number of coil pulses
  numBangs = 0;
  attachInterrupt(0, pointsOpening, RISING);
  delay(50);
  detachInterrupt(0);
  numBangs = ((60000/50)*numBangs)/2;
  Serial.print("RPM: ");
  Serial.println(numBangs);
}


La sentencia digitalWrite(3, HIGH)  no activa el Pull up? No sé si en el otro pin hay que hacerle algo tambien (el 2 de las interrupciones)

 :)
Title: Re: Leer RPM de motor de Coche
Post by: firius2010 on Jul 09, 2015, 06:21 pm
Es con gusto y que bien que estes aprendiendo algo de electronica, listo me alegra que haya funcionado por ahora volteando el zener, en efecto la idea seria que cuando hagas la prueba vuelvas y lo dejes como es de lo contrario te vuelves a cargar el optoacoplador.

Mi recomendación seria que antes de hacer la prueba con la bobina del carro, convirtieras los 5v que te salen del arduino en 12V y se lo entraras a este esquema con el zener en la pocision que es, asi si no funciona toca revisar los valores de las resistencias y si funciona asi pero no en el carro sabremos que la bobina no trabajaba de la manera bonita como creiamos ahora si funciona en ambos jejeje hacemos fiesta.

Con respecto al problema que mencionas creo que ya es de software, le pegare una mirada y si detecto algo te comento XD.
Title: Re: Leer RPM de motor de Coche
Post by: firius2010 on Jul 09, 2015, 06:48 pm
Otra cosita pon el codigo que tienes cargado en el otro arduino porfa, y me podes explicar como funciona eso de las RPM es decir que indica cada pulso y de donde sale esa formula que tenes ahi:

Code: [Select]
numBangs = ((60000/50)*numBangs)/2;

Así me hago a una idea de si el código corre bien o esta mal diseñado.
Title: Re: Leer RPM de motor de Coche
Post by: Mikel1985 on Jul 09, 2015, 07:16 pm
El delay que le meto es 50, para que se muestre el mensaj cada X tiempo. , en ese lapso de tiempo se suceden pulsaciones detectadas por las interrupciones. Se van contando y luego hago esa maravillosa operación para calcular cuantas pulsaciones se sucederian en un minuto.

Seguro que hay mil formas mejores!

El código del otro arduino es el Blink que viene de ejemplo, luego pongo el código no obstante.

Lo de maravilloso código era sarcasmo jeje

Edito añadiendo el código del otro arduino:
Code: [Select]


void setup() {
  // Pin que enviará los pulsos
  pinMode(5, OUTPUT);
}


void loop() {
  digitalWrite(5, HIGH);   // ON
  delay(30);             
  digitalWrite(5, LOW);    // OFF
  delay(20);             
}
Title: Re: Leer RPM de motor de Coche
Post by: noter on Jul 10, 2015, 12:58 am
Un par de puntualizaciones.

Tu fórmula se podría simplificar bastante: numBangs = ((60000/50)*numBangs)/2 = (1200*numBangs) /2 = 600*numBangs. A partir de la fórmula reducida, podemos darnos cuenta de lo que explico a continuación.

A bajas revoluciones, es más preciso medir el tiempo entre dos pulsos. A altas revoluciones contar el número de pulsos en un determinado tiempo. En tu ejemplo, la diferencia entre recibir un pulso o dos en el periodo de 50 milisegundos, equivale a 600 o 1200 rpm. No hay término medio. Además, activas y desactivas la interrupción en cada loop. No sería raro que al reactivar la interrupción salte ésta inmediatamente, y no porque se produzca en ese momento una transición del pin, sino porque algún registro de estado esté alterado previamente. Por ello considero más apropiado activar la interrupción en el setup y dejarla activada; a la par que utilizar millis() o micros() en lugar de delay para la temporización.
Title: Re: Leer RPM de motor de Coche
Post by: surbyte on Jul 10, 2015, 01:10 am
Acá tenes un buen circuito, simple y efectivo
la bobina representa el primario de la bobina de ignición.

(http://images.elektroda.net/38_1244969036.jpg)

espero sirva.
Nunca voy a entender un circuito presentado en el protoboard como uds lo hacen. Pero es  una cuestión de adaptación porque cada vez lo veo mas común.

Amplio el comentario apropiado de Noter.
Tiene mucha razón. Pero esto extendido a la electrónica en general.
Cuando estudias mediciones te explican porque cuando se miden señales lentas se debe leer el período de la señal y cuando son rápidas se mide la frecuencia de la señal.
Aun cuando un auto desarrolle 10.000 rpm sigue siendo lento porque son apenas 10000/60 = 166Hz o sea solo 6 mseg
entonces siempre siempre medir intervalo entre flancos. O sea una interrupción, y la siguiente.

Si buscan rpm Nick Gammon tiene una buena forma de hacerlo usando los 62.5nSeg del reloj del Arduino que corre a 16Mhz, asi que una buena lectura con un reloj a 62.5nseg dará para digamos

usaré valores que dan enteros
600 rpm = 600/60 Hz = 10 Hz => 100mseg
100mseg/62.5nseg = 1.600.000 pulsos
O sea.. si cuento pulsos o ticks del timer al máximo reloj, tendré 1600000 pulsos. PRECISO NO

ahora si fueran 6000 rpm o 1000 Hz = 1mseg entonces tendré 16000 pulsos

tambien puedo contar varios pulsos RPM y promediar la lectura lo que disminuye el error.
Bien, ya saben o creo que saben como encararlo para leer como se debe.

Busquen en google: RPM Nick Gammon para usar la libreria/sketch que les comenté.
Title: Re: Leer RPM de motor de Coche
Post by: firius2010 on Jul 10, 2015, 02:21 am
Esta vacano el circuito que comentas surbyte, sin embargo preferiría el que puso el dado el aislamiento galvanico que posee, solo por cuestiones de seguridad por otro lado yo tambien estoy mas acostumbrado a los diagramas pero mikel lo necesitaba en protoboard así que no hubo de otra, coincido en que no es recomendable estar activando y desactivando la interrupción en el arduino y que en ves de contar la cantidad de pulsos en un intervalo de tiempo es preferible contar el lapso entre los flancos sin embargo con el código que el esta usando, esta haciendo ambas cosas contando el numero de pulsos en el intervalo de 50 ms y contando el lapso de tiempo entre flanco y flanco solo que esta ultima funcionalidad no la está utilizando sin embargo no es duro que la implemente ya que solo tendria que enviar en ves de numbangs, (30/timePointsClosed) y listo que tal si lo pruebas y nos comentas mikel.
Title: Re: Leer RPM de motor de Coche
Post by: Mikel1985 on Jul 10, 2015, 09:03 am
Un par de puntualizaciones.

Tu fórmula se podría simplificar bastante: numBangs = ((60000/50)*numBangs)/2 = (1200*numBangs) /2 = 600*numBangs. A partir de la fórmula reducida, podemos darnos cuenta de lo que explico a continuación.

A bajas revoluciones, es más preciso medir el tiempo entre dos pulsos. A altas revoluciones contar el número de pulsos en un determinado tiempo. En tu ejemplo, la diferencia entre recibir un pulso o dos en el periodo de 50 milisegundos, equivale a 600 o 1200 rpm. No hay término medio. Además, activas y desactivas la interrupción en cada loop. No sería raro que al reactivar la interrupción salte ésta inmediatamente, y no porque se produzca en ese momento una transición del pin, sino porque algún registro de estado esté alterado previamente. Por ello considero más apropiado activar la interrupción en el setup y dejarla activada; a la par que utilizar millis() o micros() en lugar de delay para la temporización.
Efectivamente la fórmula debería estar simplificada como bien dices, y el cálculo es el mismo. El problema de 600 a 1200 y todo esto está relacionado con los 50 ms, he probado a quitar el delay y me dá todo el rato, sin oscilar. Bueno, realmente me da 600rpm 0 rpm 600rpm 0 rpm...
Me interesa mucho la última parte que dices, si puedes echarme un cable inserto el código necesario y lo pruebo!



Acá tenes un buen circuito, simple y efectivo
la bobina representa el primario de la bobina de ignición....
...
....

No dudes que insestigaré todo lo que has expuesto, ya he buscado en google los códigos de nick gamon.

Esta vacano el circuito que comentas surbyte, sin embargo preferiría el que puso el dado el aislamiento galvanico que posee, solo por cuestiones de seguridad por otro lado yo tambien estoy mas acostumbrado a los diagramas pero mikel lo necesitaba en protoboard así que no hubo de otra, coincido en que no es recomendable estar activando y desactivando la interrupción en el arduino y que en ves de contar la cantidad de pulsos en un intervalo de tiempo es preferible contar el lapso entre los flancos sin embargo con el código que el esta usando, esta haciendo ambas cosas contando el numero de pulsos en el intervalo de 50 ms y contando el lapso de tiempo entre flanco y flanco solo que esta ultima funcionalidad no la está utilizando sin embargo no es duro que la implemente ya que solo tendria que enviar en ves de numbangs, (30/timePointsClosed) y listo que tal si lo pruebas y nos comentas mikel.
Efectivamente, en este topic andan bailando protoboards arriba y protoboards abajo por mi poco conocimiento de electrónica... y menos mal que me echaste un cable!
En cualquier caso creo que está bien que consten esos dibujos de protoboard por si alguien con mis mismos conocimientos se pasa por aquí.

Si te refieres a mostrar 30/timePoinstsClosed como valor final de RPM, muestra siempre 0.

Y ahora lo mas importante en este momento... no me funciona!
Me he dado cuenta de que me funcionaba porque le hice una chapucilla.

Plan original:
- No lee nada:
(http://sia1.subirimagenes.net/img/2015/07/10/150710110734654827.png)

chapuza:
- Al menos leía (y me servía a mi al principio para ver el led parpadear a cada pulso):
*Notesé que moví tambien la última resistencia de pin, que igual no se ve a primera vista
(http://sia1.subirimagenes.net/img/2015/07/10/150710110735548275.png)

Este es el dibujo del optoacoplador:
(http://sia1.subirimagenes.net/img/2015/07/10/150710111331202217.jpg)
Un saludo!
Title: Re: Leer RPM de motor de Coche
Post by: Mikel1985 on Jul 10, 2015, 09:15 pm
En cualquier caso actualizo con un nuevo código, que me ha funcionado mejor. Siguiendo un poco consejos que me habéis dado, o eso he intentado, a ver si lo veis mejor... o peor!

Code: [Select]


float revs;
float rpm;
volatile byte rpmcount;
long previousmicros = 0;
long interval = 100000;


void setup()
{
  // setup serial
  Serial.begin(9600);
  // setup pins
  pinMode(3, INPUT);
  digitalWrite(3, HIGH);
 
  // setup interrupt
  attachInterrupt(0, RPM, RISING);

}

void RPM()
{
  rpmcount++;
}

void loop()
{
  unsigned long currentmicros = micros();
  if (currentmicros - previousmicros >= interval)  {
    previousmicros = currentmicros;
    detachInterrupt(0);
    rpm = 600*rpmcount;
    Serial.print("pulsos\t");
    Serial.print(rpmcount);
    Serial.print(" rpm\t");
    Serial.println(rpm);
    rpmcount=0;
    attachInterrupt(0, RPM, RISING);
  }
}


Y pongo un nuevo "esquema" con el que he conseguido que funcione todo y no de lecturas falsas.  C2 puesto da lecturas falsas, C2 quitado va casi perfecto!  Lo que supongo es que estaba por algo y yo la estaré liando... ¿verdad?

(http://sia1.subirimagenes.net/img/2015/07/10/15071009404354160.png)

He programado un display para ver los resultados cuando lo conecte al coche. En breve os lo enseño!
Title: Re: Leer RPM de motor de Coche
Post by: firius2010 on Jul 10, 2015, 11:04 pm
No te preocupes, no hay ningún problema con que hayas quitado a C2. Que bien que te este dando, te comento que probe el circuito usando 12V con el zener puesto y funciona ojala ya conectado al carro en la bobina y con el display todo ande.
Title: Re: Leer RPM de motor de Coche
Post by: Mikel1985 on Jul 11, 2015, 03:09 pm
No te preocupes, no hay ningún problema con que hayas quitado a C2. Que bien que te este dando, te comento que probe el circuito usando 12V con el zener puesto y funciona ojala ya conectado al carro en la bobina y con el display todo ande.
Probado y funcionando  :)
Luego hago mas pruebas!
http://youtu.be/FYnIx1SPDuE (http://youtu.be/FYnIx1SPDuE)
Title: Re: Leer RPM de motor de Coche
Post by: firius2010 on Jul 11, 2015, 03:34 pm
Que bien, felicidades :) no olvides cambiar el asunto del post a solucionado.
Title: Re: Leer RPM de motor de Coche
Post by: Mikel1985 on Jul 11, 2015, 11:26 pm
Oki, voy a intentar poner el tema como solucionado.
Dejo un último video, si sabéis como dejarlo incrustado para que se vea directamente... en otros foros suele ser [youtube].. .[/youtube]
Ya le puse unos leds, que es el objetivo real.
http://www.youtube.com/watch?v=Sl9Rt4ckvKE (http://www.youtube.com/watch?v=Sl9Rt4ckvKE)

Ahora lo haré con un arduino nano. Cuando esté finalizado y montado en el interior, subiré un video en marcha.

Muchisimas gracias por todo firius, sin tí no hubiese sido posible, si puedo hacer algo no dudes nunca en enviarme un privado ¿ok?

Saludos!


PD: Gracias también a todos los que han participado en este post, todo lo que habéis puesto me ha servido de mucho.
Title: Re: [SOLUCIONADO] Leer RPM de motor de Coche
Post by: Mikel1985 on Jul 17, 2015, 10:51 pm
Que bien, felicidades :) no olvides cambiar el asunto del post a solucionado.
Aquí el resultado final:

Vídeo
Shift Light: https://youtu.be/Cgg11_2mKxs (https://youtu.be/Cgg11_2mKxs)

Tablero para configurar varias opciones.(la parte izquierda es lo que le he hecho yo).
(http://sia1.subirimagenes.net/img/2015/07/17/15071710474256169.jpg)
Title: Re: [SOLUCIONADO] Leer RPM de motor de Coche
Post by: ElectroB on Jan 24, 2016, 02:27 pm
Muy interesante este proyecto, Como lo habéis conectado al coche? con que cable porque esa es mi mayor duda una sonda capacitiva pickup?
Title: Re: [SOLUCIONADO] Leer RPM de motor de Coche
Post by: balacho on May 24, 2018, 02:09 pm
Hola! Estoy haciendo un proyecto similar, pero la lectura es de una moto. La pregunta es que capacitor es ese? Me es de mucha utilidad post, pero me falta ese valor. Disculpen mi ignorancia del tema.
Saludos