Go Down

Topic: Trasmissione dati (Read 3440 times) previous topic - next topic

g.paolo92

Salve a tutti!
Sono alle prime armi con l'utilizzo dell'arduino e avrei bisogno di un consiglio per il progetto che sto realizzando. Si tratta di un progetto scolastico con funzione puramente dimostrativa quindi non mi interessa che sia ottimizzato alla perfezione. Devo realizare una simulazione di una trasmissione tramite fibra ottica, utilizzo due Arduino uno, il primo trasmette una serie di bit con un led rosso (acceso=1 spento=0), mentre il secondo ha collegata una fotoresistenza collegata ad un partitore di tensione che riconosce il valore ricevuto. Se faccio eseguire il programma utilizzando un solo Arduino tutto funziona perfettamente, se uso due Arduino separatamente sincronizzo la trasmissione utilizzando led e fotoresistenza, i microcontrollori si scambiano un po' di bit ma la trasmissione ha un lieve ritardo e dopo poco viene sfasata completamente.
Qualcuno ha idea di come si possa sincronizzare perfettamente la trasmissione? Tenendo conto che i due microcontrollori possono comunicare solo con il led e una fotoresistenza.
Grazie in anticipo.

uwefed

#1
Jan 14, 2011, 04:43 pm Last Edit: Jan 14, 2011, 04:44 pm by uwefed Reason: 1
2 cose:
* usa al posto della fotoresistenza un fototransistore perché é piu veloce.
* Per secondo usa un protocollo che ti evita questo sfasarsi:
o un protocollo tipo RS232 con uno o 2 bit di start e 1 di paritá e uno di stop
oppure un protocollo tipo codifica Manchester nel quale é codificato anche un segnale di clock.
http://it.wikipedia.org/wiki/Codifica_Manchester

Ciao Uwe

g.paolo92

Molte grazie provvederò subito a usare un fototransistor, comunque credo che il problema della sincronizzazione persista anche usando la codifica manchester, perchè per ogni bit trasmesso dovrei far "leggere" il valore al fototransistor 2 volte al posto che una sola, se la lettura è sfasata rispetto alla trasmissione il fototransistor potrebbe comunque rilevare uno 0 invece di un 1 o viceversa...

uwefed

Ciao g.paolo92

Non necessariamente.

Se sicronizzi a ogni passaggio di stato, l' errore rispetto alla durata del pulso é molto piccolo e percui irrilevante.

Esempio: periodo 1mSec, differenza tra il trasmettitore e ricevitore 0,05msec ogni msec. (5%)

Diciamo un bit dura 1msec. Se controlli se dopo 1 msec arriva un cambio e estendi quasto tempo da 0,9 a 1,1 mSec un errore di 0,05mSec non ti fa niente.

Se non risincronizzi e lascia andare vedrai che dopo 20 msec l' errore sará di 1msec e percui nella grandezza del periodo del segnale. in questo caso non leggi piú valori giusti.
Il codice Manchester decodifica un 0 in un imulso e pausa corta e un 1 in un impulso e pausa lungo (o viceversa se mi sono sbagliato) Con errori di velocitá tra trasmettitore e ricevitore abbastanza grandi puoi comunque ricavare i dati giusti. parliamo di errori di ca metá del periodo corto.

Ciao Uwe

uwefed

Ciao g.paolo92
Ma avete giá pensato di inviare i dati usando la libreria softserial e mettendo al posto del cavo tra i 2 Arduini il LED e il fotodiodo?
Ciao Uwe

g.paolo92

Ciao...
Non sapevo dell'esistenza della libreria softserial, oggi ho guardato un esempio che la utilizzava ma non credo che lo saprei adattare al mio problema. Per quanto riguarda il fotodiodo mi è stato sconsigliato perchè genera una corrente molto bassa che necessita di un amplificazione.
Se qualcuno mi può mostrare come usare la libreria softserial lo ringrazio anticipatamente.

uwefed

Ciao g.paolo92
Non parlavo di un fotodiodo, ma di un fototransistore. Il collegamento é lo stesso come con una fotoresistenza. Il emettitore va a massa e il collettore al entrata Arduino e alla resistenza pull up di 10kOhm.
Per il diodo infrarosso basta collegarlo con una resistenza di 330 Ohm a +5V.
Ciao Uwe

g.paolo92

Nessuno potrebbe fornirmi un esempio di utilizzo della libreria softserial con due arduino?? Perchè trovo solo esempi di comunicazioni tra arduino e un altro disposistivo diverso. Grazie.

uwefed

#8
Jan 17, 2011, 05:30 pm Last Edit: Jan 17, 2011, 05:31 pm by uwefed Reason: 1
è la stessa cosa.
Non é importante da dove vengono i dati.
Su un Arduino mandi i dati e sul altra le ricevi.
Ciao Uwe

g.paolo92

Sono sempre io, trasmissione tutto ok. Per la ricezione dato ke la libreria SoftSerial usa gli ingressi digitali dell'arduino (prima usavo gli analogici con un partitore di tensione) ora come faccio a collegare la fotoresistenza agli ingressi per fare in modo che il microcontrollore sappia interpreatre Luce = 1, Buio = 0?
Grazie.

uwefed

Comprati un fototransistor.

Poi basta che metti una resistenza tra massa e entrata e il fototransistore tra entrata e +5V. Il colletore rivolto ai 5V, la base (se ce l'ha) libera e l'emettitore verso l' entrata.

Puoi prenedere se ne hai recuperati anche un sensore ottico a forcella. Normalmente sono dei fototransistori che si sfilano ( la parte D come detector)

Ciao Uwe

g.paolo92

Grazie :)
Per ha desso ho provato con la fotoresistenza ed un partitore e funziona.
Il fototransistor lo trovo senza problemi a scuola, per il diodo laser mi sa ke non sarà possibile per via del costo. Grazie Comunque.

uwefed

Chi parlava di laser?
Ciao Uwe

g.paolo92

Perfetto funziona tutto..grazie :)
Ora però ho un'altra domanda, se dal PC voglio mandare all'arduino dei dati, ad esempio 10 numeri interi, come posso trasferirli utilizzando le istruzioni Serial.read(), Serial.available()....mi spiego meglio, è possibile passare dal PC all'arduino un'array di byte?
Grazie :)

uwefed

Sulla seriale passi dei numeri. Poi sta a Te nella programmazione interpretarli come valori, caratteri, array ecc.
Ciao Uwe

Go Up