Giter Club home page Giter Club logo

sentinellamonitoraggioaria-main's Introduction

Una sentinella IoT adattativa per il monitoraggio della qualità dell’aria

Progettazione di una sentinella per la misurazione della concentrazione degli inquinanti nell'aria. La sentinella è realizzata con una scheda Arduino MKR 1300, e con montati i seguenti moduli:

  • Bread Board
  • Antenna LoRa
  • DHT22 <- Temperatura + Umidità
  • PM10 <- PM10
  • MQ131 <- Ozono
  • MQ135 <- Benzene
  • MQ137 <- Ammonia
  • MQ138 <- Aldeidi
  • NEO BLOX 6M <- GPS

Struttura del codice

Il codice è composto da diversi file, in particolare:

  • lorawan_watchdog.ino <-- Esso rappresenta il punto di partenza del programma. Vengono dichiarate le variabili globali, importate le librerie e gli altri moduli ed eseguito il setup() e il loop() dello sketch stesso.
  • arduino_secrets.h e sensorsStates.h <-- Questi due files contengono delle strutture dati usate globalmente. in particolare arduino_secrets contiene i dati sensibili appEui e appKey del progetto, mentre sensorsStates contiene un insieme di array che serve ad alleggerire il codice.
  • functions.h <-- Questo file contiene la dichiarazione e definizione di tutte le funzioni necessarie
  • tutto il resto (readPM10, readTemp..) <-- Per ciascun valore da rilevare abbiamo creato un file a parte per gestire meglio le funzioni.

Posizione Sensori

Siccome abbiamo scelto una soluzione posizionale, ecco di seguito l'ordine dei sensori nei vari array di sensorsStates.h 0 - PM10 1 - Temp 2 - Hum 3 - Ozone 4 - Benzene 5 - Ammonia 6 - Aldehydes 7 - GPS

Uplink / Downlink:

Per la comunicazione con l'application-server tramite il gateway usiamo LoRaWaN. E' necessario usare delle stringhe costruite a modo per evitare errori. L'Uplink, gestito autonomamente dalla sentinella, produce un messaggio, che viene poi criptato in base 64 di questo tipo:

0.62|19.40|50.00|0.05|302320|12.34|6.29|45.80|9.80|99.80| //ogni valore è un float

L'ordine segue quello di posizione sensori. Notare che 45.80 e 9.80 sono i due valori Latitudine e Longitudine (il sensore Gps richiede due valori) e l'ultimo rappresenta il valore, simulato della batteria.


Per quanto riguarda il downlink, la sentinella è in grado di ricevere un messaggio del tipo

1|1|1|1|1|1|1|1|20000|30000

i primi 8 valori rappresentano se si vuole leggere o meno il sensore, seguono l'ordine di Posizione Sensori. Essi possono essere o 0 o 1, altri valori vengono scartati. Gli ultimi due invece rappresentano il tts e ttr (rispettivamente time to send e time to receive) che possono essere compresi tra 10000 e 200000, altrimenti vengono scartati. Avevo previsto anche il ricevimento di altri due possibili tipi di downlink.

Prossimi aggiornamenti

Il codice ha bisogno di rifinitura e pulizia in alcune parti, di rimozione delle vecchie variabili, però è funzionante.

Crediti

Il progetto (lato sentinella) è stato realizzato da Stefano Cattaneo, partendo dal codice realizzato prima da Samuel Locatelli e poi da Matteo Pettovello. Il lato server (gateway + application server) viene sviluppato e gestito da Filippo Barbieri e Lorenzo Mazzoleni Il tutto coordinato dalla professoressa Patrizia Scandurra.

sentinellamonitoraggioaria-main's People

Contributors

zkstefano avatar fbarbieri4 avatar

Watchers

Patrizia Scandurra avatar  avatar

sentinellamonitoraggioaria-main's Issues

Aggiornamento Sentinella

Buongiorno Prof.ssa,

Le faccio una sintesi dei progressi che ho fatto lavorando sulla sentinella in queste due settimane. Ho avuto molto meno tempo per lavorarci In quanto ho avuto due esami da preparare.

