Progetto di Domotica e Pc

Buongiorno a tutti, sono nuovo di questo forum, quindi vi saluto tutti e vi ringrazio per tutte le informazioni che già ho trovato tra i vostri post e commenti. Mi sono presentato nel post iniziale.

Ho già alcune esperienze con Arduino, ma per adesso tutte cose piccole e facili che sono riuscito a fare con guide e tutorial trovati in rete. Adesso però volevo cimentarmi in qualcosa di più serio e ho alcune cose da chiedere per fare le cose per bene. Intanto vi illustro il mio progetto, poi passerò alle domande.

Allora... si tratta di un progetto di domotica per un appartamento da ristrutturare, quindi anche relativamente facile da cablare e/o preparare per questo impianto. In linea generale il progetto che ho in mente sarebbe questo:

Hardware:
Parte generale:
Un arduino mega, shield ethernet, pc server PHP, sensore temperatura umidità esterna (DHT22), sensore fotoelettrico misuratore di luce, scheda 24 relé per valvole riscaldamento.

Per ogni stanza prevedo una configurazione base così strutturata:
Una scheda Arduino UNO, sensore di temperatura e umidità (DHT22), sensore PIR, scheda 4 relé, lcd touch screen nextion 2.4 UART.

Ogni arduino da “stanza”, dovrà “comunicare” col MEGA centrale, il quale avrà il suo sketch “standard” a bordo ma si interfaccerà col pc.

Veniamo alle domande:

  1. ALIMENTAZIONE: Vorrei dare a ogni arduino la stessa alimentazione (è giusto?) per avere la stessa GND e non avere problemi a leggere dati tra un arduino e l’altro. Cosa mi consigliate? Avevo in mente queste soluzioni: Alimentatore stabilizzato a 5V 25A (quello per i led per intenderci), con gli arduino collegati a stella. Può essere sufficiente? Oppure mi consigliate un 24V generale e uno step down per ogni arduino?

  2. COMUNICAZIONE: Devo scegliere, premetto che lo farei WIRED. Ho visto che un buon collegamento sembra essere RS485 (lunghe distanze e immune ai disturbi), ma sarebbe Half-duplex, mentre io lo preferirei Full-Duplex. QUesto collegamento lo farei col MAX485 (ho visto che potrei attaccare anche il pc a questa rete di Arduino). Altra possibilità sarebbe wireless con i moduli ESP8286 (01), ma non so la portata eventuale (20 metri e al chiuso non so se funzionano) e non so neanche se siano ful-duplex. Ultima possibilità che ho in mente (quella che preferirei) è l’uso del canbus che, a quanto ho capito, è un full-duplex, anch’esso può fare lunghe distanze e resiste bene ai disturbi. L’unico dubbio che ho è vedere qualche esempio simile alla mia configurazione per capire come impostare collegamenti, sketch e programmi, e soprattutto quali componenti devo usare. La shield che si trova su internet col MCP 2515 + MCP2551 costa piu di ogni singola “stanza” e volevo evitarla. Ho trovato questo: SN65HVD230 CAN Bus Transceiver Communication Module for arduino, secondo voi potrebbe andare? E col pc come lo interfaccio? Quanti fili occorrono per il collegamento?

Vi ringrazio tutti per le risposte che riceverò. Spero che possiate aiutarmi a fare luce su questi miei dubbi.

A presto.

Matleyx

1 - A causa dell'inevitabile caduta di tensione dei cavi, ti consiglio 12Vdc o 24Vdc per la linea di alimentazione su modulo DIN per un più facile ed elegante cablaggio.
Entrambe le soluzioni richiedono per ogni Arduino un convertitore DC/DC step down da 1A che riduca la tensione a 7-9V se intendi usare il jack di alimentazione. Se, invece, vuoi usare direttamente i 5V, devi inserire un filtro a T oppure a Pi Greco per eliminare l'ondulazione residua (ripple) dello switching che può alterare le misure analogiche.

