Problema con ADXL345 e THRESH_ACT/THRESH_INACT

Salve a tutti, da un po di tempo mi sto cimentando nell'elettronica e in particolare nella programmazione di microcontrollori. Essendo completamente a digiuno in materia ho deciso di cominciare con un Arduino UNO, sia per la semplicita' nella programmazione, sia per la grande quantita' di tutrial e informazioni sulla rete. Dopo avere preso confidenza con diversi esempi e semplici programmini mi sono convinto ad intraprendere un progetto "un po" piu' ambizioso... Ho comprato una macchina radiocomandata e l'ho modificata in modo da essere azionata dall'Arduino, ho aggiunto anche un sensore a ultrasuoni per rilevare gli ostacoli e ho a disposizione altri sensori che vorrei pian piano aggiungere (magari passando a un Arduino Mega). La macchina in questione ha 2 motori dc, uno per il movimento avanti/indietro e uno per il movimento delle ruote anteriori (destra/sinistra). Il problema principale in cui mi sono imbattuto e' calibrare la durata della frenata visto che per "frenata" si intende un'inversione di marcia che causa lo slittamento delle ruote e che deve durare SOLO fino a quando la macchina non e' completamente ferma. Inizialmente avevo pensato di utilizzare il sensore ottico di un vecchio mouse puntato a terra per rilevare il movimento, ma dopo piu' di 2 mesi di messe a fuoco con diverse lenti (per compensare la distanza del sensore da terra) e un paio di esaurimenti nervosi ho deciso di cambiare strategia... Ed eccoci finalmente al punto... Ho a disposizione un ADXL345 e voglio utilizzarlo per rilevare il benedetto movimento sfruttando un'interrupt per modificare una variabile che indichi la presenza o meno di movimento e un'altra che indichi la direzione del movimento. Per fare questo pero' devo in qualche modo filtrare le vibrazioni che la macchina produce, cosi' ho provato a misurarle ottenendo dei valori che vanno da -15 a 25. L'accelerometro e' settato con una sensibilita' di +/-4g alla risoluzione di 10bit , quindi stando al datasheet (se ho capito bene cosa sono i dannati LSB) dovrei avere un disturbo di (15+25) * 7.8 = 312mg (vedi datasheet Table 1 -> Sensitivity). Per far scattare l'interrupt solo in seguito al movimento reale della macchina devo quindi impostare questo valore nel registro THRESH_ACT (e quindi anche THRESH_INACT) . Dato che per questi registri il rapporto e' 1 LSB = 62.5mg, il valore che imposto e' 312 / 62.5 = 4,992 = 5. Il punto e' che l'interrupt continua a scattare per le sole vibrazioni... dove sbaglio??

P.S.: le misurazioni sono fatte considerando il solo asse Y che, per come e' montato l'accelerometro, e' quello che mi segnala il movimento avanti/indietro.

Per frenare perché non fai:

  1. non metti in corto il motore col Ponte H ( entrambi i mezzi ponti pilotati a H o L)
  2. spegni il ponte H e metti una resistenza in paralello al motore (ponte radrizzatore, Transsitor e resistenza il Transistore lo piloti attraverso un optocoppler) . Cosí quello funge da generatore e frena dolcemente.
    Ciao Uwe

Ciao Uwe! mi hai dato un bel po di materiale da studiare, pero' a una prima occhiata sembra una soluzione molto interessante :D. Grazie mille!!! Mi resta cmq la curiosita' riguardo i calcoli con l'accelerometro, quindi se qualcuno sa darmi una risposta gliene sarei molto grato. Tra l'altro penso che anche usando il metodo suggerito da Uwe mi servirebbe lo stesso conoscere quando la macchina e' in movimento o meno.