Ho organizzato il lavoro in diversi punti a cui ho lavorato non per forza in ordine (quelli in grassetto sono fatti al 100%):
1. Descrizione schema circuitale e montaggio del modulo Gps;
2. Fare funzionare effettivamente il Gps;
3. Sistemare la stringa MSG, e in generale la struttura dei print di debug;
4. Simulazione comandi tramite conf_data;
5. Risoluzione problema della lettura doppia di "Temp." e "Hum";
6. Simulazione Batteria;
7. Refactoring (Ita -> Eng)

  1. Per quanto riguarda questo punto, il montaggio della GPS sulla nostra sentinella è stato semplice, seguendo l'altro modellino del prof. Ruscica. Ho realizzato una sorta di "MAPPA" che contiene tutti i collegamenti tra Arduino, la Bread Board e i vari sensori;

  2. Questo punto è invece abbastanza problematico:
    A casa mia, in queste 2 settimane non sono riuscito a trovare un punto dove riuscissi a ottenere le coordinate. Ho provato in camera mia, sul balcone, in mezzo al giardino ma la lettura non viene eseguita. Ho fatto anche tre test a casa di mia nonna, ma non funziona;

  3. Questo è stato eseguito con successo vedasi il log della console. L'unica cosa che le volevo chiedere: se un sensore viene disattivato, nel ciclo successivo alla stringa msg passiamo l'ultimo valore rilevato? (come ho assunto io);
    log7NuoveFunzioni.txt

  4. La Simulazione è avvenuta passando all'arduino un Array del tipo [1,1,1,1,1,1,1,0,30000,50000], perche si possono passare 64 byte alla volta a quanto pare (quindi mi serviva una forma molto compatta), che veniva poi splittato e inteveniva tramite "sensorsStates" , una struttura dati per attivare/disattivare i sensori, messo in <sensorsStates.h>.
    Riesco anche a modificare con successo tts e ttr;

  5. Passiamo come parametri temperatura e umidita, in readBenzene (float T, float H), in modo da evitare la doppia lettura;

  6. Messa la variabile "battery" che ogni loop diminuisce di 0.50 partendo da 100 e pure una variabile bool "lowBattery" che si attiverà quando il valore di battery scenderà sotto 20%. Mi è venuto in mente che la modifica del comportamento di una sentinella potrebbe però essere deciso a livello superiore, sul nodo del gateway, dopo aver ricevuto il dato della percentuale della batteria;

  7. Tradotto quasi tutti i file, eccetto alcuni commenti su parti dubbie che ho lasciato in italiano

Grazie per l'attenzione,
Stefano

Updates sulla Sentinella

Buonasera Prof.ssa,

Volevo aggiornarla sulla sentinella:

Raspberry Pi (Backend)
Dopo aver parlato con Samuel, ho installato Chirpstack Gateway OS FULL sul raspberry. Mi ha dato diversi problemi durante settimana scorsa, ma sono riuscito a fare funzionare il tutto.
Il concentratord riceve i pacchetti LoRa e li inoltra al Gateway.
Il Gateway comunica in modo corretto tramite MQTT con il ns/as (network server e application server) e viene mostrato sulla dashboard.

Arduino
Oggi sono riuscito a sistemare il codice arduino. Ora la sentinella si connette al gateway in modo corretto.
La procedura di Uplink della string MSG che contiene i dati dei sensori viene quasi sempre spedita e viene codificata correttamente in base64.
Ho dovuto semplificare la stringa a solo i valori letti dai sensori perchè non partiva il payload altrimenti e mi dava errore.
La procedura di Downlink invece funziona molto bene. (Prima l'avevo simulata tramite linea di comando, ora si può direttamente passargliela in downlink). Bisogna inserire Fport = 2 e il messaggio convertito in formato base64 nell'apposito spazio. Questo funziona, generalmente dopo 2 minuti si fa la configurazione. Anche il downlink è stato ridotto ai soli valori.

Dashboard Chirpstack:
Dopo problemi di configurazione iniziale sono riuscito a sistemare e a fare funzionare quasi tutto. L'unica cosa che è inconsistente sono i "Device Data" mostrati a schermo dalla GUI che ogni tanto non compaiono.

Dubbio Guida

Buondì prof, sto seguendo la guida da lei mandata ieri tramite gmail (https://github.com/gonzalocasas/arduino-mkr-wan-1300). Volevo chiederle, per essere sicuro di aver capito correttamente, se la parte che ho evidenziato nell'immagine sottostante è da saltare perché ho pensato che non ho ancora l'antenna e il gateway. Corretto?
Grazie in anticipo

immagine

Modifiche alla repository

Buongiorno a tutti,

stavo pensando, se dobbiamo presentare questa repository, bisogna tradurre i suoi contenuti in inglese, dunque va trovato anche un titolo diverso?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.