Domotica con Arduino

Ciao Massimo, io non ho capito che velocità di trasferimento serve.
Non potremmo scriverci noi un protocollo utilizzando due o piu porte digitali? Es. un arduino è connesso ad un altro con due porte digitali, il terzo è connesso al secondo con due porte digitali e quindi indirettamente al primo e cosi' via? Il primo e l'ultimo della fila avrebbero due porte occupate, quelli in mezzo 4.

in effetti il costo sarebbe un pò alto ma comunque da sottrarre a quelli di installazione/cablaggio.
il protocollo invece sarebbe un problema...

gbm è un po troppo a basso livello :slight_smile: ci sono dei protocolli già fatti che funzionano bene e sono aperti.

Le due opzioni più semplici al momento sono:

  • bus rs485 (stile DMX).. qui si può sfuttare la metodologia a 9 bit... cioè il microcontrollore riconosce in automatico se il suo indirizzo passa sul bus... limitazione solo 255 nodi principali. vantaggio semplice e costa mooolto poco
  • bus can. veloce e robusto, è multi master e ci sono dei microcontrollori che lo supportano.. l'arduino base può interfacciarsi con moduli tipo quello che si vede qui http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1248361174

forse il can è il migliore al momento

m

Perchè prima non facciamo il punto della situazione? Magari riusciamo a schiarirci le idee.

Dico la mia, modificate questa lista a vostro piacimento secondo le vostre idee, così arriviamo ad un punto comune.

I punti fondamentali del progetto a me sembrano questi:

  • Ogni sensore sarà master.
  • Un'eventuale struttura di controllo centrale sarà solo un logger o un monitor dei vari sensori.
  • Protocollo open, robusto ed interfacciabile facilmente con Arduino. (Mi pare di capire che il can bus sia ottimo!.. da quello che leggo..)
  • Le tipologie di sensori potrebbero essere: interruttori, sensori ambientali, micro attuatori. (Altro?)
  • Valutare la possibilità di auto alimentare i moduli con la stessa linea su cui trasmettono dati.
  • Velocità di comunicazione proporzionata ai compiti dei moduli. (Tipo? Che range di velocità?)
  • Diagnosi della rete domotica.
  • Gestione conflitti tra comandi automatizzati e manuali.
  • Codifica dei segnali tra i moduli, evitare che informazioni sensibili siano carpite all'esterno.

Nello specifico.

Per gli interruttori:
inserimento nei box luci standard,
reperimento corrente da linea 220V standard.

Per i sensori ambientali:
valgono i punti degli interruttori più l'ipotesi di poterli posizionare in zone diverse dai box luce o cassette di derivazione, ma hanno bisogno di corrente, quindi sempre vicino alle prese.

Per i micro attuatori:
è un caso più particolare, dato che a seconda del loro compito devono potersi interfacciare con altri componenti. (Es.: serrature, tapparelle, tende, rubinetti, valvole acqua/gas, caldaie, termostati, ecc.)
Nota: a volte la corrente non arriva dove dovrebbero essere installati.. vedi porte, rubinetti, ecc..

Per i sensori e gli interruttori è evidente che possono essere cablati nelle canaline elettriche o telefoniche esistenti, ma per gli attuatori è tutto un altro discorso.

Velocità di comunicazione:
per gli interruttori tale velocità deve essere veramente alta, non si può accendere una luce ed aspettare qualche secondo o decimo di secondo prima che si accenda realmente;
per i sensori, a meno che non regolino temperature della doccia o altri sistemi che richiedono una correzione immediata, i tempi possono essere più lenti, in un eventuale protocollo si potrebbe dare priorità bassa a questi segnali;
per gli attuatori vale la stessa regola degli interruttori, il tempo di esercizio può variare, ma il tempo di risposta deve essere rapido.
Per la comunicazione tra i vari moduli, diciamo che vale la velocità sufficiente e necessaria, quindi quella più alta, altrimenti si crea un bel collo di bottiglia nel caso un modulo-interruttore dovesse controllarne un altro.

Ultimo, ma assolutamente primario come punto, le funzionalità.
Cosa vogliamo che facciano di base i moduli?
Accendere/spegnere le luci, come minimo; magari bloccare e sbloccare porte, attivare/disattivare antifurto, regolare temperatura stanza.. controllo ambientale generico, regolazione tende, gestione piante e/o giardino, ricordare interventi di manutenzione degli elettrodomestici, monitorare consumi energetici. Altro??

Aggiungiamo i punti interessanti, così da avere una visione d'insieme e poter ragionare più nel concreto.. se volessimo fare le cose per benino potremmo anche usare Google Wave ed uno dei suoi plugin fenomenali come brainstorm per esempio.. :wink:

Per gli interruttori:
inserimento nei box luci standard,
reperimento corrente da linea 220V standard.

non dovrebbero più interrompere nessun circuito elettrico a 220V ma diventare come dei sensori ( alimentati a 5V e letti da pin digitali ).
Ogni luce o in generale un carico viene attivata/o da un'uscita digitale...che ecciterà un relè.

Quindi secondo me si potrebbe pensare a quanti ingressi e a quante uscite avrebbe bisogno una stanza media...e su quella base destinare le funzionalità del modulo.

Bisogna poi decidere cosa buttare sul bus, perchè in realtà molte funzioni potrebbero anche essere svolte in loco dal singolo arduino, per spiegarlo con un esempio:
quando premo l'interruttore per accendere la luce della stanza, l'arduino per prima cosa appena rileva lo stato del pulsante attiva l'uscita che accende la lampadina.
solo dopo aggiorna lo stato dell'interruttore e della lampadina comunicandolo agli altri arduini, perchè magari la stessa lampadina può essere accesa o spenta da un'altra stanza (da un altro arduino).

...quindi in sostanza dovremmo anche stabilire come si deve comportare ogni singola unità...che poi andrà ad interfacciarsi con le altre attraverso il protocollo di comunicazione che sceglieremo.

Tornando all'argomento protocollo, il CAN se viene usato nel mondo automotive ed industriale è perchè è tra i migliori quanto affidabilità e prestazioni...però non capisco perchè non abbia grande impiego nel mondo domotico.
Mentre riguardo a:

  • bus rs485 (stile DMX).. qui si può sfuttare la metodologia a 9 bit... cioè il microcontrollore riconosce in automatico se il suo indirizzo passa sul bus... limitazione solo 255 nodi principali. vantaggio semplice e costa mooolto poco

sono comunque favorevole a condividere un tentativo di implementazione se si pensa che ne possa valere la pena!

Ciao a tutti, mi inserisco anch'io, apppena appena registrato ma interessatissimo alla discussione!

avevo solamente un appunto preliminare da fare: la tua proposta Massimo di usare la bassa tensione da far passare insieme al 220V credo che sia contro la normativa vigente.. ovviamente lo farei tranquillamente in casa mia, salvo dover togliere tutto quanto prima di cercare di venderla! :-/
D'altro canto powerline ha il grosso vantaggio di sfruttare la rete domestica già cablata per l'alimentazione: ma non ho ancora trovato in commercio qualcosa ad un prezzo ragionevole per interfacciarsi.. ho comprato un paio di belkin per giocare un po', con ottime prestazioni teoriche ma comunque costano un centinaio di euro, non è proprio una cifra abbordabile!

ciao
Marco

non dovrebbero più interrompere nessun circuito elettrico a 220V ma diventare come dei sensori ( alimentati a 5V e letti da pin digitali ).
Ogni luce o in generale un carico viene attivata/o da un'uscita digitale...che ecciterà un relè.

Sì giustissimo! Preso dalla foga non avevo valutato che a questo punto basta un modulo (Arduino) per stanza, e quindi non serve che stia dentro la scatola di derivazione.. :stuck_out_tongue:

Per il discorso singole unità.. conviene che ogni Arduino memorizzi lo stato di una singola luce?.. non potrebbe leggerlo da un file condiviso per esempio? Così anche per interfacciare uno schermo o qualche altra interfaccia si potrebbe leggere direttamente il file centrale.
Non è una domanda retorica, lo pongo proprio come quesito.
In realtà se vogliamo usare solo un Arduino come modulo (luci per esempio) sarà solo l'Arduino di quella stanza a memorizzarlo, se però nascesse la necessità di condividere l'informazione con altri Arduino, con un bel log centrale si risparmierebbe l'invio di un comando agli altri.. e solo quando necessario si potrebbe leggere il log; per massimizzare le funzioni in locale di ogni singolo Arduino, e non usarle per trasmissioni a gratis.

non sarebbe più comodo interrogare lo status al volo ogni tot. di tempo oppure quando serve? così si parlano direttamente e non tramite un file.
poi il log centralizzato tipo "registro degli eventi" memorizzerà sia la domanda che la risposta.

Credo che per semplicità sarebbe meglio avere un'arduino che è responsabile per un ambiente e comunica via bus con le altre schede

in questo modo se si interrompe il bus puoi comunque accendere la luce entrando nella stanza :slight_smile:

una volta definito un protocollo di comunicazione si possono definire i tipi di messaggi inviabili etc

Se è necessario avere un master per coordinare gli slave allora usiamo un'arduino mega.. usiamo il PC per operazioni non "mission critical"

la cosa interessante sarebbe usare un ethernet shield cosi da assegnare un URL ad ogni oggetto del sistema. a quel punto puoi fare le interfacce utente anche in html+javascript

a sua volta il "coordinatore" può inviare via rete messaggi di allarme etc.

con questa architettura si possono creare dei rami che viaggiano in wireless dove non si possono tirare cavi.

m

con ethernet a disposizione si potrebbe pensare anche a sistemi autoconfiguranti per le periferiche tipo:
al reset il protocollo arp notifica la presenza di un nuovo modulo in rete e quindi il master la interroga per conoscere le sue potenzialità, oppure la scheda interrogata fornisce una descrizione di se stessa ed il master crea al volo un'interfaccia grafica standard con i controlli messi a disposizione dal modulo appena riconosciuto... quindi con un solo gui e una gestione dei tab si potrebbe accedere rapidamente al controllo delle schede appena installate, quindi configurazione quasi zero! :slight_smile:

Per ragioni di costo l'eth potrebbe essere solo sul nodo "coordinatore" però non toglie che si possa implementare simili funzioni anche sul bus "leggero" che fa parlare i nodi tra di loro.

anche con can-bus si potrebbe fare la stessa cosa, una sorta di "plug&play" (che brutta parola... :))
la logica è incapsulabile in (quasi) qualsiasi protocollo, per questo mi piaceva l'idea e poi con l'autoconfigurazione iniziale , l'esperienza "out of the box" sarebbe quasi immediata ed a portata di tutti no? ::slight_smile:

Ciao a tutti e soprattutto a Marco!
Se ricordi, tempo fa, ti avevo contattato per cercare un "gruppo amatoriale arduino" a Milano: il mio sogno segreto era proprio quello di mettere assieme un sistema domotico.
Sono architetto e ho sempre odiato le soluzioni convenzional/commerciali dei grandi produttori: chiuse, vincolanti, complesse poi da gestire, coordinare, progettare e realizzare in cantiere.
Purtroppo non ho affatto grandi competenze in elettronica e quando accarezzavo il sogno domotico, mi è sempre piaciuto l'X10: semplice, modulare. Non mi ha mai convinto troppo nè il costo complessivo (25-35? ogni attuatore o comando fuori scatola - praticamente il doppio se incassati - ), che moltiplicato per il numero dei pezzi da installare diventa una bella spesa!

Come progettista (anche un po' avventuroso) cerco una soluzione davvero semplice, di quelle per cui a qualsiasi elettricista possa dire: "ascolta, mi devi (o: ti fornisco) 10 arduino che mi metti qui, qui e qui; colleghi questi cavi qui e qui; li metti questi attuatori e sensori" poi si accende, un minimo di configurazione e via.

Inoltre, se interessa il concetto, quando si ristrutturano appartamenti convenzionali, il costo teorico medio per "punto luce" è circa pari a 50? (Milano): quindi ogni scatola - prese, telefono, interruttore che sia - costa così. Fate i calcoli per una stanza e per l'intero appartamento.
Ora, se introduco un sistema domotico, tra doppini e sistemi aggiuntivi, l'installatore mi fa schizzare i prezzi alle stelle e la mia bella domotica mi va fuori mercato e rigettata dal cliente (oltre tutte le obiezioni che l'elettricista solleva e i rifiuti per cose che non conosce).

