Interrupt + Debounce sensore induttivo

Salve a tutti, sono un nuovo utente già al mio secondo post. Per un progetto già descritto precedentemente, sto gestendo con arduino il movimento di una sorta di ascensore azionato con un motore 24Vdc 33W, il cui posizionamento dovrebbe essere regolato da un sensore induttivo. Dico dovrebbe perchè non sempre avviene ciò che vorrei. In particolare il sensore in questione di cui vi allego il datasheet, viene collegato al pin 2 di arduino ed il segnale in questione gestito come interrupt stoppa il motore non appena riscontra un ostacolo metallico. Ovviamente visto che il sensore è alimentato a 12V, ho frapposto un partitore di tensione per adattare i livelli e dare in input ad arduino 5V.

Purtroppo però non sempre va tutto liscio ed il motore si ferma in maniera random. Vero è che tutto intorno il sensore è presente del metallo, ma il range di discriminazione è 2-3mm.

Ho misurato con un multimetro una piccola variazione di tensione sull'uscita del sensore, sufficiente però a far partire l'interrupt, che io ho settato in modalità RISING. Come potrei risolvere tale problema? E' possibile definire una soglia più alta, dovrei fare un debounce del segnale proprio come in uno switch? E se si come hw o sw? Via software mi hanno consigliato la funzione mills(), ma la mia macchina dovrà stare accesa anche parecchio tempo.

Confido in un vostro aiuto.

Il codice che ho utilizzato è il seguente:

volatile int Status;
volatile int oldStatus=LOW;
int count_piano=0;
int piano = 1;
volatile int IRsens=LOW;

void setup ()
{

/* ===========  INTERRUPT SENSORE INDUTTIVO PIN 2  ========================= */                          
      attachInterrupt(0, pwm50, RISING);   // inserito nel setup 

}

void loop ()
{
  if (Status != OldStatus)
  {
      count_piano++;
      if(count_piano == piano)
      {
          //fermati....
        count_piano=0;    
      }
      OldStatus=Status;
      delay(50);
  }

void pwm50()
{  
  IRsens = !IRsens;
  Status = IRsens;  
  return;        
}

come viene pilotato il motore e per favore il datasheet. Ciao Uwe

Ecco il link al datasheet

Il motore viene pilotato da un ponte H di cui allego schema.

E’ possibile fare un debounce di un segnale di interrupt senza usare mills()?
O è meglio che utilizzi una soluzione hardware tipo un RC ?

Grazie

H-bridge.gif