Ajuda em contador de giros

Estou criando um código para ser um contador de giros, usando um sensor indutivo PNP 5v, o código que fiz ta abaixo(tenho pouco experiência com Arduino). A ideia é enviar na serial para a leitura do numero de voltas que ta sendo dado. Não tenho certeza se seria melhor usar interrupção, não sei se seria mais eficiente que usar a leitura no loop... gostaria de uma ajuda para entender por que não bate certo as voltas, talvez por ser rapido o giro e o arduino não consegue acompanhar... imagino que estaja sendo umas 30 a 40 voltas por segundo. Agradeço qualquer ajuda!!!!

const int pinoSensor1 = 2; //PINO DIGITAL UTILIZADO PELO SENSOR

int cont1 = 0;
int contEnv = 1;
int mudou1 = 0;

String p1;

void setup(){
  pinMode(pinoSensor1, INPUT); //DEFINE O PINO COMO ENTRADA
  Serial.begin(115200); // abre a porta serial a 115200bps:
}

void loop(){  
    if (digitalRead(pinoSensor1) == HIGH){ //SE A LEITURA DO PINO FOR IGUAL A LOW, FAZ
      if (mudou1 == 0) {
        cont1++;
        mudou1 = 1;         
        if ((cont1 % 8) == 0) {        
          String p1 = "1:" + String(contEnv);    
          Serial.println(p1);
          contEnv++;     
        }
      }
    }else{       
      if (mudou1 == 1){
        mudou1 = 0;
      }
    }
}

Tens aqui algumas ideias para verificar:

  • Tens pull up no pino de entrada? Sem pull up é possível de apanhares mais ruído e contares de forma errada.

  • Não uses String.

  • podes alterar a lógica para ser mais simples, por exemplo.

unsigned long updateT = 0; 

botAgora = digitalRead(pinoSensor1);
if ( botAgora == HIGH && botAntes ==LOW ){ //SE A LEITURA DO PINO FOR IGUAL A LOW, FAZ
   cont1++;
}

botAntes = botAgora; // mantém um registo. 

if (millis() - updateT > 2000) {
   Serial.print("1:"); 
   Serial.println(cont);
   updateT = millis();
}

  • Se usares interrupção tens de garantir que o sinal é limpo... e depois ter uma rotina de interrupção muito, muito pequena... essencialmente algo assim:
void interrupt(){
   cont++; 
}

Qual o tipo do seu sensor PNP?
É de 3 fios ou de 4 fios?

Poste um link mostrando o seu sensor.
Se postar um esquematico do seu projeto nos ajudará a ajuda-lo.

É de 3 fios. ( https://produto.mercadolivre.com.br/MLB-2102879792-sensor-indutivo-m12-na-5v36v-npn-pnp-lj12a3-4-z-bx-by-_JM ) Foi exatamente esse q comprei.

LEFIRCKO
LJ12A3-4-Z/BY

Provavelmente este é o esquemático do seu sensor PNP:

Veja que entre o pino de saída, (preto) e o 0V (Gnd, Azul) tem internamente um resistor de 10 K.

image

O que seria esse Pull Up? Não to conseguindo ter uma consistência da leitura de voltas.

Como ligaste o sensor? Consegues ter leituras correctas mexendo o sensor à mão?

Como estás a verificar a leitura do sensor?

experimentaste o que sugeri acerca de retirar Strings do código?

Que velocidades estás a usar para testar a leitura de velocidade?

Bubulindo, o que percebi é que usando o Arduino IDE o serial monitor funciona bem, mas a aplicação que fiz em Delphi ta atrasando as leituras. Vou ver o que consigo mudar aqui. Eu tenho dois arduinos, um em cada porta serial, ja para evitar perda de leitura em processamento identico. Mas to apanhando aqui... vou fazer mais uns testes e depois digo o resultado.

O que é que essa aplicação feita em Delphi faz? Atira dados pela porta série que interrompe o processador?

Dito isto há mais perguntas que fiz.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.