SlideShare une entreprise Scribd logo
1  sur  31
UN PROTOTIPO PER
L’IOT:
DALL’IDEAZIONE ALLA PROMOZION
E
1/16
OBIETTIVI
La possibilità di captare,
elaborare e discriminare i
rumori ambientali con un
hardware a basso costo e
di piccole dimensioni
L'utilità dello strumento
per le amministrazioni
pubbliche, cercando
di convincerle a investire
nel suo sviluppo
Dimostrare
2/16
Studio e monitoraggio
inquinamento acustico e
traffico stradale
INQUINAMENTO ACUSTICO E TRAFFICO
STRADALE
3/16
• Un’esposizione continuata ad alti livelli di rumore può
causare disturbi e patologie
• La prima causa di inquinamento acustico è il
traffico stradale
• 100 milioni di europei sono esposti a livelli di rumore
causato dal traffico stradale al di sopra di 55 dB Lden
• 32 milioni di questi sono esposti a livelli superiori ai
65 dB Lden
INQUINAMENTO ACUSTICO
4/16
L'UE prende provvedimenti con l'Environmental Noise
Directive (2002) e il 7th Environment Action Programme
(2014):
• Obbligo di produrre mappe acustiche strategiche e piani d'azione
ogni 5 anni
• Definizione di indicatori di rumore:
o 55 db Lden
o 50 dB Lnight
• Terzo richiamo per l'Italia
MOBILITÁ INSOSTENIBILE IN ITALIA
5/16
Ecosistema urbano - rapporto sulle performance ambientali delle città
2017, Legambiente, 2017
•Le grandi città sono grandi garage​
•Mezzi pubblici sempre più in sofferenza​
•Il tempo perso nel traffico​
SMART CITY E L'IMPORTANZA DEI DATI
6/16
• Smart City (320 milioni di euro, +40%)
• Il 48% dei comuni italiani negli ultimi 3 anni e tre su
quattro hanno in programma nel 2018 nuove azioni
• Principali barriere:
o Mancanza di risorse economiche (71%)
o Mancanza di competenze (61%)
o Problema della governance
o Mancanza di collaborazione fra attori pubblici e
privati
• Utilizzo e distribuzione dei dati
o Migliorare qualità e quantità dei servizi forniti
o Fornire i dati a pagamento
FUNZIONALITÀ DI BASE
•Raccogliere campioni relativi al rumore di:
o Transito di un'auto
o Ingorgo stradale
7/16
I COMPONENTI DEL PROTOTIPO
8/16
Arduino
• Microcontrollore
• Interactive
Development
Environment (IDE)
• ATmega328
Microfono electret
• Conversione
suono/impulso elettrico
• Amplificatore
Scheda ESP-01
• Chip ESP8266
• RX,TX,CH-PD
• Comandi AT
CALCOLO DELLA TRASFORMATA DI
FOURIER
9/16
• Segnale --> Insieme frequenze/ampiezze
• Libreria Fast Fourier Transform (FFT) per
Arduino
• Trovare le frequenze che caratterizzano
un suono e la frequenza dominante
LA FIRMA
10/16
• Firma = spettro rappresentativo della situazione da rilevare
• Calcolare la Root Mean Square Deviation (distanza) tra firma e campione
𝑅𝑀𝑆𝐷(ϴ) = 𝑀𝑆𝐷 𝜃 = 𝐷 𝜃 − 𝜃 2
PROGRAMMA FINALE: INVIO RISULTATI
11/16
1°
• Connessione WiFi: libreria atlib
2°
• Invio dei dati tramite HTTP POST
3°
• Possibilità di visualizzare, studiare e lavorare sui
dati
PROGRAMMA FINALE: UN ESEMPIO
THINGSPEAK E L'INGORGO
1°
• Livellamento della distanza
2°
• Canale su ThingSpeak
3°
• Visualizzare, scaricare, monitorare ed
elaborare dati
12/16
PROGRAMMA FINALE: UN ESEMPIO
THINGSPEAK E L'INGORGO
13/16
1°
• Dati in ingresso su ThingSpeak
2°
• Valutazione dati con la React
3°
• Invio Tweet con ThingTweet
TARGET: AMMINISTRAZIONI
PUBBLICHE
• Problemi di traffico stradale e/o inquinamento acustico
• Vantaggi:
o Benessere cittadini
o Rientrare nei limiti UE
o Prestigio come città
o Costi e dimensioni contenuti
14/16
MODELLO DI BUSINESS
15/16
Value
Added
Customer
Journey
Value Proposition
Strategic Embedding
Monitoraggio e mantenimento
preventivo delle conformità rispetto a
norme e direttive e database sempre
aggiornato
Newsletter e mailing list,
social network, sito web,
meeting
Costi e vantaggi (benessere cittadini,
rientrare nei limiti UE, prestigio città)
Mission Statement e
obiettivi a breve/medio
termine
CONCLUSIONI
Sono stati dimostrati:
• Risultati che possono essere ottenuti con un dispositivo semplice
• Le modalità di promozione da mettere in atto
Possibili sviluppi
• Brevettare il prototipo
• Ottenere finanziamenti
• Creare un prodotto finito e utilizzabile
• Connessione Wi-Fi e un server
• Alimentazione e manutenzione
• Pubblicazione risultati a livello internazionale
16/16
SLIDE EXTRA
MARKETING B2B VS MARKETING B2C
• È più razionale
• Si rivolge a una nicchia specifica e ben delineata
• I clienti B2B non sono utilizzatori finali del prodotto
• Il rapporto personale è importante
IDE DI ARDUINO
• IDE = Integrated Development Environment
• Sketch, in un linguaggio semplice modellato sul linguaggio Processing
• Sketch passa al compilatore avr-gcc, un software open source per traduzione nel
linguaggio comprensibile al microcontrollore
• Viene caricato su Arduino tramite l’IDE
DESCRIZIONE ARDUINO ( PARTE
1/2)
• Connettore USB (num. 1)
• Connettore alimentazione da 7 a 12V
( num. 2 )
• ATmega168: programma utente e configura
zione di base (num. 3)
• Chip per la comunicazione seriale (num. 4)
• Clock/cristallo a 16 MHz (num. 5 )
• Bottone di reset (num. 6)
• Led di accensione (On) (num. 7)
• Led di ricezione (RX) e trasmissione (TX) in
corso (num. 8)
• L-Led, che può essere programmato tramite
lo sketch (num. 9)
• ICSP per Atmega328, per programmare il
microcontrollore (num. 15)
• ICSP per l’interfaccia USB (num. 16)
•
DESCRIZIONE ARDUINO (
PARTE 2/2)
• Pin di alimentazione : uscita corrente a 5V,
3.3V, massa (GND) e Vin (num. 10)
• 6 pin analogici In (pins 0-5): Prendono valori analogici (
es. letture del voltaggio prese da un sensore) e
li convertono in numeri compresi tra 0 e 1023 ( num. 11)
• 14 pin digitali IO (pins 0–13): Possono essere di input o
di output (num.12-13). Percepiscono la presenza o meno
di corrente, restituendo HIGH o LOW, e possono essere
programmati per generare corrente in output.
o I pin 0 e 1 sono detti RX e TX (num. 12) per
la lettura e l’invio dei dati: Arduino può colloquiare
con ogni dispositivo avente una porta seriale.
o I pin 3,5,6,9,10,11 ( ~
) possono essere riprogrammati per
output analogici e sono detti PWM.
• Pin per la terra(GND) e AREF, che regola il voltaggio di
massima risolusione degli input analogici (num.14)
ESP-01
• Il modulo seriale WiFi ESP8266 si basa sul
chip ESP8266, un microcontrollore
programmabile
• Fornisce connettività WiFi a schede come
Arduino attraverso i pin Tx e Rx
• Come modulo è possibile gestirlo tramite
comandi detti AT, attraverso i quali
interagisce con lo sketch.
• L'architettura a risparmio energetico offre tre
modalità di funzionamento: modalità attiva,
modalità sospensione e modalità
sospensione profonda
Pin Nome Descrizione
1 GND GROUND
2 GPIO2 General Purpose I/O 2
3 GPIO0 General Purpose I/O 0
4 RXD Ricevitore
5 TXD Trasmettitore
6 CH-PD Abilitatore del chip
7 RESET Segnale di reset esterno
8 VCC Potenza in input +3.3 V
COMANDI AT
• Comandi di base: controllare il funzionamento del dispositivo di rete, senza
riferimento all’operazione di rete. Ad esempio, funzione di reset, il controllo
UART, il risparmio energetico, il controllo dei pin GPIO, l’ispezione del
dispositivo
• Comandi WiFi: eseguire operazioni a livello di accesso alla rete. Associazione
ad un AP, controllo funzione DHCP, per impostare e controllare gli indirizzi IP e
MAC.
• Comandi TCP/IP: sono usati per gestire Client/Server TCP e UDP e anche
recuperare data e ora dai server SNTP, per controllare server DNS e generare
ping ICMP.
Seguono tutti il pattern query/response e iniziano con AT+string, seguito dal
nome della funzione e un numero variabile di caratteri per interruttori e
parametri.
Restituiscono linee di testo separate da una combinazione /r/n, con l'ultima riga
chiusa da un OK in caso di terminazione avvenuta con successo del comando.
Altrimenti, la linea termina con un ERRORE o stringa FAIL.
IL TIMER
9/16
Utile, per stabilire il momento in cui leggere i valori.
Quando il timer scade genera un'interruzione:
• Interrupt handler collegata all'interruzione
• Campionamento dopo l'azione dell'handler
IL CLOCK E IL TIMER (PARTE 1/4)
Un oscillatore si muove avanti e indietro generando
onde di vario tipo. Gli oscillatori sono utilizzati, tra le
altre cose, anche per generare segnali di clock in modo
da mantenere la velocità dei processori digitali
o L’oscillatore clock/cristallo di Arduino è un circuito che
genera onde quadre che controllano quanto un
processore gira veloce
o Con il clock Arduino può gestire problemi di tempo e
calcolarlo
o Frequenza: 16 milioni di cicli al secondo
o Impulso: ogni 63 ns
IL CLOCK E IL TIMER (PARTE 2/4)
Timer Freq Base Output Compare Pin Arduino Freq. Default
TCCR0 62500Hz OC0 OC0A
OC0B
6 976Hz
62500Hz 5 976Hz
TCCR1 31250Hz OC1 OC1A
OC0B
9 488Hz
31250Hz 10 488Hz
TCCR2 31250Hz OC2 OC1A
OC2B
11 488Hz
31250Hz 3 488Hz
• Il clock viene utilizzato per
incrementare tre timer distinti di
Arduino: Timer0, Timer1 e
Timer2 e gestiti dall’ATmega168
• A ciascun timer sono collegati
due comparatori, Output
Compare (OC), definiti OCxA e
OCxB, in cui x vale 0,1 e 2 e
ciascun numero corrisponde a
uno dei tre timer
• Ad ogni comparatore è collegato
un pin PWM (3,5,6,9,10,11)
• I tre timer hanno la dicitura TCCRx, dove x ha di nuovo valore 0,1 e 2 e lunghezza
limitata ( 8 o 16 bit).
• Alla frequenza di 16 MHz fanno un giro in:
o 16µsec, i Timer0 e il Timer2
o 4msec, il Timer1
IL CLOCK E IL TIMER (PARTE 3/4)
Pre-scaling = dividere il clock per avere ritmi di conteggio più lenti.
Prescaler = quantità per cui si può dividere la frequenza del clock (1 ,8, 64, 256, 1024)
Controllando uno dei timer possiamo farlo contare a un ritmo inferiore (pre-scaling). Arrivato a
un valore predeterminato, genera un’interruzione e si azzera. In questo modo, si può produrre
un’interruzione a intervalli predeterminati.
Modificando il prescaler di un timer, si può variare la frequenza dei pin collegati a esso.
Ciascun timer viene controllato con registri interni del processore. A essi corrisponde una
variabile predefinita.
Per il Timer1:
•TCCR1A/B - I registri che controllano le funzionalità del timer
•OCR1A - La soglia di azzeramento del timer
•TCNT - Il valore iniziale del contatore
•TIMSK1 - Abilita o maschera le interruzioni
IL CLOCK E IL TIMER (PARTE 4/4)
7 6 5 4 3 2 1 0
ICNC1 ICES1 WGM13 WGM12 CS12 CS11 CS10
CS12 CS11 CS10 pre-scaling
0
0
0
1
1
0
1
1
0
0
1
0
1
0
1
1
8
64
256
1024
I bit 4 e 3 controllano le modalità di funzionamento e settando il bit 3 ottengo la funzionalità di
conteggio/interruzione/azzeramento (CTC).
I valori da 001 a 101 per 1 bit CS indicano rispettivamente prescaling di 1 ,8 ,64 ,256 ,1024.
I due registri denominati A e B ( TCCR1A e TCCR1B) definiscono le modalità di funzionamento e
altri parametri del timer. In particolare, il registro B ha anche il compito di impostare
il prescaler. Per quanto riguarda i bit del TCCR1B, infatti, troviamo:
Il timer è utile per stabilire il momento in cui leggere i valori. Quando il timer scade genera
un’interruzione alla quale collego un programma, detto interrupt handler (gestore
dell’interruzione), che esegue un’azione semplice. Il programma, non appena osserva l’azione
dell’handler, campiona.
RMSD ( ROOT-MEAN-SQUARE-
DEVIATION)
La root-mean-square deviation (RMSD) = radice quadrata della media degli errori al quadrato.
Viene utilizzata per misurare la differenza tra valori predetti da un modello o uno stimatore e i
valori osservati. L’effetto di ciascun errore sulla RMSD è proporzionale alla dimensione
dell’errore quadratico. Quindi, errori troppo grandi hanno un effetto sproporzionatamente grande
sul risultato.
In riferimento alla slide 10, il calcolo dell’RMSD è stato effettuato nell’ambiente di EXCEL :
• Nelle prime due colonne valori di frequenza e ampiezza di un campione che potrebbe
essere ipoteticamente la firma e nelle due colonne successive i valori di frequenza e
ampiezza di un altro campione.
• Nella quinta colonna, denominata delta, vengono calcolate le differenze tra le ampiezze
della firma e quelle del campione tra loro corrispondenti ( i.e. =B2-D2)
• Nella sesta colonna, denominata sqr, vengono calcolati i quadrati di ogni differenza ( i.e.
=E2^2)
• In fondo alle colonne viene calcolata la RMSD effettuando la radice quadrata della
somma dell’intera colonna denominata sqr, ovvero quella dei quadrati ( i.e.
PROGRAMMI COMMENTATI
#define BMAX 128 // definizione buffer con grandezza 128
#define FREQ 6250L //definizione frequenza di campionamento
#include <arduinoFFT.h> //includi libreria FFT
arduinoFFT FFT = arduinoFFT(); // creazione oggetto FFT
void setup() {
Serial.begin(57600);
pinMode(13, OUTPUT);
noInterrupts(); // Inibisce le interruzioni
TCCR1A = 0; // Registro di controllo funz.timer
TCCR1B = 0; // Registro di controllo funz. timer
TCNT1 = 0; // Azzera il contatore
OCR1A = 1000000 / (FREQ * 16); // Soglia per l'azzeramento del timer, valida con prescaler a 256
Serial.println(OCR1A);
TCCR1B |= (1 << WGM12); // Abilita conteggio/interruzione/azzeramento
TCCR1B |= (1 << CS12); // Imposta il prescaler a 256 ( CS12=1)
TIMSK1 |= (1 << OCIE2A); // Genera l'interruzione
interrupts();
}
int n = 0; // inizializzazione variabile n
double R[BMAX]; // parte reale
double I[BMAX]; // parte immaginaria
ISR(TIMER1_COMPA_vect) { // Costante ISR, parametro vettore di interruzione
if (n < BMAX) { // Se il buffer non è ancora pieno, quindi n non ha raggiunto 128
R[n] = analogRead(A0); // All’indice n dell’array R, si assegna il valore del pin A0 (il segnale)
I[n] = 0; // All’indice n dell’array I, si assegna valore 0
n++; // Incremento l’indice di n di 1
}
}
void loop() {
if (n == BMAX) { // se il valore di n è uguale a quello di BMAX, cioè 128
FFT.Windowing(R, BMAX, FFT_WIN_TYP_HAMMING, FFT_FORWARD); // Hamming window
FFT.Compute(R, I, BMAX, FFT_FORWARD); // Calcolo della FFT
FFT.ComplexToMagnitude(R, I, BMAX); // Generazione dello spettro
double x = FFT.MajorPeak(R, BMAX, FREQ); // Frequenza di picco
double k = FREQ / BMAX; // Conversione indice -> frequenza
Serial.println("================");
Serial.println("Freq.tAmpiezza");
Serial.println("================");
for (int i = 0; i < BMAX / 2; i++) {
Serial.print(i * k, 0); Serial.print("t"); Serial.println(R[i]);
}
Serial.println("================");
Serial.print("Freq. di picco: "); Serial.println(x, 2);
Serial.println("================");
delay(1000);
n = 0;
}
}
PROGRAMMI COMMENTATI
#include <secret.h>
#define BMAX 128
#define FREQ 6250L
#include <math.h>
#include <arduinoFFT.h>
#include <avr/pgmspace.h>
#include <atlib.h>
arduinoFFT FFT = arduinoFFT();
ESP esp1 (5,7,19200,6)
boolean pup() { true;}
void setup() {
esp1.powerUp(30, pup);
Serial.begin(57600);
noInterrupts(); // Inibisce le interruzioni
TCCR1A = 0; // Registro di controllo funz.timer
TCCR1B = 0; // Registro di controllo funz. timer
TCNT1 = 0; // Azzera il contatore
OCR1A = 1000000 / (FREQ * 16); // Soglia per l'azzeramento del timer, valida con prescaler a 256
Serial.println(OCR1A);
TCCR1B |= (1 << WGM12); // Abilita conteggio/interruzione/azzeramento
TCCR1B |= (1 << CS12); // Imposta il prescaler a 256 ( CS12=1)
TIMSK1 |= (1 << OCIE2A); // Genera l'interruzione
interrupts();
}
int n = 0;
double R[BMAX];
double I[BMAX];
float differenzavalori = 0; // per la differenza tra ampiezza firma e ampiezza campione
float quadratovalori = 0; // per il quadrato della differenza
float somma = 0; // per la somma dei quadrati delle differenze
float devstand; // radice quadrata, che risulta nell’RMSD
float k = 16;
float ewma_old = 8000;
float ewma_new;
ISR(TIMER1_COMPA_vect) {
if (n < BMAX) {
R[n] = analogRead(A0);
I[n] = 0;
n++;
}
}
void loop() {
char body[100];
char header[100];
if (n == BMAX) { // se il valore di n è uguale a quello di BMAX, cioè 128
const static double campione[] PROGMEM = {}; // inserire la firma
FFT.Windowing(R, BMAX, FFT_WIN_TYP_HAMMING, FFT_FORWARD); // Hamming window
FFT.Compute(R, I, BMAX, FFT_FORWARD); // Calcolo della FFT
FFT.ComplexToMagnitude(R, I, BMAX); // Generazione dello spettro
double x = FFT.MajorPeak(R, BMAX, FREQ); // Frequenza di picco
double k = FREQ / BMAX; // Conversione indice -> frequenza
for (int i = 0; i < BMAX / 2; i++) {
if (i > 1) {
differenzavalori = pgm_read_float(&campione[i]) - R[i];
quadratovalori = pow(differenzavalori, 2);
somma = somma + quadratovalori;
}
}
devstand = sqrt(somma);
ewma_new = devstand / k + ((k - 1) / k) * ewma_old;
esp1.atcmd("AT+CIPSTART="TCP","api.thingspeak.com",80", 5);
sprintf(body, "api_key=%s&field1=%urn", CHANNEL_KEY, int(ewma_new));
sprintf(header, "POST /update HTTP/1.1n"
"Host: api.thingspeak.comn"
"Content-Length: %dnn", strlen(body));
esp1.sendline(header, 5);
esp1.sendline(body, 5);
if ( esp1.parsehttp(body, 5) ) {
Serial.print("POST successful!nBody content is: ");
Serial.println(body);
} else {
Serial.println("nPOST failed");
}
esp1.readline("CLOSED", 5);
delay(30000);
n = 0;
differenzavalori = 0;
quadratovalori = 0;
somma = 0;
devstand = 0;
ewma_old = ewma_new;
ewma_new = 0;
}
}

Contenu connexe

Tendances

It vertex portable_vx-450_series_specsheet
It vertex portable_vx-450_series_specsheetIt vertex portable_vx-450_series_specsheet
It vertex portable_vx-450_series_specsheetAdvantec Distribution
 
Relazione pdbp 2016 gruppo 05 brondino gabetti boscaglia giordano
Relazione pdbp 2016 gruppo 05 brondino gabetti boscaglia giordanoRelazione pdbp 2016 gruppo 05 brondino gabetti boscaglia giordano
Relazione pdbp 2016 gruppo 05 brondino gabetti boscaglia giordanoStefano Gabetti
 
Arduino & raspberry pi - Un connubio stimolante
Arduino & raspberry pi - Un connubio stimolanteArduino & raspberry pi - Un connubio stimolante
Arduino & raspberry pi - Un connubio stimolanteMirco Sbrollini
 
SOFREL S4W - La telegestione 4.0 per reti idriche connesse
SOFREL S4W - La telegestione 4.0 per reti idriche connesseSOFREL S4W - La telegestione 4.0 per reti idriche connesse
SOFREL S4W - La telegestione 4.0 per reti idriche connesseLACROIX Sofrel Srl
 
Conversione A/D-D/A e applicazioni nell'ambito musicale
Conversione A/D-D/A e applicazioni nell'ambito musicaleConversione A/D-D/A e applicazioni nell'ambito musicale
Conversione A/D-D/A e applicazioni nell'ambito musicaleVittorio Pellegrini
 
Introduzione all'elettronica con i microcontrollori: Arduino
Introduzione all'elettronica con i microcontrollori: ArduinoIntroduzione all'elettronica con i microcontrollori: Arduino
Introduzione all'elettronica con i microcontrollori: ArduinoStefano Varano
 
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...Sardegna Ricerche
 
EuComm
EuCommEuComm
EuCommiBLio
 
Progettazione di universal active filters e realizzazione di un software per ...
Progettazione di universal active filters e realizzazione di un software per ...Progettazione di universal active filters e realizzazione di un software per ...
Progettazione di universal active filters e realizzazione di un software per ...SamanthaGaio
 
Workshop Arduino by Fiore Basile
Workshop Arduino by Fiore BasileWorkshop Arduino by Fiore Basile
Workshop Arduino by Fiore BasileCommit University
 
PLC: lo standard iec61131 3
PLC: lo standard iec61131 3PLC: lo standard iec61131 3
PLC: lo standard iec61131 3Italiandirectory
 
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v acIrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v acDavide Mercanti
 
Attrezzature rionero in vulture
Attrezzature rionero in vultureAttrezzature rionero in vulture
Attrezzature rionero in vultureAndrea Quaranta
 
Manuale inseritore Dallas
Manuale inseritore DallasManuale inseritore Dallas
Manuale inseritore Dallasgigiovanni
 
Il plc linguaggi program
Il plc linguaggi programIl plc linguaggi program
Il plc linguaggi programGilda Tobia
 
Newsletter Lika Electronic marzo 2018 in italiano
Newsletter Lika Electronic marzo 2018 in italianoNewsletter Lika Electronic marzo 2018 in italiano
Newsletter Lika Electronic marzo 2018 in italianoLika Electronic
 
Telemetria dei parametri dinamici di un drone marino
Telemetria dei parametri dinamici di un drone marinoTelemetria dei parametri dinamici di un drone marino
Telemetria dei parametri dinamici di un drone marinoVincenzo Virgilio
 
Crouzet Automation - em4 Ethernet opuscolo, versione italiana
Crouzet Automation - em4 Ethernet opuscolo, versione italiana Crouzet Automation - em4 Ethernet opuscolo, versione italiana
Crouzet Automation - em4 Ethernet opuscolo, versione italiana Crouzet
 
30@30: Newsletter aprile
30@30: Newsletter aprile30@30: Newsletter aprile
30@30: Newsletter aprileLika Electronic
 

Tendances (20)

It vertex portable_vx-450_series_specsheet
It vertex portable_vx-450_series_specsheetIt vertex portable_vx-450_series_specsheet
It vertex portable_vx-450_series_specsheet
 
Relazione pdbp 2016 gruppo 05 brondino gabetti boscaglia giordano
Relazione pdbp 2016 gruppo 05 brondino gabetti boscaglia giordanoRelazione pdbp 2016 gruppo 05 brondino gabetti boscaglia giordano
Relazione pdbp 2016 gruppo 05 brondino gabetti boscaglia giordano
 
Arduino & raspberry pi - Un connubio stimolante
Arduino & raspberry pi - Un connubio stimolanteArduino & raspberry pi - Un connubio stimolante
Arduino & raspberry pi - Un connubio stimolante
 
SOFREL S4W - La telegestione 4.0 per reti idriche connesse
SOFREL S4W - La telegestione 4.0 per reti idriche connesseSOFREL S4W - La telegestione 4.0 per reti idriche connesse
SOFREL S4W - La telegestione 4.0 per reti idriche connesse
 
Conversione A/D-D/A e applicazioni nell'ambito musicale
Conversione A/D-D/A e applicazioni nell'ambito musicaleConversione A/D-D/A e applicazioni nell'ambito musicale
Conversione A/D-D/A e applicazioni nell'ambito musicale
 
Introduzione all'elettronica con i microcontrollori: Arduino
Introduzione all'elettronica con i microcontrollori: ArduinoIntroduzione all'elettronica con i microcontrollori: Arduino
Introduzione all'elettronica con i microcontrollori: Arduino
 
Fare Musica con Arduino
Fare Musica con ArduinoFare Musica con Arduino
Fare Musica con Arduino
 
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
 
EuComm
EuCommEuComm
EuComm
 
Progettazione di universal active filters e realizzazione di un software per ...
Progettazione di universal active filters e realizzazione di un software per ...Progettazione di universal active filters e realizzazione di un software per ...
Progettazione di universal active filters e realizzazione di un software per ...
 
Workshop Arduino by Fiore Basile
Workshop Arduino by Fiore BasileWorkshop Arduino by Fiore Basile
Workshop Arduino by Fiore Basile
 
PLC: lo standard iec61131 3
PLC: lo standard iec61131 3PLC: lo standard iec61131 3
PLC: lo standard iec61131 3
 
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v acIrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
IrrigaPIC Centralina per irrigazione 8 zone per valvole 24v ac
 
Attrezzature rionero in vulture
Attrezzature rionero in vultureAttrezzature rionero in vulture
Attrezzature rionero in vulture
 
Manuale inseritore Dallas
Manuale inseritore DallasManuale inseritore Dallas
Manuale inseritore Dallas
 
Il plc linguaggi program
Il plc linguaggi programIl plc linguaggi program
Il plc linguaggi program
 
Newsletter Lika Electronic marzo 2018 in italiano
Newsletter Lika Electronic marzo 2018 in italianoNewsletter Lika Electronic marzo 2018 in italiano
Newsletter Lika Electronic marzo 2018 in italiano
 
Telemetria dei parametri dinamici di un drone marino
Telemetria dei parametri dinamici di un drone marinoTelemetria dei parametri dinamici di un drone marino
Telemetria dei parametri dinamici di un drone marino
 
Crouzet Automation - em4 Ethernet opuscolo, versione italiana
Crouzet Automation - em4 Ethernet opuscolo, versione italiana Crouzet Automation - em4 Ethernet opuscolo, versione italiana
Crouzet Automation - em4 Ethernet opuscolo, versione italiana
 
30@30: Newsletter aprile
30@30: Newsletter aprile30@30: Newsletter aprile
30@30: Newsletter aprile
 

Similaire à An IoT prototype: from ideation to promotion

Microcontrollori
MicrocontrolloriMicrocontrollori
Microcontrollorisamu97
 
Smart meters acqua 169 Mhz
Smart meters acqua 169 MhzSmart meters acqua 169 Mhz
Smart meters acqua 169 MhzServizi a rete
 
SENECA - SAVE 2009 - Acquisire i dati
SENECA - SAVE 2009 - Acquisire i datiSENECA - SAVE 2009 - Acquisire i dati
SENECA - SAVE 2009 - Acquisire i datiSENECA
 
Comunicazione per sensori intelligenti IO-Link
Comunicazione per sensori intelligenti IO-LinkComunicazione per sensori intelligenti IO-Link
Comunicazione per sensori intelligenti IO-Linkifm electronic gmbh
 
Introduzione al Sistema S6L
Introduzione al Sistema S6LIntroduzione al Sistema S6L
Introduzione al Sistema S6LSenio Corbini
 
Dsp cosa sono i digital signal processor - seconda parte - 2010-10-19
Dsp  cosa sono i digital signal processor  - seconda parte - 2010-10-19Dsp  cosa sono i digital signal processor  - seconda parte - 2010-10-19
Dsp cosa sono i digital signal processor - seconda parte - 2010-10-19Ionela
 
Il Personal Computer
Il Personal ComputerIl Personal Computer
Il Personal Computerbity1988
 
Il Personal Computer
Il Personal ComputerIl Personal Computer
Il Personal Computerbity1988
 
MISURA E TELECONTROLLO DI IMPIANTI FOTOVOLTAICI
MISURA E TELECONTROLLO DI IMPIANTI FOTOVOLTAICIMISURA E TELECONTROLLO DI IMPIANTI FOTOVOLTAICI
MISURA E TELECONTROLLO DI IMPIANTI FOTOVOLTAICISENECA
 
Architettura dei calcolatori
Architettura dei calcolatoriArchitettura dei calcolatori
Architettura dei calcolatorikaliaragorn
 
Introduzione ad Arduino
Introduzione ad ArduinoIntroduzione ad Arduino
Introduzione ad ArduinoSimone Lusenti
 
Presentazione
PresentazionePresentazione
Presentazionecesario
 
Il punto di partenza della radioastronomia amatoriale: un radiotelescopio a p...
Il punto di partenza della radioastronomia amatoriale: un radiotelescopio a p...Il punto di partenza della radioastronomia amatoriale: un radiotelescopio a p...
Il punto di partenza della radioastronomia amatoriale: un radiotelescopio a p...Flavio Falcinelli
 
Emoncms gabriponzo+andreabelloni
Emoncms gabriponzo+andreabelloniEmoncms gabriponzo+andreabelloni
Emoncms gabriponzo+andreabelloniGabriele Ponzo
 
Encoder Incrementali Programmabili IP58 IQ58 IT
Encoder Incrementali Programmabili IP58 IQ58 ITEncoder Incrementali Programmabili IP58 IQ58 IT
Encoder Incrementali Programmabili IP58 IQ58 ITLika Electronic
 
Corso Arduino Base - MUST
Corso Arduino Base - MUSTCorso Arduino Base - MUST
Corso Arduino Base - MUSTOPS Italia
 

Similaire à An IoT prototype: from ideation to promotion (20)

Car accident detector
Car accident detectorCar accident detector
Car accident detector
 
Microcontrollori
MicrocontrolloriMicrocontrollori
Microcontrollori
 
Smart meters acqua 169 Mhz
Smart meters acqua 169 MhzSmart meters acqua 169 Mhz
Smart meters acqua 169 Mhz
 
SENECA - SAVE 2009 - Acquisire i dati
SENECA - SAVE 2009 - Acquisire i datiSENECA - SAVE 2009 - Acquisire i dati
SENECA - SAVE 2009 - Acquisire i dati
 
Comunicazione per sensori intelligenti IO-Link
Comunicazione per sensori intelligenti IO-LinkComunicazione per sensori intelligenti IO-Link
Comunicazione per sensori intelligenti IO-Link
 
Dsp seminario
Dsp seminarioDsp seminario
Dsp seminario
 
Introduzione al Sistema S6L
Introduzione al Sistema S6LIntroduzione al Sistema S6L
Introduzione al Sistema S6L
 
Dsp cosa sono i digital signal processor - seconda parte - 2010-10-19
Dsp  cosa sono i digital signal processor  - seconda parte - 2010-10-19Dsp  cosa sono i digital signal processor  - seconda parte - 2010-10-19
Dsp cosa sono i digital signal processor - seconda parte - 2010-10-19
 
Il Personal Computer
Il Personal ComputerIl Personal Computer
Il Personal Computer
 
Il Personal Computer
Il Personal ComputerIl Personal Computer
Il Personal Computer
 
MISURA E TELECONTROLLO DI IMPIANTI FOTOVOLTAICI
MISURA E TELECONTROLLO DI IMPIANTI FOTOVOLTAICIMISURA E TELECONTROLLO DI IMPIANTI FOTOVOLTAICI
MISURA E TELECONTROLLO DI IMPIANTI FOTOVOLTAICI
 
Architettura dei calcolatori
Architettura dei calcolatoriArchitettura dei calcolatori
Architettura dei calcolatori
 
Introduzione ad Arduino del Maker DevLab
Introduzione ad Arduino del Maker DevLabIntroduzione ad Arduino del Maker DevLab
Introduzione ad Arduino del Maker DevLab
 
Introduzione ad Arduino
Introduzione ad ArduinoIntroduzione ad Arduino
Introduzione ad Arduino
 
Presentazione
PresentazionePresentazione
Presentazione
 
Il punto di partenza della radioastronomia amatoriale: un radiotelescopio a p...
Il punto di partenza della radioastronomia amatoriale: un radiotelescopio a p...Il punto di partenza della radioastronomia amatoriale: un radiotelescopio a p...
Il punto di partenza della radioastronomia amatoriale: un radiotelescopio a p...
 
Voce digitale
Voce digitaleVoce digitale
Voce digitale
 
Emoncms gabriponzo+andreabelloni
Emoncms gabriponzo+andreabelloniEmoncms gabriponzo+andreabelloni
Emoncms gabriponzo+andreabelloni
 
Encoder Incrementali Programmabili IP58 IQ58 IT
Encoder Incrementali Programmabili IP58 IQ58 ITEncoder Incrementali Programmabili IP58 IQ58 IT
Encoder Incrementali Programmabili IP58 IQ58 IT
 
Corso Arduino Base - MUST
Corso Arduino Base - MUSTCorso Arduino Base - MUST
Corso Arduino Base - MUST
 

An IoT prototype: from ideation to promotion

  • 2. OBIETTIVI La possibilità di captare, elaborare e discriminare i rumori ambientali con un hardware a basso costo e di piccole dimensioni L'utilità dello strumento per le amministrazioni pubbliche, cercando di convincerle a investire nel suo sviluppo Dimostrare 2/16 Studio e monitoraggio inquinamento acustico e traffico stradale
  • 3. INQUINAMENTO ACUSTICO E TRAFFICO STRADALE 3/16 • Un’esposizione continuata ad alti livelli di rumore può causare disturbi e patologie • La prima causa di inquinamento acustico è il traffico stradale • 100 milioni di europei sono esposti a livelli di rumore causato dal traffico stradale al di sopra di 55 dB Lden • 32 milioni di questi sono esposti a livelli superiori ai 65 dB Lden
  • 4. INQUINAMENTO ACUSTICO 4/16 L'UE prende provvedimenti con l'Environmental Noise Directive (2002) e il 7th Environment Action Programme (2014): • Obbligo di produrre mappe acustiche strategiche e piani d'azione ogni 5 anni • Definizione di indicatori di rumore: o 55 db Lden o 50 dB Lnight • Terzo richiamo per l'Italia
  • 5. MOBILITÁ INSOSTENIBILE IN ITALIA 5/16 Ecosistema urbano - rapporto sulle performance ambientali delle città 2017, Legambiente, 2017 •Le grandi città sono grandi garage​ •Mezzi pubblici sempre più in sofferenza​ •Il tempo perso nel traffico​
  • 6. SMART CITY E L'IMPORTANZA DEI DATI 6/16 • Smart City (320 milioni di euro, +40%) • Il 48% dei comuni italiani negli ultimi 3 anni e tre su quattro hanno in programma nel 2018 nuove azioni • Principali barriere: o Mancanza di risorse economiche (71%) o Mancanza di competenze (61%) o Problema della governance o Mancanza di collaborazione fra attori pubblici e privati • Utilizzo e distribuzione dei dati o Migliorare qualità e quantità dei servizi forniti o Fornire i dati a pagamento
  • 7. FUNZIONALITÀ DI BASE •Raccogliere campioni relativi al rumore di: o Transito di un'auto o Ingorgo stradale 7/16
  • 8. I COMPONENTI DEL PROTOTIPO 8/16 Arduino • Microcontrollore • Interactive Development Environment (IDE) • ATmega328 Microfono electret • Conversione suono/impulso elettrico • Amplificatore Scheda ESP-01 • Chip ESP8266 • RX,TX,CH-PD • Comandi AT
  • 9. CALCOLO DELLA TRASFORMATA DI FOURIER 9/16 • Segnale --> Insieme frequenze/ampiezze • Libreria Fast Fourier Transform (FFT) per Arduino • Trovare le frequenze che caratterizzano un suono e la frequenza dominante
  • 10. LA FIRMA 10/16 • Firma = spettro rappresentativo della situazione da rilevare • Calcolare la Root Mean Square Deviation (distanza) tra firma e campione 𝑅𝑀𝑆𝐷(ϴ) = 𝑀𝑆𝐷 𝜃 = 𝐷 𝜃 − 𝜃 2
  • 11. PROGRAMMA FINALE: INVIO RISULTATI 11/16 1° • Connessione WiFi: libreria atlib 2° • Invio dei dati tramite HTTP POST 3° • Possibilità di visualizzare, studiare e lavorare sui dati
  • 12. PROGRAMMA FINALE: UN ESEMPIO THINGSPEAK E L'INGORGO 1° • Livellamento della distanza 2° • Canale su ThingSpeak 3° • Visualizzare, scaricare, monitorare ed elaborare dati 12/16
  • 13. PROGRAMMA FINALE: UN ESEMPIO THINGSPEAK E L'INGORGO 13/16 1° • Dati in ingresso su ThingSpeak 2° • Valutazione dati con la React 3° • Invio Tweet con ThingTweet
  • 14. TARGET: AMMINISTRAZIONI PUBBLICHE • Problemi di traffico stradale e/o inquinamento acustico • Vantaggi: o Benessere cittadini o Rientrare nei limiti UE o Prestigio come città o Costi e dimensioni contenuti 14/16
  • 15. MODELLO DI BUSINESS 15/16 Value Added Customer Journey Value Proposition Strategic Embedding Monitoraggio e mantenimento preventivo delle conformità rispetto a norme e direttive e database sempre aggiornato Newsletter e mailing list, social network, sito web, meeting Costi e vantaggi (benessere cittadini, rientrare nei limiti UE, prestigio città) Mission Statement e obiettivi a breve/medio termine
  • 16. CONCLUSIONI Sono stati dimostrati: • Risultati che possono essere ottenuti con un dispositivo semplice • Le modalità di promozione da mettere in atto Possibili sviluppi • Brevettare il prototipo • Ottenere finanziamenti • Creare un prodotto finito e utilizzabile • Connessione Wi-Fi e un server • Alimentazione e manutenzione • Pubblicazione risultati a livello internazionale 16/16
  • 18. MARKETING B2B VS MARKETING B2C • È più razionale • Si rivolge a una nicchia specifica e ben delineata • I clienti B2B non sono utilizzatori finali del prodotto • Il rapporto personale è importante
  • 19. IDE DI ARDUINO • IDE = Integrated Development Environment • Sketch, in un linguaggio semplice modellato sul linguaggio Processing • Sketch passa al compilatore avr-gcc, un software open source per traduzione nel linguaggio comprensibile al microcontrollore • Viene caricato su Arduino tramite l’IDE
  • 20. DESCRIZIONE ARDUINO ( PARTE 1/2) • Connettore USB (num. 1) • Connettore alimentazione da 7 a 12V ( num. 2 ) • ATmega168: programma utente e configura zione di base (num. 3) • Chip per la comunicazione seriale (num. 4) • Clock/cristallo a 16 MHz (num. 5 ) • Bottone di reset (num. 6) • Led di accensione (On) (num. 7) • Led di ricezione (RX) e trasmissione (TX) in corso (num. 8) • L-Led, che può essere programmato tramite lo sketch (num. 9) • ICSP per Atmega328, per programmare il microcontrollore (num. 15) • ICSP per l’interfaccia USB (num. 16) •
  • 21. DESCRIZIONE ARDUINO ( PARTE 2/2) • Pin di alimentazione : uscita corrente a 5V, 3.3V, massa (GND) e Vin (num. 10) • 6 pin analogici In (pins 0-5): Prendono valori analogici ( es. letture del voltaggio prese da un sensore) e li convertono in numeri compresi tra 0 e 1023 ( num. 11) • 14 pin digitali IO (pins 0–13): Possono essere di input o di output (num.12-13). Percepiscono la presenza o meno di corrente, restituendo HIGH o LOW, e possono essere programmati per generare corrente in output. o I pin 0 e 1 sono detti RX e TX (num. 12) per la lettura e l’invio dei dati: Arduino può colloquiare con ogni dispositivo avente una porta seriale. o I pin 3,5,6,9,10,11 ( ~ ) possono essere riprogrammati per output analogici e sono detti PWM. • Pin per la terra(GND) e AREF, che regola il voltaggio di massima risolusione degli input analogici (num.14)
  • 22. ESP-01 • Il modulo seriale WiFi ESP8266 si basa sul chip ESP8266, un microcontrollore programmabile • Fornisce connettività WiFi a schede come Arduino attraverso i pin Tx e Rx • Come modulo è possibile gestirlo tramite comandi detti AT, attraverso i quali interagisce con lo sketch. • L'architettura a risparmio energetico offre tre modalità di funzionamento: modalità attiva, modalità sospensione e modalità sospensione profonda Pin Nome Descrizione 1 GND GROUND 2 GPIO2 General Purpose I/O 2 3 GPIO0 General Purpose I/O 0 4 RXD Ricevitore 5 TXD Trasmettitore 6 CH-PD Abilitatore del chip 7 RESET Segnale di reset esterno 8 VCC Potenza in input +3.3 V
  • 23. COMANDI AT • Comandi di base: controllare il funzionamento del dispositivo di rete, senza riferimento all’operazione di rete. Ad esempio, funzione di reset, il controllo UART, il risparmio energetico, il controllo dei pin GPIO, l’ispezione del dispositivo • Comandi WiFi: eseguire operazioni a livello di accesso alla rete. Associazione ad un AP, controllo funzione DHCP, per impostare e controllare gli indirizzi IP e MAC. • Comandi TCP/IP: sono usati per gestire Client/Server TCP e UDP e anche recuperare data e ora dai server SNTP, per controllare server DNS e generare ping ICMP. Seguono tutti il pattern query/response e iniziano con AT+string, seguito dal nome della funzione e un numero variabile di caratteri per interruttori e parametri. Restituiscono linee di testo separate da una combinazione /r/n, con l'ultima riga chiusa da un OK in caso di terminazione avvenuta con successo del comando. Altrimenti, la linea termina con un ERRORE o stringa FAIL.
  • 24. IL TIMER 9/16 Utile, per stabilire il momento in cui leggere i valori. Quando il timer scade genera un'interruzione: • Interrupt handler collegata all'interruzione • Campionamento dopo l'azione dell'handler
  • 25. IL CLOCK E IL TIMER (PARTE 1/4) Un oscillatore si muove avanti e indietro generando onde di vario tipo. Gli oscillatori sono utilizzati, tra le altre cose, anche per generare segnali di clock in modo da mantenere la velocità dei processori digitali o L’oscillatore clock/cristallo di Arduino è un circuito che genera onde quadre che controllano quanto un processore gira veloce o Con il clock Arduino può gestire problemi di tempo e calcolarlo o Frequenza: 16 milioni di cicli al secondo o Impulso: ogni 63 ns
  • 26. IL CLOCK E IL TIMER (PARTE 2/4) Timer Freq Base Output Compare Pin Arduino Freq. Default TCCR0 62500Hz OC0 OC0A OC0B 6 976Hz 62500Hz 5 976Hz TCCR1 31250Hz OC1 OC1A OC0B 9 488Hz 31250Hz 10 488Hz TCCR2 31250Hz OC2 OC1A OC2B 11 488Hz 31250Hz 3 488Hz • Il clock viene utilizzato per incrementare tre timer distinti di Arduino: Timer0, Timer1 e Timer2 e gestiti dall’ATmega168 • A ciascun timer sono collegati due comparatori, Output Compare (OC), definiti OCxA e OCxB, in cui x vale 0,1 e 2 e ciascun numero corrisponde a uno dei tre timer • Ad ogni comparatore è collegato un pin PWM (3,5,6,9,10,11) • I tre timer hanno la dicitura TCCRx, dove x ha di nuovo valore 0,1 e 2 e lunghezza limitata ( 8 o 16 bit). • Alla frequenza di 16 MHz fanno un giro in: o 16µsec, i Timer0 e il Timer2 o 4msec, il Timer1
  • 27. IL CLOCK E IL TIMER (PARTE 3/4) Pre-scaling = dividere il clock per avere ritmi di conteggio più lenti. Prescaler = quantità per cui si può dividere la frequenza del clock (1 ,8, 64, 256, 1024) Controllando uno dei timer possiamo farlo contare a un ritmo inferiore (pre-scaling). Arrivato a un valore predeterminato, genera un’interruzione e si azzera. In questo modo, si può produrre un’interruzione a intervalli predeterminati. Modificando il prescaler di un timer, si può variare la frequenza dei pin collegati a esso. Ciascun timer viene controllato con registri interni del processore. A essi corrisponde una variabile predefinita. Per il Timer1: •TCCR1A/B - I registri che controllano le funzionalità del timer •OCR1A - La soglia di azzeramento del timer •TCNT - Il valore iniziale del contatore •TIMSK1 - Abilita o maschera le interruzioni
  • 28. IL CLOCK E IL TIMER (PARTE 4/4) 7 6 5 4 3 2 1 0 ICNC1 ICES1 WGM13 WGM12 CS12 CS11 CS10 CS12 CS11 CS10 pre-scaling 0 0 0 1 1 0 1 1 0 0 1 0 1 0 1 1 8 64 256 1024 I bit 4 e 3 controllano le modalità di funzionamento e settando il bit 3 ottengo la funzionalità di conteggio/interruzione/azzeramento (CTC). I valori da 001 a 101 per 1 bit CS indicano rispettivamente prescaling di 1 ,8 ,64 ,256 ,1024. I due registri denominati A e B ( TCCR1A e TCCR1B) definiscono le modalità di funzionamento e altri parametri del timer. In particolare, il registro B ha anche il compito di impostare il prescaler. Per quanto riguarda i bit del TCCR1B, infatti, troviamo: Il timer è utile per stabilire il momento in cui leggere i valori. Quando il timer scade genera un’interruzione alla quale collego un programma, detto interrupt handler (gestore dell’interruzione), che esegue un’azione semplice. Il programma, non appena osserva l’azione dell’handler, campiona.
  • 29. RMSD ( ROOT-MEAN-SQUARE- DEVIATION) La root-mean-square deviation (RMSD) = radice quadrata della media degli errori al quadrato. Viene utilizzata per misurare la differenza tra valori predetti da un modello o uno stimatore e i valori osservati. L’effetto di ciascun errore sulla RMSD è proporzionale alla dimensione dell’errore quadratico. Quindi, errori troppo grandi hanno un effetto sproporzionatamente grande sul risultato. In riferimento alla slide 10, il calcolo dell’RMSD è stato effettuato nell’ambiente di EXCEL : • Nelle prime due colonne valori di frequenza e ampiezza di un campione che potrebbe essere ipoteticamente la firma e nelle due colonne successive i valori di frequenza e ampiezza di un altro campione. • Nella quinta colonna, denominata delta, vengono calcolate le differenze tra le ampiezze della firma e quelle del campione tra loro corrispondenti ( i.e. =B2-D2) • Nella sesta colonna, denominata sqr, vengono calcolati i quadrati di ogni differenza ( i.e. =E2^2) • In fondo alle colonne viene calcolata la RMSD effettuando la radice quadrata della somma dell’intera colonna denominata sqr, ovvero quella dei quadrati ( i.e.
  • 30. PROGRAMMI COMMENTATI #define BMAX 128 // definizione buffer con grandezza 128 #define FREQ 6250L //definizione frequenza di campionamento #include <arduinoFFT.h> //includi libreria FFT arduinoFFT FFT = arduinoFFT(); // creazione oggetto FFT void setup() { Serial.begin(57600); pinMode(13, OUTPUT); noInterrupts(); // Inibisce le interruzioni TCCR1A = 0; // Registro di controllo funz.timer TCCR1B = 0; // Registro di controllo funz. timer TCNT1 = 0; // Azzera il contatore OCR1A = 1000000 / (FREQ * 16); // Soglia per l'azzeramento del timer, valida con prescaler a 256 Serial.println(OCR1A); TCCR1B |= (1 << WGM12); // Abilita conteggio/interruzione/azzeramento TCCR1B |= (1 << CS12); // Imposta il prescaler a 256 ( CS12=1) TIMSK1 |= (1 << OCIE2A); // Genera l'interruzione interrupts(); } int n = 0; // inizializzazione variabile n double R[BMAX]; // parte reale double I[BMAX]; // parte immaginaria ISR(TIMER1_COMPA_vect) { // Costante ISR, parametro vettore di interruzione if (n < BMAX) { // Se il buffer non è ancora pieno, quindi n non ha raggiunto 128 R[n] = analogRead(A0); // All’indice n dell’array R, si assegna il valore del pin A0 (il segnale) I[n] = 0; // All’indice n dell’array I, si assegna valore 0 n++; // Incremento l’indice di n di 1 } } void loop() { if (n == BMAX) { // se il valore di n è uguale a quello di BMAX, cioè 128 FFT.Windowing(R, BMAX, FFT_WIN_TYP_HAMMING, FFT_FORWARD); // Hamming window FFT.Compute(R, I, BMAX, FFT_FORWARD); // Calcolo della FFT FFT.ComplexToMagnitude(R, I, BMAX); // Generazione dello spettro double x = FFT.MajorPeak(R, BMAX, FREQ); // Frequenza di picco double k = FREQ / BMAX; // Conversione indice -> frequenza Serial.println("================"); Serial.println("Freq.tAmpiezza"); Serial.println("================"); for (int i = 0; i < BMAX / 2; i++) { Serial.print(i * k, 0); Serial.print("t"); Serial.println(R[i]); } Serial.println("================"); Serial.print("Freq. di picco: "); Serial.println(x, 2); Serial.println("================"); delay(1000); n = 0; } }
  • 31. PROGRAMMI COMMENTATI #include <secret.h> #define BMAX 128 #define FREQ 6250L #include <math.h> #include <arduinoFFT.h> #include <avr/pgmspace.h> #include <atlib.h> arduinoFFT FFT = arduinoFFT(); ESP esp1 (5,7,19200,6) boolean pup() { true;} void setup() { esp1.powerUp(30, pup); Serial.begin(57600); noInterrupts(); // Inibisce le interruzioni TCCR1A = 0; // Registro di controllo funz.timer TCCR1B = 0; // Registro di controllo funz. timer TCNT1 = 0; // Azzera il contatore OCR1A = 1000000 / (FREQ * 16); // Soglia per l'azzeramento del timer, valida con prescaler a 256 Serial.println(OCR1A); TCCR1B |= (1 << WGM12); // Abilita conteggio/interruzione/azzeramento TCCR1B |= (1 << CS12); // Imposta il prescaler a 256 ( CS12=1) TIMSK1 |= (1 << OCIE2A); // Genera l'interruzione interrupts(); } int n = 0; double R[BMAX]; double I[BMAX]; float differenzavalori = 0; // per la differenza tra ampiezza firma e ampiezza campione float quadratovalori = 0; // per il quadrato della differenza float somma = 0; // per la somma dei quadrati delle differenze float devstand; // radice quadrata, che risulta nell’RMSD float k = 16; float ewma_old = 8000; float ewma_new; ISR(TIMER1_COMPA_vect) { if (n < BMAX) { R[n] = analogRead(A0); I[n] = 0; n++; } } void loop() { char body[100]; char header[100]; if (n == BMAX) { // se il valore di n è uguale a quello di BMAX, cioè 128 const static double campione[] PROGMEM = {}; // inserire la firma FFT.Windowing(R, BMAX, FFT_WIN_TYP_HAMMING, FFT_FORWARD); // Hamming window FFT.Compute(R, I, BMAX, FFT_FORWARD); // Calcolo della FFT FFT.ComplexToMagnitude(R, I, BMAX); // Generazione dello spettro double x = FFT.MajorPeak(R, BMAX, FREQ); // Frequenza di picco double k = FREQ / BMAX; // Conversione indice -> frequenza for (int i = 0; i < BMAX / 2; i++) { if (i > 1) { differenzavalori = pgm_read_float(&campione[i]) - R[i]; quadratovalori = pow(differenzavalori, 2); somma = somma + quadratovalori; } } devstand = sqrt(somma); ewma_new = devstand / k + ((k - 1) / k) * ewma_old; esp1.atcmd("AT+CIPSTART="TCP","api.thingspeak.com",80", 5); sprintf(body, "api_key=%s&field1=%urn", CHANNEL_KEY, int(ewma_new)); sprintf(header, "POST /update HTTP/1.1n" "Host: api.thingspeak.comn" "Content-Length: %dnn", strlen(body)); esp1.sendline(header, 5); esp1.sendline(body, 5); if ( esp1.parsehttp(body, 5) ) { Serial.print("POST successful!nBody content is: "); Serial.println(body); } else { Serial.println("nPOST failed"); } esp1.readline("CLOSED", 5); delay(30000); n = 0; differenzavalori = 0; quadratovalori = 0; somma = 0; devstand = 0; ewma_old = ewma_new; ewma_new = 0; } }

Notes de l'éditeur

  1. CH-PD = abilita il chip
  2. La trasformata di Fourier permette di decomporre un segnale in un insieme di frequenze e relative ampiezze Inserendo nel programma la libreria di una versione semplificata, la FFT, è stato possibile trovare per ogni campione le frequenze…
  3. Per trovare la firma, ovvero uno spettro rappresentativo della situazione desiderata ( passaggio auto o ingorgo ) Distanza più equa rispetto ai campioni RMSD = radice quadrata del quadrato della differenza
  4. Un ingorgo è rilevante solo se duraturo nel tempo, quindi è utile che i valori della distanza ( tra firma e campioni in input) decrescano in maniera graduale verso la soglia che segnala la presenza di un ingorgo. Abbiamo fatto in modo di livellare questi valori perché non si arrivi al di sotto della soglia che segnala l’ingorgo appena questo si forma, ma dopo un periodo di tempo.
  5. Obiettivi breve/medio termine = + amministrazioni e espandersi nel tempo