UNIVERSITÀ DEGLI STUDI ROMA TRE T R E - Mirko...
Transcript of UNIVERSITÀ DEGLI STUDI ROMA TRE T R E - Mirko...
UNIVERSITÀ DEGLI STUDI
ROMATRE
UNIVERSITÀ DEGLI STUDI ROMA TRE
Dipartimento di IngegneriaCorso di Laurea in Ingegneria Informatica
Tesi di Laurea
Progettazione e sviluppo diun'applicazione Java per il monitoringambientale di un sistema di acquisizione
dati
Laureando
Mirko Bastianini
Matricola 445151
Relatore
Prof. Francesco Benedetto
Anno Accademico 2013/2014
You think you have a limit. As soon as you touch this limit, something happens
and you suddenly can go a little bit further. With your mind power, your
determination, your instinct, and the experience as well, you can �y very high.
Ayrton da Silva Senna
Indice
Indice delle �gure vii
Indice delle tabelle ix
Premessa 1
Capitolo Uno: Raggi Cosmici e rilevatori di particelle 5
.1 De�nizione di Raggi Cosmici . . . . . . . . . . . . . . . . . . . . . 5
.2 Rilevatori di particelle: dove e perche' . . . . . . . . . . . . . . . . 7
.3 Contatore Geiger . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
.4 Contatore Proporzionale ad He3 . . . . . . . . . . . . . . . . . . . 10
Capitolo Due: Studio del Contatore Proporzionale ad He3 14
.1 Arduino Mega2560 . . . . . . . . . . . . . . . . . . . . . . . . . . 14
.1.1 Arduino e gli Shield . . . . . . . . . . . . . . . . . . . . . . 18
.2 Sensori utilizzati . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
.2.1 Sensore di temperatura: TMP121 . . . . . . . . . . . . . . 21
.2.2 Sensore di pressione: MPL115A1 . . . . . . . . . . . . . . 22
.2.3 ADC converter: AD7689 . . . . . . . . . . . . . . . . . . . 23
.2.4 DAC converter: AD5668 . . . . . . . . . . . . . . . . . . . 25
.2.5 Modulo alta tensione . . . . . . . . . . . . . . . . . . . . . 25
.3 Codice sorgente . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
v
vi
Capitolo Tre: Applicazione Java per il monitoring del rilevatore 28
.1 Ambiente di sviluppo utilizzato . . . . . . . . . . . . . . . . . . . 28
.2 Java Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
.3 Gestire la comunicazione seriale . . . . . . . . . . . . . . . . . . . 30
.4 MySQL e la persistenza dei dati rilevati . . . . . . . . . . . . . . . 33
.5 JfreeChart: gra�ci in Java . . . . . . . . . . . . . . . . . . . . . . 37
.5.1 Di�erenze dell' applicazione nei principali sistemi operativi 39
Capitolo Quattro: Visione globale dell' applicazione 41
.1 Organizzazione package e risultato �nale . . . . . . . . . . . . . . 42
.2 Sezione Database e di Log . . . . . . . . . . . . . . . . . . . . . . 44
.3 Gra�ci di pressione e temperatura . . . . . . . . . . . . . . . . . . 45
.4 Sezione comunicazione e avvio acquisizione . . . . . . . . . . . . . 47
.5 Funzioni disponibili . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Capitolo Cinque: Conclusioni e sviluppi futuri 50
Bibliogra�a 53
Indice delle �gure
.1 Flusso dei raggi cosmici. . . . . . . . . . . . . . . . . . . . . . . . 6
.2 Cosmic shower. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
.3 I principali rivelatori. . . . . . . . . . . . . . . . . . . . . . . . . . 11
.4 Zona di lavoro del contatore proporzionale. . . . . . . . . . . 12
.1 Connessione SPI tra un master e tre slave. . . . . . . . . . . . 21
.2 Sequenza di lettura del sensore di temperatura. . . . . . . . . 22
.3 Comandi sensore di pressione. . . . . . . . . . . . . . . . . . . . 23
.4 CFG del convertitore analogico-digitale. . . . . . . . . . . . . . 24
.5 Struttura interna del DAC. . . . . . . . . . . . . . . . . . . . . . 25
.6 Modulo High Voltage. . . . . . . . . . . . . . . . . . . . . . . . . 26
.7 Organizzazione codice sorgente di Arduino. . . . . . . . . . . . 27
.1 Di�erenze tra Swing e AWT. . . . . . . . . . . . . . . . . . . . . 30
.1 Contatore in acquisizione. . . . . . . . . . . . . . . . . . . . . . . 41
.2 Organizzazione in package del progetto. . . . . . . . . . . . . . 42
.3 Main panel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
.4 Database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
.5 Log Area. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
.6 Gra�co della temperatura. . . . . . . . . . . . . . . . . . . . . . . 45
.7 Gra�co della pressione. . . . . . . . . . . . . . . . . . . . . . . . . 46
.8 Comunicazione seriale. . . . . . . . . . . . . . . . . . . . . . . . . 47
vii
Indice delle �gure viii
.9 Inizio e �ne acquisizione. . . . . . . . . . . . . . . . . . . . . . . . 47
.10 Funzioni disponibili. . . . . . . . . . . . . . . . . . . . . . . . . . . 48
.11 About us. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Indice delle tabelle
.1 Versioni di Arduino. . . . . . . . . . . . . . . . . . . . . . . . . . . 14
.2 Speci�che tecniche Arduino Mega 2560. . . . . . . . . . . . . . 16
.3 Led Wi-Fi Shield . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
.1 Tabella della pressione. . . . . . . . . . . . . . . . . . . . . . . . . 34
.2 Tabella della temperatura. . . . . . . . . . . . . . . . . . . . . . . 34
ix
Premessa
Non si commette certamente nessun errore nell' a�ermare che in quest' ultimo
decennio la branca dell'elettronica, in particolare l' elettronica digitale, ha subito
una trasformazione radicale tutt' ora in atto. Nel mercato vengono proposte
costantemente nuove tecnologie e nuove schede di programmazione, molte ad un
costo relativamente basso.
La rappresentazione realistica di quanto sopra a�ermato si puo' osservare
avendo bene in mente un qualsiasi tipo di circuito combinatorio: �no ad una
decina di anni fa per realizzarlo era necessario avere a disposizione vari inte-
grati, un saldatore, molta pazienza e manualita'. Ad oggi lo stesso risultato lo
si puo' ottenere scrivendo poche linee di codice su un ambiente di sviluppo ded-
icato, facendo un rapido controllo degli errori di logica commessi (poiche' quelli
di sintassi sono corretti automaticamente), e inviando il programma alla scheda
elettronica per ottenere un risultato immediato.
Nascono quindi schede FPGA (Field Programmable Gate Array) come la Vir-
tex 7 della Xilinx, oppure la Cyclone della Altera; schede che hanno assunto ormai
un ruolo cruciale sia nell' elettronica industriale, sia nella ricerca scienti�ca. I due
principali linguaggi di programmazione per questo tipo di hardware, Il VHDL ed
il Verilog, nati originariamente da progetti militari, sono ormai a�ermati anche
per l' utilizzo casalingo. Purtroppo pero', queste FPGA hanno ancora un costo
relativamente alto rispetto alla tecnologia ASIC.
1
. PREMESSA 2
Ecco allora che, in tempi piu' recenti, sono entrati nel mercato dell' elettronica,
ma anche in quello dell' informatica, dei microcontrollori a basso costo adatti in
maniera speci�ca a progetti di media complessita' computazionale. Uno fra tutti
e' Arduino, una scheda programmabile creata nel 2005 da un progetto interamente
italiano ideato e realizzato da Massimo Banzi.
In breve, Arduino e' un microcontrollore che monta a bordo un processore
Atmel, i cui pin sono collegati a porte di Input/Output general purpose. In-
oltre e' presente un' elettronica di contorno che permette l'interfacciamento USB
(Universal Serial Bus) con un computer, un oscillatore a cristallo a 16MHz, un re-
golatore di tensione a 5 Volt, ed un IDE (Integrated Development Environment)
multipiattaforma con cui programmare la scheda attraverso un linguaggio che
potremmo de�nire C-Like.
E' proprio in questo scenario di costante sviluppo tecnologico che l' Istituto
Nazionale di Fisica Nucleare, rimanendo al passo con i tempi, ha deciso di pro-
cedere alla modernizzazione di un vecchio esperimento di �sica particellare, in
particolare di un Contatore Proporzionale ad Elio 3.
Quest'ultimo, le cui caratteristiche sono descritte in maniera dettagliata nel
successivo capitolo Tre, e' un rilevatore di particelle a gas; se volessimo azzardare
una de�nizione lo potremmo paragonare ad un discendente del contatore Geiger.
Il suo funzionamento, anch' esso dettagliato nel successivo capitolo Tre della pre-
sente, e' relativamente semplice: le molecole di gas che si trovano all' interno del
tubo presente nel rivelatore vengono ionizzate al passaggio della particella, pro-
ducendo cosi' una carica, la quale e' direttamente proporzionale all' energia della
particella che ha attraversato il tubo. Fin qui �sica pura. Il problema diventa
di natura ingegneristica quando bisogna gestire ed immagazzinare in maniera op-
portuna "l' informazione" che il tubo a gas produce. Inoltre cosa non banale, l'
evento e' completamente random, avviene quindi in maniera statisticamente non
. PREMESSA 3
prevedibile a livello temporale. Potrebbe dunque veri�carsi un passaggio di carica
ogni mezz' ora, cosi' come tre passaggi in dieci minuti o nessuno nell'arco di un'
intera giornata.
Si rende quindi necessario avere un dispositivo costantemente in funzione, che
riesca a memorizzare l' evento �sico del passaggio della particella, salvando anche
alcuni dati utili, ad esempio la temperatura e la pressione attuale, data e ora dell'
evento ed il numero di conteggi avvenuti �no a quel momento. Inoltre, poiche'
la macchina e' stata pensata per una installazione in condizioni poco agibili (si
ricorda che i Raggi Cosmici da rilevare sono meno rari e piu facilmente osservabili
salendo di altitudine), e' necessario che il download dei dati avvenga attraverso
una rete wireless.
Analizzando queste speci�che progettuali, la scelta del microcontrollore da
utilizzare per questo esperimento e' ricaduta su Arduino. I risultati dei test
iniziali sono stati immediatamente rassicuranti; il microcontrollore, corredato di
una elettronica di front-end, si e' rivelato sin da subito adatto alle nostre esigenze.
Per comprendere al meglio l' innovazione proposta e' su�ciente pensare che la
vecchia macchina utilizzata per il funzionamento e il controllo dell' esperimento
occupava una intera stanza, mentre grazie ad Arduino, l'esperimento e' divenuto
facilmente trasportabile da una singola persona e prossimamente sara' installato
nei Laboratori Nazionali del Gran Sasso.
Al termine dei primi test funzionali la comunicazione con il dispositivo era
gestita in maniera seriale attraverso l'IDE di Arduino oppure attraverso un qual-
siasi programma di comunicazione free, come ad esempio HyperTerminal. Stante
l'impossibilita' di garantire un know-how sui comandi da impartire alla macchina
ad ogni singola persona che interagiva con essa, e' nata l' esigenza di una appli-
cazione gra�ca da eseguire su personal computer, compatta e di facile utilizzo.
Questa applicazione doveva avere caratteristiche utili per leggere eventuali mes-
. PREMESSA 4
saggi della macchina, per inviare e ricevere comandi di controllo, per e�ettuare
lo storage dei dati ricevuti su Database e per fornire dei gra�ci in tempo reale.
Java, in collaborazione con MySQL ed alcune altre librerie gratuite da me
utilizzate, si e' rivelato il linguaggio adatto allo scopo. Anche in questa fase i
test del pannello avviato con la macchina in acquisizione sono stati positivi, for-
nendo inoltre un' ampio margine su alcuni sviluppi futuri dell'applicazione stessa.
In questo mio lavoro di tesi cerchero' quindi di racchiudere alcune nozioni di
�sica elementare tra cui de�nizioni di Raggio Cosmico e Contatore Proporzionale
(Capitolo Uno e Capitolo Due), entrero' nel vivo del progetto, di cui in questa
premessa ho accennato, descrivendo a livello hardware e software la macchina e i
sensori ad essa connessi (Capitolo Tre), descrivero' le speci�che richieste sulla base
delle quali ho sviluppato la mia applicazione e i singoli passaggi atti a realizzarla
(Capitolo Quattro e Capitolo Cinque), ed in�ne terminero' accennando ad alcuni
interessanti sviluppi futuri.
Capitolo Uno: Raggi Cosmici e
rilevatori di particelle
.1 De�nizione di Raggi Cosmici
I raggi cosmici sono delle particelle cariche, per lo piu' protoni, che viaggiano a
velocita' prossime a quelle della luce. Individuare la loro origine e soprattutto
ricostruire i meccanismi che riescono ad accelerarle a velocita' cosi' elevate non
e' pero' semplice perche' le loro traiettorie possono subire facilmente deviazioni
nel passare attraverso i campi magnetici interstellari. Risalire quindi al punto di
provenienza e a tutto cio' che hanno attraversato prima di arrivare sino a noi e'
quindi una vera impresa.
Esistono tuttavia alcuni metodi indiretti che in parte permettono di aggirare
l' ostacolo. Ad esempio quando i raggi cosmici colpiscono il gas interstellare pro-
ducono emissioni di energia gamma che ne tradiscono la presenza. Alcune di
queste emissioni sono state captate dal telescopio spaziale Fermi grazie al suo
Large Area Telescope (LAT). Dopo anni e anni di osservazioni, i dati raccolti dal
Fermi hanno dimostrato che una di queste regioni gassose di intensa emissione
gamma coincide proprio con la supernova Tycho, segno che esiste un legame tra
raggi cosmici e le supernove. Guadagna cosi' attendibilita' l' ipotesi secondo la
5
. CAPITOLO UNO: RAGGI COSMICI E RILEVATORI DI
PARTICELLE 6
Figure .1: Gra�co esplicativo del �usso dei raggi cosmici in funzione
della loro energia. Nello sfondo giallo sono rappresentati i raggi cosmici
di origine solare,in blu quelli di origine galattica, mentre nella parte
restante quelli di origine extragalattica.
quale il campo magnetico tipico di una supernova intrappolerebbe le particelle
cariche, facendole rimbalzare dentro al campo stesso in una sorta di ping pong che
aumenta progressivamente la loro velocita', sino a quando non riescono a sfuggire
a quella trappola magnetica, e ad arrivare a noi. [Nob11]
E' bene ricordare che fuori dall' atmosfera i raggi cosmici sono costituiti da
protoni (per circa il 90%) e da nuclei di elio (quasi il 10%). Esiste anche una
presenza di elettroni ed altri nuclei leggeri, fotoni, neutrini ed in minima parte
antimateria (positroni ed antiprotoni). Giunte nell'atmosfera terrestre, tali par-
ticelle interagiscono con i nuclei delle molecole dell'atmosfera formando cosi', in
. CAPITOLO UNO: RAGGI COSMICI E RILEVATORI DI
PARTICELLE 7
un processo a cascata, nuove particelle proiettate in avanti, che prendono il nome
di raggi cosmici secondari.
La composizione e lo spettro in energia sono stati dettagliatamente studiati
per la radiazione cosmica primaria. Il �usso relativo all' Idrogeno e' poco piu' del
90%, un po' meno del 10% per l'Elio, 7 ∗ 104 per gli elementi leggeri come Litio,
Berillio e Boro, e 5 ∗ 103 per altri elementi dal Carbonio al Neon.
Lo spettro (numero di raggi incidenti per unita' di energia, per unita' di tempo,
per unita' di super�cie per steradiante) dei raggi cosmici primari e' ben descritto
da una legge a potenza nella forma:
Φ ∝ E−α
con α = 2.7 per valori dell'energia inferiori a ≈ 1015 eV. Per valori superiori
dell'energia si ha un irripidimento, con α che diviene pari a 3. Il punto in cui tale
cambio di pendenza ha luogo viene denominato ginocchio. Per energie ancora piu'
alte (≈ 1018 ÷ 1019 eV) lo spettro dei raggi cosmici torna ad essere meno ripido,
dando luogo ad un ulteriore cambio di pendenza che viene chiamato caviglia.
[Leo94]
.2 Rilevatori di particelle: dove e perche'
Quando i Raggi Cosmici entrano nell' atmosfera terrestre collidono con i nuclei
di cui essa e' composta. In queste collisioni vengono prodotte un gran numero di
particelle che a loro volta interagiscono o decadono creandone delle altre. Il risul-
tato e' quello che comunemente in gergo viene chiamato "shower", ossia doccia
di particelle. Molte di esse quindi, soprattutto elettroni, muoni, fotoni e neutrini
riescono a superare l'atmosfera ed arrivano �no alla super�cie terrestre in una
di�usione capillare. Quest' ultime vengono de�nite come raggi cosmici secondari
per distinguerli da quelli primari che hanno colpito l' atmosfera.
. CAPITOLO UNO: RAGGI COSMICI E RILEVATORI DI
PARTICELLE 8
Figure .2: In �gura e' rappresentato il fenomeno del "cosmic shower".
Proprieta' dell' immagine: INFN.
Se vogliamo rivelare i raggi cosmici primari, dobbiamo usare esperimenti posti
su satelliti in orbita, che riescono a "catturare" i raggi cosmici prima che essi
interagiscano con l' atmosfera. Con questo metodo si riescono a rivelare bene i
raggi cosmici �no ad energie non troppo elevate. Se invece l' energia aumenta
e il �usso di raggi cosmici diventa molto basso, bisogna avere esperimenti di
grande super�cie, che per ovvi motivi non possono essere montati su satelliti.
Per raggi cosmici di energia elevata si usano esperimenti sulla super�cie terrestre
o in laboratori sotterranei. Questi esperimenti rivelano i raggi cosmici secondari
prodotti nell' interazione del primario con l' atmosfera. Dalle caratteristiche dello
. CAPITOLO UNO: RAGGI COSMICI E RILEVATORI DI
PARTICELLE 9
"shower" di particelle si puo' ricavare l' energia e la direzione del raggio cosmico
primario. [LNF04]
Entra quindi in gioco il cosidetto rilevatore di particelle, che viene usato per
tracciare ed identi�care particelle, come quelle prodotte per esempio da un decadi-
mento nucleare, dalla radiazione cosmica, o interazioni in un acceleratore di par-
ticelle (ad esempio Large Hadron Collider).
.3 Contatore Geiger
Il contatore Geiger, inventato nel 1913 da Hans Wilhelm Geiger (1882 - 1945)
e perfezionato nel 1928 insieme a Walther Muller (contatore Geiger-Muller) , e'
uno strumento che misura radiazioni di tipo ionizzante, in particolare le radi-
azioni provenienti da decadimenti di tipo Alfa, Beta e Gamma (nuclei di Elio,
elettroni e fotoni ad alta energia). Questo strumento, assimilabile ad un antenato
del contatore proporzionale, e' composto da un tubo contenente un gas a bassa
pressione (per esempio, una miscela di argo e vapore di alcool alla pressione di
0,1 atmosfere). Lungo l' asse del tubo e' teso un �lo metallico, isolato dal tubo
stesso. Tra il �lo e il tubo si stabilisce una di�erenza di potenziale di circa 1 000
V, attraverso una resistenza di valore dell'ordine del miliardo di ohm.
Il contatore Geiger e' una camera a deriva utilizzata nel limite in cui la tensione
satura (ovvero in modo che la tensione prodotta dal passaggio della particella
ionizzante non dipenda dall'energia rilasciata da questa e quindi dal numero delle
coppie ione-ione prodotte).
Infatti quando una radiazione attraversa il tubo e colpisce una molecola del
gas, la ionizza, creando una coppia ione-elettrone. Ma in questi dispositivi la car-
ica raccolta e' indipendente dalla ionizzazione primaria: come nelle altre camere
a deriva, gli ioni primari vengono accelerati a su�cienza da creare ionizzazioni
secondarie, urtando con le altre molecole di gas; ma la peculiarita' del contatore
. CAPITOLO UNO: RAGGI COSMICI E RILEVATORI DI
PARTICELLE 10
geiger e' che il campo elettrico e' talmente intenso che anche le ionizzazioni secon-
darie creano a loro volta ulteriori ionizzazioni. Questo processo e' detto moltipli-
cazione a valanga. L' impulso elettrico risultante sara' testimone dell' avvenuto
contatto con una radiazione ionizzante, e sara' contato da un circuito elettronico.
A seconda del numero di conteggi fatti in un' unita' di tempo, riusciamo a capire
se siamo in presenza di una sorgente radioattiva, e la sua pericolosita'.
Si ricorda che il contatore Geiger non e�ettua una misura operativa della
grandezza esposizione/kerma in aria, ma si limita a mettere in relazione il numero
di conteggi con la grandezza dosimetrica. Per questo la sensibilita' dello strumento
varia signi�cativamente al variare dell' energia della radiazione incidente. L'
e�etto negativo del tempo morto puo' esser corretto compensando la risposta via
software. E' possibile fare cio' solo se e' nota la larghezza d' impulso del segnale.
Viste le sue ridotte dimensioni, puo' essere usato anche per dosimetria personale.
La dinamica di questi rivelatori e' abbastanza ridotta, a causa del tempo
morto durante il quale avviene un conteggio (ordine dei millisecondi). [Wik]
.4 Contatore Proporzionale ad He3
Un contatore proporzionale e' un rivelatore di particelle a gas, che come tutti
i rivelatori con principio di funzionamento a gas rivela le particelle misurando
la carica prodotta dalla ionizzazione delle molecole di un gas provocata dal pas-
saggio della particella. Questa carica prodotta e' direttamente proporzionale all'
energia che ha rilasciato la particella. La sua caratteristica e' quella di usare ten-
sioni abbastanza alte (siamo nell' ordine dei 1500-2000 Volt) che consentono agli
elettroni prodotti dalla particella primaria di creare altre ionizzazioni con un pro-
cesso che si ripete a valanga. In questo modo i segnali risultanti hanno un buon
rapporto segnale-rumore. Il rivelatore usa lo stesso principio dei contatori Geiger-
Muller, ma con una tensione inferiore, ovvero nel regime proporzionale. Quando
. CAPITOLO UNO: RAGGI COSMICI E RILEVATORI DI
PARTICELLE 11
Figure .3: Panoramica sui vari tipi di rivelatori.
la particella ionizzante con un' energia su�ciente interagisce con le molecole del
gas, produce delle coppie ione positivo - elettrone, chiamata coppia ionica. Con-
tinuando a muoversi nel gas la particella interagente forma altre coppie ioniche
lungo la sua traiettoria. Gli elettroni che si vengono a creare subiscono una
migrazione verso l' elettrodo positivo, l'anodo, sotto l' in�uenza di un campo
elettrico. Un contatore proporzionale di�erisce da una camera a ionizzazione in
quanto il potenziale applicato e' su�cientemente alto per far si' che un elettrone
possa guadagnare abbastanza energia lungo un libero cammino medio per creare
durante una collisione con le molecole neutre del gas ulteriori coppie ioniche. Gli
elettroni creati in questi eventi secondari migrano anche loro verso l' anodo e
creano altre coppie ioniche. In questo modo si produce una cascata, chiamata
valanga Townsend. Se il potenziale e' scelto accuratamente, ogni valanga avviene
. CAPITOLO UNO: RAGGI COSMICI E RILEVATORI DI
PARTICELLE 12
Figure .4: Zona di lavoro del contatore proporzionale.
indipendentemente dalle altre valanghe che hanno origine dalla stessa particella
primaria iniziale. Di conseguenza, anche se il numero totale di elettroni creati
incrementa esponenzialmente con la distanza, la carica elettrica totale prodotta
rimane proporzionale alla carica iniziale creata nell' evento originario. [Kno]
Se la tensione e' minore di un valore critico, gli elettroni non raggiungono un'
energia su�ciente per creare ulteriori coppie ioniche e il rivelatore e' una camera a
ionizzazione. Se invece la tensione e' troppo alta, inizialmente la carica prodotta
non e' linearmente proporzionale all' energia, e con tensioni ancora piu' elevate si
arriva al regime di Geiger, nel quale tutti gli impulsi hanno la stessa ampiezza, e
. CAPITOLO UNO: RAGGI COSMICI E RILEVATORI DI
PARTICELLE 13
quindi si perde l' informazione sull'energia. In questo modo funzionano i contatori
Geiger-Muller, descritti nel paragrafo precedente.
La geometria quasi sempre usata e' quella cilindrica, che consente di raggiun-
gere campi elettrici abbastanza alti per dar origine alle valanghe usando tensioni
ragionevoli (migliaia di volt). L' anodo centrale, verso il quale migrano gli elet-
troni, e' un �lo molto sottile, mentre il catodo e' la parete del cilindro, che di
solito e' tenuta a massa. In questa con�gurazione il campo elettrico ha direzione
radiale e (considerando il rivelatore in�nitamente esteso nella direzione assiale)
ha modulo:
E =V
r log(b/a)
dove V e' la di�erenza di tensione tra anodo e catodo, a il raggio dell' anodo,
b il raggio del catodo, r la distanza dal centro.
Si nota che la regione dove avviene la valanga, ovvero dove il campo elettrico
e' abbastanza intenso, risulta essere una regione sottilissima attorno all'anodo.
Capitolo Due: Studio del Contatore
Proporzionale ad He3
.1 Arduino Mega2560
Come gia' accennato nella premessa di questo lavoro di tesi, il microcontrollore che
ha fatto da chiave primaria per questo esperimento e' stato Arduino. Nello speci-
�co, Arduino e' una scheda low cost con a bordo un microprocessore Atmel (la
versione esatta del microprocessore dipende da quale Arduino si sta utilizzando).
Al seguito riporto una tabella in cui sono presenti le varie versioni presenti sul
mercato, con relative caratteristiche tecniche:
Table .1: Versioni di Arduino.
Arduino Microcontrollore Flash KiB Pin digitali Pin PWM Pin InputDiecimila ATmega168 16 14 6 6
Due Atmel SAM3X8E 512 54 12 12Duemilanove ATmega168/328P 16/32 0,5/1 14 6
Uno ATmega328P 32 14 6 6Leonardo Atmega32u4 32 20 7 12Mega ATmega1280 128 54 14 16
Mega2560 ATmega2560 256 54 14 16Fio ATmega328P 32 14 6 8Nano ATmega168 16/32 0,5/1 6 8LilyPad ATmega168V 16 14 6 6
14
. CAPITOLO DUE: STUDIO DEL CONTATORE
PROPORZIONALE AD HE3 15
Interessante notare come esistano versioni molto diverse tra loro che si adat-
tano a qualsiasi tipo di progetto si desideri realizzare. Ad esempio Arduino Nano
e' sicuramente indicato per progetti di bassa complessita' computazionale dato
che possiede poca memoria e pochi pin di comunicazione; viceversa, il punto di
forza di questo modello e' sicuramente da ricercare nelle dimensioni della scheda,
che non superano il palmo di una mano.
Per quanto riguarda l' esperimento del contatore proporzionale il microcon-
trollore che piu si avvicina alle nostre speci�che e' sicuramente il modello Mega
2560. Arduino Mega 2560 e' un microcontrollore basato sul chip ATmega2560.
Questo microprocessore ha le seguenti caratteristiche:
• 256 kB di memoria (�ash) per il programma
• Set di istruzioni esteso
• Grande numero di periferiche disponibili (presenza di una o più linee se-
riali, PWM, ecc.)
• Contenitori con pin da 28 a 100
Arduino Mega 2560 possiede 54 pin di input/output digitali (di cui 14 hanno
la possibilita' di essere usati come uscita PWM), 16 pin analogici, 4 hardware
serial ports (UART) e un oscillatore al cristallo a 16 MHz. Inoltre si interfaccia
al pc attraverso una connessione USB, si alimenta con un jack standard a 5 Volt o
in alternativa puo sfruttare l'alimentazione del computer stesso. In caso di blocco
ha la possibilita' di esser resettato attraverso l' apposito pulsante. Nella tabella
seguente le speci�che tecniche fornite direttamente dal sito del produttore:
. CAPITOLO DUE: STUDIO DEL CONTATORE
PROPORZIONALE AD HE3 16
Table .2: Speci�che tecniche Arduino Mega 2560.
Caratteristica ValoreMicrocontroller ATmega2560
Operating Voltage 5VInput Voltage (recommended) 7-12V
Input Voltage (limit) 6-20VDigital I/O Pins 54
PWM Digital I/O Pins 14Analog Input Pins 16
DC Current per I/O Pin 40 mADC Current for 3.3V Pin 50 mA
Flash Memory 256 KBFlash Memory for Bootloader 8 KB
SRAM 8 KBEEPROM 4 KBClock Speed 16 MHz
Lenght 101.52 mmWidth 53.3 mm
Per quanto riguarda l' aspetto software e l'upload del codice nella board,
Arduino possiede un suo Integrated development environment (IDE) multipi-
attaforma, scritto interamente in Java e derivato dal linguaggio di program-
mazione Processing; questo editor o�re alcune interessanti feature tra cui il syntax
highlighting, il controllo delle parentesi, e l' indentazione automatica. Non e' pre-
sente alla versione attuale l' autocompletamento del codice. L'editor e' inoltre
in grado di compilare e lanciare il programma eseguibile in una sola passata e
con un solo click. In genere non vi e' bisogno di creare dei Make�le o far girare
programmi dalla riga di comando. L'ambiente di sviluppo integrato di Arduino
e' fornito di una libreria software C/C++ chiamata "Wiring" (dall' omonimo
progetto Wiring): la disponibilita' della libreria rende molto piu' semplice im-
plementare via software le comuni operazioni di input/output. I programmi di
Arduino sono scritti in C/C++, ma all' utilizzatore, per poter creare un �le es-
eguibile, non e' richiesto di scrivere un programma standard in C, ma solo di
de�nire due funzioni principali:
. CAPITOLO DUE: STUDIO DEL CONTATORE
PROPORZIONALE AD HE3 17
• Setup(): funzione invocata una sola volta all' inizio di un programma che
puo' essere utilizzata per i settaggi iniziali
• Loop(): funzione invocata ripetutamente, la cui esecuzione si interrompe
solo con lo spegnimento della scheda
Riporto quindi un esempio base presente nei tutorial di Arduino. In partico-
lare, questo esempio permette l' accensione e lo spegnimento di un led posizionato
�sicamente nel piedino 13 della board. Come si puo' notare le istruzioni sono sem-
pli�cate al massimo, e sono molto intuitive.
#define LED_PIN 13
void setup () {
pinMode (LED_PIN , OUTPUT); // abilita il pin 13 per
l'output digitale
}
void loop () {
digitalWrite (LED_PIN , HIGH); // accende il LED
delay (1000); // aspetta 1 secondo (1000
millisecondi)
digitalWrite (LED_PIN , LOW); // spegne il LED
delay (1000); // aspetta un secondo
}
Scritto in questo modo, il codice non verrebbe riconosciuto come programma
valido da un qualsiasi compilatore C++; per questo motivo, quando l' utilizzatore
seleziona il bottone di comando "Upload to I/O board" (presente nell' IDE), una
copia del codice viene automaticamente trascritta in un �le temporaneo con l'
aggiunta di un header extra all' inizio del codice e di una semplicissima funzione
. CAPITOLO DUE: STUDIO DEL CONTATORE
PROPORZIONALE AD HE3 18
main() in basso. Anche attraverso questo piccolo esempio e' possibile capire la
semplicita' di utilizzo di Arduino, il quale permette di ottenere buoni risultati in
tempi relativamente brevi.
In ultima istanza, e' bene ricordare che sia l'hardware che il software di Ar-
duino sono in licenza CopyLeft, quindi e' possibile reperire in rete schemi elettrici
e IDE alternativi in maniera totalmente gratuita, e con un minimo di manualita'
e' possibile costruirsi il proprio microcontrollore.
.1.1 Arduino e gli Shield
Un altro punto di forza di Arduino e' quello di essere facilmente componibile
con gli Shield. Questi ultimi sono delle schede elettroniche atte a speci�che fun-
zioni, che vanno ad ampliare le funzionalita' di Arduino; si installano in maniera
semplice sul microcontrollore e vengono alimentati da quest' ultimo. L' unica ac-
cortezza necessaria e' sapere in anticipo quali pin lo shield da installare andra' a
sfruttare, perche' quest'ultimo potrebbe richiedere una comunicazione particolare
che potrebbe gia essere utilizzata da arduino per altri scopi. Esistono molti shield
in commercio, ciascuno con un preciso scopo. Principalmente possiamo realizzare
connessioni Ethernet e Wi-Fi, gestire piu motori in e servomotori in DC, creare
riproduttori audio, gestire rele' e qualsiasi altro dispositivo elettronico.
Nel nostro caso, per immagazzinare e trasmettere i dati wireless che il tubo salvava
in locale, e' stata utilizzata la Shield Wi-Fi. Questa shield e' in grado di connet-
tere Arduino ad un router attraverso una connessione 802.11b/g (purtroppo non
supporta la creazione di reti in modalita' ad-Hoc, ma solo in modalita' infras-
truttura), usando come chiave di criptazione la WEP oppure la WPA2 Personal.
Comunica con Arduino sfruttando il protocollo SPI (di cui parlero' in maniera
esaustiva nel paragrafo successivo). Sulla scheda e' presente uno slot microSD che
puo' essere utilizzato per e�ettuare lo storage dei �le in formato .txt. Accortezza
. CAPITOLO DUE: STUDIO DEL CONTATORE
PROPORZIONALE AD HE3 19
necessaria e' che la comunicazione tra Arduino e questo shield in modalita' stor-
age imposta il pin 4 come Slave Select. Inoltre il pin digitale 7 viene utilizzato
per e�ettuare l' handshake tra lo shield e Arduino, e non deve essere controllato
in alcun modo dall' utente. Al seguito una tabella per riconoscere attraverso un
led presente sulla scheda lo stato della connessione wireless:
Table .3: Led Wi-Fi Shield
L9 (yellow) this is tied to digital pin 9LINK (green) indicates a connection to a networkERROR (red) indicates when there is a communication errorDATA (blue) indicates data being transmitted/received
.2 Sensori utilizzati
Ho deciso di dividere questo paragrafo in quattro sottosezioni per consentire una
rapida ma esaustiva spiegazione dei sensori utilizzati per l'esperimento. Innanzi-
tutto e' necessario speci�care che i sensori sono tutti digitali, e la comunicazione
con ciascuno di essi avviene sfruttando il protocollo SPI.
Il protocollo SPI (Serial Peripheral Interface) e' un sistema di comunicazione tra
un microcontrollore e altri circuiti integrati o anche tra piu' microcontrollori. E'
stato ideato dalla Motorola e sviluppato, in una sua variante, anche dalla National
Semiconductor con il nome di bus MicrowireTM.
Le tre caratteristiche principali sono:
• E' un protocollo di tipo seriale
• E' sincrono, per la presenza di un clock che coordina la trasmissione e
ricezione dei singoli bit e determina la velocita' di trasmissione
• E' full-duplex in quanto il "colloquio" puo' avvenire contemporaneamente
in trasmissione e ricezione.
. CAPITOLO DUE: STUDIO DEL CONTATORE
PROPORZIONALE AD HE3 20
Per quanto riguarda la velocita' di scambio dei dati (in pratica la frequenza del
clock) non vi e' presente un limite minimo (i dispositivi sono statici: possono
mantenere, se alimentati, uno stato logico ben preciso per un tempo inde�nito)
ma e' presente un limite massimo che va determinato dai datasheet dei singoli
dispositivi connessi e dal loro numero in quanto ogni dispositivo collegato al bus
introduce sulle linee di comunicazione una capacita' parassita).
E' un sistema di comunicazione de�nito a quattro �li. Con questo si intende
che le linee di connessione che portano i segnali sono in genere quattro. Va pero'
tenuto conto che vi deve comunque essere una connessione di riferimento (0 Vdc
comunemente indicata con GND, nome che a rigore e' improprio) e che �sicamente
quindi i �li diventano cinque.
In particolare, riporto i �li utilizzati con la relativa convenzione utilizzata:
• SCLK - SCK: Serial Clock (emesso dal master)
• MISO: Master Input Slave Output (ingresso per il master ed uscita per lo
slave)
• MOSI: Master Output Slave Input (uscita dal master)
• CS: Chip Select (emesso dal master per scegliere con quale dispositivo slave
vuole comunicare)
Scendendo nel dettaglio, ll segnale SCLK e' il clock seriale che scandisce gli
istanti di emissione e di lettura dei bit sulle linee di dati. Viene emesso dal
master ed e' quindi quest' ultimo a richiedere di volta in volta la trasmissione
di una "parola". Il segnale MISO e' la linea attraverso cui il dispositivo (master
o slave) riceve il dato seriale emesso dalla controparte. Sullo stesso fronte di
commutazione del clock, il dispositivo emette, con la stessa cadenza, il suo output
ponendo il dato sulla linea MOSI.
. CAPITOLO DUE: STUDIO DEL CONTATORE
PROPORZIONALE AD HE3 21
La presenza del Chip Select non e' de�nita indispensabile. Nel caso del conta-
tore proporzionale pero', e' presente la necessita' di collegare quattro sensori con
questo protocollo, quindi diventa obbligatoria la presenza di un CS per "avvisare"
il dispositivo corrente di una imminente comunicazione.
Nella �gura sottostante una schematizzazione della chain dei sensori:
Figure .1: Connessione SPI tra un master e tre slave.
.2.1 Sensore di temperatura: TMP121
Il sensore di temperatura TMP121 e' un sensore digitale, compatibile con lo
standard SPI. Ha una risoluzione a 12 bit e una accuratezza di 1.5 C su un range
compreso tra -25 C a +85 C. Non richiede nessun componente aggiuntivo e ha un
. CAPITOLO DUE: STUDIO DEL CONTATORE
PROPORZIONALE AD HE3 22
basso consumo di corrente, stimato nell' ordine dei 10 mA. In uscita restituisce 16
bit, di cui i primi tre sono di alta impedenza �ssi a zero. I restanti compongono
in esadecimale la temperatura letta. Il tempo minimo che deve intercorrere tra
una lettura e la successiva e' di 100 nanoSecondi. Al seguito la sequenza dei bit
di lettura:
Figure .2: Lettura dei bit. Immagine presa dal datasheet del compo-
nente.
.2.2 Sensore di pressione: MPL115A1
Il sensore di pressione MPL115A1 e' un sensore barometrico compatibile con il
protocollo SPI. Possiede una modalita' standby che limita il consumo di corrente
a 1 uA, mentre durante il funzionamento consuma 5 uA. Garantisce una lettura
accurata da 50 KPascal �no a 112 KPascal. Possiede un ADC interno che e�ettua
la conversione, e come speci�cato sul datasheet, l' utente, per ottenere il valore
in KPascal, deve applicare semplicemente una proporzione matematica riportata
qui in basso:
Pressure(kPa)P = com ∗ 115− 50
1023+ 50
Per chiedere il valore rilevato si possono inviare al sensore sia sequenze in
binario che in esadecimale. Nella �gura sottostante sono presenti i possibili co-
mandi da inviare. E' possibile leggere la temperatura e la pressione sia partendo
dal LSB (Least Signi�cant Bit) che dal MSB (Most Signi�cant Bit).
. CAPITOLO DUE: STUDIO DEL CONTATORE
PROPORZIONALE AD HE3 23
Figure .3: Possibili comandi sensore di pressione. Immagine presa dal
datasheet del componente
.2.3 ADC converter: AD7689
Il convertitore Analogico-Digitale AD7689, prodotto dalla Analog Devices, e' un
ADC a otto canali a singola alimentazione. Possiede una risoluzione di 16 bit ed
e' compatibile con il protocollo SPI. Quando il Chip Select viene portato a livello
logico basso, il dispositivo risulta pronto per leggere e scrivere dati sul master.
Nei successivi 14 fronti di salita del clock, il CFG(Con�guration Register) viene
aggiornato con il dato attuale rilevato. Al 15esimo fronte di salita del clock il
dato e' disponibile. Come speci�ca dal manuale, due letture dummy sono richieste
all' avvio della comunicazione. Per questo esperimento il convertitore ha i canali
settati in questo modo:
• Canale uno: Lettura High Voltage
• Canale due: Canale non utilizzato
• Canale tre: Canale non utilizzato
• Canale quattro: Canale non utilizzato
. CAPITOLO DUE: STUDIO DEL CONTATORE
PROPORZIONALE AD HE3 24
• Canale cinque: Temperatura ADC
• Canale sei: Lettura 3.3 Volt
• Canale sette: Lettura 5 Volt
• Canale otto: Lettura complessiva
Nella �gura sottostante e' presente una visione d' insieme del con�guration
Register:
Figure .4: Con�guration register AD7689.
Ogni bit ha un signi�cato ben preciso, che riporto qui in questo elenco schematico:
• Bit 13: Aggiorna o meno il contenuto del registro
• Bit 12-10: Modalita' di lettura (bipolare,di�erenziale, pari, single-ended,
temperatura)
• Bit 9-7: Canale di Input
• Bit 6: Banda passante (1 intera, 0 14di banda)
• Bit 5-3: Reference interno/esterno
• Bit 2-1: Abilita o disabilita lo scanning dei canali
• Bit 0: Legge o meno il contenuto del vecchio CFG
. CAPITOLO DUE: STUDIO DEL CONTATORE
PROPORZIONALE AD HE3 25
.2.4 DAC converter: AD5668
Il convertitore Digitale-Analogico AD5668, prodotto dalla Analog Devices, e' un
DAC ad otto canali con una risoluzione di 16 bit. Funziona a singola alimen-
tazione 5 Volt. Possiede una struttura interna a resistori pesati, un reference
anch'esso interno (con opportune modi�che puo' avvalersi anche di un reference
esterno) e un ampli�catore di uscita con guadagno pari a 2. La formula attraverso
la quale e' possibile calcolare la tensione di uscita e' la seguente:
V out = V ref ∗ D2N
In �gura e' illustrata la struttura interna del DAC, in cui sono presenti tutti
i componenti sopra citati:
Figure .5: Struttura interna del DAC
.2.5 Modulo alta tensione
Il modulo High Voltage utilizzato per alimentare il tubo e' uno Spellman Ms;
particolarmente indicato per una installazione su schede stampate, riesce a pro-
durre �no a 3 Watt in corrente continua. Richiede una alimentazione a 12 Volt,
e l'uscita in alta tensione viene controllata attraverso un DAC, che a fronte di
. CAPITOLO DUE: STUDIO DEL CONTATORE
PROPORZIONALE AD HE3 26
un impulso in milliVolt, produce una tensione in KiloVolt (nello speci�co questo
modulo puo' arrivare �no a 2500 Volt, cioe' 2,5 KiloVolt).
Figure .6: Modulo HV utilizzato per l' esperimento del contatore pro-
porzionale.
.3 Codice sorgente
Il codice sorgente caricato nel microcontrollore e' strutturato in tre �le (un main
e due header) cosi' strutturati:
• Main.c
• FunzioniHardware.c
• FunzioniSoftware.c
Nel �le principale sono presenti varie de�nizioni di pin �sici e le inclusioni di
alcune librerie necessarie al funzionamento del progetto (tra cui SPI.h e SD.h).
Grazie alla funzione loop di Arduino, dopo un messaggio di benvenuto iniziale,
il processore si mette in attesa del comando digitato dall' utente (una semplice
comparazione tra stringhe). Nelle funzioni software e' de�nito un menu' help, sono
. CAPITOLO DUE: STUDIO DEL CONTATORE
PROPORZIONALE AD HE3 27
de�nite tutte quelle funzioni che stampano valori letti dai vari sensori e inoltre
sono presenti funzioni che manipolano adeguatamente le stringhe digitate dall'
utente. In�ne, nelle funzioni hardware sono presenti tutti i metodi che agiscono
con i vari dispositivi collegati ad Arduino, mandando e ricevendo sequenze di bit
(quindi sequenze di impulsi).
Figure .7: Organizzazione del codice sorgente di Arduino.
Capitolo Tre: Applicazione Java per
il monitoring del rilevatore
.1 Ambiente di sviluppo utilizzato
L'Integrated Development Environmemt utilizzato per realizzare l' applicazione e'
Netbeans versione 8.0. Questo software, a licenza GPL (General Public License)
e' sviluppato dalla Oracle e scritto interamente in Java. Rilasciato nel Giugno
2000, si e' subito imposto come alternativa ad Eclipse (rilasciato sempre dalla
stessa Oracle). Si tratta di un software multipiattaforma che permette la scrittura
e l' esecuzione di applicazioni scritte in vari linguaggi tra cui Java, C/C++, PHP.
Nella sua versione piu' recente supporta anche l' HTML5.
A di�erenza di altri prodotti simili presenta alcuni vantaggi sostanziali, tra
cui una gestione interna del database MySQL, una GUI per le applicazioni Swing
e i due application server principali per la gestione di siti internet scritti in Java:
TomCat e GlassFish. E' presente una versione tradotta parzialmente in italiano.
.2 Java Swing
L' aspetto gra�co del pannello e' curato dalle librerie Swing. Java Swing e'
de�nito come framework appartenente alle JFC (Java Foundation Classes) ed
28
. CAPITOLO TRE: APPLICAZIONE JAVA PER IL
MONITORING DEL RILEVATORE 29
e' orientato allo sviluppo di interfacce gra�che per Java. E' un' estensione del
precedente AWT (Abstract Window Toolkit. La di�erenza principale tra i due
framework e' che i componenti di Swing sono scritti completamente in codice
Java.[Gea][JM]
A seguire alcune caratteristiche tecniche di Swing:
• Indipendente dalla piattaforma: indipendente sia in termini di linguaggio
(Java) sia della sua implementazione (applica una renderizzazione univer-
sale).
• Estendibile: le diverse parti della libreria Swing sono basate su determinate
interfacce che sono comunque facilmente collegabili tra loro.
• Orientata ai componenti: Gli oggetti Swing emettono eventi in modo asin-
crono, hanno caratteristiche legate ad essi stessi, e rispondono da un ben
preciso set di comandi (speci�co per componente). Quindi si rende neces-
sario de�nire per ogni componente una speci�ca proprieta'.
• Modi�cabile: La rappresentazione gra�ca di un componente swing e' data
da una combinazione di un set standard di elementi; in particolare, ad ogni
componente e' a�dato il disegno di default dei bordi, delle rientranze, delle
decorazioni. L'utente andra' a personalizzare queste caratteristiche ed il
componente, all'atto di disegnarsi, terra' conto di queste modi�che.
• Con�gurabile: Swing, facendo un uso pesante dei meccanismi di runtime e
dei percorsi di renderizzazione indiretta, ha la possibilita' di modi�care a
runtime cambiamenti anche fondamentali nei suoi settaggi. Questo richiede
molte risorse di calcolo.
• Leggera: La con�gurabilita' di Swing si ottiene "disegnando" i suoi controlli
costantemente, attraverso l'uso delle API 2D di Java.
. CAPITOLO TRE: APPLICAZIONE JAVA PER IL
MONITORING DEL RILEVATORE 30
Figure .1: Componenti gra�ci in Swing e in AWT.
• MVC: La libreria Swing fa un forte uso del design pattern Model/View/-
Controller, il quale concettualmente disaccoppia i dati mostrati ed i controlli
dell' interfaccia utente attraverso i quali sono mostrati. Grazie a questo, la
maggior parte dei componenti Swing hanno associati modelli (speci�cati in
termini di Java interfaces), il programmatore puo' usare varie implemen-
tazioni di default o crearne di proprie. Il framework fornisce implemen-
tazioni di default di modelli per le interfacce per tutti i suoi componenti.
.3 Gestire la comunicazione seriale
La comunicazione seriale tra il personal computer e la macchina e' gestita da
una libreria Java per la comunicazione seriale. Sfortunatamente, la Sun non
ha prestato molta attenzione alla comunicazione seriale in Java; esiste una API
. CAPITOLO TRE: APPLICAZIONE JAVA PER IL
MONITORING DEL RILEVATORE 31
de�nita per tale scopo, JavaComm, ma tale API non e' prevista all' interno della
Java Standard Edition. Questa situazione, e il fatto che la Sun originariamente
non ha proveduto ad un' implemntazione di JavaComm per Linux, ha diretto
verso lo sviluppo di una libreria gratuita RxTx. RxTx e' disponibile, non solo
per Linux, ma per diverse piattaforme. Puo' essere usata con o senza l' appoggio
della JavaComm(la RxTx fornisce i suoi driver speci�ci). Quando vengono uti-
lizzate assieme, il collegamento tra JavaComm e RxTx viene gestito dalla JCL
(JavaComm for Linux). La JCL fa parte della RxTx.
Una alternativa alla libreria sopra citata e' la JSSC (Java Simple Serial Con-
nector. Di facile utilizzo, permette di aprire, gestire e chiudere una comunicazione
seriale con qualsiasi dispositivo ed e' compatibile con i principali sistemi operativi.
Per utilizzarla nel proprio progetto basta importare il �le .jar come una normale
libreria Java.
A livello pratico e' importante de�nire un oggetto di tipo SerialPort nel pro-
prio codice sorgente; su questo oggetto creato andremo ad applicare i metodi per
gestire la comunicazione. Inoltre e' necessario chiamare il metodo .openPort()
che apre la connessione e il metodo .setParams() nel quale vengono de�niti i
parametri di connessione. La de�nizione dell'oggetto avviene come un qualsiasi
oggetto in Java:
public SerialPort serialPort;
serialPort.openPort ();
serialPort.setParams (9600 , 8, 1, 0); //baudRate ,
dataBits , stopBits , parity
. CAPITOLO TRE: APPLICAZIONE JAVA PER IL
MONITORING DEL RILEVATORE 32
Di seguito riporto i metodi principali da me utilizzati sull' oggetto serialPort
per gestire la comunicazione, con una breve descrizione nei commenti:
String [] getListOfPorts (); // ritorna le porte seriali
disponibili
boolean isOpened (); // ritorna TRUE se la porta
corrente è aperta
String getPortName (); // ritorna il nome della porta
connessa
void closePort (); // chiude la porta seriale
int getLinesStatus (); // ritorna lo stato della
connessione
String readString (); // ritorna una stringa con i dati
della connessione seriale
String writeString (); // scrive una stringa sulla
connessione corrente
E' possibile anche leggere stringhe in esadecimale e in binario. Inoltre diventa
di vitale importanza gestire le speci�che eccezioni attraverso il metodo SerialPor-
tException().
. CAPITOLO TRE: APPLICAZIONE JAVA PER IL
MONITORING DEL RILEVATORE 33
.4 MySQL e la persistenza dei dati rilevati
La gestione persistente dei valori misurati dal contatore proporzionale e' realizzata
attraverso un Database Locale gestendo i dati con MySQL. Quest'ultimo e' un
RDBMS (Relational database management system), sviluppato in linguaggio C e
C++, composto da un client a riga di comando e un server. E' un software libero
sviluppato sempre dalla stessa Oracle. In una de�nizione di base, possiamo dire
che un database e' un contenitore di dati, e un RDBMS e' uno strumento che ci
consente di accedere a uno o piu' database per e�ettuare recupero, inserimento o
modi�ca dei dati.
Per quanto riguarda MySQL, esistono anche alcuni "MySQL Manager" ad
interfaccia gra�ca, tra cui phpMyAdmin o anche HeidiSQL per la gestione dei
database presenti attraverso GUI. Interessante anche un tool relativamente re-
cente, dal nome MySQL Workbench, che integra il disegno, la modellazione, la
creazione e l'aggiornamento di un database in un unico ambiente di lavoro.
. CAPITOLO TRE: APPLICAZIONE JAVA PER IL
MONITORING DEL RILEVATORE 34
Come gia accennato in precedenza, un punto di forza di Netbeans a dispetto
di altri IDE, e' quello di avere una integrazione locale di MySQL, quindi con
pochi passaggi di con�gurazione e' possibile avere un database perfettamente
funzionante a disposizione. In basso le tabelle presenti nel database di pressione
e temperatura:
Table .1: Tabella della pressione.
ID Pressione sonda 2 Pressione sonda 4 Data1 113.5 112.2 Jul 28 13:49:492 113.5 112.2 Jul 28 13:50:493 113.5 112.2 Jul 28 13:51:494 113.5 112.2 Jul 28 13:52:495 113.5 112.2 Jul 28 13:53:49
Table .2: Tabella della temperatura.
ID Temperatura sonda 1 Temperatura sonda 3 Data1 25.6 25.3 Jul 28 13:49:492 25.6 25.3 Jul 28 13:50:493 25.6 25.3 Jul 28 13:51:494 25.6 25.3 Jul 28 13:52:495 25.6 25.3 Jul 28 13:53:49
Utilizzando gli opportuni driver JDBC e' possibile gestire l'interazione tra il
database e l' applicativo Java. E'quindi necessario creare un oggetto Connection
e impostare alcuni parametri di connessione:
Connection connection;
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql:
// localhost :3306/ ContatoreProporzionale", "root", "");
Nel caso di problemi durante la connessione bisogna gestire una eccezione:
. CAPITOLO TRE: APPLICAZIONE JAVA PER IL
MONITORING DEL RILEVATORE 35
catch (ClassNotFoundException | SQLException s) {
graphic.logArea.append("--- Problem with the
DBEngine ---");
}
La query al database per e�ettuare il recuepero dei dati passati viene e�ettuata
all' apertura dell'applicazione, e si compone di pochi passi. De�nisco un vettore
di stringhe, preparo una query e la eseguo al database. Il risultato mi torna nella
variabile rs. Scorro quest'ultima e aggiungo i dati al vettore de�nito inizialmente:
Vector <Vector <String >> pressData = new
Vector <Vector <String >>();
Connection conn = dbConnection ();
PreparedStatement pre = conn.prepareStatement("SELECT
* FROM Pressure");
ResultSet rs = pre.executeQuery ();
while (rs.next()) {
Vector <String > press = new Vector <String >();
press.add(rs.getString (1)); // pressure 2
press.add(rs.getString (2)); // pressure 4
press.add(rs.getString (3)); //time
pressData.add(press);
Per quanto riguarda l' invio e il salvataggio su database dei valori rilevati, il
codice diventa leggermente piu' complesso. Come per il recupero dei dati, in-
izialmente si crea una connessione; dagli oggetti �eld di Swing si recuperano le
stringhe e le si trasformano in dei valori �oat attraverso la funzione parseFloat()
de�nita nelle API standard di Java. E' di interesse memorizzare anche la data
con l' ora in cui il valore viene inserito nel database, quindi si importa la libreria
. CAPITOLO TRE: APPLICAZIONE JAVA PER IL
MONITORING DEL RILEVATORE 36
Date e si crea un oggetto Date, sulla base di un oggetto SimpleDateFormat(anch'
esso presente nella libreria Date). Attraverso il metodo toString() si ottiene il
valore testuale della data. Si creano due oggetti string in cui si inseriscono le
asserzioni che verranno e�ettuate nel database. In ultima istanza, si eseguono
entrambi gli update.
Class.forName("com.mysql.jdbc.Driver");
Connection con =
DriverManager.getConnection("jdbc:mysql:
// localhost :3306/ ContatoreProporzionale", "root", "");
Statement stmt = (Statement) con.createStatement ();
float temp1 = Float.parseFloat(temperature1Field
.getText ());
float temp2 = Float.parseFloat(temperature2Field
.getText ());
float temp3 = Float.parseFloat(temperature3Field
.getText ());
float temp4 = Float.parseFloat(temperature4Field
.getText ());
float press2 = Float.parseFloat(pressure2Field
.getText ());
float press4 = Float.parseFloat(pressure4Field
.getText ());
SimpleDateFormat sdf = new
SimpleDateFormat("yyyy.MM.dd 'at' HH:mm:ss ");
Date dateWithoutTime = sdf.parse(sdf.format(new
Date()));
. CAPITOLO TRE: APPLICAZIONE JAVA PER IL
MONITORING DEL RILEVATORE 37
String timeDatabase;
timeDatabase = dateWithoutTime.toString ();
String substring = timeDatabase.substring(4, 19);
String insertTemp = "INSERT INTO Temperature VALUES("
+ temp1 + "," + temp2 + "," + temp3 + "," + temp4 +
",'" + substring + "')";
String insertPressure = "INSERT INTO Pressure VALUES("
+ press2 + "," + press4 + ",'" + substring + "')";
stmt.executeUpdate(insertTemp);
stmt.executeUpdate(insertPressure);
}
Anche in questo caso, ci sono alcune eccezioni che vanno necessariamente gestite.
Nello speci�co l' eccezione dello statement SQL e l' eccezione del parsing.
catch (ClassNotFoundException | NumberFormatException
| SQLException | ParseException e) {
JOptionPane.showMessageDialog(null ,
e.getMessage (), "Error", 1);
.5 JfreeChart: gra�ci in Java
La realizzazione dei gra�ci in 2d e 3d dei valori su database e' gestita attraverso
la libreria Java JfreeChart. JFreeChart e' un framework open-source per creare
una serie di gra�ci di vario tipo. Alcuni esempi di strategie realizzabili:
• Gra�co X-Y
• Gra�co a torta
• Gra�co Gantt
. CAPITOLO TRE: APPLICAZIONE JAVA PER IL
MONITORING DEL RILEVATORE 38
• Gra�co a barre
• Gra�co a valore singolo
• Gra�ci speci�ci
Il disegno delle scale degli assi e la legenda e' realizzata in maniera automat-
ica. Anche la dimensione complessiva dei gra�ci e' realizzata di default basandosi
sulla risoluzione del computer corrente.
Nel riquadro sottostante il codice necessario per la realizzazione di un gra�co
3d a linee dei valori di pressione recuperati dal database. Si e�ettua una query
al database recuperando i dati voluti. Si crea una struttura base per il gra�co, si
impostano i valori degli assi, il font desiderato per il testo presente; in�ne si crea
un nuovo frame in cui racchiudere il gra�co e lo si rende visibile.
Class.forName("com.mysql.jdbc.Driver");
Connection con =
DriverManager.getConnection("jdbc:mysql:
// localhost :3306/ ContatoreProporzionale", "root", "");
Statement stmt = (Statement) con.createStatement ();
String query = "SELECT time ,press2 from Pressure";
JDBCCategoryDataset data = new
JDBCCategoryDataset(con , query);
JFreeChart chart =
ChartFactory.createLineChart3D("Line Pressure
Graph", "date", "pressure", data ,
PlotOrientation.VERTICAL , false , true , true);
CategoryPlot p = chart.getCategoryPlot ();
ValueAxis axis = p.getRangeAxis ();
. CAPITOLO TRE: APPLICAZIONE JAVA PER IL
MONITORING DEL RILEVATORE 39
CategoryPlot pa = chart.getCategoryPlot ();
CategoryAxis axist = pa.getDomainAxis ();
Font font = new Font("Dialog", Font.PLAIN , 5);
axist.setTickLabelFont(font);
BarRenderer renderer = null;
CategoryPlot plot = null;
renderer = new BarRenderer ();
ChartFrame frame = new ChartFrame("query chart",
chart);
frame.setVisible(true);
frame.setSize (1920, 1080);
.5.1 Di�erenze dell' applicazione nei principali sistemi
operativi
Una delle caratteristiche dell' applicazione e' quella di essere multipiattaforma,
nello speci�co di essere compatibile con i tre principali sistemi operativi: Win-
dows, Linux e Mac OSX. L' unica di�erenza sostanziale tra questi O.S., per
quanto riguarda l' applicativo realizzato, e' il nome delle porte seriali del pc. Per
realizzare questa feature quindi si recupera il nome del sistema operativo utiliz-
zando il package java.System, presente nelle API di java. Recuperando il nome
del sistema operativo, e salvandolo in una stringa e' possibile de�nire il nome
della porta di comunicazione seriale di default, in questo modo:
public class SerialCommunication {
SerialPort serialPort;
String os="";
. CAPITOLO TRE: APPLICAZIONE JAVA PER IL
MONITORING DEL RILEVATORE 40
public String getOperatingSystem (){
String osname=System.getProperty("os.name","")
.toLowerCase ();
if(osname.startsWith("windows")){
os="windows";
}
else if(osname.startsWith("linux")){
os="linux";
}
else if(osname.startsWith("mac")){
os="mac";
}
else{
System.out.println("Sorry your operating
system is not supported");
}
return os;
}
Capitolo Quattro: Visione globale
dell' applicazione
Nella �gura in basso, che mostra la macchina in acquisizione con veri�ca dei dati
ricevuti attraverso oscilloscopio, e' possibile notare il particolare del computer
avviato con HyperTerminal in ricezione dati. Come gia' detto nel capitolo 4
questo richiede una conoscenza pregressa delle funzionalita' della macchina, il
mio lavoro di tesi e' stato proprio quello di rendere user-friendly l'interazione con
la macchina e con l' esperimento stesso.
Figure .1: Acquisizione dati prima della creazione dell' applicazione in
Java.
41
. CAPITOLO QUATTRO: VISIONE GLOBALE DELL'
APPLICAZIONE 42
.1 Organizzazione package e risultato �nale
Alcune schermate sommarie riguardanti l' organizzazione del progetto in Net-
beans 8.0 e il risultato �nale dell'applicazione:
Figure .2: Organizzazione in package del codice applicativo.
. CAPITOLO QUATTRO: VISIONE GLOBALE DELL'
APPLICAZIONE 43
Figure .3: Main panel in acquisizione dati.
. CAPITOLO QUATTRO: VISIONE GLOBALE DELL'
APPLICAZIONE 44
.2 Sezione Database e di Log
Dettaglio di alcuni componenti principali presenti nel pannello:
Figure .4: Sezione database.
Figure .5: Sezione di log. E' presente il sistema operativo corrente e l'
ora con la data d' inizio della sessione.
. CAPITOLO QUATTRO: VISIONE GLOBALE DELL'
APPLICAZIONE 45
.3 Gra�ci di pressione e temperatura
A seguire i gra�ci che e' possibile costruire e visualizzare in tempo reale grazie
alla libreria JFreeChart:
Figure .6: Gra�co a barre 3d della temperatura.
. CAPITOLO QUATTRO: VISIONE GLOBALE DELL'
APPLICAZIONE 46
Figure .7: Gra�co a linee 3d della pressione.
. CAPITOLO QUATTRO: VISIONE GLOBALE DELL'
APPLICAZIONE 47
.4 Sezione comunicazione e avvio acquisizione
Dettaglio della sezione atta all' apertura e alla chiusura della connessione e della
sezione per controllare l' acquisizione corrente:
Figure .8: Rilevamento della porta disponibile e possibilita' di aprire e
chiudere la connessione.
Figure .9: Dopo aver impostato il tempo di acquisizione in millisecondi
e' possibile dare lo start alla macchina.
. CAPITOLO QUATTRO: VISIONE GLOBALE DELL'
APPLICAZIONE 48
.5 Funzioni disponibili
Ho ritenuto utile creare un sub-panel in cui inserire le principali funzioni disponi-
bili:
Figure .10: Sintetico elenco dei comandi disponibili per controllare la
macchina.
. CAPITOLO QUATTRO: VISIONE GLOBALE DELL'
APPLICAZIONE 49
Figure .11: About us.
Capitolo Cinque: Conclusioni e
sviluppi futuri
Cercare di racchiudere in queste poche pagine il mio lavoro di tesi non e' stato
certamente semplice, cosi' come non e' semplice raccontare in questo spazio i miei
due anni di collaborazione con l' Istituto Nazionale di Fisica Nucleare.
Due anni che mi hanno permesso di apprendere molte cose e di seguire con
una lente d' ingrandimento l' esperimento ERMES, che ha visto la creazione e
la realizzazione del contatore proporzionale ad Elio 3 con un microcontrollore a
basso costo, come Arduino.
Le nozioni ingegneristiche apprese in questi tre anni di studio universitario
sono state utili su ogni fronte: dalla conoscenza di un linguaggio ad alto liv-
ello come Java, alla gestione di un database relazionale come Postgres oppure
MySQL. Inoltre, la conoscenza delle nozioni di �sica base, di telecomunicazioni
e di reti di calcolatori, che mi hanno consentito di risolvere alcuni aspetti critici,
di competenza necessaria nell' ambiente di lavoro nel quale mi trovavo.
Ritengo che il mio lavoro di tesi, cosi' come l'esperimento con il quale mi sono
dovuto cimentare abbiano ampi margini di miglioramento e di sviluppo futuro.
Ad esempio, un obiettivo perseguibile potrebbe esser la realizzazione all' interno
dell' interfaccia gra�ca di una feature che permetta la connessione e il download
50
. CAPITOLO CINQUE: CONCLUSIONI E SVILUPPI FUTURI 51
dei dati via Wi-Fi, che putroppo per motivi di tempo legati all' andamento del
tirocinio, non e' stato possibile realizzare.
Ringraziamenti
52
Bibliogra�a
[Gea] David M. Geary. Graphic java 2, volume 2. Prentice Hall.
[JM] Chris Adamson Joshua Marinacci. Swing hacks. O'Reilly.
[Kno] Glenn F. Knoll. Radiation detection and measurement.
[Lar05] C. Larman. Applicare UML e i pattern - Analisi e progettazione orien-
tata agli oggetti. Prentice Hall, 2005.
[Leo94] W.R. Leo. Techniques for nuclear and particle physics experiments.
1994.
[LNF04] LNF. I raggi cosmici. Laboratori Nazionali del gran Sasso, 2004.
[Nob11] Luca Nobili. Il segreto dei raggi cosmici: da dove prendono velocita'?
Media - INAF, 2011.
[Sch11] Herbert Schildtn. Java. La guida completa. McGraw-Hill Education,
2011.
[Wik] Wikipedia. http://it.wikipedia.org/wiki/Contatore_Geiger.
53