Arduino & xxxGate

Non sono un fanatico di Arduino, lo ritengo poco più che un bel giocattolino dalle possibilità hardware limitate ma dalla ottima standardizzazione e ottimo prezzo.

Tuttavia nel settore amatoriale Arduino è uno standard "di fatto" da cui non si può prescindere. Almeno la metà delle persone che si sono costruite o che hanno comprato KNXgate / SCSgate avevano intenzione di collegarlo ad una scheda Arduino. Così mi sono deciso e mi sono preso una scheda "arduino uno" per verificare di persona la connettività.

Prima delusione: arduino uno ha una sola porta seriale, o la usi per collegarlo al pc tramite usb, o la usi per altro; tentando dei "paralleli" si fanno solo pasticci. Altri modelli hanno fino a 3 seriali. E' vero che in una applicazione finita una può bastare per collegarci KNXgate e poi una scheda ethernet può consentire di interagire da esterno, ma è altrettanto vero che in fase di sviluppo e debug un collegamento pc-usb-seriale è indispensabile.

Negli esempi di arduino ho trovato un gestore di porta seriale software apparentemente adatto al mio scopo poichè consente di gestire una seriale virtuale sfruttando 2 pin del gpio.

Dopo vari tentativi ho scoperto che questo modulo dà un po' di problemi se si tenta di utilizzarlo alla velocità prevista da knxgate cioè 115200 baud, mentre funziona abbastanza bene a 38400 baud.

E' nata una nuova versione dei firmware KNX/SCSgate (18.41) che supporta un comando di diminuzione della velocità @s che la porta a 38400 baud.

Il primo esempio Arduino che vi presento consente di usare il monitor seriale di Arduino per mandare comandi e ricevere dati in formato ascii, come usare "putty" e la scheda mcp2200.

Limitazione: il buffer  di "SoftwareSerial" è limitato a 64 bytes e non c'è verso di aumentarlo o di accumulare i dati in un buffer maggiore - quindi se usate il comando @h il testo ricevuto è troncato (poco male).

Con questo programmino ho loggato da pc un po' di messaggi sul bus, ed ho mandato dei messaggi per accendere e spegnere dispositivi.

ATTENZIONE - anche se knxgate lavora a 38400 baud, l'interfaccia seriale verso il pc lavora a 115200 e tale va impostata nel monitor arduino.

Il passo successivo è stata una piccola evoluzione che consente di usare la porta seriale/usb di arduino (quasi) esattamente come se fosse la seriale di SCSgate / KNXgate.

Significa poter usare direttamente "putty" senza aprire la IDE di arduino, oppure il mio software di aggiornamento firmware per aggiornare il firmware di SCSgate/KNXgate senza apparecchi programmatori.

Anche questo esempio è riservato alle versioni firmware a partire da 18.41

Il programma di aggiornamento diretto del firmware da pc si chiama "usbpicrepro" e l'ho già pubblicato sul sito, da qualche parte - attenzione,  caricando un firmware non adatto renderete inutilizzabile il vostro apparecchio che dovrà essere riprogrammato tramite pickit3.

ATTENZIONE - l'interfaccia putty va impostata a 115200 baud.

Multi comando

 ESCAPE='HTML'

Questo esempio è adatto a qualunque modello di SCSgate e KNXgate.

Questo esempio utilizza il comando @w e quindi è adatto a reti SCS o Vimar by-me, potrebbe non funzionare su reti vere KNX. Per un esempio indipendente dal tipo di rete riferitevi all'esempio con auto-apprendimento.

L'interfaccia seriale va connessa ai pin 0 e 1 e lavora a 115200 baud - il monitor seriale NON va aperto.

L'esempio mostra come utilizzare i pin di ingresso Arduino (nell'esempio i pin 2-3-4-5) in altrettanti comandi accendi/spegni del domotico. E' stato testato su SCS, dovrebbe funzionare senza problemi anche su Vimar, per altri konnex potrebbero necessitare adeguamenti.

