Ciao a tutti, dovrei collegare insieme 5 atmega fra di loro, ho pensato di dotare ognuno di questi di una coppia di TX/RF 433Mhz dei cinesi solo che a suo tempo mi era stato detto che non ci possono essere più trasmettitori alimentati assieme o si disturbano anche se non stanno dicendo nulla.
Se in ogni nodo metto un transistor per collegare/scollegare la massa del trasmettitore e lascio sempre collegato la ricevente potrebbe funzionare?
Devo per forza lasciare un TX su ogni nodo perchè li uso da ripetitori visto che la casa è grande ed ha dei muri molto spessi...
Grazie mille
Gli XBee lo fanno giá di loro (sia poter fare reti che reti mash (ripetitori)). Costano molto di piú é questo é un svantaggio notevole.
Per spegnere il modulo di trasmissione é meglio scollegare il positivo con un Mosfet.
Ciao Uwe
Con li xbee mi viene a costare un occhio! Il TX consuma 50ma alimentato a 12 volt, un transistor potrebbe bastare no? Devo usare però un PNP+NPN per interrompere il positivo?
Ciao,
potresti usare gli nRF24L01+, viaggiano sui 2.4 Ghz e supportano fino a 6 slave e 1 master contemporanei.
Se ne parla anche qui:
più TX dubito che si incasinino tra loro se NON trasmettono. quando trasmettono è un altro paio di maniche, e si usano algoritmi detti "di rilevazione collisioni", per intenderci vengono usati anche dai protocollo ethernet e wifi, e molto probabilmente anche da xbee e nfr, semplicemente fanno questo processo in modo trasparente
Ciao Lesto, se uso la libreria VirtualWire ho il controllo del checksum ma essendo solo in una direzione non mi dice se è ricevuto o no, io pensavo di far inviare il comando assieme ad un numero progressivo e chi riceve rimanda indietro una stringa con il numero del comando precedente confermandolo, in questo modo posso mandare 10 volte il comando ma se ha lo stesso "ID" me lo esegue una volta sola...
Per le collisioni non saprei come fare, cioè controllo se qualcuno sta già "parlando" in questo caso non invio, ma se due iniziano a parlare insieme come si fa? un delay random?
@pitusso: ero più propenso ai modulini cinesini sulla 315 perchè ne ho già un paio
![]()
ti consiglio di osservare su wikipedia come sono fatti i pacchetti TCP e UDP, ti saranno molto d'aiuto.
probabilmente ti serve:
1 byte identificativo del trasmittente (?)
1 byte identificativo del ricevente
1 byte progressivo del messaggio (di questa accoppiata trasmittente/ricevente)
1 byte lunghezza/tipologia del messaggio (io farei che se questo byte = 0 allora segue un altro byte con un comando speciale, come reset della comunicazione, etc..)
X byte di messaggio
Per le collisioni non saprei come fare, cioè controllo se qualcuno sta già "parlando" in questo caso non invio, ma se due iniziano a parlare insieme come si fa? un delay random?
questo è il sistema della ethernet ![]()
ascolta sempre, quando arriva un dato azzera un timer. Quando questo timer supera un tot allora la "via è libera" e il buffer in uscita viene svuotato, se no aspetta. (normalmente questo timer è sempre in via libera, se no vuol dire che c'è congestione nella rete e va rivisto qualcosa.
Grazie mille lesto, mi sa che aprirò più avanti un'altra discussione, tanto i 40
Giorni di spedizione dalla Cina non li accorcia nessuno!
Intanto peró ti chiedo come faccio a dividere una stinga di byte in ingresso? Cioè come libreria userò VittualWire (mi sembra si chiami così), che mi manda un byte per volta, peró immagino di dover implementare un escape, cioè se il progressivo diventa uguale a 10 sono due byte non uno, o sbaglio? In php uso la funzione explode, ma non mi sembra di averne vista una simile per arduino, o almeno c'è ma solo x le stringe!
una "stringa" di byte in ingresso è un array di byte, esattamente come una stringa è una array di char (da non confondere con String che è una classe che contiene un array di char e un pò di funzioni di utilità)
Quindi tu hai già tutto splittato ai minimi termini... a meno che non vuoi lavorare sui singoli bit ![]()
Io intendevo "String", quindi dici che non mi conviene convertire tutto in String ma lavorare sui singoli byte?
Cioè non so come sia meglio procedere visto che non mi è mai capitato di dover inventare un protocollo, anche a livello di prestazioni, "String" essendo una classe è più impegnativo a livello di risorse da gestire?
sì, le classi sono più impegnative, comunque string ha il metodo con coi ti restituisce l'array di char, così ci puoi lavorare direttamente
Ciao a tutti, mi sono arrivati gli RF Cinnesi.
Mi sembra non facciano particolare interferenza l'un l'altro lasciando tutti i TX accesi, comunque per non rischiare, posso alimentarli direttamente da un pin dell' arduino? Subito pensavo di metterci un transistor ma poi guardato le specifiche ho trovato:
B? Working current: max?40mA (12V), min?9mA(3V)
Quindi posso collegare il positivo ad un pin e "accenderelo" comodamente quando mi serve?
uhmm 40mA a 12V sono 480mW, a 5v sono 96mA... non credo proprio che arduino li regga.
E io che pensavo che il massimo assorbimento si avesse con 12 volt!
La trovata per fregare quelli come me xD
Vado con un NPN sul negativo giusto?
in effetti è così, non credo che avrai mai quell'assorbimento a 5v ma di certo non sarà nemmeno 40mA
Con un tester un po' preciso riesco a misuare in modo attendibile quanto assorbe? Perchè volevo rendere il tutto più piccolo possibile e mi sa briga metterci un transistor
![]()
metticelo che non fa mai male, e anche in versione SMD son facili da saldare (formato sot-23)
Allora andata per il transistor, meglio metterci un componente in più che dover smontare tutto dopo perchè si bruciano le uscite... poi se tutto funziona posto un video o qualche foto ![]()