I2C per SRF02 (ultrasuoni)

metto il pm tra me e federico quì sul forum per cominciare una discussione che possa giovare ad altri nelle mie stesse condizioni.

ciao federico, ho letto sul forum che possiedi (e quindi ritengo tu abbia utilizzato) un sensore ad ultrasuoni SRF02.

Io l'ho acquistato da poco, ma non ho ben capito come funziona il sistema I2C.
L'unica cosa che ho capito finora è che mi basta collegare solo due pin: SDA al pin A4 e SCL al pin A5.
Siccome il sistema I2C consente di gestire tramite quei due pin molti sensori (ma io ne ho soltanto uno) è necessario attribuire ad ognuno un "nome" o meglio un "indirizzo"...ecco questa è la prima cosa ad essere poco chiara per me.
Per le librerie Wire ho scaricato le Grapelab, ma non mi è chiaro a cosa servano...

Posso chiederti delucidazioni in merito, ho un esame tra non molto e sto proprio ...nei guai.

P.S. anche se a volte posso usare dei termini più o meno appropriati sono un niubbo di primo pelo, su molti argomenti di elettronica e di programmazione completamente impreparato.

l'obiettivo della discussione è programmare in modo semplice un SRF02 in modalità I2C ed averne il valore sulla finestra di comunicazione seriale (poi ognuno potrà farne quello che vuole).

per farlo sarà meglio definire prima
-cos'è, a cosa serve e come si usa una libreria (in genere la gente ci mette i libri, noi invece la usiamo per far andare i dispositivi collegati ad ardu)
-cos'è il sistema di comunicazione I2C, come funziona e di cosa necessita per funzionare
-le funzioni da inserire nello sketch, e più in generale un approccio semplice alla programmazione di ardu per l'uso del sensore in questione
(se dimentico qualche argomento aggiungetelo voi;) )

intanto metto il link a Grapelab, il blog di un ragazzo tedesco sul quale si possono trovare delle librerie Wire che potrebbero servirci in futuro.
http://www.grapelabs.de/index.php?id=51

Spero nel contributo di chi ne sa più di me/noi per creare qualcosa che possa essere fruito anche da altri in futuro. ;D

ecco alcuni link utili

descrizione del sensore
http://www.pishrobot.com/files/products/datasheets/srf02.pdf

I2C su Wikipedia

questo topic è l'ottavo risultato su Google per la ricerca "srf02" ...e non ci abbiamo ancora scritto niente!

Vado un pochino a memoria per quello che riguarda quel sonar perche' e' tardi... Sostanzialmente funziona via i2c, un bus che funziona con due fili, sda e scl. Puoi attaccare piu' sensori su quei due fili, e ognuno deve avere un indirizzamento diverso. Ovviamente devi anche alimentare, in questo caso, il tuo sonar (+5 e gnd)

Il sistema i2c prevede degli indirizzi, una parte dell'indirizzo esadecimale e' fissa per ogni tipologia di chip, e la leggi dal datasheet, un'altra parte e' impostabile con tre pin. Il sonar in questione e' invece un po' + particolare, per cambiargli l'indirizzo devi riprogrammarlo (su grapelab in fondo c'e' scritto come) ma il suo indirizzo base e' 0x70. A meno che tu non ne abbia due, non cambiarlo...

Se carichi la libreria di grapelab, che funziona bene, e utilizzi il sistema d'esempio, dovresti avere un qualcosa di funzionante in pochi minuti.

PS: sul bus i2c dovresti mettere due resistenze di pull-up, ovvero due resistenze connesse tra +5 e sda e +5 e scl. Il valore varia a seconda di quanti e quali sensori attacchi al bus, con quel sonar da solo (lo ricordo xke' ho fatto un progetto su quello) avevo usato due resistenze da 3.3k

Ciao! Fede

sono riuscito a farlo andare con le librerie di grapelab.

ho usato 1.9kohm come resistenza pull-up.
cosa cambia se si sbaglia il valore di una resistenza pull up? la loro funzione dovrebbe essere quella di evitare un "valore fluttuante", in altre parole di far vedere sempre qualcosa ad arduino, anche quando il dispositivo non trasmette. Ma per arduino che siano 1.9kohm o 3.3kohm cosa cambia? credo nulla di rilevante, ma una conferma sarebbe chiarificatrice.

il motivo per cui non funzionava era ovviamente una fesseria da vergogna: non lo alimentavo!!
avevo letto delle pagine sul protocollo I2C e pensavo che bastassero quei due pin, e che il +5V e in Gnd fossero per la comunicazione in modalità seriale. XD
Collegando il pin +5V e Gnd ai corrispettivi pin su arduino, e SDA ed SCL ai pin analogici 4 e 5 di arduino (mettendo in mezzo delle resistenze di pull up) il sensore funziona, e grazie alla libreria di grapelab mi restituisce sulla porta seriale il valore rilevato (del quale, programmando, posso farne quello che voglio).

Grazie Federico.
Ci rivediamo alla prossima novità.

credo che il principio per le pull-up sia di vedere dal datasheet del componente quanta corrente serve per tenere up, o down, un ingresso. con questo valore e con la tensione di alimentazione si calcola la resistenza, ma sono concorde che non e' un valore critico perche' parliamo veramente di piccolissime correnti. Se invece oltre a tenere up o down un ingresso lo si deve contemporaneamente usare per altro allora entra in gioco l'impedenza che si creerebbe sul circuito esterno, sia esso sensore o altro, che potrebbe alterarne il funzionamento.

E' come quando si vuole usare il pin13, che essendo usato gia' per il led onboard, puo' in alcuni casi dare problemi.

approfondimenti :slight_smile: