PicNET2 consente di costruire una rete domotica (automazione domestica o building automation o addirittura home automation) con dispositivi di facile reperibilità (i microcontrollori PIC) e basso costo alla portata di qualsiasi hobbista (diy).
Progetto DIY per Hobbisti - come costruire una rete domotica con i PIC [PicNET2]
L'idea nasce dopo lunga ricerca per trovare qualche cosa da cui partire per far comunicare piccoli dispositivi ( possibilmente gli arcinoti PIC) tra loro in modo semplice sicuro e soprattutto economico.
Ottimo esempio di domotica (automazione domestica), in inglese Home Automation o Building Automation.
RETE PIC NET 2 PROGETTO DOMOTICA: 2004 . 2006. 2007
Come pensavo ho trovato moltissimi spunti ma niente di concreto da costruire, cosa ho deciso di mettere assieme delle idee e indicazioni hardware e software trovate, per costruire una piccola rete domotica. L'intento non è dare un progetto finito ma le basi su cui ogni uno può facilmente trovare la propria soluzione per un uso personalizzato o dedicato alla sua specifica esigenza. Pertanto mi rivolgo a chi vuole costruire qualcosa con le sue mani imparando sperimentando e divertendosi con entusiasmo. Ben venga qualsiasi critica proposta e modifica nel progetto con lo scopo di migliorare.
Tutto il materiale software lo metto a disposizione per un uso personale, può essere liberamente copiato e usato a tali fini.
Descrizione picnet2 rete domotica
Il cuore di tutto il sistema è decisamente il PIC. Io ho utilizzato diversi modelli, in base alle mie esigenze. Si possono utilizzare molte tipologie di PIC purché abbiano almeno una USART integrata, ho provato i 16F88, 16F876,16F628 tutti funzionano perfettamente, anche utilizzando l'oscillatore interno (16F88). Nel codice allegato faccio riferimento al 16F628 il quale gestisce tutto il protocollo e si interfaccia con l'esterno tramite le sue porte di ingresso / uscita. Per il trasferimento fisico dei dati viene in aiuto un RTX di uso comune nelle reti CAN quali il MCP2551 o Maxim, MAX3050 e altri della stessa famiglia. L'utilizzo di questo RTX semplifica ancora il SW in quanto la commutazione rx-tx è automaticamente gestita dal chip. Il protocollo è completamente diverso dal Can-Bus e pensato per utilizzare al meglio le risorse dei PIC, semplificandolo al massimo pur mantenendo come priorità irrinunciabile l'affidabilità dei dati ricevuti. Il BUS fisico è composto da 4 fili in cui transitano 2 i dati e 2 alimentazione. L'immunità dai disturbi è data dal tipo di trasmissione differenziale molto usata anche in ambito industriale.
Il tipo di trasmissione è asincrono 38400bps 8N1, la velocità può essere facilmente aumentata o diminuita senza nessun tipo di inconveniente software a parte la distanza massima che varia.
Le specifiche CAN parlano indicativamente 1Mbps max 40 metri, 115200bps 600metri max e via dicendo, per ulteriori informazioni vedi meglio specifiche CAN BUS
Programma della rete domotica con pic
Il programma è scritto in PicBasicPro, tale scelta è stata dettata da praticità nonché da facilità di modifiche e integrazione di codice futuro. Affinché la gestione del bus possa essere facilmente trasportabile ed integrabile ho messo il codice in un file esterno da includere nel programma principale. Il programma si attiva solo nel caso di una richiesta da parte del bus, mentre normalmente il PIC esegue il programma principale.
Il codice scritto gestisce tutta la comunicazione MultiMaster della rete domotica ed è facilmente trasportabile su altro modello PIC ( con USART integrata ) modificando solo le definizioni, in questo modo si possono facilmente aggiungere altre funzionalità . La velocità settando l'opportuna definizione può essere variata bisogna pero verificare se il la USART interna riesce a gestire il baud-rate corretto, altrimenti bisogna cambiare il quarzo, ho notato che comunque esiste una tolleranza molto ampia.
Con un quarzo da 20 Mhz si riesce a raggiungere velocità di quasi 1Mbps ! Per un uso corretto della USART fare riferimento al Data Sheet del PIC. L'uso di velocità elevate può essere utile per macchine automatiche che devono comunicare velocemente a brevi distanze. Per comodità consiglio di utilizzare velocità standard in modo da poter monitorare i dati tramite un PC.
E' molto comodo all'inizio controllare tutto il traffico tramite PC per testarne il corretto funzionamento, comunque la rete è autonoma nel senso che ogni nodo possiede la capacità di funzionare sia da Master che da Slave interagendo tra loro. La comunicazione è del tipo MULTI-MASTER, le risorse minime per far funzionare la rete sono di almeno due nodi o un nodo e PC con adattatore RS232. Si possono poi in seguito aggiungerne altri semplicemente collegandoli e assegnando loro un ID univoco.
Nella nuova versione il sw è completamente trasparente al programma principale in quanto utilizza l'interrupt della seriale. In questo modo si ottiene una risposta istantanea quando richiesta dalla rete, l'unico inconveniente è che se si sta eseguendo una routines con temporizzazione questa viene totalmente errata causa il tempo richiesto per soddisfare la richiesta di interrupt.
Per questo motivo l'interrupt è stato concepito in un modo particolare, in quanto non ritorna alla successiva istruzione dopo la chiamata, ma effettua un salto alla etichetta loop che deve necessariamente esserci nel programma principale. Questo è molto utile in quanto viene abortita l'istruzione che si stava eseguendo e poteva dare risultati errati.
Una tecnica per risolvere questo problema può essere il cosiddetto bit-banging e il real-time ma di questo parleremo qui sul BLOG in futuro
Altra considerazione è che bisogna fare attenzione quando si richiedono dei dati in modo ripetitivo di non saturare il bus, mettere dei ritardi o un timer che a tempi predefiniti esegue la richiesta.
PROTOCOLLO
I dati viaggiano sempre in pacchetti da 12 byte consecutivi. Non viene controllato lo stato del bus ma la correttezza della trasmissione che, in caso di conflitti sul bus ( trasmissione simultanea di più nodi ) viene rilevata.
Inoltre l'integrità del pacchetto viene fatta dal controllo del cheksum. Il cheksum è composto di 2 byte ( 11 byte lsb, 12 byte msb ) viene fatto sommando i byte da 1 a 10.
I byte del pacchetto sono cosi costituiti:
[ID destinazione]-[ID mandante]-[D1]-[D2]-[D3]-[D4]-[D5]-[D6]-[D7]-[D8]-[cheksumLSB]-[cheksumMSB]
Se invio ID = 50 tutti i nodi della rete riconoscono i dati validi. Serve per dare con un comando valido per tutta la rete in casi particolari, o con un altro byte si può attivare disattivare per gruppi tipo X10.
Dati inviati come MASTER:
Il byte D1 (III° byte del pacchetto) funzione da svolgere, viene utilizzato dal PIC per capire cosa deve fare, deve avere un valore compreso tra 0 e 127.
Il byte D2 (IV° byte del pacchetto) si utilizza per passare l'indirizzo dei dati.
Byte da D3 .... D6 dati.
Dati risposta inviati come SLAVE: (dopo una richiesta del master)
l byte D1 (III° byte del pacchetto) valore uguale o superiore a 128, indica una risposta ad una richiesta
Il byte D2 (IV° byte del pacchetto) funzione eseguita e rimandata.
Byte da D3 .... D6 dati.
Qui di seguito nello specifico come vanno gestiti e interpretati i dati del pacchetto:
REG = registro o ram del PIC in uso, utilizzato normalmente per modificare le porte di inp/out ma può agire anche su tutti i registri STATUS, INTCON, RAM, ecc ( leggersi bene data sheet del PIC ). Si può modificare o leggere, sapendo pero bene quello che si va a fare in quanto non c'è controllo. Si può mandare in crash tutto se si modificano registri o ram riservata all'esecuzione del programma.
Si usa per attivare porte di INP/OUT, timer, leggere valori A/D, ram, ecc.
FILE = si intende la scrittura o lettura di dati nella EEPROM del PIC considerata come memoria. La quantità e indirizzi variano naturalmente a seconda del PIC usato. ATTENZIONE non modificare i primi 8 byte in quanto vengono utilizzati da sistema. Ad esempio il byte 0 contiene l' ID del nodo.
Quindi si può addirittura cambiare l' ID del nodo da remoto !
I° BYTE = ID numero 1 a 255 (escluso 50) identifica il nodo di destinazione II° BYTE = ID " " " identifica nodo che manda i dati III° BYTE = funzione svolta bit 7=1 (> 128 decimale identifica una risposta del nodo ) 0 = test verifica funzionamento nodo. Ritorna stringa "Test" 1= legge 6 byte consecutivi REG. (indirizzo iniziale byte 4) ritorna 6 byte (5..10) 2= scrive REG. un solo byte (indirizzo byte4) (dato byte5) 3= scrive REG. un solo byte e ritorna conferma (indirizzo byte4) (dato byte5) 4= legge 6 byte consecutivi FILE (indirizzo iniziale byte 4) ritorna 6 byte (5..10) 5= scrive 6 byte consecutivi FILE (indirizzo iniziale byte4) (dati byte 5...10) 6= scrive 6 byte consecutivi FILE e ritorna conferma (indirizzo iniziale byte4) (dati byte 5...10) 7= legge bit REG. (indirizzo byte4) (n.bit 00000100 byte5) ritorna byte5 = zero o uno 8= setta bit REG. (indirizzo byte4) (n.bit 00000100 byte5) 9= resetta bit REG. (indirizzo byte4) (n.bit 00000100 byte5) 10= inverti bit REG. (indirizzo byte4) (n.bit 00000100 byte5) IV° BYTE = Indirizzo della operazione da svolgere V° BYTE = Valore da memorizzare e o inizio dati letti. ....fino a .......... X° BYTE = ultimo dato. XI° BYTE = Checksum 16 bit. Dati 1....10 ( byte basso) XII° BYTE = Checksum 16 bit. Dati 1....10 ( byte alto)
I dati sono sempre trasmessi in pacchetti da 12 byte anche quando non tutti i byte hanno un significato utile.
Esempi di comunicazione tra nodi e o tra nodo e PC:
TRASMETTE BYTE: 1, 10, 0, 1, 2, 3, 4, 5, 6, 7, 39, 0
ID, id dest., operazione (0=test), byte fino a 10 in questo caso non significativa, somma byte (basso), somma byte (alto)
RICEVE BYTE: 10, 1, 128, 5, 6, 7, sum 0, sum1
TRASMETTE BYTE: 1, 10, 1, 10, 2, 3, 4, 5, 6, 7, 49, 0
ID, id dest., operazione (1=legge reg.), indirizzo iniziale, 6 byte senza significato, sum0, sum1
RICEVE BYTE: 10, 1, 128, 10, 6 byte con i dati richiesti, csum0, csum1
Per le prime prove consigli di costruirsi un nodo e l'interfaccia seriale RS232 da collegare al PC per fare delle prove per verificarne il funzionamento. Anche senza nessun ulteriore programma nel PIC si può leggere e scrivere i registri interni, le porte di I/O la EEPROM ecc.
COSA SERVE PER INIZIARE
Procurarsi il programma PicBasicPro della Melabs per poter compilare il codice basic del pic, è un programma commerciale che ha anche un certo costo
(ma esiste anche una versione demo di valutazione).
Un utile aiuto nella scrittura del codice è MicroCodeStudioche si integra benissimo con il PicBasic, è gratis, help in linea, controllo del codice ecc. Mi sembra esista anche il modo di utilizzare un compilatore on-line ma non ho il link. Il PIC16F628 si trova senza problemi in commercio e a un prezzo spesso inferiore al + noto 16F84.
Il programmatore è sufficiente il solito X_pippo possibilmente alimentato esternamente da utilizzare con il ben noto
programma IC-Prog 1.05A.
Documentazione
FIRMWARE
'-- Controllo BUS Home Automation PicNet
'- Luigi 11/2005 Rel. 0.3
'- Risorse COM1 bus PicNet
SCARICA LA DOCUMENTAZIONE COMPLETA DI SCHEMI ELETTRICI E SORGENTI FIRMWARE --->> DOWNLOAD
Forse non sono stato abbastanza chiaro o completo nella descrizione, ma non sono esperto bravo nel scrivere, ben vengano critiche o altre proposte.
Per informazioni e o chiarimenti scrivete agli indirizzi nel sito.
Luigi
io sono un hobbista e questo progetto "me gusta" .
Mi pare un ottimo progetto, tenterò di realizzarlo anche io.
Anche se non ho esperienza sui pic ho raccolto quante più info possibili dalla rete, l’unico scoglio
è che, al momento, non avrei intenzione di spendere soldi per l’acquisto di un sw di programmazione,
e tenterò la via dell’asm anche se non ho trovato documentazione esauriente relativa alla gestione della usart in assembler.
Tu hai già realizzato ed installato il sistema ?
Il progetto non è stato realizzato da me,
mando una email all’autore per risponderti
La rete funziona perfettamente la utilizzo ormai da un po di anni, gestisco i pannelli solari termici e fotovoltaici con vari monitoraggi e controllo della caldaia a gas.
Ho inoltre implementato un telecontrollo GSM e adattato alla rete in modo da poter mandare e ricevere dei pacchetti di dati, ultimamente ho anche inserito l’automazione delle tapparelle alle finestre.
Ma riscrivere tutto in ASM mi sembra molto impegnativo visto anche che dici di non essere molto esperto, comunque sul sito della Microchip, e non solo, ci sono moltissimi esempi di come gestire la seriale. Se vuoi un mio consiglio ti conviene partire magari scaricandoti la demo di PicBasic, non sono sicuro ma dovrebbe compilare fino a 2K, altrimenti ci sono altre strade che certamente saprai. Per un uso ludico francamente non ti consiglio neanche io di comperarti il pacchetto. Ho pubblicato questo progetto anche sul sito Grix, sembra che qualcuno lo abbia fatto visto che mi ha chiesto informazioni, prova a darci un occhio.
Buon lavoro
In effetti, proseguendo con lo studio dei pic, ho realizzato che l’uso dell’asm per questo progetto non è molto indicato. Nel frattempo mi è appena arrivato il programmatore, non appena riesco a farlo comunicare con il pc ( non ho la seriale e il convertitore usb non funziona ) inizierò le prove pratiche.
Ciao.
Bel lavoro. Ho pero’ una domanda. Lo slave invia risposta solo se richiesto da master o anche in modo autonomo. Cioe’ i vari slave ed il master scambiano tra di loro le informazioni autonomamente ed in tempi diversi visot che parli di conflitto e di tempo di attesa per ripsorvare oppure ogni slave risponde solo se interrogato. . Per esempio se uno slave vede modificato un proprio input, lo comunica subito al master o aspetta che il master lo interroghi ?(tipo polling) In questo cas e se ho 30 slave, ci vuole almeno 200 ms per ogni slave, l’ultimo lo leggo dopo 30x200ms=6 secondi. Un ladro apre la finestra e la richiude. Quando interrogo lo slave e’ tardi. Saluti.
Allora, il codice che ho rilascato gestisce solo il protocollo di comunicazione tra i nodi, praticamente non esiste nessun nodo che ha una priorità (MULTIMASTER). Tutti hanno la possibilità di interagire con gli altri nodi, quindi sta poi al tipo di esigenza assegnare dei compiti specifici di controllo di altri nodi o solo di slave.
La priorità esiste solo nel caso in cui due nodi trasmettano contemporaneamente, in questo caso viene data la prorità a quello con ID + basso.
Come dicevo all’inizio, il codice del protocollo in se non fa niente se non rispondere a una richiesta, quindi nel Pic oltre al protocollo è utile metterci un programma principale che gestisce le necessita del nodo, temperature,pulsanti,ecc. Anche io ho avuto la necessita di verificare delle temperature, all’inizio interrogavo il nodo della temperatura ogni tot. tempo, però ho notato che si spreca molto tempo bus per niente. Ho visto che mettendo del codice di controllo sul nodo che controlla il sensore è molto + efficiente.
Il pratica leggo la temperatura la salvo, alla sucessiva lettura controllo se è diversa dalla precedente, se è uguale non faccio niente mentre se c’è stata una variazione mando il nuovo valore al nodo interessato. Potrebbe essere cosi anche per un input su un pin del pic, leggi la porta salvi, ai sucessivi controlli se c’è stata una variazione mandi un allarme ad un nodo centrale altrimenti non fai niente.
Spero di aver chiarito la situazione.
Saluti, Luigi
come posso contattare l’autore? dove si trova la sua mail?
Ciao Cristian!
Ci puoi scrivere qui:
[email protected]
Grazie,
——
Ionela
L’Elettronica Open Source
Ciao, ho inviato una domanda via email ma ancora non ho ricevuto risposta.
non si può avere l’indirizzo dell’autore Luigi?
Grazie
L’autore è stato avvisato del commento
Puoi chiedere qui altrimenti lasciami il tuo indirizzo, puoi contattarmi anche tramite il GRIX utilizzando la messaggistica interna.
Ciao
Ciao, ti lascio la mia email perchè ti volevo chiedere dei consigli approfittando della tua bravura.
Grazie mille per le risposte.
la mia email è [email protected]
Ciao
Crsitian
ah, dimenticavo e chiedo scusa per non averlo fatto prima, volevo congratularmi con coloro che gestiscono questo sito e con chi realizza questi progetti perchè è davvero stupendo.
Ciao Luigi, scusa se ti disturbo nuovamete e scusami se sono noioso ed assillante, ma come ti dicevo volevo approfittare della tua bravura, volevo qualche info su come utilizzare i registri sipo e piso e interfacciarli con pbp ai pic.
Se mi fornisci la tua email ti posto tutto oppure qualcuno può fornirmi il nik di luigipic del sito grix. scusa ancora e grazie
Aspetto una tua cortese risposta
ciao emanuele, non so perchè non sto ricevendo risposta potresti darmi tu il suo nick del sito grix?
grazie scusate tutti per il disturbo e per i traffico che sto generando.
Scusate ragazzi io sono semplicemente registrato al sito… per scaricare il download in oggetto è necessario essere utenti premium, pagando quindi? Grazie per la risposta!
Mi sono appena registrato come utente PREMIUM mensile ma non riesco a trovare il file da scaricare.
Devo forse registrarmi come utente PREMIUM annuale?
I file del progetto picnet sono disponibili nella sezione archivio. La sezione archivio, con tutti i file di vari progetti, è disponibile solo per gli abbonati Premium Annuale.
Ma oggi voglio fare un regalo alla community 🙂
Ecco tutta la documentazione del progetto PicNET
http://tinyurl.com/6g2hady
Ciao Marcello,
l’autore dell’articolo (e quindi del progetto) è
LuigiPic http://it.emcelettronica.com/user/8125
puoi contattare lui (tramite il modulo contact dal tuo profilo)
per ogni richiesta di permesso e citazione