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.