Hardware & Software

Scelta della tecnologia e sviluppo dell’Arduino

Alla fine, abbiamo optato per appoggiarci ad una tecnologia relativamente nuova dell’IOT, ovvero Medium-long range 2.4 gigahertz che anche se permette di trasmettere e ricevere su distanze minori (ovvero con il giusto hardware, in confronto ai di base del LoRa) ha una banda di trasmissione molto più ampia e quindi permette l’invio non solo di piccoli pacchetti di testo, ma anche di grandi pacchetti testuali, audio e video (anche se estremamente compresso).

Per usare questa banda di comunicazione abbiamo scelto di sviluppare il nostro sistema di comunicazione a partire dal nRF24L01+ PNA/LNA transceiver module ideato e sviluppato da Nordic Semiconductor.

Abbiamo scelto questo modulo principalmente per due motivi:

1) Ha un costo inferiore a 5 dollari, rendendo lo sviluppo di PTS molto economico;

2) È molto piccolo ed energicamente efficiente;

3) Con poche e relativamente semplici modifiche può trasmettere entro 5 Km di distanza.

Un ulteriore vantaggio nella scelta del modulo nRF24L01+ PNA/LNA è la presenza di un gran numero di librerie già realizzate che ci hanno permesso di configurare l’invio di messaggi testuali e la comunicazione audio senza progettare un sistema da zero.

In particolare, il nostro progetto si basa sulle due librerie:

· RF24.h (utilizzata nella sua versione di base)

· nRF24audio.h (modificata dal team per adeguarla alle esigenze)

L’hardware è stato scelto e ottimizzato in funzione dei requisiti delle librerie mediante l’aggiunta di un amplificatore audio basato sull’integrato LM386.

Ci siamo riuniti svariate volte, nel costo degli ultimi mesi, per costruire un prototipo che riuscisse a funzionare utilizzando entrambe le librerie (che hanno rivelato gravi problemi di compatibilità) e siamo riusciti a terminare lo sviluppo hardware e la scrittura del protocollo di rete entro i tempi stabiliti, lasciando spazio allo sviluppo del software.


Sviluppo App Android

Dopo aver effettuato molti test per capire quale dovesse essere la tecnologia di sviluppo impiegata, abbiamo deciso di sviluppare l’app in Android Nativo, sfruttato la suite di Android Studio e il linguaggio di programmazione Java. Il motivo che ci ha spinto a sviluppare in Android nativo, invece di utilizzare una tecnologia più recente è stata la necessità di controllare l’hardware del dispositivo Android a basso livello.

L’App utilizza un’unica libreria basata su API Android

· UsbSerial di felHR85.

Data la natura del progetto, che richiede spesso di ascoltare l’arrivo di un evento per effettuare un’azione (ed. es. aspettare l’arrivo di una chiamata per poter rispondere), lo sviluppo dell’app ha preso molto presto la forma di programmazione ad eventi.

Lo sviluppo dell’app è stato diviso in 2 parti, la prima che si occupa dell’interazione con l’hardware Arduino e la seconda che si occupa dei dati e dell’interazione con l’utente.

La prima parte di sviluppo si compone di 3 classi principali:

· PTSRadio, che controlla la scheda Arduino durante il suo ciclo di vita;

· PTSChat, che controlla il servizio di messaggistica istantanea;

· PTSCall, che controlla il servizio di chiamate vocali.

L’app ha avuto anche una parte nella creazione del protocollo di comunicazione, quella di implementare lo spacchettamento dei messaggi e di fornire le funzioni di crittografia del protocollo stesso; infatti entrambe queste funzionalità non avrebbero potuto essere realizzate dall’hardware Arduino a causa della bassa potenza di calcolo.

La seconda parte di sviluppo segue i classici criteri di sviluppo delle app e fa uso del pattern architetturale MVC (Model View Control).

· Il Model fornisce i metodi per accedere alle strutture dati utili.

· La View si occupa dell’interazione con l’utente e della realizzazione della GUI (“graphical user interface”)

· Il Controller fa da ponte tra la view e il model e fornisce le funzioni per rispondere alle richieste dell’utente

Oggetto di questa parte di sviluppo è anche la base di dati per la memorizzazione dei messaggi, delle chiamate e dei contatti; la scelta in questo caso è stata di implementare un database relazionale utilizzando un file-based DBMS come SQLite per semplificare lo storage dei dati.

In generale l’app è aggiornata al target API level 31, soddisfa quindi i requisiti richiesti dal Play Store, ed è retrocompatibile fino alle Android 8 (Oreo).

Sono state settimane impegnative di sviluppo software in cui abbiamo realizzato un software in grado di fare quello che ci aspettavamo. È stata un’esperienza divertente e che spero abbia aumentato la nostra capacità di lavorare in squadra e che sia stata di aiuto a tutti i membri del nostro team e a tutte le persone che utilizzeranno la nostra app.