GGM EVO, il GradiGiornimetro "Mark II"


Nella puntata precedente
Questo progetto è l'evoluzione del precedente "Gradigiornimetro" ( link: Un datalogger "GradiGiornimetro" ) del quale mantiene le funzionalità, con una serie di miglioramenti e una interessante deriva verso l'utilizzo come microstazione meteorologica APRS. Per quanto riguarda il significato dei gradi giorno, così come per la gestione generale del software e il trattamento dei dati memorizzati, rimando al link sopra riportato. L'attuale "EVO", o "Mark II" eredita dal "babbo" queste caratteristiche:

Il Mark II
Il "gradigiornimetro" sta scaldando i muscoli in attesa della stagione invernale; nel frattempo, confrontandomi con amici sui possibili miglioramenti, ho deciso di costruire una seconda versione, la Mark II appunto, che in più offre:
  • Lettura e memorizzazione della umidità relativa;
  • Velocità del collegamento seriale configurabile da 1200 a 19200 baud via software;
  • Collegamento seriale gestito dalla UART hardware interna al processore;
  • Circuito migliorato per la ricarica della batteria tampone;
  • Reset della memoria via software;
  • Connettore ICSP per aggiornamento firmware;
  • Possibilità di funzionamento come mini-stazione meteo stand-alone
  • Emissione di stringhe di dati compatibili al formato APRS per la trasmissione dei dati via radio in abbinamento ad un TNC.

Schema
Già al primo sguardo è evidente l'adozione di un microprocessore più potente. A dire il vero la scelta è caduta sul PIC 16f877 in quanto giaceva nella sezione "incauti acquisti" del cassetto dei componenti. In un precedente progetto mi sono accorto di aver acquistato la versione 877-04 a 4 MHz. Per qualche settimana ha funzionato senza problemi "overcloccato" a 10 MHz, ma appena avuta l'occasione l'ho sostituito con la versione 877-20. Quale miglior occasione per riutilizzare quel PIC? Oltretutto così facendo sono rimaste parecchie porte libere per possibili espansioni del sistema, ad esempio sensori di vento/pioggia, tanto per rimanere in campo meteo, telemetria o altro. La sezione di alimentazione è sostanzialmente immutata ed è composta da un classico regolatore di tensione tipo 7805. La ricarica della batteria tampone è affidata ad un circuito regolatore a corrente costante composto dai transistor Q1 e Q2. La corrente di carica è determinata dalla resistenza R6 secondo la formula Ir = 0.7 / R6; con il valore adottato si ottengono circa 4 mA. La batteria utilizzata è una NiMh da 8.4V/150mA in contenitore tipo transistor 9V; la corrente di ricarica è dunque circa 1/40 della capacità e può essere mantenuta a tempo indefinito senza causare danni. Per la misura di temperatura e umidità ho utilizzato il sensore tipo DHT22 prodotto da Aosong Electronics e disponibile anche su alcuni siti e-commerce italiani. Come per la precedente sonda Maxim, avendo uscita digitale, non ci sono dubbi riguardo alla taratura o all'influenza di altri fattori sui valori rilevati. La EEPROM tipo 24LC1025 permette di memorizzare i dati e comunica col processore mediante bus I2C.


Collegamenti ai connettori:
  • P1: 3 poli, sensore di temperatura / umidità;
  • P2: 2 poli, alimentazione;
  • P3: 5 poli, ICSP (al programmatore);
  • P4: 2 poli, batteria tampone da 8.4V/150mA NiMh;
  • P5; 3 poli, RS232 (1=RXD, 2=TXD, 3=GND);
  • P6: 4 poli, ai pulsanti NA;
  • DISP: 16 poli, al display HD44780.

Circuito stampato, lato rame


Disposizione dei componenti


Elenco componenti GGM-EVO "Mark II"