Credo che la strada debba essere ridurre e semplificare sulla base di uno schema elettrico domestico convenzionale (per avere meno conflittualità sulla posa e una serie di benefici secondari, pur rimanendo in normativa):

  • abolire le linee degli comandi (si taglia il 50% almeno dei cablaggi sottotraccia e dei costi: niente più interruttori a parete);
  • telecomandi (universali?) IR o piccolo dispositivo WIFI o altro trasponder (che risulterebbe poi utile particolarmente per anziani e disabili, potendo portarselo dietro ed evitare "rischiose" passeggiate nelle stanze; se necessita l'interruttore convenzionale a parete, ho visto in rete alcuni comandi fissabili a parete senza batterie (con la pressione meccanica si genera una piccola corrente elettrica che alimenta l'IR o trasponder ed invia il comando al ricevitore); inoltre, attuazioni via etere riducono i numeri e i costi dei controller;
  • si avrebbero quindi solo linee principali per potenza e luce (fondamentalmente attuatori) e si ridurrebbero i pin di input sul controller, riducendo ulteriormente i costi...
  • ne deriva che le linee di potenza e luce sono le uniche posate e servono serialmente i carichi, pertanto dovrebbero essere indirizzate (in power-line mi pare di capire sia più bello ma più costoso, tuttavia, se ho risparmiato i costi delle linee di comando, posso sempre permettermi di spendere per il doppino da far correre sempre parallelo alla 220 senza che all'elettricista venga il mal di testa... :))
  • ci sarebbe poi l'eventuale problema di capire come trasmettere Audio/video in tutta l'abitazione...

Da ultimo c'è bisogno di capire la modulareità della componentistica:
1 - telecomandi
2 - pulsanti filomuro, risposizionabili, programmabili, via etere, autoalimentati
3 - relè standard per comando motore
4 - motori e motorini d'attuazione per classi d'impiego semplificate (grande sforzo: avvolgitore tapparella, garage,...; piccolo sforzo: chiudiporta, termovalvola,...) e che si possano anche adattare su situazioni esistenti (penso al rubinetto della canna in giardino...)

  • microcontroller con override da computer e gestibile con interfacce anche http (integrazione smartphone...)
    5 - una scatola unità sensori ambientali da collegare alla linea luce o forza (penso a una scatoletta che contenga standard ad esempio sensore temperatura, umidità, - per esagerare - allagamento, fumi, vento, pioggia, etc) magari con inserimento modulare degli stessi (il sensore pioggia non lo monto nella versione interna...).

Se c'è qualcosa che posso fare per il gruppo (normativa, valutazione esigenze per cantieristica, analisi costi installazione e/o problematiche ed esigenze ricorrenti utenza "standard",...) sono a disposizione!
(spero di non aver esagerato!)
A presto!

come powerline ho trovato questi modem:
http://www.linksprite.com/product/showproduct.php?id=23&lang=en
e pure
http://www.lorix.com/cat054.php?n=1#1

che parlano rs232... e non costano neanche un botto rispetto a quello che si risparmia nei cablaggi.
Ci sono anche alcuni modelli predisposti per xbee per realizzare una specie di ponte radio con altri moduli

ahhh un architetto proprio quello che ci voleva! :slight_smile:
Io vedrei utile anche un bel pulsante che mi indichi domotica si/domotica no e poi dovremmo studiare anche sistemi per la pulizia dell'abitazione in nostra assenza.

ehh, anche quello mi sono chiesto: se non ci fosse un modo per fare uno scooba open source... (che magari mi tagli anche il prato...)
piuttosto che un robottino circolante per casa con i suoi sensori antitrusione e ambiente integrati: una sola sonda valida per tutto...

anzi al meglio: un robottino che si aggancia di volta il volta al pack sensori o al pack pulizia... risparmiando inutili duplicazioni di motori, controller, sensori, cavi...

nel senso magari ci possono essere dei guasti nel sistema domotico e sarebbe utile tornare al sistema standard.

Ste hai un messaggio pvt! :slight_smile:

Un sistema hoover robot open source è già in studio, c'è un topic ad hoc.. in cui mi sto cimentando io stesso.. :wink:

Per la domotica.. a sto punto scopriamo le carte.. io sto lavorando proprio su questo, ma come detto, diversamente a come pensate voi su un sistema high level.. da interfacciare con robot hoover system, tagliaerba, e tutta una serie di droni.

Stare dentro ai 50? a punto luce è una cosa semplice se si usa un Arduino per stanza, il resto sono relè e sensori..

Dai, chi inizia a sperimentare?? Io qualcosa già sto facendo.. ma più sulla programmazione e la gestione dei servizi che sui sensori. Altri che si occupino dell'hardware??
Creiamo un gruppo per il can bus e uno per l'rs485??

Ciao a Tutti,
non ho grandi competenze in materia, ma sono molto interessato dall'argomento e provo a contribuire:
Ammettendo che ogni stanza (od ogni porzione di stanza) sia dotata del suo Arduino, ed ogni Arduino di una serie di input (interruttori, sensori) e di output (principalmente comandi verso relè) può avere senso un protocollo di questo tipo: all'eccitazione di un input l'Arduino pubblica un messaggio sul bus (messaggio tipo indirizzo-Arduino-target/output-target/azione sull'output). L'arduino che si riconosce nell'indirizzo target (al limite lo stesso arduino che ha generato il messaggio) opera di conseguenza sull'output indicato.
Così facendo posso impartire comandi su qualsiasi nodo senza distinguere fra comandi in locale o in remoto, posso creare funzioni di log recettive a tutti i messaggi, posso con indirizzi dummy creare comandi per tutti gli output o per sottoinsiemi (si deve solo scegliere bene come definire gli indirizzi, poi mi vengono facili funzioni tipo "spegni tutto"), posso... non so non ci ho ancora pensato.
E' una considerazione cha ha un senso (il mio dubbio è che il singolo arduino possa contemporaneamente sia mandare che ricevere un messaggio)? Si da già per scontato che sistemi del genere funzionino così (per il CAM delle macchine mi sembra di ricordare qualcosa del genere)?

Paolo

penso che la tecnica di indirizzamento quantomeno usata in X10 vada già bene e forse basta adattarla x arduino:
su ogni attuatore, comando o altro c'è 1 jumber che setta l'ID dell'unità
il primo bit identifica il macroinsieme, il secodo il dispositivo specifico (es: appartamento del condomino; attuatore XY)