2 - Sicuramente RS485 da 9600 baud in su è la soluzione più affidabile. visto che sei in fase di ristrutturazione, ma ti devi accontentare dell'half duplex a due fili intrecciati + schermo, a meno che non usi l'UART a bordo di Arduino (1 per la UNO e 4 per la MEGA) con cuoi puoi usare il full duplex a due coppie intrecciate + schermo. Come protocollo puoi usare il più semplice MODBUS.

Ciao Cyberhs

Per la prima domanda sei stato molto chiaro, ora vedrò cosa scegliere tra 12 e 24V, ma credo che opterò per il 24, visto che le eletrovalvole per il riscaldamento sono a 24V. A questo punto con un alimentatore faccio due servizi.

Per la seconda non ho capito, ma forse perché ho fatto confusione io all'inizio. Credo di aver "mescolato" hardware e software. Hardware: posso decidere se rs232, rs485, o wireless. E' giusto questo? Se si, una volta deciso l'hardware, posso decidere il protocollo, modbus, canbus ecc. E' giusto questo? Se è giusto anche questo, pongo le domande in maniera diversa: quale hardware mi permette il fullduplex? e di conseguenza, quale è il protocollo che sfrutta il full duplex?

Grazie per le risposte, rispondo intanto alla tua proposta di collegare via UART: premetto che non lo conosco, mi sto addentrando ora tra Hw/SW di comunicazione, ma la UART intendevo usarla per il touch screen su ogni singo arduino da "stanza", mentre per il MEGA non mi basterebbero (in totale gli arduino totali son una decina). Se dovessi cambiare touc screen, sempre da 2.4, che collegamento mi consigli?

Grazie ancora.

RS232 è da scartare perché è un vettore point to point, limitato oltretutto dalla distanza massima (20m).

Tra wireless e RS485 preferisco l'affidabilità del cavo.

A meno che tu non abbia bisogno di grande velocità, ti consiglio il collegamento half duplex a 2 fili che non richiede 4 fili, può essere usato senza usare l'UART di Arduino (pin 0 ed 1 della UNO) usando la libreria SoftwareSerial e si trovano facilmente schede che lo supportano.

Per il display touch screen dipende molto da cosa vuoi farci: hai bisogno di un pannello grande, capacità di far apparire immagini, basso consumo o cosa ?

Una volta chiarito questo punto, si sceglie il modello e la sua interfaccia, non prima.

Considera anche che dovrai farci stare tutto in una scatola che, se ad incasso, dovrà essere scelta con oculatezza.

Solo una considerazione ... parli di elettrovalvole ... suppongo siano in DC ... se vuoi usare lo stesso alimentatore anche per le logiche, lo puoi fare, ma consiglio di disaccoppiare molto bene le due linee in uscita dall'alimentatore, quella delle elettrovalvole rispetto a quella delle logiche ... una cosa tipo il circuitino che ti allego, che si puo realizzare anche su un pezzo di millefori, se ben fatto, o su uno stampato monofaccia ... eliminerai gia all'inizio il rischio che i disturbi ed i picchi causati da apertura e chiusura delle elettrovalvole ti rientrino nell'alimentazione impallandoti le logiche, e di conseguenza ti risparmierai un sacco di mal di testa per cercare di capire cosa non va :wink:

Puo sembrare un'eccesso di prudenza, ma l'esperienza purtroppo insegna che non e' mai troppa, specie con i carichi induttivi ... :wink:

La considerazione del buon Etem è giusta, tuttavia la riduzione di tensione da 24V a 5V operata da DC/DC converter dovrebbe ridurre di molto eventuali spike da parte dell'elettrovalvole, che, comunque, devono disporre di un circuito snubber oppure un varistor oppure un diodo TVS monodirezionale.

