Junior 3 – Pagina tecnica

Si parte dal considerare tutti i sensori installati in casa: rilevatori movimento, temperature, luce, apertura finestra e scuro esterno – questo per ogni stanza. Poi gli attuatori relè per accendere luci nelle stanze, o LED segnapasso, o cicalini, cancelli, luci esterne, ecc.

Poi ci sono i rilevatori particolari, come quelli che ricevono un impulso (connessione a massa ci un open-collector) dai rilevatori energia, informazioni dalla centralina d’allarme, sensore antiallagamento ecc..

TUTTE queste cose vengono segnalare/gestite dai 3 Arduino che sono nei 3 piani della casa. Per condizionare i segnali per gli Arduino ho dovuto costruire i circuiti sotto.

Questo sotto, il più complesso, è nell’interrato.

Questo sotto è al piano terra. C’è uno simile per il primo piano che non ho fotografato.

Data la precedente esperienza di correnti indotte su cavi che corrono lungo la casa, per “propinare” all’Arduino un segnale pulito, ho aggiunto anche delle impedenze per bloccare eventuali spike entranti – sono i blocchettini blu che si vedono nella foto circuito.

Qui un esempio degli N schemi per il condizionamento di vari segnali, e sotto ancora, altri schemi.

 

 


Una volta disponibili i segnali negli Arduino, li rendo disponibili in LAN tramite un protocollo ad-hoc. I tre arduino sono sempre connessi via tcp/ip al PC centrale, che dà loro dei comandi, o viene avvisato di variazioni di stato.

Ecco qui un esempio del listato del codice nell’Arduino Piano interrato . Come si vede, la comunicazione avviene su porte specifiche. L’arduino funge anche da http server per rispondere sulla porta 300, che avviene quando vengono interrogati da uno script php che mostra i risultati dell’interrogazione dei tre Arduino qui: michieletto.ddns.net .

Infine ora entra in gioco il “cuore” del sistema, ovvero il software (che io chiamo J3) scritto in VB6, per parlare con gli Arduino e con il mondo esterno. Questo sistema è sostanzialmente una macchina a stati che, in funzione dei segnali provenienti dagli Arduino e da altre fonti, dà dei comandi agli Arduino oppure emette frasi tramite sintesi vocale (tutti i piani hanno un altoparlante collegato ad un amplificatore che prende il segnale dalla sk audio del PC), oppure invia email.

Ci sono attualmente altre fonti da cui J3 prende informazioni:   una stazione meteo installata fuori (LaCrosse WS2310) che comunica tramite seriale RS232 col PC, e controllata tramite il software “Weather Display” installato nel PC;  c’è anche la lettura da Internet della pagina 101 di televideo (solo testo), con estrazione dell’ultim’ora – polling periodico della riga specifica della pagina di televideo.

Il sistema di lettura vocale nativo di Win2K è abbastanza buono, anche se quando legge le ultim’ora di televideo va a storpiare alcune parole, come ad esempio i nomi propri o le parole in inglese, ad esempio “Trump” lo legge con le “u”. NON sono riuscito a trovare un lettore italiano di pari qualità, e facile da interfacciare a VisualStudio, su WIN7.

