quarta-feira, 13 de novembro de 2013

TUTORIAL - CONTA-GIROS ARDUINO

Sempre quis um conta-giros digital  no carro , com o arduino tive essa oportunidade de desenvolver um do meu gosto, com uma montagem e programação simples.
a ideia e receber as rotações do motor do carro e monstra-las em um display de lcd , para implementar o projeto , coloquei também uma leitura de tensão de bateria (resístores divisão de tensão)  e um sensor de temperatura (LM35 sensor analógico).

esquema:

funcionamento:

a entrada do optoacoplador(4n25) deve estar ligado no pino negativo da bobina do carro , usa-se o pino negativo da bobina pois é nesse pino que temos os pulsos para gerar as faícas para as velas, deve  observar se seu carro tem uma bobina para todas as velas ou se tem uma para cada duas velas e também a quantidades de pitões de seu carro pois isso vai ser utilizado no calculo de RPM no programa do arduino .Neste programa fiz amostras a cada 300 ms como mo meu carro era um Gol quadrado com motor AP
com uma bobina para todos os 4 pistões , então o sinal que é obtido no pino negativo da bobina é de 2 vezes a rotação do morto, assim se o motor estiver com 1000 RPM temos 4000 pulsos por minuto, para converter temos que fazer a seguinte conta:

Para leitura de temperatura e tensão temos que fazer os seguintes calculos:


temperatura = (valorLido * 0.00488); // 5V / 1023 = 0.00488 (precisão do A/D)
temperatura = temperatura * 100;
valorTensao = analogRead(pinoTensao);
tensao = valorTensao * 0.00488 ;
tensao = tensao * 4 ;

No LCD usei comunicação I2C com o ci PCF8574 , a biblioteca usada é LiquidCrystal_I2Ca  pode ser baixada aqui .

Seque o codigo :

#include <liquidcrystal_i2c .h="">

#include <wire .h="">
int pinoSensor = 0; //pino que está ligado o terminal central do LM35 (porta analogica 0)
int valorLido = 0; //valor lido na entrada analogica
float temperatura = 0;
int pinoTensao = 1;
int valorTensao = 0; //valor lido na entrada analogica
float tensao = 0;
byte detecta = 2;
int contador = 0;
LiquidCrystal_I2C lcd(0x38,16,2);
void setup()
{
lcd.init();
lcd.backlight();
lcd.print("CONTA GIROS DNL");
pinMode(detecta,INPUT);
digitalWrite(detecta,HIGH);
contador = 0;
attachInterrupt(0, DETECTA, FALLING);
noInterrupts();

delay (10000);

}

void loop()
{
unsigned long tempo = millis();
while(tempo +300 > millis())
{
interrupts();

}

contador = contador * 100 ;

valorLido = analogRead(pinoSensor);

temperatura = (valorLido * 0.00488); // 5V / 1023 = 0.00488 (precisão do A/D)
temperatura = temperatura * 100;
valorTensao = analogRead(pinoTensao);
tensao = valorTensao * 0.00488 ;
tensao = tensao * 4 ;

lcd.setCursor(0, 0);
lcd.print("V:");
lcd.print(tensao);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("T:");
lcd.print(temperatura);
lcd.print(" ");
lcd.setCursor(8, 1);
lcd.print("RPM:");
lcd.print(contador);
lcd.print(" ");
contador = 0;
}
void DETECTA()
{
contador ++;
}


66 comentários:

  1. Amigo, tem como fornecer o código fonte para um estudo? eu tenho um gol também com FUELTECH e estou implementando ela, e o seu sistema me ajuda muito, se puder enviar para welingtonjb@hotmail.com

    ResponderExcluir
  2. Bom dia amigo , o codigo esta no tutorial ,mas posso te enviar sim !

    ResponderExcluir
    Respostas
    1. Daniel, eu me perdi um pouco nos calculos que vc fez. No meu caso, tenho duas bobinas duplas, e um motor de 4 cilindros, como faço os calculos de RPM ?

      Excluir
  3. Daniel, tem algum vídeo do projeto funcionando? Abraços!

    ResponderExcluir
  4. Vinny , tem sim um vídeo! ta aqui o link http://www.youtube.com/watch?v=0_-tiGbBUzQ . Abraços!

    ResponderExcluir
  5. Ola, uma duvida, você usa CCP para leitura do RPM ou conta os pulsos por um determinado tempo e depois só calcula? e outra, como você filtrou a os pulsos da bobina, estou tentando a um tempo, e com coolers de computador ele mede exato, mas no carro fica malucão!

    ResponderExcluir
  6. ola , Xevete , eu com os pulsos e calculo o tempo , para ligar na bobina usa um acoplador óptico 4n24 que vai isolador o sinal liga no negativo da bobina pois é neste pino que pulsa ! no para tirar um pouco a variação que pode ficar você pode fazer por exemplo 3 leituras , leitura 1, leitura 2 e leitura 3 e tirar uma media das 3 , soma todas e divide por 3 o resultado você usa para mostrar .
    abraços

    ResponderExcluir
  7. olá, posso contar com a sua ajuda, estou montando o seu projeto com a pcf8574p e estou com uma duvida, será que funciona com este modulo i2c ?

    ResponderExcluir
    Respostas
    1. ola , vc pode usar ele como I/O via i2c sim , da uma olhada no datasheet dele que tem as distancias máximas a serem respeitadas ,mas da para usar sim !

      Excluir
    2. Vlw, ja montei e testei, ams não consigo fazer o codigo funcionar no meu prisma.
      eu coloco o hardware na saveiro do meu pai q a bobina é para os quatros cilindros e funfa, mas no meu prisma que é quatro bobinas, uma para cada cilindro ele fica louco., me da um help ?

      Excluir
    3. Geralmente os carros da chevrolet sao bobinas de duas torrers. E proximo do assoalho onde entra os fios do chicote tem um roxo k eh o do rpm. Me manda a foto da bobina e do conector. fernando_jak@hotmail.com

      Excluir
  8. gostei do projeto, poderia me enviar o codigo por e-mail ? não achei link. grato pela atenção

    henriquew@hotmail.com

    ResponderExcluir
    Respostas
    1. é só copiar do quadro acima e colar na ide do arduino

      Excluir
    2. eh sim ! copia e cola que da certo !

      Excluir
    3. cara vc sabe me dizer de onde eu pego o sinal do conta giros do prisma 2008 ?
      ja procurei tudo e não acho no chicote

      Excluir
    4. Não eh da própria bobina PC Silva?

      Excluir
  9. Olá. Daneil, uma dúvida se puder responder... Fiz um esquema de conta giros parecido com o seu, a ligação elétrica é a mesma, o código é um pouco diferente... Nos testes que venho fazendo, quando uso a alimentação na bateria do carro igual você fez, tenho muita variação na leitura. Quando alimento pelo notebook funciona perfeitamente... Você usou algum tipo de filtro na alimentação ? Pois minha idéia é usar o atmega "stand alone" alimentada por um LM7805. Se quiser posso te passar um código que montei que funciona bem... Seria ótimo se pudesse testar assim como fez no video. Obrigado.

    ResponderExcluir
    Respostas
    1. poderia me passar seu codigo no meu email ?
      pcps258@gmail.com e se possivel o diagrama eletrico tbm

      Excluir
    2. https://m.youtube.com/watch?v=G86d1pUZWVE

      Excluir
  10. Boa tarde Daniel Olmo, parabéns pelo projeto, gostaria saber, voce tem o projeto esquema eletronico com placa aruino para me enviar? fabio.musicosax@gmail.com. obrigado

    ResponderExcluir
  11. amigo, veja se pode me ajudar, eu instalei no meu vectra que é 4 cilindros um painel digital do omega que é 6 cilindros, porem o rpm nao atuou, ja me disseram que num da pra fazer funcionar por causa dos pulsos que sao diferentes....existe alguma solução pra isso? mexo com mecanica e elética a anos mas isso nao tenho a minima ideia de como resolver...se puder me ajudar ficaria muito grato, obrigado

    ResponderExcluir
    Respostas
    1. Sem dúvidas o conta giros ia ficar meio maluco...não dá não colega, não dá pra alterar porque o microcontrolador do painel já trabalha com o número de 6 cilindos. Ele ia na versão 3.0 Opel, não é passivel de nenhuma gambiarra infelizmente. Venda o painel... =P

      Excluir
    2. Oi, talves eu possa ter oferecer uma solucao eu posso te fazer um hardware que somara um pulso a mais nas rotacoes do motor assim enganaria o painel que entenderia seu motor como um 6 cilindros. Entre em contato cmgo fernando_jak@hotmail.com

      Excluir
  12. Olá poderia mandar o projeto do proteus? Grato...

    ResponderExcluir
  13. Este comentário foi removido pelo autor.

    ResponderExcluir
  14. Tens como me enviar o codigo apenas do medidor do rpm??? ou me enviar o arquivo do proteus?? ja tentei de td e nao consigo pega esse sinal maldito

    ResponderExcluir
  15. Olá amigo td bm? estava olhando a formula que você usou... o que seria os 60000? de onde vc tirou essa constante?
    grato desde ja

    ResponderExcluir
  16. https://www.youtube.com/watch?v=Uxf_4gSZqTA

    ResponderExcluir
  17. eai amigo fiz esse contagiro e adicionei umas coisas mas nao consigo mostrar com numeros grandes vc me passa o codigo com mumeros grandes

    ResponderExcluir
  18. MEU AMIGO QUERO USAR EM MOTOR DIESEL COMO FAÇO SO TEM ALTERNADOR QUE JA TEM UMA SAÍDA PARA CONTA GIRO DARIA?

    ResponderExcluir
    Respostas
    1. ola amigo, para motores diesel é comum usar o sinal do alternador para conta-giros, pode usar o mesmo circuito, ligando ele no sinal do alternador, o que vai mudar é o programa, vai ter que fazer uma programa para fazer a leitura desse sinal para fazer as alterações no calculo do RPM, você vai precisar saber quantos pulsos dão em um giro.

      Excluir
    2. Ok obrigado vou sair a procura Desa informação

      Excluir
  19. Olá amigo, no caso só vou utilizar o rpm,será necessário que eu utilize o Crystal?

    ResponderExcluir
    Respostas
    1. Ola boa noite, se estiver usando o arduino uno ou o duemilanove, eles possuem um cristal de 16MHz, agora se pretende usar somente o atmega328 com o oscilador interno RC de 8MHz, você deve fazer algumas alterações para trabalhar com ele na IDE do arduino, vai ter que criar um arduino em 8MHz na IDE, vou vazer um novo tutorial como fazer isso e vou postal aqui.Obriado!

      Excluir
  20. ola amigo!
    excelente tutorial, agora poderia me explicar a formula que você utilizou para o conta giro ?
    aquele 300 da formula o que seria?

    ResponderExcluir
    Respostas
    1. boa noite amigo, o 300 da formula é porque o programa faz uma amostragem de 300 ms, como o motor do meu carro da época era um AP carburado, para dar uma volta ele da 2 pulsos na bobina, então para calcular quantos pulsos vai dar em um determinado RPM faz a conta, RPM * 2(porque a cara giro são dois pulsos), dividido por 60000(que são quantos milissegundos em um minuto), vezes 300 ms( a amostragem do programa), assim se quiser saber quantos pulsos vai ter em 2000 RPM, fazendo a conta descobre que vai tem 20 pulsos em 300 ms, para transformar esse 20 pulsos em RPM multiplica por 100.

      Excluir
  21. Opa e ai ...cara gostei do seu projeto estou pensando em fazer o mesmo e implementar alguns itens mais, pode me mandar seu código via email?
    Johnny.a.123@gmail.com

    ResponderExcluir
  22. Daniel, liguei o optoacoplador no negativo da bateria e o negativo no chassis do carro.
    Cara ja queimei 3 optoacopladores... nao sei o que fazer! Ja coloquei resistor entre ele e o negativo da bateria mas nao adianta.

    Meu caso eh um fusca, me da uma ajuda ai...

    ResponderExcluir
  23. Em tempo... ele esta funcionando, o unico problema eh que nao dura muito e logo queima optoacoplador.

    ResponderExcluir
    Respostas
    1. bom dia amigo, o que pode fazer eh usar um diodo zener para limitar a tensão, como o nossa amigo Iuri disse, mas deve testar se não vai alterar a leitura do rpm, no caso seu carro é um fusca, se ele usa gerador tem muita oscilação de tensão o que pode estar queimando o optoacoplador. Qual optoacoplador você esta usando? vou realizar umas simulaçoes no proteus com o 4n25 e com um zener para ver como vai ficar.

      Excluir
    2. Ciro eu verifiquei aqui, e para o fusca temos que montar um outro circuito de leitura, pois o fusca usa platinado, e o pulso na bobina eh negativo , quando não tem o pulso negativo o sinal fica positivo por retorno da bobina, com uma tensão mais alta, assim gera uma tensão reversa no acoplado o que leva a queima-lo, vou projetar um circuito para o fusca!

      Excluir
    3. Opa! Alguma novidade sobre o projeto para o fusca? O meu tem ignicao eletronica 6 pinos. será que da pra ler o sinal que vem do modulo de ignicao (proprio para RPM) ao inves de ler pelo negativo da bobina?

      Excluir
  24. Este comentário foi removido pelo autor.

    ResponderExcluir
  25. Este comentário foi removido pelo autor.

    ResponderExcluir
  26. Estou tendo o mesmo problema do Ciro, meu carro também é um fusca, pensei em colocar um diodo zener para limitar a voltagem da bobina, será que isso resolveria o problema?

    ResponderExcluir
    Respostas
    1. bom dia Iuri, da uma olhada nas respostas que dei para nosso amigo Ciro por favor, vou tentar resolver esse problema, assim que tiver uma solução mando para vocês e posto aqui no blog.

      Excluir
    2. Bom dia. Tb tenho um fusca, mas já eh distribuidor. Pensei em. Colocar um regulador de tensão antes do à acoplador. Será que evita esse problema?

      Excluir
    3. Bom dia amigo, agredito que o regulador não funcione, nao fiz o teste mais acredito que usando diodo zener de certo, teria que testar, eu acredito que o fusca tenha picos de tesão gerados pela bobina apos o pulso do distribuidor... pode ser esse o problema, talvez um diodo em paralelo com a bobina daria certo..infelizmente não tenho fazer esses teste por não ter um fusca ou um carro com distribuidor para teste..

      Excluir
  27. Olá! Achei muito interessante seu trabalho e gostaria de uma ajuda. Adaptei o painel de instrumentos do CELTA 2009 em um Chevette e está quase tudo funcionando. Mas, estou tendo problemas com o conta giros e indicador de temperatura do motor. Pelo que entendi, o sinal para o conta giros do painel do celta vem do modulo de injeção (acho que é digital) e o do chevette, vem da bobina. Existe alguma forma de resolver isso? Algum "transformador" ou alguém que poderia resolver isso? Desde já agradeço a oportunidade!

    ResponderExcluir
  28. Boa noite

    gostaria de ajuda para implementar este codigo utilizando o contagiros para movimentar um servo motor e fazer girar tantos angulos para a esquerda e tantos angulos para a direita dependendo do numeros de rpm tipo assim quando tiver a 4500 rpm inicia o acionamento proporcional ate 9000 giros poderia me ajudar meu email e marcio.hso@oi.com.br. poderia me ajudar?

    ResponderExcluir
  29. Amigo, por gentileza, no 4n25 o pino 1 recebe o negativo da bobina e no pino 2 vai o terra comun, por exemplo o negativo da bateria, é isso?

    ResponderExcluir
  30. Boa tarde me tira uma dúvida se eu usar o sinal que vem do alternador que já é especifico para rpm poderia usar esse sinal?

    ResponderExcluir
  31. Este comentário foi removido pelo autor.

    ResponderExcluir
  32. Boa noite. Qual o codigo para o conta giros somente?

    ResponderExcluir
  33. Boa dia, tem como voce enviar este projeto para o meu email por favor ?
    elcn.eng17@uea.edu.br

    ResponderExcluir
  34. Amigo e o esquema pras letras grandes no display qual foi a mágica ?

    ResponderExcluir
  35. Ola tudo bem! não consigo ler a library de lcd! já baixei, já coloquei no diretório ja mudei as aspas etc...

    #include

    #include

    Alguem pode me ajudar

    ResponderExcluir
  36. Opa, muito bom projeto! Eu nao tenho muito conhecimento com Arduino. Eu gostaria de saber qual parte do codigo e so para o contagiro

    ResponderExcluir
  37. Muito obrigado me deu uma boa ajuda, alterei algumas coisa para rodar e fico muito bom.

    ResponderExcluir
  38. How to make money from making money from making money with money
    A successful bookie offers a simple and งานออนไลน์ easy way to septcasino make money from placing bets kadangpintar and winning. A bookmaker will reward customers for being successful.

    ResponderExcluir