Tipo/valore Quantità Riferimento
15pF 2 C3, C6
100nF 4 C1, C2, C4, C8
100uF 35V 1 C5
10uF 16V 1 C7
1N4001 2 D1, D2
1N4148 1 D3
SIP HEADER - 2PIN 2 P2, P4
SIP HEADER - 3PIN 2 P1, P5
SIP HEADER - 4PIN 1 P6
SIP HEADER - 5PIN 1 P3
SIP HEADER - 16PIN 1 DISP1
BC547 2 Q1, Q2
2N2222 2 Q3, Q4
180 Ohm 1/4 W 1 R6
2.7 Kohm 1/4 W 2 R3, R4
4.7 Kohm 1/4 W 4 R2, R8, R9, R10
10 Kohm 1/4 W 5 R1, R5, R7, R11, R12
PIC 16F877 1 U2
Quarzo 4 MHz 1 X1
24LC1025, eeprom 128K x 8 I2C 1 U1
uA 7805 1 U3
10 Kohm trimmer 1 V1
Display LCD 4x20 HD44780 1 DISP1
Pulsanti da pannello NA 3  
Connettore alimentazione 1  
Connettore polarizzato a 3 poli (es. DIN, XLR...) 1  
Connettore DB9 femmina per RS232 1  

Il prototipo
Ecco come si presenta il lato componenti del "paziente zero" a fine montaggio:


Il lato rame


Il firmware
Il primo problema che mi si è presentato è stato quello di far funzionare il sensore. A quanto pare infatti il DHT22 piace molto agli smanettoni di Arduino e degli Atmel in generale, molto meno ai seguaci di Microchip. In effetti ho trovato una libreria in rete, scritta per i PIC, che però si è rivelata bacata nel caso di temperature negative. Ho modificato la libreria affinchè funzionasse, ed eliminato i calcoli e le variabili "float" a 32 bit: dovendo memorizzare i dati su una EEPROM e non su un hard disk meglio risparmiare spazio! Far convivere le temporizzazioni necessarie alla lettura del bus con l'interrupt del RTC è stato un po' laborioso, inoltre il datasheet ufficiale contiene alcune informazioni inesatte... alla fine comunque l'accrocchio si è convinto a fare il suo dovere. A questo punto, visto che il micro aveva ancora un buon 50% di memoria inutilizzata, ho pensato a cosa farci... Intanto un sistema che potesse permettere la registrazione dei dati da remoto, magari via radio, in modo da non dover armeggiare con un computer nelle vicinanze del datalogger in caso di installazione scomoda. Se fossi riuscito ad emulare una stazione meteo commerciale (Peet Bros, Davis o qualcosa del genere) avrei potuto utilizzare i software già pensati per costruire grafici e statistiche. Ma la stessa cosa è possibile sfruttando la rete APRS, e i protocolli di comunicazione relativi, eliminando computer e passaggi intermedi. Semplificando le cose, si tratta in buona sostanza di manipolare delle stringhe di testo "riempiendole" opportunamente con le grandezze rilevate dal sensore, come spiegato più sotto. Nel file allegato sono presenti sorgente, librerie e firmware già compilato per il PIC 16f877 con quarzo da 4 MHz. [Scarica].