Attenzione, sui pin 2-3-4-5 vanno connessi dei pulsanti verso il positivo +5 e delle resistenze di pulldown (10k) verso il negativo GND.

E' indispensabile assegnare a ciascun pulsante l'indirizzo domotico del dispositivo da accendere-spegnere cambiando nel programma i valori assegnati alle costanti SW_2  SW_3 SW_4 SW_5. Per scs gli indirizzi sono quelli scritti sulle etichette degli attuatori, per knx vanno scoperti loggando il traffico.

Il programmino è facilmente adeguabile ad un diverso numero di comandi.

Volutamente ogni pulsante premuto che accende o spegne introduce una pausa di quasi mezzo secondo per evitare accensioni e spegnimenti a raffica.

Facilmente adattabile per altri usi secondo fantasia: accendere o spegnere a tempo, oppure sotto il controllo di eventi esterni, di sensori, random (dissuasione al furto), eccetera..

Multi comando / attuatore

Ho costruito un piccolo circuito stampato con 6 pulsanti e 6 led. Ho aggiunto anche un pulsante di servizio.

Ci ho messo dei connettori in modo che si inserisca perfettamente nei connettori di "arduino uno". Ci ho messo un connettore femmina dove poter inserire KNXgate o SCSgate.

E' un demo completo di trasmissione e rcezione comandi, in altre parole i pulsanti fanno da interruttori e i led simulano degli attuatori. Nulla vieta di collegare al posto dei led una scheda rele' (i relè non possono essere pilotati direttamente da arduino, necessitano di un transistor di pilotaggio).

Funziona sia con SCS che con KNX vimar by-me, forse da adattare con altri knx.  Per un esempio indipendente dal tipo di rete riferitevi all'esempio successivo con auto-apprendimento.

Bisogna personalizzare l'apposita sezione dove ci sono i comandi #define (dichiarazioni) per specificare:

- se usiamo KNXgate o SCSgate

- i pin di ogni interruttore e di ogni led

- gli "indirizzi" a cui corrisponde ogni interruttore e ogni led

Gli indirizzi dei pulsanti devono corrispondere a quelli degli attuatori da accendere e spegnere. Gli indiizzi dei led devono corrispondere a quelli di attuatori esistenti o anche nuovi. Unica accortezza: se i led corrispondono ad indirizzi di NUOVI attuatori teoricamente alla ricezione di un segnale di accendi/spegni l'attuatore dovrebbe inviare indietro un segnale di conferma. Ciò non viene fatto in questa demo e perciò sul pulsante di comando remoto il led di segnalazione non funzionerà.

Il pulsante aggiuntivo al momento serve solo a testare la comunicazione tra arduino e knx/scsgate. In una prossima versione sarà il pulsante di "autoapprendimento".

Se a qualcuno interessa, qui trovate il disegno del pcb, lato vetronite:

http://guidopic.altervista.org/arduino/arduino_1.pdf

Dato che si innesta direttamente su arduino, i componenti sono messi in maniera inusuale: i pin dei connettori maschi che vanno verso arduino sporgono dal lato vetronite, tutti gli altri componenti, compresi i pulsantini, i led ed il connettore femmina verso xxxGate vanno saldati lato rame. Le resistenze smd da 10K possono essere evitate perchè sui pin di input viene settato il pull-up.

Qui una vista lato rame/componenti:

http://guidopic.altervista.org/arduino/arduino_2.pdf

 ESCAPE='HTML'

Multi comando con autoapprendimento

Anche il presente progetto si basa sul medesimo hardware del progetto precedente con pulsanti e led.

Funziona su qualunque tipo di rete SCS o KNX.

Con le dichiarative si possono adeguare i numeri dei pin a cui sono connessi i pulsanti e i led. E' obbligatorio anche qui dichiarare se l'interfaccia sarà KNX o SCS. Però qui non vanno definiti gli indirizzi dei dispositivi perchè il modulo funziona in "autoapprendimento" e si memorizza poi i comandi nella eeprom di arduino.

