Il progetto Semantic ArDroid è stato sviluppato con l'obiettivo di rendere possibile l'utilizzo di un'applicazione per l'accesso sicuro ai
dati provenienti da endpoint SPARQL, in uno scenario distribuito e con l'utilizzo dispositivi mobile (large screen/tablet). Il design
architetturale ha previsto il connubio di un dispositivo hardware che fungesse da "Android Accessory" per l'autenticazione basato su
Arduino UNO o Arduino MEGA Android ADK e di un tablet Android (con SDK minimo pari a 11 - Honey Comb).
1. Semantic ArDroid - Relazione_finale - # 25
Il progetto Semantic Android
Il progetto Semantic ArDroid è stato sviluppato con l'obiettivo di rendere possibile l'utilizzo di un'applicazione per l'accesso sicuro ai
dati provenienti da endpoint SPARQL, in uno scenario distribuito e con l'utilizzo dispositivi mobile (large screen/tablet). Il design
architetturale ha previsto il connubio di un dispositivo hardware che fungesse da "Android Accessory" per l'autenticazione basato su
Arduino UNO o Arduino MEGA Android ADK e di un tablet Android (con SDK minimo pari a 11 - Honey Comb).
Il funzionamento di base
Lo scenario applicativo ipotizzato in ambito progettuale è stato definito partendo dall'assunto che l'utilizzatore di tale applicazione
dovesse avere la disponibilità di un tablet Android con accesso a Internet e dotato di Bluetooth e che dovesse trovarsi nelle vicinanze
del dispositivo di autenticazione basato su RFID tags. Presupponendo uno scenario di questo tipo un'ipotesi potrebbe essere quella
di un operatore che si sposti su un autoveicolo aziendale dotato di una presa di corrente a 12 V che possa alimentare il dispositivo
d'autenticazione, oppure un veicolo che abbia già incorporato tale dispositivo. L'azienda o l'ente che fornisca tale applicazione ai
propri operatori incaricati sul territorio non farebbe altro che dare ad ognuno di essi un tag di autenticazione univoco e un tablet con
l'applicativo preinstallato. In tal modo, durante il corso dei normali spostamenti, l'incaricato potrà accedere al sistema aprendo l'app
Semantic ArDroid sul proprio Android device e richiedendo l'autenticazione tramite comunicazione Bluetooth RFCOMM al dispositivo
hardware d'autenticazione. Una volta associato tale dispositivo al tablet verrà richiesto, tramite Alert su Android e tramite segnalazione
LED sull'hardware, l'autenticazione per mezzo della lettura di un tag RFID.
Android provvederà poi a confrontare il valore dei 10 digit del tag con il proprio database e a permettere la successiva interrogazione
degli endpoint remoti per mezzo di visualizzazioni grafiche basate su mappe o grafici di vario tipo, permettendo così all'operatore un
monitoraggio costante del territorio su cui si trova ad operare tramite l'utilizzo di applicazioni semantiche.
Lo Use Case Android + Arduino
24/09/2012
1/11
2. 1. Accensione Arduino
2. Boot app Android
3. Intent per attivazione antenna Bluetooth
1. Searching del dispositivo
2. Associazione con FireFly-B223 (passkey 1234 - baudrate 9600)
3. Android invia 's' INIZIO COMUNICAZIONE
4. Arduino invia ACK COMUNICAZIONE "INIT"
5. Accensione LED rosso fisso
6. Boolean activeCOM = TRUE
7. Messaggio a video di avvenuta associazione
4. Richiesta di autenticazione da parte dell'activity Android
1. Android invia 'a' ACTIVE MODE - Richiesta lettura tag
2. Blinking LED giallo per segnalazione inizio lettura RFID
3. ENABLE di RFID Reader
- LED giallo acceso
- LED RFID reader rosso
4. Attesa attiva per ricezione TAG RFID
5. Lettura per RFIDReads volte dei tag RFID
6. Invio tags code via BT
7. Attesa 'k' ACK su lettura avvenuta
8. Spegnimento LED giallo - Fine lettura RFID
9. LED verde acceso su ACK Android - 1s
5. Fine comunicazione
1. Android invia 'b' BYE "Over and Out" - passo e chiudo :)
2. Spegnimento LED ROSSO
3. Boolean activeCOM = FALSE
6. Loop
Activity Diagram
Stati BluetoothHandler (Android Service)
24/09/2012
2/11
3. State Machine Diagram
1. NONE
2. CONNECTING
3. COMMAND
4. READ
5. ERROR
Messaggi (verso SemanticArDroidActivity)
1. MESSAGE_STATE_CHANGE
2. MESSAGE_READ
3. MESSAGE_WRITE
4. MESSAGE_DEVICE_NAME
5. MESSAGE_TOAST
Codici di segnalazione Arduino
1. 's' INIZIO COMUNICAZIONE
2. 'a' ACTIVE MODE - Richiesta lettura tag
3. 'k' ACK ACK su lettura avvenuta
4. 'b' BYE "Over and Out" - passo e chiudo :)
Il design dell'applicazione Android
24/09/2012
3/11
4. Sequence Diagram
I risultati dello STATE DATA VISUALIZATION
- Map
1<script type="text/javascript">
2
sgvizler.option.query.endpoint_output = 'jsonp';
3
24/09/2012
4/11
6. 12
13
14
15
16
17
18
19
20
21
22
npdv:producedNetNGLMillSm3 ?NGL_millSm3 ;
npdv:producedNetCondensateMillSm3 ?Condensate_millSm3 ;
npdv:producedWaterMillSm3 ?Water_millSm3 ;
OPTIONAL{?period npdv:month ?month} .
FILTER (!bound(?month))
FILTER (xsd:int(?year) < 2011)
} ORDER BY ?year"
data-sgvizler-chart="gAreaChart"
data-sgvizler-log="2"
style="width:800px; height:500px;"
></div>
I dati di diagramma sono prodotti interrogando l'endpoint SPARQL del Logic and Intelligent Data research group del Department of
Informatics (University of Oslo). I dati vengono prodotti prendendo spunto da quanto prodotto per il progetto Linked Open NPD
FactPages (Linked Open Data version of the Norwegian Petroleum Directorate's Fact Pages).
L'ontologia NPD è accessibile all'indirizzo: http://sws.ifi.uio.no/vocab/npd
- Pie
1
2
3
4
5
6
7
8
9
<div id="sgvzl_example1"
data-sgvizler-query="SELECT ?class (count(?instance) AS ?noOfInstances)
WHERE{ ?instance a ?class }
GROUP BY ?class
ORDER BY ?class"
data-sgvizler-chart="gPieChart"
data-sgvizler-log="0"
style="width:800px; height:500px;"
>
24/09/2012
6/11
7. 10
</div>
Anche in questo caso viene utilizzata l'ontologia NPD e vengono visualizzate le classi RDFS e le loro istanze. Viene effettuato il
conteggio, l'aggregazione e l'ordinamento.
L'hardware necessario
Il design dell'accessorio Android per l'autenticazione hardware per mezzo di tag RFID ha richiesto l'utilizzo dei seguenti componenti:
-
Arduino UNO
Tre LED di segnalazione, corredati di relative resistenze
Modulo di connessione Bluetooth BlueSMiRF Silver della Sparkfun Electronics
Modulo per RFID Card reader PARALLAX
24/09/2012
7/11
8. Specifiche modulo Bluetooth BlueSMiRF
-
FCC Approved Class 2 Bluetooth Radio Modem
Extremely small radio - 0.15x0.6x1.9"
Very robust link both in integrity and transmission distance (18m)
Hardy frequency hopping scheme - operates in harsh RF environments like WiFi, 802.11g, and Zigbee
Encrypted connection -- Abilitabile tramite AT Commands
Frequency: 2.4~2.524 GHz
Operating Voltage: 3.3V-6V
Serial communications: 2400-115200bps
Operating Temperature: -40 ~ +70C
Built-in antenna
Specifiche modulo RFID reader PARALLAX
Features:
- Low-cost method for reading passive RFID EM4100 family transponder tags
- 2400 baud serial interface
24/09/2012
8/11
9. - Enable input allows module to be enabled/disabled by software
- Bi-color LED for visual indication of status (GREEN not enabled, RED enabled)
Compatible tags:
-
54x85mm Rectangle Tag ISO Card: 6.3cm (2.5") +/- 10%
50mm Round Tag World Tag 50mm: 6.8cm (2.7") +/- 10%
Blue Eye Key Fob
25mm Disk Tag
Key Specifications:
-
Reads 125 kHz Tags, EM41000 Family
Power requirements: 4.5 to 5.5 VDC
Communication: Serial at 2400 baud (8N1)
Dimensions: 2.45 x 6.25 x 0.22 in (62.2 x 82.5 x 5.57 mm)
Operating temp range: -40 to +185 °F (-40 to +85 °C)
Arduino Sketch
1#include <SoftwareSerial.h>
2#define rxPinRFID 6
3#define txPinRFID 12 // NOT REALLY USED!
4#define RFIDENABLE 7
5#define greenLED 8
6#define yellowLED 9
7#define redLED 10
8
9int val = 0;
10char btval = ' ';
11char code[10];
12const char endString = '%'; // 37
13const String endCommand = "###";
14int bytesread = 0;
15const int RFIDReads = 4;
16boolean activeCOM = false;
17boolean waitingACK = false;
18SoftwareSerial RFID = SoftwareSerial(rxPinRFID,txPinRFID);
19
20void setup()
21{
22 Serial.begin(9600); // Hardware serial for Monitor 2400bps
23
24 pinMode(RFIDENABLE,OUTPUT);
// Set digital pin 2 as OUTPUT to connect it to the RFID /ENABLE pin
25 digitalWrite(RFIDENABLE, HIGH);
26 RFID.begin(2400);
27
28 //LEDS
29 pinMode(greenLED, OUTPUT);
30 pinMode(yellowLED, OUTPUT);
31 pinMode(redLED, OUTPUT);
32}
33
34void loop()
35{
36 if(Serial.available() > 0) {
37 btval = Serial.read();
38 if(btval == 's' && activeCOM == false) { // START COMMUNICATION
39
digitalWrite(redLED, HIGH);
40
Serial.print("INIT");
41
Serial.print(endCommand);
42
activeCOM = true;
43 }
44
45 if(btval == 'a' && activeCOM==true && waitingACK==false) { // ACTIVE MODE
46
digitalWrite(RFIDENABLE,LOW);
47
24/09/2012
9/11
10. 48
for(int j=0; j<3; j++) {
49
digitalWrite(yellowLED, HIGH);
50
delay(500);
51
digitalWrite(yellowLED, LOW);
52
delay(500);
53
}
54
digitalWrite(yellowLED, HIGH);
55
56
int readingCount = 0;
57
while (readingCount < RFIDReads){
58
/* Start RFID READING*/
59
if(RFID.available() > 0) {
60
delay(100);
61
if((val = RFID.read()) == 10)
62
{ // check for header
63
bytesread = 0;
64
while(bytesread<10)
65
{ // read 10 digit code
66
val = RFID.read();
67
if((val == 10)||(val == 13))
68
{ // if header or stop bytes before the 10 digit reading
69
break;
// stop reading
70
}
71
code[bytesread] = val;
// add the digit
72
bytesread++;
// ready to read next digit
73
}
74
75
if(bytesread == 10)
76
{ // if 10 digit read is complete
77
readingCount++;
// Increase Reading Counter
78//
Serial.print("TAG code " + (String)readingCount + " is : "); // possibly a good TAG
79
Serial.print(code);
// print the TAG code
80
Serial.print(endString);
81
}
82
bytesread = 0;
83
delay(250);
// wait for a second
84
}
85
}
86
/* END RFID READING */
87
} // RFIDReads DONE!
88
Serial.print(endCommand);
89
RFID.flush(); //Flushing the SoftwareSerial Buffer!
90
digitalWrite(RFIDENABLE, HIGH); // disable RFID reader
91
waitingACK = true;
92 } // END ActiveMode
93
94 if(btval == 'k' && activeCOM==true && waitingACK==true) { //ACK
95
waitingACK = false;
96
digitalWrite(yellowLED, LOW);
97
digitalWrite(greenLED,HIGH);
98
delay(3000);
99
digitalWrite(greenLED,LOW);
100 }
101
102 if(btval == 'b' && activeCOM == true) {
103
activeCOM = false;
104
digitalWrite(redLED, LOW);
105 }
106 } // END Serial.available > 0
107}
Configurazione iniziale del modulo Bluetooth per la comunicazione con Arduino
TODO TUTORIAL PER IL COMMAND MODE e invio AT COMMANDS
24/09/2012
10/11