L'APRS
I radioamatori che operano nei modi digitali avranno prima o dopo avuto a che fare con l'aprs, acronimo che sta per Automatic Position Reporting System. Non voglio addentrarmi in un tutorial, in rete ce ne sono molti, ma per i non addetti provo a banalizzare al massimo giusto per inquadrare il concetto. Il sistema si compone di una rete di stazioni, sia radio che connesse ad internet, che funzionano al tempo stesso da trasmittenti (dei loro dati), riceventi (del traffico di rete) e ripetitrici dei dati ricevuti qualora questi debbano essere inoltrati verso destinazioni più lontane. La rete è costituita da stazioni radio fisse, mobili e portatili e sono utilizzate sia le onde corte che le VHF/UHF; il protocollo di comunicazione è l'AX25 per le V/UHF, il PSK31 per le HF. Alcune stazioni fisse operano poi la interconnessione fra la rete radio e internet, consentendo in pratica di coprire qualsiasi territorio. I dati vengono trasmessi da ogni stazione in "pacchetti" a intervalli di qualche minuto. La peculiarità principale del sistema è che il routing, cioè l'instradamento dei dati e la loro propagazione nella rete, avviene con un sistema poco efficiente in termini di velocità, ma al tempo stesso molto efficace, dal momento che non è necessario conoscere i punti di accesso, nè che ciascun punto sia presente stabilmente in rete... basta "lanciare il sassolino" e, se si raggiunge almeno una stazione adiacente alla nostra, i nostri dati verranno propagati a tutto il sistema. Ciò implica che si possono utilizzare apparecchiature relativamente semplici (leggi: poco costose, facili da riparare, a basso consumo elettrico) mantenendo piena funzionalità. Una delle prime applicazioni era quella di tracciare la posizione di mezzi mobili (veicoli, navi) e di scambiare brevi messaggi fra le stazioni; successivamente il sistema si è rivelato interessante anche per la diffusione di dati e allerte meteo, telemetria e "report" di varia natura. Più di mille parole vale un giretto sul sito http://www.aprs.fi dove sono visibili le stazioni fisse e mobili, oltre a quelle meteo. Ogni oggetto, se cliccato, apre una tendina con il dettaglio dei dati. Le stazioni gestite da radioamatori riportano il nominativo del titolare, quelle che riportano CWOPxxxx sono di privati che aderiscono al Citizen Weather Observer Program. Ognuna di esse si compone tipicamente di una stazione meteo, un pc con un programma di gestione, un TNC (terminal node controller, una specie di modem), radio trasmittente e antenna, oppure collegamento a internet. Bene, ho cominciato a cercare un modo per far diventare il Mark II un sistema "embedded", cioè una unità autonoma che comprendesse gli elementi citati. Ho valutato che implementare tutta la gestione software all'interno del 16f877 sarebbe stato impossibile. Poi ho trovato la soluzione: far emettere delle stringhe di testo a intervalli predefiniti contenenti i dati di lettura nel formato richiesto dallo standard APRS. Un altro circuito (il TNC) si sarebbe occupato di trasformare la stringa in toni audio opportunamente modulati, aggiungendo le informazioni relative al mittente del pacchetto di dati, da inviare infine ad un trasmettitore. Il "pro" del sistema consiste nel fatto che, non volendo utilizzare la parte radio, i dati sono comunque resi disponibili ad un dispositivo esterno, ad esempio per un logging remoto, utilizzando una routine di "parsing" delle stringhe di testo ricevute; il contro è che per le funzioni APRS occorre affiancare un TNC al datalogger.


Il montaggio definitivo
Premesso che l'abito non fa il monaco, in questi tempi di austerità e rigore (!) ho pensato che, ad un terzo del costo del mobile del Mark I, con un po' di ingegno mi sarei potuto gratificare la panza con i biscotti a forma di boomerang. Con questo risultato:

La sonda di temperatura
Nulla di nuovo sotto il sole. O meglio, a nord in posizione il più possibile lontana da interferenze che possono falsare le misure. Non ho ancora realizzato un contenitore apposito, ma quello utilizzato per il Mark I si è rivelato funzionale. Rinfresco la memoria...
  • se la sonda viene colpita dal sole, si riscalda e la misura viene falsata (irraggiamento);
  • se il supporto della sonda è solidale alla parete di un edificio, si riscalda e la misura viene falsata (conduzione);
  • se la sonda è molto vicina alla parete di un edificio, gli strati d'aria che lambiscono la parete la riscaldano e la misura viene falsata (convezione);
  • se la sonda "vede" il cielo, nelle notti serene si raffredda e la misura viene falsata (irraggiamento).
Quindi, oltre alla installazione in posizione corretta, è opportuno un contenitore simile a questo:

IL TNC
Il TNC da me utilizzato in abbinamento al GGM è un progetto del radioamatore WB8WGA, presente in rete in diverse versioni. Segnalo, fra i siti italiani, l'ottimo articolo di Claudio Fantino all' indirizzo http://www.fantino.it/TNC.htm. La mia realizzazione prevede la sezione dello schema relativa alla RS232 realizzata a componenti discreti invece che con il MAX232, per il resto lo schema e il firmware sono identici. Naturalmente un progetto così semplice ha più di qualche limite, ma come tracker abbinato ad un ricevitore GPS o utilizzato in modalità conversazione come in questo progetto è praticamente perfetto. Nulla vieta di utilizzare un apparecchio commerciale, a condizione che disponga di una modalità terminale e della funzione CONVERSE. Per completezza allego schema e layout:

Schema


Disposizione componenti


Lato rame


Elenco componenti TNC

Tipo/valore Quantità Riferimento
27pF 2 C2, C3
100nF 5 C1, C4, C5, C9, C10
47uF 35V 1 C8
47uF 16V 1 C6
1nF 1 C7
1N4148 4 D2, D3, D4, D5
LED 2 D1, D6
SIP HEADER - 2PIN 3 P2, P3, P4
SIP HEADER - 3PIN 1 P5
SIP HEADER - 4PIN 1 P1
BC547 3 Q1, Q2, Q3
470 Ohm 1/4 W 2 R1, R6
1Kohm 1/4 W 3 R4, R9, R10
2.2 Kohm 1/4 W 2 R11, R16
3.9 Kohm 1/4 W 1 R12
4.7 Kohm 1/4 W 2 R17, R18
8.2 Kohm 1/4 W 1 R13
10 Kohm 1/4 W 2 R3, R7
22 Kohm 1/4 W 3 R8, R15, R19
100 Kohm 1/4 W 2 R5, R14
10 Mohm 1/4 W 1 R2
PIC 16F88 1 U1
Quarzo 20 MHz 1 X1
uA 7805 1 U2
10 Kohm trimmer 1 V1

Il firmware attualmente caricato sul 16F88 è la versione 1.13: miniTNC_113.zip.

Configurazione
Il corretto funzionamento del sistema prevede l' impostazione di alcuni parametri. Per far questo occorre connettere il TNC alla porta seriale del computer e attivare un software terminale, tipo hyperterminal, con velocità 9600 (verificare il firmware caricato sul PIC 16f88), nessuna parità, 8 bit di dati, 1 bit di stop. nessun controllo di flusso.. Accertiamoci che il ponticello P3 sia aperto.e alimentiamo il tnc. Dovrebbe apparire un messaggio di benvenuto e il prompt "cmd:"
I parametri che occorre impostare sono:
  • il nominativo della stazione mediante il comando MYCALL xxxxxx seguito da invio;
  • la destinazione dei dati aprs con il comando UNPROTO APRS eventualmente seguito da una lista che determina il modo in cui questi verranno instradati sulla rete radio.
Nel caso di trasmissione punto-punto non è necessario aggiungere altro, in caso contrario un buon punto di partenza potrebbe essere UNPROTO APRS v WIDE1-1 v WIDE2-2. Così facendo i nostri pacchetti saranno ritrasmessi per una volta (un "hop") dalle stazioni che rispondono al parametro WIDE1 e avranno due ulteriori "hop" grazie alle stazioni che rispondono al parametro WIDE2, potendo così coprire un' area piuttosto vasta. Se una delle stazioni che ricevono il nostro pacchetto opera da I-GATE, cioè da interconnessione tra rete radio e rete internet, la visibilità sarà globale. Per approfondire il significato di questi aspetti invito a ricorrere a tutorials specifici o alla documentazione riguardante la rete e le convenzioni dello standard APRS.

Che cosa trasmette
Come già accennato, il tnc viene utilizzato sfruttando la funzione CONVERSE, presente peraltro in tutti i modelli che dispongono di modalità terminale. Attivando questa funzione ogni testo inviato al tnc e terminato con il carattere "invio", viene "impacchettato" con i dati del mittente e inviato al destinatario definito dal parametro UNPROTO ADDRESS con un pacchetto, o frame, di tipo UI. Se questo corrisponde a APRS, a cui aggiungere un eventuale instradamento (es. WIDE2-2) il gioco è fatto. Un esempio: il testo "pippo pluto paperino" seguito da invio sarà trasmesso come:
Fm:GGMEVO-2 To APRS < UI pid=F0 len=20 > pippo pluto paperino
in cui GGMEVO-2 è il mittente e APRS la destinazione del frame. Ovviamente se vengono utilizzate frequenze assegnate al servizio radioamatoriale il mittente dovrà essere un radioamatore e utilizzare il proprio nominativo. Se invece si utilizza un modulo trasmittente da qualche milliwatt a 433.92 MHz per coprire la distanza dal giardino al pc di casa si può scegliere un nome di fantasia.
Al tnc vengono mandate due diverse stringhe simili a queste:
@110855z4325.41N/00954.06E_000/000g000t074h63PIC
seguita da
>110855zT= 23.3'C RH=63.3%
La prima stringa definisce un "weather report", cioè un bollettino meteo, che si compone delle seguenti informazioni:
  • @: indica che si tratta di un bollettino meteo;
  • 110855: giorno del mese, ore e minuti di emissione del bollettino;
  • z: indica che ore e minuti sono da intendersi riferite al fuso orario GMT, o "zulu";
  • 4325.41N: la latitudine espressa in gradi-minuti.centesimi di minuto della posizione in cui si trova l'apparecchio;
  • /: carattere che, unitamente a quello che segue il campo successivo, definisce il simbolo che appare sulle mappe APRS. in questo caso ho scelto il più appropriato, cioè il cerchio blu con scritta "WX";
  • 00954.06E: la longitudine, in gradi-minuti.centesimi di minuto della posizione in cui si trova l'apparecchio;
  • _: secondo carattere che definisce il simbolo che appare sulle mappe (vedi sopra);
  • 000/000: direzione e velocità del vento. Non essendo disponibili, i campi vengono riempiti con zeri per mantenere la compatibilità del formato;
  • g000: velocità delle raffiche di vento. Come sopra;
  • t074: temperatura rilevata espressa in gradi Fahrenheit;
  • h63: umidità relativa rilevata, in percentuale;
  • PIC: campo destinato alla descrizione della apparecchiatura utilizzata.
Nelle stazioni meteo commerciali il bollettino contiene anche altri dati riguardanti la pressione atmosferica, la pioggia, la radiazione solare e/o ultravioletta, ovviamente non disponibili in questo progetto. La seconda stringa nasce per superare una certa allergia alla scala fahrenheit, oltre al fastidio dato dal fatto che che il protocollo prevede solo numeri interi. Ciò comporta una risoluzione massima di circa mezzo grado. Con un piccolo stratagemma ho deciso di inviare "in chiaro" temperatura e umidità mediante uno "status report", un altro tipo di frame previto dal sistema APRS, che nei dettagli ottenuti cliccando gli oggetti sulle mappe viene riportato nel campo "status text". La sintassi, molto più semplice della precedente, si compone di pochi elementi:
  • >:indica che il frame è uno "status report";
  • 110855z: come sopra, giorno-ore-minuti "zulu"
Il testo che segue riempirà il campo "status text" della nostra stazione. Da notare che uno "status report" non contiene dati di posizione, per cui non può essere utilizzato da solo in quanto non verrebbe visualizzato; ha senso se utilizzato in abbinamento ad un altro tipo di report del quale costituisce una sorta di supplemento. Ecco cosa esce dalla porta seriale. La frequenza dei "beacons" è impostata a 10 minuti. Il "cuoricino" dopo lo status report è in realtà un carattere ASCII 0x03 che corrisponde alla combinazione ctrl-c; serve per riportare il tnc allo stato comandi dopo la trasmissione dei dati.


