comunicazione seriale...

Salve a tutti cercherò di spiegare il mio problema xk avrei bisogno un po di aiuto, io sto cercando di realizzare un impianto di domotica in grado di gestire un appartamento utilizzo arduino duemilanove ed una ethernet shield sono riuscito a creare dei weberver risiedenti nella micro sd e da cui riesco a gestire uscite, temperature delle stanze ecc... adesso il mio problema è ke vorrei creare un nodo centrale con un arduino e ethernet shield e nelle varie stanze diversi arduino che comunicano in seriale con quello centrale. Il problema è ke io riesco ad inviare e ricevere stringhe tramite tx ed rx però nascono i primi problemi quando devo inviare e ricevere piu segnali contemporaneamente. Comprendo ke forse non sono stato molto chiaro ad esprimermi però sono disposto a dare chiarimenti ed a postare esempi di codice di quello ke ho gia realizzato ringrazio tutti coloro che risponderanno.

Ma dici far comunicare più dispositivi contemporaneamente? Con la seriale non puoi, la seriale può far comunicare 2 soli dispositivi a volta.

Inoltre se pensi di collegare i nodi via cavo ti conviene iniziare a prendere in considerazione il bus RS485, è una specie di "seriale estesa" perché può connettere dispositivi distanti centinaia di metri, tutti collegati tramite 2 fili. Basta sviluppare un protocollo di trasmissione per far parlare i vari nodi.

Intanto grazie per aver risposto, be sarebbe molto interessante poter utilizzare la comunicazione rs485 pultroppo io non ho molte conoscenze su come potrei iniziare hai magari qualche link da darmi o qualche linea base da seguire ? perchè dando un occhiata a quello che viene fuorisu google non è molto chiaro. Grazie in anticipo.

Puoi fare in 2 modi:

  1. RS485 con la seriale
  2. tutti con la shield ethernet

Soluzione 1
In pratica usi il solito protocollo seriale (RS462) ma con degli accorgimenti particolari perché questo ha delle limitazioni.
Ti servono però degli Arduino Mega perché hanno più di 1 porta seriale (ne hanno 4) ed a te ne servono 2 per ogni Arduino.
Una soluzione semplice è quella di usare un ArduinoMega come switch come indicato nell'immagine qui sotto


Clicca per ingrandire il diagramma

In sostanza il microcontrollore situato nel disimpegno serve a dirigere il traffico di ciascuna stanza verso il server e viceversa. Ogni connessione sfrutta una porta seriale.
Se ogni terminale (le stanze da letto e il bagno) utilizzano una sola connessione, sarà sufficiente utilizzare un Arduino che dispone di una sola porta seriale, altrimenti, se questi fungono da "ponte" per un altro nodo.
Ad esempio:

Le domande nascono spontanee:
Come fa il Server a comunicare con Bagno_2?

Serial.print("Bagno_2|Aria_forzata_OFF"); // Spegne il motorino che ricambia l'aria nel Bagno_2

Come arriva il comando fino a Bagno_2?
Il server invia la stringa al Disimpegno. Questo memorizza il messaggio e vede cosa c'è dall'inizio fino al carattere "|".
In base al nome della destinazione, il Disimpegno invia dalla sua seconda porta seriale il comando a Letto.
Letto, a sua volta, vede se la destinazione è Letto oppure Begno_2. In questo caso spedisce il pacchetto a Bagno_2 utilizzando Serial_2.

Con questo metodo si identifica nella prima parte del messaggio l'indirizzo a cui mandare l'informazione e nella seconda parte l'informazione vera e propria.

Soluzione 2
Tutti gli Arduino hanno una shield Ethernet ed un proprio indirizzo IP.
L'Arduino Disimpegno non è obbligatorio in quanto è sufficiente comprare un semplicissimo HUB.

Scegli la soluzione che più ti aggrada. :wink:

Mi permetto di dissentire dal collega tonywhite XD

Se si struttura la connessione dei nodi nel modo che hai esposto tu allora bisogna aprire almeno 2 seriali, una verso il nodo precedente ed una verso il nodo seguente. Non necessariamente serve un Arduino MEGA perché con la SoftwareSerial si può creare una seriale virtuale gestita via codice, quindi anche con un Arduino UNO puoi avere 2 seriali.

Ciò che non mi piace è proprio questa connessione "seriale", cioè a cascata. Se un nodo parte, parte tutta la connessione.
Invece il bus RS485 permette di tenere tutte le periferiche agganciate contemporaneamente e con 2 soli fili ed un chip da pochi soldi, quindi senza dover usare componenti costosi. Inoltre basta assegnare un ID ad ogni nodo e creare un piccolo protocollo: quando il master invia un comando, basta che faccia precedere il comando dall'IDE del nodo, e solo lui risponderà. In più l'aggiunta di un nuovo nodo è semplice: basta tirare i 2 fili e mettere un nuovo dispositivo, programmandolo con un ID che non è ancora presente nella rete.

Obiezione accolta. XD
Si risparmia sulla seriale con SoftwareSerial, oppure sulla manutenzione e la stabilità della rete con le shield ethernet.
Simpatizzo più verso la seconda soluzione (anche se al momento sto seguendo un thread in cui ho dei problemi con quest'ultima :P)

Un altro fatto che va tenuto in considerazione è il prezzo: dotare ogni nodo di Arduino+Ethernet porta ad un grosso sacrificio economico $)
Se i nodi devono controllare cose semplici, ad esempio gestire 1 interruttore, leggere la temperatura, ecc... conviene realizzare piccoli circuiti con 1 Attiny ed un 75176 (per l'RS485) più i componenti necessari all'alimentazione ed alla gestione della sua utenza. Risparmio di soldi di un fattore 50 :wink:

[OT]
I nanetti conquisteranno il mondo !!!! :stuck_out_tongue_closed_eyes:
Tanto quanto il mignolo con il prof

[/OT]

oltre al ricordo dei mie due cari cugini sorcetti, concordo con leo, il protocollo più semplice è rs485, eventualmente potresti usare dei moduli rf e la VirtualWire

Grazie a tutti per aver risp. Tra tutte le idee proposte senza dubbio quella di utilizzare il protocollo 485 nella mia ignoranza mi sembra il più valido e funzionale xo pultroppo io non ho molte conoscenze quindi sarei molto grato se qualcuno ke magari lo ha gia utilizzato mi darebbe un piccolo aiuto xk gestire il tutto con i nodi collegati tramite due fili con RS485 sarebbe propio un sogno.

danilom93:
Grazie a tutti per aver risp. Tra tutte le idee proposte senza dubbio quella di utilizzare il protocollo 485 nella mia ignoranza mi sembra il più valido e funzionale xo pultroppo io non ho molte conoscenze quindi sarei molto grato se qualcuno ke magari lo ha gia utilizzato mi darebbe un piccolo aiuto xk gestire il tutto con i nodi collegati tramite due fili con RS485 sarebbe propio un sogno.

Ci sono tante discussioni in merito, basta cercare RS485 oppure 75176.
Una è questa:
http://arduino.cc/forum/index.php/topic,92303.0.html
E' la prima trovata. Anche su internet c'è un sacco di roba, l'RS485 è molto usato

con il 485 mi son trovato bene con le librerie SimpleModbusMaster/slave

se ti serve qualche esempio te lo posso mandare senza problemi..

altre info utili le trovi su:

http://arduino-info.wikispaces.com/RS485-Brick

ho anche parecchi max488 che però non sono riuscito a farli andare, appena ho un po' di tempo ne distruggo qualcuno :smiley: