Anteprima
Vedrai una selezione di 27 pagine su 129
Smart Ethylometer - Tesina Pag. 1 Smart Ethylometer - Tesina Pag. 2
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 6
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 11
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 16
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 21
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 26
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 31
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 36
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 41
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 46
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 51
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 56
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 61
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 66
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 71
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 76
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 81
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 86
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 91
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 96
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 101
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 106
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 111
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 116
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 121
Anteprima di 27 pagg. su 129.
Scarica il documento per vederlo tutto.
Smart Ethylometer - Tesina Pag. 126
1 su 129
Disdici quando vuoi 162x117
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Sintesi
Matematica - Regressione Lineare, Metodo dei Minimi Quadrati
Fisica - Circuiti Elettrici , Partitore di Tensione, Semiconduttori
Scienze - Metabolismo alcohol
Estratto del documento

N

1 (4.3)

x

x̄ = i

N i=1

N

1 (4.4)

ȳ = y i

N i=1

Calcolo della varianza

Se indichiamo con ∑

N

1 − 2

2

Var(X) (4.5)

= σ = (x x̄) ,

i

XX N i=1

N

1 − 2

2

Var(Y (4.6)

) = σ = (y ȳ) ,

i

Y Y N i=1

le varianze delle variabili rispettivamente, queste ci forniranno un indice della

x, y

dispersione dei dati rispetto al valore medio. Inoltre si definisce covarianza la quantità

∑ ∑

N N

1 − −

Var(X, (4.7)

Y ) = σ = (x x̄) (y ȳ) ,

XY i i

N i=1 i=1

e costituisce un indice di relazione tra le variabili.

• Se Var(X, l’aumento di una variabile corrisponde all’aumento dell’altra;

Y ) > 0 40

Misura del Tasso Alcolico con Arduino pennestri.me

• Se Var(X, l’aumento di una variabile corrisponde alla diminuzione

Y ) < 0

dell’altra.

Le deviazioni standard delle due variabili misurate sono:

v

u

u ∑

√ N

1

t − 2

Sd(X) Var(X) (4.8)

= = (x x̄)

i

N i=1

v

u

u ∑

√ N

1

t − 2

Sd(Y Var(Y (4.9)

) = ) = (y ȳ)

i

N i=1

4.4 Regressione Lineare

Per procedere all’interpretazione dei dati rilevati dal sensore è necessario determinare

una relazione analitica tra le variabili (concentrazione di alcol nel sangue) e

x y

(segnale elettrico del sensore). La relazione ipotizzata per semplicità è quella lineare.

Tale ipotesi verrà comunque sottoposta ad una verifica.

Ammettendo tale ipotesi, i dati saranno legati dalla relazione: (4.10)

y = β x + β + ε (i = 1, 2, . . . , N )

i 1 i 0 i

in cui

• , sono i coefficienti incogniti della retta;

β β

0 1

• è l’errore commesso nell’approssimazione adottata.

ε

i

I suddetti coefficienti dovranno essere calcolati in maniera tale che l’errore sia il più

piccolo possibile. Si utilizzerà a tal fine il criterio dei minimi quadrati.

Per illustrare il metodo, senza perdita di generalità, assumiamo Il nostro

N = 3.

compito sarà quindi quello di calcolare i coefficienti della retta, in modo tale che la

sua distanza da tre dati punti del piano sia minima.

La quantità da minimizzare è quindi la funzione a due variabili

3 − 2 (4.11)

F (β , β ) = [y (β x + β )]

0 1 i 1 i 0

i=1

21 22 23 (4.12)

= ε + ε + ε ,

41

Misura del Tasso Alcolico con Arduino pennestri.me

ovvero dF (4.13a)

=0

0

dF (4.13b)

=0

1

Le condizioni (4.13) formano un sistema lineare di equazioni la cui soluzione

fornisce i valori e incogniti. Gli sviluppi algebrici sono per brevità qui omessi,

β β

0 1

ma riportati nel programma riportato nel paragrafo 5.4 di pag. 51. Da tale

Maxima

programma otteniamo i seguenti risultati

3 − −

(x x)(y y)

i

i

i=1 (4.14)

β =

1 ∑

3 − 2

(x x)

i

i=1

viste le (4.5) e (4.7), l’equazione (4.14) può essere riscritta in maniera più generale

come σ

XY (4.15a)

β =

1 2

σ

XX

− (4.15b)

β = y β x

0 1

42

Misura del Tasso Alcolico con Arduino pennestri.me

4.5 Applicazione Numerica

Il metodo di calcolo descritto nel paragrafo 4.4, è stato applicato grazie alla disponibi-

lità della procedura della libreria matematica in linguaggio

curve_Dist fit python

La libreria è disponibile alla pagina web:

scipy.

http://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.optimize.

I dati sperimentali riassunti nella Tabella 4.1 mettono in relazione

curve_fit.html.

differenza di potenziale generata dal sensore e concentrazione di alcohol nel sangue,

provengono dai grafici delle Figure 4.4 - 4.9.

Tabella 4.1: Dati Sperimentali per Calibrazione attraverso Regressione Lineare

Differenza Concentrazione

Potenziale (V) (g/l)

2.92 0.50

3.15 0.75

3.29 1.10

3.50 1.50

3.81 1.90

Con i dati a disposizione, la retta di regressione ha equazione (4.16)

y = 0.59843 x + 2.64581 .

4.10 riporta, per un confronto, sia i dati sperimentali, che la curva di

La Figura

calibrazione. 43

Misura del Tasso Alcolico con Arduino pennestri.me

Lineare

Sperimentali 2.00

Regressione Ethilometer

Valori 1.75

1.50 Smart

(g/l) dello

Alcohol

1.25

Calibrazione Calibrazione

Concentrazione

1.00 di

di Curva

Curva 0.75 4.10:

Figura

0.50

0.25

4.00 3.75 3.50 3.25 3.00

(V) Volt

44

Capitolo 5

Programmi Sviluppati

In questo capitolo vengono riportati tutti i codici da me sviluppati nell’ambito del

progetto .

Smart Ethilometer

Possiamo individuare due categorie di programmi:

• quelli destinati all’acquisizione e all’elaborazione dei dati;

• quelli relativi alla gestione della scheda Arduino.

5.1 Codice Arduino per Calibrazione del Sensore

/*

1 Author : Pietro Pennestri '

Mail: pietro . pennestri@gmail .com

3 Website : http :// www. pennestri .me

Date: May 2nd 2015

5 Description :

7 Calibration of an MQ3 shield on arduino board .

The voltage is displayed when the sensor is exposed at a known

9 alcohol concentration .

Temperature is also recorded for future adjustments .

*/

11 int mq3 _analogPin = A5; // connected to the output pin of MQ3

13 int val;

int tempPin = 1;

15 45

Misura del Tasso Alcolico con Arduino pennestri.me

unsigned long time;

unsigned long time_in_second ;

17 void setup (){

Serial . begin (9600); // open serial at 9600 bps

19 }

21 void loop ()

{

23 // give ample warmup time for readings to stabilize

float arduino_voltage = 5 ;

25 int mq3 _value = analogRead (mq3 _analogPin );

float voltage = mq3 _value * ( arduino_voltage / 1023 .0 );

27 // get temperature

29 val = analogRead ( tempPin );

float mv = ( val/1024 .0 )*5000;

31 float temperature = mv/10; // celsius

33 // tieme

time = millis ();

35 time_in_second = time/1000 ;

37 // Serial .print (" Voltage =");

Serial . print ( voltage );

39 Serial . print ("*");

// Serial .print (" Temperature (C): ");

41 Serial . print ( temperature );

Serial . print ("*");

43 // Serial .print (" Time(S): ");

Serial . print ( time_in_second );

45 Serial . print ("\n");

47 delay (1000); // slow down output

}

49 46

Misura del Tasso Alcolico con Arduino pennestri.me

5.2 Acquisizione Dati Attraverso

Porta Seriale

Il codice di seguito riportato, sviluppato per un PC con sistema operativo

Python

Microsoft, permette di acquisire, decodificare e memorizzare su file le stringhe di

dati inviate dalla scheda Arduino, programmata in con il codice già

Processing,

illustrato nel paragrafo 5.1. Le acquisizione eseguite sono 60, che corrispondono ad

un intervallo di tempo di circa 60 secondi.

"""

1 Created on Sat May 02 16:09:30 2015

3 @Author : Pietro Pennestri '

@mail : pietro . pennestri@gmail .com

5 @website : http :// www. pennestri .me

"""

7 import serial

import numpy as np

9 import matplotlib . pyplot as plt

plt.close ("all")

11 output_file_name ='res.dat '

13 val_max = 60 # define maximum number of aquision lines

com_port ='COM9 ' # define COM port

15 baud_rate =9600 # define baud rate speed (same as Arduino board )

17 ser = serial . Serial (com_port , baud_rate , timeout =40) # define COM

Port

i=0

19 volt_array = np. array ([])

21 # temperature_array = np.array ([])

temperature_array = np. array ([])

23 time_array = np. array ([])

25 text_file = open ( output_file_name , 'w') # create dat file

27 while i < val_max :

line = ser. readline ()

29 voltage , temperature , time = line.split ('*')

47

Misura del Tasso Alcolico con Arduino pennestri.me

31 #np. concatenate (( volt_array , float ( voltage )),axis =0)

volt_array =np. append ( volt_array , [ float ( voltage )])

33 temperature_array = np. append ( temperature_array ,[ float (

temperature )])

time_array = np. append (time_array ,[ float (time)])

35 # write in res.dat

37 text_file . write ( voltage + ' ')

text_file . write ( temperature + ' ')

39 text_file . write (time)

41 i = i + 1

print voltage , temperature , time

43 print volt_array

print time_array

45 ser.close () # close COM port

text_file . close () # close file

47 plt. figure ()

49 plt.plot( time_array , volt_array , linewidth =2.0)

plt.plot( time_array , volt_array ,'ro ')

51 plt. xlabel ('Time (s)')

plt. ylabel ('Voltage (V)')

53 plt.grid ()

plt.show ()

55 48

Misura del Tasso Alcolico con Arduino pennestri.me

5.3 Curva di Calibrazione

# -*- coding : utf -8 -*-

1 """

Created on Thu May 28 18:24:59 2015

3 @author : pietro

5 @website :http :// pennestri .me

@mail : pietro . pennestri@gmail .com

7 """

9 import matplotlib . pyplot as plt

import numpy as np

11 import math

from scipy . optimize import curve_fit

13 plt.close ("all")

15 ydata = np.array ([0.5 ,0.75 ,1.1 ,1.5 ,1.9])

xdata = np.array ([2.92 ,3.15 ,3.29 ,3.5 ,3.81])

17 num_elements =len( xdata )

19 def func(x, a, b):

return a*x+ b

21 #

# curve_fit : Math procedure of the scipy math library

23 # popt:

# Optimal values for the parameters so

25 #that the sum of the squared error of

# (func - ydata )^2 is minimized

27 # pcov:

# The diagonals of pcov provide the variance

29 # of the parameter estimate

31 popt , pcov = curve_fit (func , xdata , ydata )

print popt

33 a=popt [0]

35 b=popt [1]

37 # error 49

Misura del Tasso Alcolico con Arduino pennestri.me

k=0

39 s=0

for x in xdata :

41 y=func(x,a,b)

s=s+(y-ydata [k]) **2

43 k=k+1

s=math.sqrt(s/ num_elements )

45 print " Square root of sum of squares of residuals =",s

47 print '------'

print pcov

49 plt. figure ()

plt.plot(xdata , ydata , 'ko ', label =" Original Data")

51 plt.plot(xdata , func(xdata , *popt), 'r-', label =" Fitted Curve ")

plt. xlabel ('Arduino voltage (V)')

53 plt. ylabel ('Alcohol concentration (mg/l)')

plt.grid ()

Dettagli
129 pagine
15 download