Conta impulsi da candela

Salve a tutti vorrei realizzare un conta impulsi dal filo della candela della mia vespa ho realizzato un circuito ma non funziona, sono qui per chiedere un aiuto con un circuito funzionante magari già collaudato

grazie.

Sarebbe utile sapere a che punto sei: come leggi gli impulsi, con che Arduino, come è il programma, dove è che "non funziona", eccetera...

Prova a leggere qui:
Leggere impulso cavo candela - Italiano / Software - Arduino Forum

questo é lo circuito che ho utilizzato


e questo il codice

const int ignitionPin = D2;
const int ignitionInterrupt = 0;
const unsigned int pulsesPerRev = 1;
unsigned long lastPulseTime = 0;
unsigned long rpm = 0;
int rpm_int;
int rpm_to_disp;
unsigned long interval;

void setup() {  

  Serial.begin(9600);  

  pinMode(ignitionPin, INPUT);
  attachInterrupt(ignitionInterrupt, &ignitionIsr, RISING);
    
}

void ignitionIsr()
{
  unsigned long now = micros();
  unsigned long interval = now - lastPulseTime;
  if (interval > 5000)
  {
     rpm = 60000000UL/(interval * pulsesPerRev);
     lastPulseTime = now;
     //rpm_int=int(rpm);
     Serial.println("");
Serial.print(rpm);
Serial.print(" RPM");
  }  
  
}

void loop() {
 
  noInterrupts();
  rpm_to_disp=int(rpm);
  interrupts();
delay(500);
    } 

ho un arduino nano esp32

cerco peroò proprio un circuito differente in quanto questo non funziona correttamente. provo a dare un occhiata a c'ho che mi hai linkato grazie

troppa roba nella ISR

e lo schema mi sembra povero

Concordo al 100% ... fare delle Serial.print() in una ISR è un grave errore !

Guglielmo

... il riferimento nel post #2 riguarda uno schema che fu proposto in una discussione attorno al 2017 ... :roll_eyes:, in pratica è questo:

... ma, come dissi allora, è da verificare il funzionamento (L1 sono alcune spire di filo avvolte attorno al cavo candela).

Guglielmo

... ho ritrovato la vecchia discussione del 2017, furono proposte delle modifiche e delle soluzioni alternative ... si può leggere QUI.

Guglielmo

L'ho preso su una discussione qui sul forum insieme allo schema parecchio tempo fa.


provo a fare questo schema e vi aggiorno grazie :blush:

... che NON significa sia corretto. Da un post del grande Nick Gammon:

When writing an Interrupt Service Routine (ISR):

  • Keep it short
  • Don't use delay ()
  • Don't do serial prints
  • Make variables shared with the main code volatile
  • Variables shared with main code may need to be protected by "critical sections" (see below)
  • Don't try to turn interrupts off or on

Guglielmo

non intendevo quello, ma sono poco esperto non sapevo del grave errore compiuto.

1 Like

Come farebbe ad andare?

La tensione al primo diodo e' al massimo 7 decimi di volt

Dopo la caduta del secondo va a zero

Dopo il primo partitore 10k su 10k va a meta di zero

Il terzo diodo ci toglie ancora 0,7 volt di caduta

E ci vogliono almeno 0.7 volt per portare in conduzione il transistor

Magari provare con uno pnp. :slightly_smiling_face:

Perché???...

Hai ragione

Avevo interpretato male