Problema con lettura distanza Sonar SRF08 e Arduino Mega

Ciao ragazzi,

ho postato nella sezione inglese, ma nessuno mi ha saputo aiutare, spero che voi ne sappiate qualcosa in più di me e che mi sappiate dare qualche spunto per risolvere il mio problema. :slight_smile:

Praticamente, ho seguito questa guida per connettere il mio SRF08 alla scheda Arduino Mega 2560:
http://pharos.ece.utexas.edu/wiki/index.php/Attaching_the_SRF08_Ultra_Sound_Range_Finder_to_the_Arduino_Mega_-_09/02/2011

Ed ho usato lo sketch riportato al fondo della pagina del tutorial per testare il funzionamento del sonar.
Nel datasheet, c'è scritto che questo sensore arriva a rilevare oggetti sino a 6 metri di distanza, tuttavia, quando lo testo ed apro Serial Monitor, di default mi porta una distanza di 50-52cm massimo e diminuisce solo se gli avvicino un oggetto a distanza minore.

Non capisco perchè mi rilevi qualcosa a 52cm se non c'è nulla.
Forse devo settare qualcosa io?
Il sonar se non trova nulla all'interno del suo range, non dovrebbe non segnalare alcuna distanza?

Questo è l'output di una prova:

Light: 21
Range: 52cm <- apro serial monitor e senza che ci siano oggetti a meno di 52 cm lui già mi visualizza questo dato
Light: 21
Range: 51cm
Light: 21
Range: 51cm
Light: 21
Range: 51cm
Light: 21
Range: 11cm <- avvicino un oggetto a 11cm
Light: 21
Range: 8cm <- lo avvicino ancora di più
Light: 21
Range: 52cm <- lo tolgo e ritorna a misurarmi 52cm
Light: 20

E' un problema tipico di questo sonar, e del SRF10, che per via dell'elevata sensibilità e dell'elevato angolo di apertura del cono sonar capta facilmente echi provenienti da pavimento, muri e altri oggetti vicini falsando la lettura riducendo drasticamente la distanza massima rilevabile.
Per risolvere basta impostare il gain del sonar, guarda il dastasheet, ad un valore minore di quello massimo utilizzato come default.

Ti ringrazio per la risposta e per lo spunto.

In effetti, avevo visto che nel datasheet si parlava del gain, ma pensavo che fosse slegato dal problema che stavo avendo.

Ho provato ad abbassare il guadagno e portarlo ad un valore intermedio:

      Wire.beginTransmission(srfAddress);             // Start communicating with SRF08

      Wire.send(cmdByte);                             // Send Command Byte

      Wire.send(0x51);                                // Send 0x51 to start a ranging in cm

      Wire.send(0x20);                              // <-- gain abbassato a 395
     
      Wire.endTransmission();
   
      delay(100);                                     // Wait for ranging to be complete

ma non ci sono stati miglioramenti perchè il range è sempre di 50-52cm al massimo.

Ho provato a testarlo in giardino, in uno spazio aperto e al massimo riesco a leggere un valore massimo di 60 cm.

se sei all'aperto prova a puntarlo verso l'alto

Sì, sì ovviamente l'ho puntato verso l'alto, ma nulla da fare.

A questo punto è molto probabile che il sensore non funzioni in modo corretto.

Alla fine sì, il sensore non funzionava correttamente.

Ne ho comprati altri due e questi funzionano benissimo.