Scusate il ritardo e grazie per le risposte:

  1. Il collegamento di rete tra arduini lo farò credo con HW MAX485 (cavo e affidabilità). Domanda: Su questo collegamento posso usare un protoccollo fullduplex? Se si, quale? (il modbus è un full duplex? lo posso usare su 485?)

  2. Touch Screen:Ho bisogno di un touch piccolo, il 2.4 dovrebbe andare bene, lo voglio montare in una placca a muro della living, farò una prova, intanto ne ho comprato uno. Quello che devo farci con questo touch è visualizzare i dati di temperatura, umidità, e stato di alcuni switch con la possibilità di agire su questi ultimi in maniera manuale da touch. Se avete consigli, li accetto volentieri.

  3. Alimentazione: Piuttosto che fare protezioni di cui poi non sono certo del funzionamento, penso che terrò le alimentazioni separate tra rete arduino e tutto il resto. Alla fine ho visto che power supply stabilizzati da 220V a 24V, con 20A costano una quindicina di euro.

Vi ringrazio per il momento. Credo di avere un po di confusione su reti e protocolli, scusate se sono un po duro di comprendonio....

Grazie a tutti

1 - Non comprendo la tua esigenza di un full duplex: la velocità dell'half duplex non ti basta?

2 - Occorre vedere se le dimensioni del 2.4" possono essere contenute nella placca.

3 - Scelta giusta quella di tenere separate le alimentazioni, ma questo non ti protegge dai disturbi che la linea di alimentazione potrebbe ricevere: pensa ai cavi elettrici che passano affianco alla canalina.

Ciao Cyberhs,

  1. la mia esigenza della full duplex è solo relativa alle comunicazioni "in parallelo", (ognuno puo ricevere o trasmettere quando crede), senza rischi di perdita di dati. Se riuscissi via software a evitare questo problema, mi basterebbe anche l'half-duplex.In proposito ho letto ieri un articolo interessante che voglio approfondire: http://www.mcmajan.com/mcmajanwpr/blog/2014/01/20/arduino-e-rs485/. Considera che questa rete di Arduino, vorrei farla comunicare anche con un pc server. Se hai consigli in merito, fammi sapere.

  2. Infatti, il 2.4 l'ho ordinato proprio per vedere se entra nella placca. Devo vedere anche col collegamento UART se ho uscite libere. Sono indeciso sul collegamento tra touch screeen e arduino.

  3. Alimentazione a 24V e step down. Questo, come dicevi te, dovremme ridurre molto i disturbi. Considera che i segnali lio ho massimo a 2-3 metri dall'arduino dedicato, quindi non dovrei avere problemi.

Grazie dei consigli.

Per ogni stanza prevedo una configurazione base così strutturata:
Una scheda Arduino UNO, sensore di temperatura e umidità (DHT22), sensore PIR, scheda 4 relé, lcd touch screen nextion 2.4 UART.

Ogni arduino da "stanza", dovrà "comunicare" col MEGA centrale, il quale avrà il suo sketch "standard" a bordo ma si interfaccerà col pc.

Secondo me stai chiedendo un po' troppo a queste schede.

Se hai deciso di mettere un pc, perchè collegare il bus 485 alla mega e non direttamente al pc?
Prendi una scheda PCI per pc e gestisci il tutto da un "programmone" chessò magari in java, jascript, avrai una grande velocità di gestione dei dati, visualizzazioni rapide, orari, una scheda in meno

Mi lascia perplesso quei 9 arduini UNO con ciascuno un lcd touch screen nextion 2.4 UART e questi oltre a gestire lcd che porterà via un 80% delle risorse, far girare lo sketch con i suoi IN/OUT deve anche gestire un traffico 485 realtime?
Provane uno e vedi se soddisfa alcuni parametri prima di comprare tutto.
Avrai bisogno di qualcosa di più che un chip Atimel 8bit e qualcosa di più di un 16Mhz per fare tutto.

pablos:
... un lcd touch screen nextion 2.4 UART e questi oltre a gestire lcd che porterà via un 80% delle risorse

No pablos, non porta via alcuna risorsa, i Nextion sono display intelligenti con tutto a bordo (... memoria ed immagini incluse); gli dici via seriale cosa visulalizzare e al resto pensano loro.

Sono anche abbastanza economici visto quello che fanno :wink:

Guglielmo

Meglio, un problema in meno :slight_smile:
Ma far gestire un impianto a 10 arduini a me farebbe un po' paura :slight_smile:
Con questo non dico che non si può, mi fa paura la lentezza e la stabilità.

pablos:
Ma far gestire un impianto a 10 arduini a me farebbe un po' paura :slight_smile:
Con questo non dico che non si può, mi fa paura la lentezza e la stabilità.

Di sicuro occorre studiarlo molto bene ed avere una discreta esperienza ... altrimenti ... :grin:

Guglielmo

Buongiorno a tutti.
Grazie per le vostre risposte, e soprattutto grazie per mettere a disposizione le vostre conoscenze per il mio progetto.

Allora... Vi spiego un po' più in particolare quella che è la mia idea, così potete dirmi tutto ciò che pensate in proposito.

La mia idea per ogni stanza (la chiamerò SLAVE):
Un arduino con LCD, sensore temperatura e umidità, sensore PIR, e una schedina relè. Come base non mi sembra tanta roba. In pratica dovrei mettere un Lcd su una UNO, vedere tempratura e umidità, e farle comandare alcuni switch. Oltre a questo, ogni SLAVE mette a disposizione in rete la propria configurazione per ogni ciclo di loop, dovrebbero essere tre byte (un byte intero con segno per la temperatura, un byte intero senza segno per umidità, un byte dove ogni singolo bit è la posizione di 8 pin digitali comandabili). Oltre a mettere a disposizione i propri dati, può ascoltare un byte (inviatole dal MEGA), che gli indica come pilotare gli 8 pin configurati.

Il MASTER:
Al momento io avevo pensato così: il MEGA ha una configurazione standard dove per ogni ciclo di loop, eseguendo il proprio sketch, legge i tre byte di ogni slave e, se necessario, invia allo slave corrispondente, eventuali azioni da fare.
Il MASTER inoltre, via ethernet, comunicherà con il pc, sul quale ci sarà un web server appositamente costruito in php. Tra pc e Master ci sarà un dialogo stabile (nel caso il pc avesse dei problemi, la MEGA continuerebbe a eseguire il suo programma in modo automatico). Con la comunicazione attiva tra MEGA e PC, metterò online tutte le configurazioni in realtime di ogni slave, e darò la possibilità via pc di leggere o cambiare lo stato di ogni pin configurato sugli slave.

E' un progetto troppo complicato dite? L'idea che ho in testa non mi sembrava così difficile, sono solo un po' arenato sul fullduplex (comunicazioni contemporanee) e protocolli stabili. Non volevo mettere una ethernet per ogni slave!!!!

Cosa ne pensate?

Accetto critiche e suggerimenti....

Grazie a tutti.

Beh ... intanto, lato SW, ti suggerisco di studiarti la libreria PJON, scritta da un untente del forum, costantemente manutenuta e ch potrebbe fare al caso tuo.

Per le connessioni Master <--> Slave, più che sul WiFi, se puoi tirare dei cavi, io mi orienterei su un bus RS485 (bastano 2 coppie intrecciate e fai pure il FullDuplex ... ma serve? Tanto devi lavorare in polling ... il master interroga, lo slave risponde) ... tra Master e PC ... vedi tu :wink:

Guglielmo

Non lo ho ancora provato, ma potresti provare anche una configurazione rolling-master con la libreria gammon:

Ogni Arduino ha un suo slot temporale per comunicare come master a tutto il sistema, per evitare collisioni nell'uso del bus. In questo modo anche gli altri Arduino "slave" della configurazione normale, saprebbero cosa fanno gli altri, magari delegando compiti che altrimenti dovrebbe fare il solo Master collegato al pc.