Assimilato (!) tutto questo, ecco cosa appare sulla mappa di uno dei programmi maggiormente usati nel campo del APRS, l'UI-VIEW di Roger Barker G4IDE. Ho assegnato al GGM-EVO delle coordinate di fantasia, così come per il nominativo, tali da collocarlo sull'isola di Gorgona:


Nel dettaglio della stazione, nella casella "status text" i dati in chiaro delle letture:


Ed ecco cosa appare su un apparecchio portatile in grado di decodificare i segnali digitali aprs:


L'interfaccia utente
L'interazione con il MarkII avviene in due modalità: tramite display alfanumerico e pulsanti sul pannello di comando, oppure tramite videoterminale (pc) connesso alla porta seriale. Per quanto riguarda la prima modalità, la visualizzazione è ripartita su più "pagine", che è possibile scorrere tramite il tasto "inc". La attivazione/disattivazione di una specifica funzione avviene tramite il tasto "set". E' possibile attivare/disattivare la registrazione su eeprom ed effettuare il reset dei contatori e della memoria. Dalla pagina principale, con la pressione lunga del tasto "set" si effettua l'impostazione di data e ora, dell'intervallo fra le registrazioni e del parametro per il recupero della tolleranza del quarzo. Attivando la funzione di collegamento seriale al pc si accede al menu testuale che, oltre alle funzioni già presenti nella prima versione, necessarie a scaricare i dati delle letture, permette di configurare le nuove funzionalità implementate. Trascuro le opzioni già presenti sul Mark I; le nuove voci del menu sono relative alla scelta della velocità della porta seriale (se viene utilizzato il TNC dovrà corrispondere), l'immissione delle coordinate gps relative alla posizione della stazione, la frequenza alla quale verranno trasmessi i pacchetti (in minuti) e la differenza di fuso orario, necessaria a determinare l'ora GMT. Per il nostro fuso orario, in regime di ora legale il valore è +2, durante l'ora solare il valore è +1.


L'immagine che segue rappresenta il download dei dati presenti in memoria. A quelli già presenti sulla prima versione si sono aggiunti l'umidità misurata e l'umidità media del giorno. I totali dei gradi giorno e dei gradi giorno di raffrescamento sono trasmessi alla fine del download.


Come già visto, i dati possono essere utilizzati in un foglio di calcolo per una rappresentazione grafica o per ulteriori elaborazioni:


La "Mitsu"
Anzitutto i miei complimenti a chi avrà avuto la pazienza di leggere tutto l'articolo, cui aggiungo una piccola rassicurazione sul fatto che, a differenza della Mitsubishi Lancer EVO, non ci sarà, per il gradigiornimetro, un susseguirsi di generazioni fino alla EVO X. Qualche idea però la posso proporre. Oltre all'utilizzo sopra esposto, questo progetto può tornare utile anche per scopi molto diversi. Per esempio, utilizzando una o più degli ingressi inutilizzati del PIC, sia digitali che analogici, si può ottenere un sistema di monitoraggio remoto per.... i dati di produzione dell' impianto fotovoltaico della baita in montagna? Si può fare... Il livello della cisterna dell' acqua della casa di campagna? La cella frigorifera del negozio? Si-può-fare! (citazione dal film Frankenstein Jr.)

RACCOMANDAZIONI

L' utilizzo della parte radio e della rete APRS comportano il rispetto delle normative, delle regole di comportamento e del lavoro altrui. Traduzione: se non siete radioamatori, utilizzate solo frequenze e apparecchi di libero utilizzo e per collegamenti punto-punto. Se siete radioamatori, non immettete in rete APRS (sia radio che internet) dati incoerenti, con frequenza inadeguata o parametri di ripetizione spropositati. Spesso le strutture e le apparecchiature utilizzate sono autofinanziate da privati a beneficio di tutti. Limitatevi al minimo necessario per i vostri scopi. Detto questo, mano al saldatore!

Dimenticavo: Attenzione, l'autocostruzione crea dipendenza. Autocostruite responsabilmente!

Anche per il Mark II, l'archivio dei dati registrati in questa pagina

praz2004 chiocciola libero punto it