Avevo pianificato altre fonti da cui prendere informazioni (ad esempio lettura dello stato degli altri dispositivi IP collegati in LAN, come TV, NAS, PC, smartphones, ma mi sono fermato, il sistema era già abbastanza complesso.

 

 

Junior 3 – 2011

Junior 3 è nato con il trasloco nella nuova casa. Avendone seguito la costruzione dal grezzo, non avevo più limitazioni di cavi che non passano nelle canalette, impossibilità ad usare la rete cablata, difficoltà a implementare i  vari sensori: partendo da zero, ho cablato…. parecchio!

Attualmente è il sistema in funzione. Qui mostro le varie funzioni:

Qui una pagina tecnica con un po’ di documentazione.    Per avere un’idea della complessità, questo è il quadro elettrico al piano interrato. In basso a destra un po’ nascosto il PC principale.

 

Qui sotto il vano al piano terra, dove arrivano tutti i cavi piano terra, a sinistra c’è uno switch non visibile, appoggiato alla massa di cavi c’è un Arduino Mega256, e a destra avvitato al pannello compensato i circuiti di condizionamento segnali per l’arduino.

Qui sotto, fotografata da sopra, la scatola di derivazione al primo piano, con a sinistra un altro arduino e a destra scheda condizionamento segnali – non ci stava piu’ nulla per cui ho “esploso” in fuori la scatola di derivazione – tanto sta dietro la testa del letto.

Junior 1 – 1998 – Descrizione tecnica

Il sistema non ha lo scopo di allarme o protezione antifurto; serve solo per collezionare dati provenienti da varie sorgenti, e reagire secondo una macchina a stati.  Il sistema è costituito da  tre parti principali.

*    La prima è un programma in linguaggio macchina per 6502 (per un vecchio computer Apple ][ ) che effettua una misurazione ciclica dei valori che variano lentamente, ed un controllo frequente per i segnali che hanno brevi transienti (es. suona il campanello). Le misurazioni vengono convertite in un sistema di messaggi a byte che vengono inviate, via interfaccia parallela, ad un PC con sistema operativo DOS.
*     In questo PC gira un programma in C (QuickC2.5) compilato, e che contiene una grande macchina a stati, che reagisce in vari modi in funzione dei segnali ricevuti dall’altro computer.
*     La terza componente (nell’immagine sotto, tutto cio’ che è a sinistra dell’Apple2) è tutto l’hardware necessario a condizionare i segnali

http://www.michieletto.com/html/Elettronica/Junior/Schema%20generale.jpg

Come usare la parallela per un dialogo tra un PC e HW esterno

L’interfacciamento tra l’hardware e l’apple2 (nello schema sopra chiamato Driver I/O) è presentato qui a lato. In sintesi la comunicazione avviene tramite memory-mapped I/O (tipica del processore 6502) e dove vengono usate le locazioni da C060 a C07F.

Viene usata una logica di decodifica che usa le linee A0..A3 dell’address bus, il data bus D0..D7, il segnale /C070 (che indica che è in fase di accesso la memoria che va da C070 a C07F), il segnale /C060 (analogo), il segnale R/W dal processore ed il segnale di clock phi0.
Tramite un 74LS138 estraggo i segnali da C060 a C067, mentre tramite un 74LS259 ottengo 8 linee di output dal C07X (X sono 4 bit, dove il MSB deve essere 0, gli altri tre indicano quale linea deve essere variata, e R/W  indica acceso/spento).
Sono usati anche due riconoscitori DTMF 8870, un ADC a 8 ingressi multiplexati, e vari integrati di I/O. Si noti che ho dovuto aggiungere qualche condensatore per eliminare strani spike che creavano problemi (ovviamente non vi dico quanto tempo ho perso qua..).

Qui sotto ci sono gli schemi dei rilevatori di tre segnali: luce SCALE (220volt), CAMPANELLO (12 volt), APERTURA PORTONCINO (12volt). Dal progetto originale ho dovuto variare il valore di qualche componente (dal progetto alla realtà… cambiano molte cose).

Questo è lo schema della parte che riguarda la commutazione telefonica, ed il rilevamento dello stato della linea: RING e LINEA ESTERNA OCCUPATA. Come si vede, i tre telefoni di casa possono essere collegati, ognuno in modo indipendente, alla linea esterna, a quella interna, o alla linea di “ring” (che fa squillare il telefono).

Qui invece c’è un circuito che mi ha fatto perdere un bel po’ di tempo: l’interfacciamento audio telefono, che prevede sia l’amplificazione dell’audio in ingresso, sia l’iniezione di audio in uscita.

Anche questo schema è stato molto sofferto: come misurare la corrente consumata dalla casa?? (a quel tempo non c’erano cose già fatte e pronte). Basta misurare la tensione indotta su alcune spire avvolte su uno dei due fili che portano il 220v alla casa. Ma si parla di microvolt!! Ed il segnale è tutt’altro che sinusoidale. E’ stata dura amplificare quel segnale, e non solo il rumore…

Questo è l’alimentatore ed è piuttosto semplice. Il secondario del trasformatore è un 17+17 volt. Si noti come ricavo la tensione di 60volt con un raddoppiatore (usato per la linea telefonica interna), e come uso un’impedenza per evitare che il segnale di fonia sulla linea interna venga annullatto dal condensatore di stabilizzazione.

Il software per l’Apple2 non è tantissimo. Ecco il LISTATO!

Idem per il SW in C per il PC (su DOS 3.3). Qui il LISTATO.

Ormai parliamo di tecnologie e software che si usavano decine di anni fa, quindi probabilmente poco interessanti, se non per i nostalgici.

Al solito non è il massimo cercare di capire qualcosa da un listato assembler. Basti capire che entrambi i programmi sono un loop continuo che tiene sotto controllo vari valori, e comunicano tra loro tramite un opportuno protocollo usando la porta parallela.
Dopo un anno di variazioni, il SW si è stabilizzato, ed ho lavorato poi solo sul programma in C, fino alla dismissione.

Junior 2 – 2003

Rispetto al vecchio Junior 1, il successore ha sostanzialmente SOSTITUITO il vecchio Apple2, usando al suo posto un micro ATMEL ATmega128, e sostituendo tutto l’hardware di condizionamento segnali fisici.

Inoltre è stato sostituito il PC portatile “dinosauro” con uno dove girava un SW fatto in Visual Basic 6.

Quindi è questo in figura il modulo HW che costituisce il cuore della SmartHome, sul fronte interfaccia verso l’esterno. E’ la funzione che raccoglie tutti i dati ed i segnali esterni, e li trasferisce ad un PC tramite la porta seriale che si vede sopra.  Il modulino che ho acquistato da chip45.de era il CRUMB128 versione 2.

 

 

 

 

Purtroppo al tempo era necessario scrivere il codice in assembler – non esisteva arduino. Ecco il codice scritto per il micro: Junior2_AVR . Alla fine bisognava compilare e “flashare” dal PC con “avrdude”.

Sopra al micro, ho messo anche due riconoscitori DTMF 8870, per rilevare i tasti premuti sulla linea telefonica esterna e quella interna.

Qui uno schema della “piastra 1”. C’erano circa 15 piastre con connettore maschio a doppia fila, per il montaggio in verticale su una piastra base che interconnetteva i vari segnali di ogni piastra verso le altre ove necessario.

 

 

 

Qui sotto le assegnazioni dei vari segnali alle varie porte del micro. Sono tutti evidenti i problemi di assenza di espandibilità, totale assenza di aderenza a standard predefiniti.. ma al tempo non esistevano standard (a parte l’X10, e allora mi sembrava un progettone).

 

Qui invece la documentazione sulla piedinatura della piastra n.1

 

 

 

 

 

 


Ecco un altro esempio di un’altra piastra (n.2) per la gestione dei telefoni – erano previsti 3 telefoni interni. Uno connesso di default alla linea esterna (TGI=Tel.giorno), e gli altri due alla linea interna (alimentata a 48V), per parlare tra loro (TNO=Tel.notte e TGA=Tel.garage).

Il software, tramite lettura stato telefoni, generazione di segnali per ring, per i toni, e riconoscimento DTMF, funzionava anche come piccolo PABX.

 

 

 

Qui lo schema della piastra nella parte Relè, e dell’altra componente che generava i segnali telefonici.

 

E qui il layout fisico della piastra (uso sempre millefori!!!!). A rivedere queste cose adesso… quanta voglia di fare avevo !!!


Riguardo al software di gestione, lavorando ora in VB6, è stato migliorato e aggiunto molto. Questa la tipica schermata nel PC di controllo:

Si vede che ora c’è interazione con Internet (ultim’ora televideo, email), c’era colloquio con una PCMCIA Nokia che poteva inviare/ricevere SMS, sintesi vocale, plsy brani MP3, graficazione segnali ingresso.

Il software non è grosso, è tutto qui:  Junior2-2.


Qui una gallery delle piastre, quando le ho smontate per traslocare nella nuova casa – alcune sono ancora in magazzino…

 

La mia SMARTHOME

La mia SMARTHOME

Clikkare per ingrandire

Come usare la parallela per un dialogo tra un PC e HW esterno

Il sistema non ha lo scopo di allarme o protezione antifurto; serve solo per collezionare dati provenienti da varie sorgenti, e reagire secondo una macchina a stati.  Il sistema è costituito da  tre parti principali.

*    La prima è un programma in linguaggio macchina per 6502 (per un vecchio computer Apple ][ ) che effettua una misurazione ciclica dei valori che variano lentamente, ed un controllo frequente per i segnali che hanno brevi transienti (es. suona il campanello). Le misurazioni vengono convertite in un sistema di messaggi a byte che vengono inviate, via interfaccia parallela, ad un PC con sistema operativo DOS.
*     In questo PC gira un programma in C (QuickC2.5) compilato, e che contiene una grande macchina a stati, che reagisce in vari modi in funzione dei segnali ricevuti dall’altro computer.
*     La terza componente è tutto l’hardware necessario a condizionare i segnali

 

L’interfacciamento tra l’hardware e l’apple2 (nello schema sopra chiamato Driver I/O) è presentato qui a lato. In sintesi la comunicazione avviene tramite memory-mapped I/O (tipica del processore 6502) e dove vengono usate le locazioni da C060 a C07F.
Viene usata una logica di decodifica che usa le linee A0..A3 dell’address bus, il data bus D0..D7, il segnale /C070 (che indica che è in fase di accesso la memoria che va da C070 a C07F), il segnale /C060 (analogo), il segnale R/W dal processore ed il segnale di clock phi0.
Tramite un 74LS138 estraggo i segnali da C060 a C067, mentre tramite un 74LS259 ottengo 8 linee di output dal C07X (X sono 4 bit, dove il MSB deve essere 0, gli altri tre indicano quale linea deve essere variata, e R/W  indica acceso/spento).
Sono usati anche due riconoscitori DTMF 8870, un ADC a 8 ingressi multiplexati, e vari integrati di I/O. Si noti che ho dovuto aggiungere qualche condensatore per eliminare strani spike che creavano problemi.
Qui ci sono gli schemi dei rilevatori di tre segnali: luce SCALE (220volt), CAMPANELLO (12 volt), APERTURA PORTONCINO (12volt). Dal progetto originale ho dovuto variare il valore di qualche componente (dal progetto alla realtà… cambiano molte cose).
Questo è lo schema della parte che riguarda la commutazione telefonica, ed il rilevamento dello stato della linea: RING e LINEA ESTERNA OCCUPATA. Come si vede, i tre telefoni di casa possono essere collegati, ognuno in modo indipendente, alla linea esterna, a quella interna, o alla linea di “ring” (che fa squillare il telefono).

Qui invece c’è un circuito che mi ha fatto perdere un bel po’ di tempo: l’interfacciamento audio telefono, che prevede sia l’amplificazione dell’audio in ingresso, sia l’iniezione di audio in uscita.

 

Anche questo schema è stato molto sofferto: come misurare la corrente consumata dalla casa?? Basta misurare la tensione indotta su alcune spire avvolte su uno dei due fili che portano il 220v alla casa. Ma si parla di microvolt!! E’ stata dura amplificare quel segnale, e non solo rumore…
Questo è l’alimentatore ed è piuttosto semplice. Il secondario del trasformatore è un 17+17 volt. Si noti come ricavo la tensione di 60volt con un raddoppiatore (usato per la linea telefonica interna), e come uso un’impedenza per evitare che il segnale di fonia sulla linea interna venga annullatto dal condensatore di stabilizzazione.
Il software per l’Apple2 non è tantissimo. Ecco il LISTATO!
Se vi interessa saperne di più contattatemi. Al solito non è il massimo cercare di capire qualcosa da un listato assembler. Ad ogni modo basti capire che questo programma è un loop continuo che tiene sotto controllo vari valori, e comunica tramite un opportuno protocollo le variazioni al PC tramite la parallela.
Dopo un anno di variazioni, il SW si è stabilizzato, ed ho lavorato poi solo sul programma in C.

Junior 1 – 1998

Qua siamo nella casa “vecchia” (appartamento), dove avevo realizzato un sistema costituito da due computer, tanti cavi passati nelle canaline strette (un incubo), alcuni moduli (come quello sotto) distribuiti in varie stanze, e vari circuiti di condizionamento segnale: campanello, corrente, circuito riscaldamento, luce scale, portoncino ingresso, rivelatore movimento. I moduli rivelavano il livello  temperatura, luminosità, ed avevano uscita altoparlante e un LED (per mostrare il “select”). Poi un altro circuito rilevava lo squillo telefono, e lo stato linea telefonica. Per chi fosse interessato a queste archeo-realizzazioni ho una pagina TECNICA.

Quello in figura è un modulo HW che costituiva la parte remota della SmartHome. Ogni stanza aveva un modulo simile nascosto nella scatoletta di derivazione corrente. Si vede la NTC e la fotoresistenza.
Il modulino era indirizzato uno alla volta tramite linea TTL seriale e shift register a 8 bit, e qualche linea analogica di ritorno. Il programma ASM dell’apple 2 pilotava la linea seriale di selezione, e faceva un polling periodico di tutti i moduli, leggendo i valori analogici di ritorno, e con un loop piu’ stretto leggeva i segnali “veloci”, come ad esempio pressione pulsante accensione luce scale.

La foto sinistra mostra il sistema alloggiato nei due ripiani più alti dell’armadio vicino l’ingresso (lasciati fortunatamente liberi per gentile concessione della moglie). Nel ripiano sopra un computer tipo Apple2, con floppy drive e logica di interfacciamento con l’HW; sotto c’è un portatile 386 che dialoga con l’apple sopra tramite la porta parallela; in basso a sinistra del portatile c’è un walkman con radio perennemente sintonizzato su RDS, che mi dà segnale audio per diffondere musica quando voglio.

 

 

Qui invece si vede meglio la parte in alto di terminazione cavi e condizionamento segnali: in alto a destra parzialmente visibile una ventola per far uscire il calore (quando serve), a sinistra vario hardware per gestire i segnali reali e convertirli in logica TTL.

 

Ho registrato vari pezzi di file .WAV in modo da permettere al PC di comporre ed emettere (tramite un sistema di altoparlanti diffusi in casa), alcune frasi compiute.  Ad esempio, quando non è stato rilevato movimento in casa (e silenzio) per più di 3 ore, e non è notte, il PC stabilisce che non c’è nessuno a casa. In questo stato “dormiente” dove non viene emesso alcun suono, se il PC rileva una variazione del rilevatore presenze, viene emesso una frase di saluto e viene elencato tutto ciò che è successo durante l’assenza (suonato campanello o telefono, quante volte, e a che ore, ecc…).

In questo modo ho realizzato varie funzioni che rendono la casa più… accogliente. Ecco la tipica schermata del software nel PC386 – ovviamente c’erano popolate tutte i valori dei segnali letti nel corso del tempo; si vedono 6 moduli.

Purtroppo durante un brutto temporale notturno un fulmine è entrato tramite le linea telefonica; l’accoppiamento induttivo dei cavi che scorrono nelle canalette (ho dovuto passare cavi di segnale lungo le canalette della 220V, non c’era scelta) ha portato un picco di tensione sulla parte di interfaccia HW, arrivando a bruciare vari componenti CMOS e anche TTL.  Dopo la sostituzione di quasi tutti gli integrati, ho riattivato il tutto.

Dopo qualche mese un altro fulmine ha causato gli stessi danni. Da allora ho disattivato il sistema per poi riprogettare il tutto con logiche nuove, e anche per evitare il ripetersi dell’inconveniente. Ovviamente nel frattempo nessun fulmine è mai più caduto nelle vicinanze.

 

I dettagli tecnici li trovate qui

Elettronica

Costruisco per divertimento ogni genere di circuito elettronico. L’unico limite è il tempo disponibile, che è sempre poco. Al solito comunque, vale la regola che per le cose che uno desidera veramente, il tempo si trova sempre.

Da qualche anno il lavoro che tiene banco è lo sviluppo della smarthome. Il progetto ha passato varie versioni. Mia moglie ha chiamato il progetto “Junior“, così lo chiamo anche io.

Se ne parla oggi in tutte le salse, ma non ho ancora visto nulla di effettivamente integrato con i device oggi installati in casa, e utilizzabile da tutti. Probabilmente perché per fare qualcosa di efficace è necessario operare pesantemente sulla standardizzazione, dai produttori di elettrodomestici ai dispositivi degli impianti elettrici.

JUNIOR 1 – 1998 – Questo in figura è un modulo HW della vecchia SmartHome.​ Un vecchio Apple ][, SW in ASM 6502 per comunicazione basso livello tramite interfacce HW custom, protocolli custom, moduli custom. SW alto livello in C su vecchio portatile con MSDOS. Tutto progettato in studio e montato in cantina.
JUNIOR 2 – 2003 – Evoluzione della precedente, stavolta con microcontroller ATMEL ATMega128. Sempre tutto super custom. IL passo in avanti è l’uso del microcontroller, che fa in SW molte cose prima fatte da zero con IC TTL.
JUNIOR 32011- Cambio casa e nuovo sistema – tutto riprogettato da zero, con Arduino e PC con VB6 su Win2K (IN FUNZIONE).
JUNIOR 4 – 2017
L’hardware rimane quello di J3, ma ho scritto il SW per migrare tutto in MQTT (dialogo tra arduini e PC centrale). SW centrale in Visual Studio 2015 C#. Tutto funzionicchia, ma manca la parte di sintesi vocale, così semplice in W2K e VB6, e così impossibile con W7 (qualità “sam” molto scadente).
*** TEMPO SPRECATO *** meglio usare SW già pronto, quindi evoluzione verso J5
JUNIOR 5 – 2021
L’hardware rimane quello di J3, ma è stato aggiunto un raspberry 4 con software Home Assistant !!
Il vecchio J3 continua a funzionare, ma tutti gli Arduino ora dialogano anche in MQTT, per cui comunicano tutto anche al Raspberry. Tramite interfaccia Lovelace ora ho una semplice vista “universale” da PC, tablet, cellulare.  Oltre agli Arduino ora la casa è popolata da vari micro tipo ESP8266, che controllano luci, condizionatori, caldaia.
Ora è facile integrare anche la localizzazione dei cellulari e prendere iniziative sulla base di dove ci troviamo io e Lisa.

Col proliferare di microcontrollori a basso costo, e sistemi di sviluppo piu’ semplici da usare, diventa tutto piu’ semplice.  Adesso si realizzano sempre più funzioni con sviluppo di codice, piuttosto che aggiungendo componenti.