Il bottone di autoapprendimento è il pulsante numero 7, quello che l'altra volta non era stato usato. Ci sono tre modalità di autoapprendimento del tutto simili. Con la prima modalità (A) si fa "capire" ad arduino  a quali indirizzi devono corrispondere i pulsanti, con la seconda modalità (B) si fa capire ad arduino a quali indirizzi devono corrispondere i led, con la terza modalità (C) si fanno entrambe le cose assieme ed è utilissima se vogliamo che ogni pulsante sia abbinato al rispettivo led.

Premendo il bottone 7 si entra in modalità autoapprendimento -A- e tutti i led lampeggiano rapidamente, se premiamo ancora una volta il bottone 7 si entra in modalità -B- e tutti i led lampeggiano lentamente, se premiamo ancora una volta il bottone 7 si entra in modalità -C- e tutti i led rimangono accesi, se premiamo ancora una volta il bottone 7 si torna in modalità normale.

Quando si è in modalità autoapprendimento (A o B o C) si preme il bottone (da 1 a 6) di cui si vuole programmare la funzione od il rispettivo led. A questo punto solo il led corrispondente lampeggerà e si rimane in attesa del primo telegramma che transita sul bus. Quindi a questo punto usiamo l'interruttore (scs/knx) che vogliamo clonare ed il led smetterà di lampeggiare e torneremo in modalità normale. Possiamo tornare in modalità normale anche ri-premendo ancora il bottone 7.

In modalità normale ogni volta che premiamo un bottone verrà mandato sul bus il comando memorizzato (ad ogni pressione dispari) o il comando opposto (ad ogni pressione pari). Quindi il sistema è adatto per accendi-spegni. Per altri usi (simulare bottoni apriporta o citofono o altro) dovete apportare delle correzioni.

La prossima volta si passa a ethernet, il modulino è arrivato.

http://guidopic.altervista.org/arduino/XXXmultiCmdAuto.ino

 

Ethernet

Ho comprato il modulino ethernet ENC28J60 - l'ho scelto sopratutto per il basso costo.

Ho scaricato la libreria "Ethercard" e ci ho speso 2 settimane per arrivare solo ad un funzionamento intermittente e parziale. Ho cestinato la libreria ed ho scaricato la libreria "UIPEthernet", ho riscritto il firmware ed in poco tempo tutto (o quasi) ha cominciato a funzionare:

Approccio: Arduino ha poche risorse e volerci caricare pagine web senza memoria esterna è un'impresa. Inoltre sempre a causa della scarsità di risorse la velocità di risposta con pagine web sarebbe deludente. Ho seguito un approccio diverso: Arduino fa da server UDP e si limita a fare da ponte tra ethernet e knxgate (o scsgate) - l'applicazione rimane sempre il mio "demo" VB6 opportunamente adattato e che ora oltre alle porte seriali COM1-2-3-4 ha a disposizione una porta UDP - versione 4.0

Se poi qualcuno vorrà scrivere un'pplicazioncina Android o simili, ben venga.

Nell'allegato per arduino stanno scritti i numeri del connettore GPIO utilizzati: 2 per knxgate, 4 per ENC28J60, 1 per un led di segnalazione, più le alimentazioni. 

La linea del bus domotico (TP) è connessa a KNXgate che "colloquia" con Arduino, a sua volta questo è connesso a ENC28J60 che a sua vlta va connesso al router di casa vostra.

Viene utilizzato un indirizzo IP fisso (192.168.2.180) - adeguatelo alle vostre esigenze;  dovrà essere adeguato perchè le prime 3 cifre devono corrispondere a quelle del vostro router. Scusate il linguaggio terra-terra, è per cercare di farmi capire da tutti.

Demo arduino-ethernet:

http://guidopic.altervista.org/arduino/xxxUDPgate.ino

Demo x PC con sorgenti in VB6:

http://guidopic.altervista.org/knxgate/knxscsgate_v4.0.zip