Leitura de RPM para Datalogger Automotivo (Arduino, SDCard e LCD 1602) com FuelTech

Bom vou explicar o cenário, estou desenvolvendo um Datalogger automotivo, ele tem a função de monitorar tudo que acontece com o carro e armazenar em um cartão Sd, Uso para carros de arrancada, competição e/ou modificados sistema de injeção com a Fueltech, Pandoo Injetech e etc... O Datalogger tem a função de capturar os dados como, posição do acelerador, pressão atmosférica do coletor, temperatura do motor e etc... isso já esta funcionando perfeitamente, Já esta coletando os dados armazenando em um SD e exibindo em tempo real em um Display 1602, porém eu preciso de Ler o RPM do carro, e essa parte que não estou conseguindo desenvolver, estou coletando o sinal do motor, medido antes, ele gira em torno de 2V porém as leituras ocila muito e não tem nada a ver com o RPM do carro, estudando um pouco sobre o assunto, eu descobri que ele trabalha em frequencia Hz e estou tentando ler isso pelo arduino, até encontrei um material, em [url]http://www.avdweb.nl/arduino/hardware-interfacing/frequency-period-... [/url] porém jogo dentro do arduino e não compila, mesmo colocando as bibliotecas no lugar, alguém tem um rumo pra mim caminhar ou solução? 

Já tentei da 022 até a 1.5 do arduino 

Exibições: 34164

Responder esta

Respostas a este tópico

penso que o problema das rpm poderá ser resolvido se for buscar a informação ao negativo da bobina utilizando um optoacopulador e depois ler a informação como se de um sensor de Infra vermelhos ou ultrasons se trata-se espero ter ajudado :) estou muito interessado no projecto, inspirou-se em algum site ou blogue que eu podesse dar uma olhada? É um projecto aliciante espero que consiga...

Arduino Simulador de pulsos para teste de RPM - motor à combustão 

Para quem quiser testar o seu Tacômetro (medidor de RPM)  

Desenvolvi uma montagem com o Arduino para teste do Tacômetro (medidor de RPM). 

Não é um simulador com extrema precisão, mas o ajudará a testa-lo.

Fiz testes de verificação com Scope.  Ele simula 600 RPM a 6000 RPM. 

Monte um potenciômetro de 10K ohms (pode ser maior ou menor) no protoboard junto com o Arduino.

Pino central do POT, conecte-o ao pino A0 do Arduino. As outras extremidade do POT, conecte no +5V e GND. 

A saída dos pulsos gerados no Simulador RPM Arduino esta no pino D13. Conecte esse pino de saída  na entrada do seu Tacometro. As leituras aparecerão na console da IDE (altere a velocidade para 115200 bps. 

Anexei o sketch = RPMsimulator3.INO 


/*  RPM Simulador de pulsos    Gustavo Murta 18/out/2017    Ligacao do Potenciometro 10K ohms - pino central A0 - outras extremidades +5V e GND
    Conecte a entrada do medidor de RPM no pino HallPin do Arduino simulador
RPM = RPS x 60 RPS (Frequencia)
exemplos : 600 RPM = 10Hz x 60 6000 RPM = 100Hz x 60
Periodo = 1 / Frequencia
*/

float RPS = 0; // Frequencia
int RPM = 0; // RPM
float Periodo = 0; // Periodo
int HallPin = 13; // Pino de saida do Sensor Hall

void setup()
{
Serial.begin(115200); // configure a console para 115200 bps
pinMode(HallPin, OUTPUT); // Pino Hall como saida
digitalWrite(HallPin, LOW);
}

void loop()
{
int POT = analogRead(0); // Potenciometro - pino central no pino A0
Periodo = (map(POT, 0, 1023, 1000, 100)/10); // Variando o valor do Periodo 100 a 10 ms
RPS = 1000 / Periodo ; // RPS = frequencia
RPM = 60 * RPS; // Calculo do RPM

digitalWrite(HallPin, HIGH); // Pulso positivo do sensor Hall = 1 milisegundo
delay(1);
digitalWrite(HallPin, LOW); // Pulso negativo variavel do sensor Hall
delay(Periodo-1.4); // subtracao dos atrasos

Serial.print(Periodo,0);
Serial.print(" ms ");
Serial.print(RPS,0);
Serial.print(" Hz ");
Serial.print(RPM);
Serial.println(" rpm ");
}

Anexos

Arduino Tacometro - medindo RPM através da frequencia do sensor Hall 

Achei essa Biblioteca FreqMeasure na IDE 1.8.3 do Arduino bem precisa. Através dela pode-se medir a frequência do pulso do sensor Hall . Nesse caso, um pulso do sensor para cada rotação do motor. 

Acrescentei no sketch de exemplo, o cálculo do RPM .   RPM = 60 x frequencia 

O único inconveniente, é que ela  é um pouco lenta para medir baixas rotações. Como ela calcula a média das medições, pode atrasar um pouco o resultado. Os resultados são bem estáveis. Quanto menor o número de medições, mais rápido ela fica. 

Exemplo de medição (console da IDE) : 

41.80 Hz 2508 rpm 
41.80 Hz 2508 rpm 
41.80 Hz 2508 rpm 
41.80 Hz 2508 rpm 
41.80 Hz 2508 rpm 
41.80 Hz 2508 rpm 
41.80 Hz 2508 rpm

Anexei o sketch = RPMmeasureX1.INO 

/* RPM - tacometro   Gustavo Murta - 19/out/2017  baseado no exemplo :   http://www.pjrc.com/teensy/td_libs_FreqMeasure.html
   Instale antes a biblioteca FreqMeasure, atraves da IDE do Arduino
pino D08 para medição de RPM / frequencia
*/

#include /font>FreqMeasure.h>

void setup() {
Serial.begin(115200);
FreqMeasure.begin();
}

double sum = 0;
int count = 0;

void loop() {
if (FreqMeasure.available())
{
sum = sum + FreqMeasure.read(); // Calcula a media das medicoes
count = count + 1;
if (count > 5) // numero de medicoes
{
float frequency = FreqMeasure.countToFrequency(sum / count);
float freq = round(frequency * 10) / 10.0; // arredonda a frequencia
int RPM = freq * 60; // calcula o RPM
Serial.print(freq);
Serial.print(" Hz ");
Serial.print(RPM);
Serial.println(" rpm ");
sum = 0;
count = 0;
}
}
}

Anexos

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço