Arduino + Tacômetro

O PIC que falas é semelhante a um arduino... que componentes meteste nesse circuito?

12V queima ambos os chips (AVR e PIC).

O programa que usaste no PIC também serve (conceptualmente) no Arduino. É só adaptar as funções... até deve ser mais simples no Arduino.

Duvido que funcione com PWM... pelo que li, esses dispositivos têm ligado a eles um sensor de rotações do eixo e isso é um sinal modulado em frequência e não em duty cycle como o PWM.

Tens o esquema do circuito que montaste com a PIC?

Sim, meti na minha página o esquema que usei: https://sites.google.com/site/grcbyte/electronica/tachometer-cpu

O problema é que agora não tenho a aplicação nem o ficheiro Hex, porque o site de onde os tirei está indisponível (já mandei um mail ao autor para ver se me envia mas não sei se responde).

Lembrei-me por isso se utilizar um arduino que penso que seja mais fácil, o tacômetro funciona com 12V, por isso tem mesmo de ser ligado aos 12V. O fio verde é apenas para receber uns impulsos mas nessa parte é que tenho as minhas dúvidas..

Em tempos fiz um circuito com um PIC18F2550 e funciona bem

Venho perguntar se alguem sabe como ligar e enviar sinais de um Arduino para um tacômetro:

Em que ficamos, apenas soldaste as coisas na placa com o PIC ja programado ou tu é que escreveste o codigo?
Se tiveres o codigo podes adapta-lo como o Bubulindo sugere para o arduino.
Se nao tens o codigo fonte entao tens de tentar "escutar" o passa nesse fio de sinal, se é PWM, frequencia, nivel de sinal ...
Um osciloscopio pode te dar essa resposta se nao tiveres a documentaçao tecnica dele.

Numa breve busca parece que um tacometro analogico conta os impulsos nesse cabo verde.
Aqui esta um esquema usando o famoso 555 em que na entrada de trigger o fio verde é ligado para assim contar as rotaçoes.

:slight_smile: Eu não fiz o código, apenas programei o PIC e soldei as coisas sim. A aplicação e o HEX tirei de um site há uns anos.

Eu experimentaria o circuito que o Hugo meteu aqui.

Acho muito estranho essa ligação directa com os 5V de alimentação da PIC a um dispositivo alimentado a 12V... no entanto, os 12V podem ser apenas por facilidade (as baterias dos carros são de 12V) e para fornecer potência para mexer o ponteiro (que não será por aí fora...).

Se funcionou assim, eu diria que funciona com o Arduino...

Experimenta algo assim para o código:

void setup() {

pinMode(PINO_SAIDA, OUTPUT);
digitalWrite(PINO_SAIDA, LOW);
}

unsigned int freq = 1; 
unsigned int counts = 0;

void loop() {

digitalWrite(PINO_SAIDA, HIGH);
delay(freq);
digitalWrite(PINO_SAIDA, LOW);
delay(freq); 

if (++ counts >= 65000) {
    i++; 
    counts = 0; 
    }
}

Isto vai criar uma onda com uma frequência variável e dará para teres uma ideia das frequências a que o velocímetro responde.
A variável counts está lá para te dar algum tempo entre cada frequência... se bem que talvez seja necessário aumentar isso para ver o que se está a passar.

Tens um osciloscópio aí à beira?

O tacômetro só liga ao Arduino através do fio de 'pulse', independentemente de estar ligado aos 12V acho que não interfere com o Arduino, pois deve ser a mesma coisa do que com o PIC.
Vou testar ligá-lo com o fio verde num pino do Arduino e usar o código referido (que agradeço desde já) para gerar a onda com frequência, penso que quanto mais impulsos forem enviados mais a agulha sobe, se calhar meto um potenciometro para ver o valor máximo ou assim.

osciloscópio não tenho não..

Obrigado!

if (++ counts >= 65000) {
    i++; 
    counts = 0; 
    }

Podes explicar melhor o que este if pretende fazer nao estou a entende-lo no que pode afectar a onda final :fearful:
a var i nao foi declarada por isso deve dar erro na compilaçao, mas supondo que a avaliaçao do if ocorre passados 65000 ciclos incrementada por ++ counts o que irá executar??

almamater:
O tacômetro só liga ao Arduino através do fio de 'pulse', independentemente de estar ligado aos 12V acho que não interfere com o Arduino, pois deve ser a mesma coisa do que com o PIC.
Vou testar ligá-lo com o fio verde num pino do Arduino e usar o código referido (que agradeço desde já) para gerar a onda com frequência, penso que quanto mais impulsos forem enviados mais a agulha sobe, se calhar meto um potenciometro para ver o valor máximo ou assim.

O GND tem de ligar a algum lado para dar uma referência ao pulse, não?

HugoPT:

if (++ counts >= 65000) {

i++;
    counts = 0;
    }



Podes explicar melhor o que este if pretende fazer nao estou a entende-lo no que pode afectar a onda final :fearful:
a var i nao foi declarada por isso deve dar erro na compilaçao, mas supondo que a avaliaçao do if ocorre passados 65000 ciclos incrementada por ++ counts o que irá executar??

O i é para substituir por freq. LOL

Basicamente esse pedaço de código serve garantir que a mesma onda corre durante 65000 vezes, depois incrementa freq, a frequência da onda diminui e volta a correr 65000 vezes até incrementar de novo. Isto dará para ter uma ideia da frequência de pulsos que o velocimetro usa.

Se não houvesse esse pedaço de código e apenas incrementasse a variável freq, cada frequência só era visível por um ciclo... isso ia ser um pouco difícil de visualizar, acho. LOL

agora sim faz sentido a tua explicaçao. :grin:

bubulindo:
O GND tem de ligar a algum lado para dar uma referência ao pulse, não?

Ah sim.. tenho que ligar o Grnd do Arduino ao Grnd da fonte do Tacômetro..

Já agora, só por curiosidade, porque é que vais ligar isso a um Arduino e não a um sensor de rotações?

É para fazer uma brincadeira? :slight_smile:

sim é para brincadeira :slight_smile:

Inicialmente foi para mostrar a utilização do CPU e seria para implementar numa caixa de PC (gosto de modding) mas de facto nunca o usei e lembrei-me ontem de o tirar da caixa e como agora tenho o Arduino pensei em usá-lo mas sem nenhum projecto para já em mente :slight_smile:

O efeito deve ser interessante.Ja agora como estas a pensar ler a utilizaçao do CPU e depois envia-la atraves do arduino?

Bem, se utilizar o circuito que já tenho com PIC já consigo usar a aplicação que falei acima, o autor da mesma já me enviou por mail :slight_smile: assim como o código fonte e o hex.

No caso de utilizar o Arduino poderia usar o VB ou adaptar o código já feito para o PIC.. mas para já quero apenas testar o funcionamento dele enviando uns impulsos a ver se funciona desta forma :slight_smile:

Coloca entao o codigo fonte do autor para ver como ele faz mexer o Tacometro.

Está em anexo um .rar com os 3 ficheiros (Source, binaries e o firmware para o PIC).

Tachometer.rar (219 KB)

Infelismente do que vi dentro do rar nao tem da o codigo fonte do PIC apenas o HEX ja gerado e o projecto da aplicaçao do autor, por isso o misterio permanece :~

Já estive a testar.. com o código referido não consigo grande coisa, a agulha inicialmente ficava sempre nas 7 (x1000) RPM, depois resolvi adicionar um debug e meti Serial.Begin(9600); no setup do código e a agulha passou para os 3 (x1000) RPM.. alterando o número no ciclo (de 65000 para outro qualquer) não influência, pelo menos com os valores que meti (10000, 40000,110000, etc..).

Encontrei no entanto um tópico a falar também disto, o user utilizou este código:

void setup()  { 
pinMode(9, OUTPUT);
} 

void loop()  { 
    tone(9, 33.3333333333333);
    delay(2500);
    tone(9, 66.66666666666667);
    delay(2500);
    tone(9, 100);
    delay(2500);
    tone(9, 133.3333333333333);
    delay(2500);
    tone(9, 166.6666666666667);
    delay(2500);
    tone(9, 200);
    delay(2500);
    tone(9, 233.3333333333333);
    delay(2500);
    tone(9, 266.6666666666667);
    delay(2500);
    noTone(9);
    delay(2500);
}

e por acaso funciona +/-, fazendo o cálculo referido nesse tópico: "Use the calculations he provided, or to put is another way, frequency = RPM * cylinders/120." a agulha mantêm-se fiel até às 6 mil RPM depois é que começa a ficar mais atrás do objectivo.. não testei ajustar os valores das frequências mas se calhar é a solução.

Vídeo:

Não funciona porque a frequência é muito baixa. Ao meteres o Serial.print a frequência ainda baixou mais.
Mas pelo menos já estás no caminho correcto.

Existe uma maneira de alterar a frequência de saída do PWM (lembrei-me agora) que é usando o registo OCRx como topo da contagem. Depois com ajustes nos prescalers dá para fazer uma gama relativamente alta de frequências.

Tenta ver os modos dos timers se quiseres aprofundar isto, ou então usa o tone que deve fazer a mesma coisa.