You are on page 1of 9

LOGICR

FUZZY

CONARDUINO

di DANIELE
DENARO
I I bicchiere pieno o
I vuoto? Il prato al
sole o in ombra?
Usando la logica Booleana, non c' scampo: il bicchiere da
considerarepieno o
da considerare vuoto.
Pieno a meta, or,wero0.5
non contemplato: solo
0 oppure 1. Questo approccio provoca talvolta
rigidit di f unzionamento inaccettabili. Come
nei processia regole (es.
sistemi esperti). Cio nei

processi che prendono


in corsiderazione una
serie di condizioni: per
esempio una serie di
istruzioni IF, da cui conseguire ura certa azione
(Fig.1).
Fin dagli anni 60 a
Berkeley il professore
Zadeh si era reso conto
che si poteva introdurre rma nuova logica
non pi a due stati,
ma per cos dire, pi
"dispe$a","sfumata":
"tuzzy", appunto.l-a

stato di una variabile


nonpi0o1matrn
qualunque valore tra
questi estremi. Valore
che rappresenta la icinanza" alla verit 1.
E evidente, allora, che
vamo ridefinite le
funzioni logiche AND,
OR e NOT. Usualmente
si utilizzano le funzioni
minimoperAND, massimo per OR e complementoalperNOT.
Per esempioseA=0.8
e B=0.3: C=(A AND B)

ffi

F9. t - Penoo vuoto?

er-errnoftcn
ril- settembre
2012 83

Fg, 2 - Categore di Freddo, Tiepido e Caldo-

01

02

03

o.a

05

06

07

0B

09

Fig, 3 - Categore d Potenze.

nel calcolo fuzzy sar


pari a C=0.3.Owero C,
che deve contemplare
la veridicit contemPoranea di A e B, non Pu
che essereun sottoinsieme comune a tutti e due/
owero 0.3.AnalogamenteC=(A OR B)=0.8e

allora perch non utilizzare lalogica fuzzy


in un hardware come
Arduino destinato ad
una utenza non solo di
tecnici e ingegneri. Ci
perch un'altra impottante caratteristica della

84

cosa da fare definire


dei concetti di variabili
fuzzy per questi due
input. Per esempio potremo definire, per entrarnbi., de11etemperature tipo, come:"Freddo",
"Tiepido" e "Caldo". A
questi concetti (chiamati
"set" nella logica Fuzzy)
vanno attribuiti dei range di temperatue in cui
essisonovalidi (Fig. 2).
Per l'output possiamo
considerare tre gradi
di potenza : "BassaP",
"MediaP", AltaP" (Fig.
3).
Queste definizioni
corrispondono alla
fase cosiddetta di
"fuzzihcazione" , in c.ui
vengono organizzate
delle variabili " fuzzy"
collegateal mondo reale dalle "membership

Fig. 4 - Regole
di comportamento.

c= (NoTA)=0.2.
Successivamentenegli
'70 e poi '80, la logianni
ca Fuzzy ha cominciato
ad essereutilizzata nel
controllo automatico con
ottimo successo.Successivamente, con la pervasivita dei microProcessorinei prodotti di
consumo, la semplicit
e 1ebuone performance
dei controllori con logica
fuzzy sono state utilizzate in molti prodotti consumer: dalle macchine
fotografiche alle lavatrici.
Ma in realt i controllori
in iogica fuzzy si sono
dimostrati particolarmente importanti anche
in campi complessi
come lo spazio ed il volo
a causadella loro abilit
a gestire sistemi non
Iineari. Non si capisce

logica fuzzy quella


di esserefacilmente
descrittada regoledi
"buon senso".
Per capire il funzionamento di un PID
necessarioconoscerei
rudimenti della teoria
del controllo automatico, pur rimanendo l'uso
del PID una attivit di
consistente contenuto
euristico (i.e.per tentativi). Mentre un controller fuzzy si comporta
come farebbe un essere
umano .
Vediamo un esempio.
Supponiamo di voler
controllare un termoventilatore avendo a
disposizione la temPeratura dell'ambiente da
riscaldare e la temperatura dell'estemo.
In questo casola prima

F9. 5 - Esecuzone
delle regole.
inFltl = 14

- ELETTB0ilIC
lil ..s
2012
settembre

inFd2 = l0

outnnf = 0.61!2

functions"; owero funzioni del grado di verit


rispetto alla grandezza
rappresentata. Queste
funzioni sono decise
dall'utente utilizzando
combinazioni lineari
come triangoli e hapezi,
ma anche funzioni non
lineari come gaussiane
od altro.
A questo punto si tratta
di immaginare cosa
farebbe un essere intelligente (e non troppo
freddoloso) se comandasse il termoventilatore. In Fig. 4 descritto
un possibile comportamento.
Poich alla fine si tratta
di comandare la potenza del termoventilatore
(per esempio con PWM),
bisogna trasformare
l'insieme di queste regole in un valore preciso
di potenza.
Questo viene fatto dal
processo di "inferenza" e dal processo di
" defuzzlfrcazione" , Il
processo di inferenza
acquisisce un valore
inputl= 14
'f

2
3
4
5
6
7

per ogni input e usando


le regoledetermina il
valore fuzzy di output. Per esempiose
la temperaturainterna
fosse di 14 gradi e quella esternadi 10 gradi,
allora il valore di output
sarebbe0.6 (Fig. 5).
Infatti il valore fuzzy di
output sarebbefornito
da un bassovalore di
verit per la potenza
alta ma ancheda un
bassovalore di verit
per la potenzamedia.
Per passareda questo
insiemead un valore
precisosi usa in genere
il metodo del baricentro
(defuzzificazione)che
fornisceappunto 0.06.
Per tutti i valori dei due
input ne risulta una
funzione superficienon
linearecome in Fig. 6.
Tutte questenon
linearit , la possibilit
di spezzareil problema in sottoinsiemi,la
possibilit di usarein
combinazionepi input
(ma anchepi output) e
la possibilit di fare affiinput2= 10

F'g,6 - Output in funzione dei possibilevalori di input,

1
0.8
_ 0.5
5' 0.4
0.2
0
0

F9. A - Output in funzione dei possibili valori di input in


modalit "Sudeno".

outptl = 0 n3

damento sull'approccio
a regole,permetteai
controlli fuzzy di essere
molto potenti nella
gestionedi sisteminon
lineari.
Quello che abbiamo
appenavisto un controller fuzzy in modalit
Mamdani, dal nome del
professoreche lo propose per primo. In realt
il processodi defuzzificazione abbastanza
dispendiosoper un
F9, 7 . Esecuzione
delleregolein modalit"Sugeno"

ELETTF0I{lCn
lil - Settembre
2012

85

Fs. 9
Controller
fuzzy per
sisfemi
dnamici.

F9. 1O - Pendolo
inverso.

Fig, t7 - Classi di angolo.

Fig. 12 - Classi d variazionedi angolo per step

Fg, 73 - Valori singleton per I'output'

microcontroller (calcolo
del baricentro dell'inviluppo risultante). In
questi casi si usa alternativamentel'approccio
Sugeno(dal nome del
professoreche lo propose) che consiste in una
notevole semplificazio-

86

ne computazionaledel
processodi defuzzificazione.Nell'approccio
"Sugeno" l'ou{>ut non
rappresentatoda variabili fuzzy mediante
funzioni di appartenenza, ma dai soli valori di
picco (nel casoprece-

lil
Settembre
2012- ELETIR0]{loe

dente 0, 0.5 ,1), chiamati


singleton,ed in Fig, 7
potetevedere come la
defi nizione dell'output
cambiata.
Il calcolo dell'output
fatto dalla semplice media pesatadei singleton.
Come si vede, il risultato un po' diverso
rispetto a prilna, ma a
questo si pu owiare
ridefinendo meglio le
funzioni di appartenenza e soprattutto i singleton. Anche la superficie
funzionale abbastanza
sirnile, come si pu
vedere in Fig. 8.
La logica fuzzy-Sugeno
stata inserita anche
nell'assemblerdi alcuni
microcontroller come la
serie ST Five 508 (STMicroelectronics).
Vediamo ora un esempio di controller fuzzy
per un sistema dinamico non lineare:il classico pendolo inverso.
Per un sistema dinamico l'approccio usuale
quello di utilizzare
come input l'errore e
la sua derivata,owero
1asua variazione da
uno step all'altro (con
opportuni coefficienti
di scala).In Fig. 9 rappresentatolo schemaa
blocchi di un generico
controller fuzzy.
Nel casodel conhollo
del pendolo inverso
(Fig. 10),l'errore

l'angolo rispetto alla


verticalee l'output
la forza di spinta o di
trazione del carrello.
L'obiettivo mantenerlo verticale.
Avendo definito per
l'errore di angolo tre
set (Fig. 11),per la sua
vadazione ancora tre set
(ed anche definiti nello
stessomodo: Fig. 12),
per l'output sette singleton (Fig. 13).,le regole
potrebbero esserequele
illustrate in Fig. 14.
O in modo pi sintetico,
utilizzando una rappresentazionea matrice per
i valori di output, come
rappresentato dalla
figura Fig. 15.
Ne risulta la supeficie
funzionaLe rappresentata in Fig. 16.
La simulazione in ambiente Matlab-Simulink,
con modeilo di pendolo
inverso e condizione
iniziale di 30" di inclinazione (Fig. 17),ha
portato alla dinamica
rappresentata dal grafico di Fig. 18.Il tempo di
step di 10 millisecondi
(owero frequenza di
elaborazionedi 100H2).
Lo stessomodello
di pendolo inverso
controllato con un PID
discreto (sicuaamente
pi impegnativo da
implementare,Fig. 19),
d risultati visibili in
Fig. 20.

Fg, 14
Regole per
il controller
del pendolo
inverso,

Se. negativo
e & regativaallae crrtlm
Sea negatiroe dazeo allofeo n60
Sea rcgatirce dapciti\tr albfr outn30
Sea zco e danegatinalbreouta30
Sea zeroedazeroalbraoutzero
Sea zeroe dapositivaallca outp30
Sea poeitirce danegetftadbra o p30
Sea poeitircedazefoallomont0
Sea poeitircedapositivaallaa outpl00

Fig. 15
Rappresentazione
a matrce dei valori
di output.

de

Uz

dsP

$t

d00

!30

&

130

rp

p30

P6o

Prm

m
gl
4ll
2!

Come si visto l'approccio fuzzy, lungi da


esserepi semplicistico
in realt molto efficace e nel contempo pi
intuitivo.
Inolhe la logica fuzzy
pu esserecomposta
anchein modo complesso,con diversi
precedente diversi
conseguenti(termini
delle regole).
In Arduino queste
strutture possono
esserereseabbastanza
leggeree semplici da
usare.La libreria Fuzzy
proposta utilizza valori
interi per velocizzarei
calcoli.
Vediamo l'esempio del
controller per pendolo
inverso realizzato con
la libreria Fuzzy per
Arduino. Per la definizione di variabili Fuzzy
(ovvero per a costruzione delle funzioni
membro) sono state
predispostedelle classi
con funzioni membro
Per esempio definiamo
le funzioni membro
Angolo (af) sulla base
di tre triangoli (Fig. 21).

Mf3afl-90,0,90);
Oltre a Mf3 (tre vertici), nella libreria, sono
predisposteanche altre
tipologie a 2, 5 e Tvertici. Ma sempre di tipo

triangolare e consecutivi , per semplificarne


la definizione e l'elaborazione. U tilizzeremo lo stessoinsieme
ancheper la variazione
dell'angolo.
A questo punto si tratta
di definire le regole.
Per le condizioni
possiamo utilizzare
le funzioni valore di
appartenenza(IsX...),
definite nelle classiMf
, e possiamo utilizzare
gli operatori logici ridefiniti opportunamente
per questeclassi:'&&'
per AND (con il metododelminimo),'ll'
per OR (con il metodo
del massimo)e '!' per
NOT (con il metodo del
complemento).
Come valore risultante
per la variabile fuzzy ,
invece del valore tra 0
ed 1 stato utilizzato
un numero intero tra 0
e 100per non trattare
con numeri float (pi
lenti su Arduino Uno).
Se "a" i1 valore corrente dell'angolo e "da"
la sua variazione (moltiplicata per 20 come
precedentemente),
avremo per ogni ciclo
il processodi inferenza
(i.e. esecuzionedelle
regole) rappresentato
in Fig. 22.
Ogni regola composta
da una chiamata alla
funzione:

oa
-4{l

s
tm
-ltD --lm

'A)

F9, 16 - Superficie funzonaleprodotta dal sistema


di regole del controller.

Fig. 17 - Modello d smulazionedel sistema controller


fuzzy + pendolo inverso,

F|g, 78 - Evoluzionedell'angolo.

Fig, l9 - Mode o di Wndolo inversocontrollatoda un PID discreto.

ELETTRoI{ICn
lI - Settembre
2012

87

#j ncl ude <FuzzY.h>


** **************
/**+***************

i * E s " r p i od u t i l i z z o d e l l a l i b r e r i d p e r c o n t r o J l a r e"

********

(simulatol
?919919.]ll:"'"

i--:i;;:;;-"-;;-;.;;.**..".****".*..";**.*****...**.*..***********r*************/
f l o a t a = 0, d a = 0, a P = 0;
f oat dt=0.01;

void setuP() {
S e r ia l . b e g j f ( 9 6 0 0 ) ;
for (int =0; i<100;i++)
I
ft oat t=(f toat)j*dt:
a = t n vP e n d( ( f I o d t ) f , d t ) ;
da=(a-p);dp=a;
da=da*20;
a=d*l;
f = f u z z Y C o n t r( (i n t ) a ' ( i n t ) d a ) ;
Se r j d I . Pr r t I n ( a ) ;
deldJ(100);

//lrtervallo

d i t e m p o jr z z a z io n e ( s e c )

/ / N u m e r od c i c l i
//

di smulazione

ci dscunodi dt secordl

//riceve l'anqolo attuale dalla roLrtine


/ / c o n l m o d e l l o m d t e m a t i c od e l p e n d o l o
/ / c a l c o la l d v a r i a z i o n e d e l l ' a n g o l o
/ / a D o li c d u n f a t t o r e d i s c a la d i 2 0 d d a
//ap;lica ur fdttore di scala di 1 all'angolo
/ / r i c e v e I a f o r z a d a a p p l c a r e d a l I d
/ / r o u t n e c h e e s e g u eI ' r ' n f e r e n z af u z z y
/ / a p p l i c d u n f d t t o I e d i s c a Ja 1 a l ] a f o r z d
/ / r i t d r d o u t j l j z z a t o s o l o p e r n o n s o v r a c c a r j c a r el d s e r j d ' l e

v o i d I o o p () {

M f 3a f ( - 9 0 , 0 , 9 0 ) ;
out y;

// Frzzy sets (3 set )


//0efinizione dell'unica varjabile di outPut

i n t f u z z y C o n t r ( i f at ,j n t d a )

jl
/ / R o u t j n e c h e i m P le m e n t d
/ / P r o c e S s od i i n f e r e n z a
//Reqoe

I f T h e n ( d. fI s X N ()a& & a fI s x N ( d)a' v , 1 0 0 ) ;


l f l h e n ( a.fl s x N ( d ) & &. aI sf X Z ( d a ) , v , ' 6;0 )
I f Then( af . I s XN( a) &&af sXP( da) , y , 30 ) ;
t sf X N ( d d ) , -v3' 0 );
I f T h e n ( a. fI s X Z ( a ) & &. a
l f T h e n ( a. fI s x z ( ) & & a. fl s x z { d a ) , v . 0; )
I f f hen( af . I s XZ( d) &&df l sXP( da) , v , 30 ) ;
l f T h e n ( d. fl s X P ( a ) & &. lasf x N ( d a ) ' y . 3 ;0 )
I f T h e n ( d. fI s X P ( 6 ) & &. Iasf X Z ( d a ) , v . 6;0 )
I f l hen( af . I sx P( d) &&df l sXP( da ) , v , 100 ) ;
. e f u z z(Y) ;
n t y o u t = yD
r e t u r n y o u t

controller FuzzY

/ /"Deuzzificaziot\e" delIa varidbil dj output


/ / F i n e d e l P r o c e s s od j i n f e r e n z a

]
**'*********t******/
/*************"****

( s e m p l j f i c a t o d e l p e n d o l oi n v e r s o '
/ / R o u t i r e d e l m o d e l l om a t e m a t i c o
f I o d t I n v P e n d ( f l o a tF , f l o a t d t )

i -. --. .. --.". -. -.. .

*******************/

logiu fuzzy, tnriabiledi uscita,Palorcsingleton)


If thm(espressione

F9, 2O
Evoluzione
dell'an'
golo nel
caso del
controllo
con PID
discreto.

Cio :
. antecedente: espressione logica o var\abile fuzzy;
. conseguente: variabile di uscita associata;
. conseguente: valore singleton da attribuirle.
Bisogna, quindi aver definito prima oggetti che lappresntano le variabili di uscita mediante l'uso della
classeOut:

88

lil
2012- ELETTR0ilICn
Settembre

Out y;

Fig, 21 - Set di angoli per il contrcllet con la libreria Fuzzy.

//inizialzd la \,a'iabile di uscin

IJThen(S.Isw b )&&al.Isnr Hd,y,-I 00);


IIThen(S.k N (a)&&afIsn @d,y,-60);
IJThen@.IsN @)a &af IsP (da),y,-30);
IfI hen($,Isn @)&&4.I snr @d,y,-30);
IJIen@.IsE (a)&&4.I sE (tu),y,0) :
IJTle n({. Isw @)a a4. IsE (da),y,30);
Ilf hen(4.IsP (a)&aa.Ig'I(da),y,
30);
Ifip n(4.IsE @a &a.Isz (da),y,60);
IIlen($.IsE (a)&aafisw (da),y,
I 00);
//defuftcazione
JImt 1mt:y.Defizy) ;

Out A;

Fig. 22 - lnferenzad regoledel controller


utilizzandola libreria Fuzzy,

Alla fine dell'esecuzionedelle regolesi chiama,su


questooggetto,la funzione di "defuzzihcazione":

Yout sarallora l'azionerisultantedel processo


d'inferenza. Utilizzando Arduino Uno, simulando il

Jloatyout=y.Defuzzy();

# j n c l u d e < F u z z y .h >
C o n t r o l l o d e l p e n d o l o j n v e r s o c o n l a f L r n z r ' o nFeu z z y C o n t r o l l e r (

/*

f I o a t a = 0 ,d a = 0 ,a p = 0 ;
f l o d t d t = 0 . 0 1i
l nt f=0I

//lrtervdllo

.)

di tempo
r r ' z z a zoj n e ( s e c )

Mf3 af( 90,0,90);


r ' n t m t x t 3 l L - 3 1 = {1{ 0 0 , 6 0 . 3 0 } ,
{-30.0,30},
{30,60,100}}r

/ /Fuzzy sels
/ / M a t r r ' c ed e j v aI o r i S j n q l e t o n

FuzzyCon
r ot I l e r l ' l f 3 F z C ( a f , m t x , 0 ) ;

//Fuzzy controller con set af e cor mdtrice mtx

v o r ' d s e t u p () {
S e r i a l. b e g j r ( 9 6 0 0 ) ;
for (int i=0; j<100;++)

/ / n u m e r od i c i c l i

f l o d t t = ( f l o d t) j * d t ;
d = l n v P e nd ( ( f I o d t ) f , d t ) ;
d d = (a a p ) ; a p = d i
da=da*20;

di sinrulaziore

/ / c i s c u n od i d t s e c o n d i
//riceve l'dngolo attuale dalla routr'ne
/ / c o n j l m o d e l l o m a t e m d t i c od e l p e n d o l o
/ / c a l c o l d l d v ar i a zj o n e d e l l ' a n g o l c
//applica t)n fattore di scdld dj 20 d dd
//applicd un fdttore di scala dj I al'angolo

f = F z C l. n f e r e n c e ( ( i n t ) a ,( i n t ) d a ) ; / / a p p l r ' c d p r o c e s s od j i n f e r e n z a a l c o n t r o l l e r
f=f*1

Ser r'aI . pr i nt I n ( a ) ;
delay(100);

//appljca un fattore di scdld l alla forza


/ / r r ' t d r d o u t j l i z z a t o s o l o p e r r o n s o v r d c c a r j c a r el a s e r i a l e

v o i d l o o p () {

/ / R o u ti r e d e l m o d e l l o m d t e m a t i c o( s e m pil f i c d t o d e l p e n d o l o j n v e r s o .
f l o t I n v P e n d ( f ' l o a Ft , f l o d t d t )

{
I

ELETTRoI{lCn
lil - Settembre
2012

89

I sec
Fig, 23 - Evoluzionedell'angolo nella simulazione
su Arduino Uno-

pendolo con un modello


funzionalee la rilevazione dell'angolomediante un numero intero
(risoluzione1 grado)
si ottiene il grafico in
Fig. 23.La libreria pu
essereutilizzata per un
ragionamentoFuzzy utilizzando delle variabili
fuzzy intermedie.

Infatti la " :.rzzihcazione" di una grandezza


mediantele Funzioni
Membro di Mf (IsX...)
producedella variabili
di tipo Fv che sonodelle
variabili fuzzy (valore
da 0 a 100) chepossono
esserecombinatefra
loro con gli operatori
logici:&&,11,!

La libreriaFuzzy
lavoraconnumeriinteriper
Comes dettola libreriaFuzzy
velocizzare
I'elaborazione.
Percui,peresempio,il valoredi verl
espressoin percentuale(0-100).
daiseguenti
elementi:
La libreria composta
. Classic++ che definiscono fuzzyset. Owerole classilogiche
le variabilireali.
in cui sonosuddivise
. ll tipo variable
fuzzy(convaloredi veritin percentuale)
. Funzioni
cheda un valorerealerestituiscono
diappartenenza
fuzzy(conl suogradodi appartenenza
owerodi
unavariabile
verit).
. Overload
deglioperatori&&(And),I | (Or),! (Not)per poterli
allevariabili
fuzzy.
applicare
. ll tioovariabile
di outDut.Conla relativa
funzionedi "defuzzificazione".
. Lafunzionechedefinisce
unaregoladeltipolf Then.

XN2,XN1,V,XP1,XP2.
sti. Nelcasodi lvlfsi set si chamano
Altredefinizioni
di set:
Mf2(XN,XP)
Mf3(XN,XZ,XP)
Mf7(XN3,XN2,XN1,XZ,XP1,XP2,XP3)

i fuzzyset sonodeltipo:
Le classic++ chedefiniscono
l\.4fx(v1,v2,..)
Dovex il numerodi set (2,3,5,7). Perogniset previsto
un
parametro
il verticedeltriangolo.
Infattile
interochedefinisce
parzalmente
funzionidi appartenenza
sonotuttedeitriangoli,
sovraooosti.
rappresenta
Es.: Mf5 mf( 150,-100,0,100,150)
unfuzzysetd5
classi(Fig.24)

rsxNl(x),
rsxN2(x),
lsxz(x),
lsxPl(x),
lsxP2(x)

Percomoditsonostale inseritedefinizionidi set posjtivi,identici


ai corrispondenti
di doppiosegno,ma coni nomideiset picoerentiallarealtdi un dominiotuttopositivo.
MfP3(XZ,XP1,XP2)
MfPs(XZ,XP1,XP2,XP3)
il cui
Ognunadi questeclassicontienefunzionidi appartenenza
nomefa riferimento
al set.Peresempioper Mf5 abbiamodisponifunzionidi appartenenza:
bilile seguente

Questefunzionirestituisconouna variabilefuzzyrappresentata
dallaclasseFvdi libreria.
Lagenericaregola implementata
dallafunzione:
lfThen(espressionelogica,variabileout,valoresingleton)

ilvaloredi veritdell'espressione
logica applicato
Ovvero:
come
i triangolinondevonoessereperforza pesoal valore(intero)
Comesi vedenell'esempio,
singleton
ed il risultato
sommatoallavaisosceli,
ma sarannocomunque
sempreparzialmente
sovrappo- riabiledioutput.Bisogna
aver,quindi,definitoin precedenza
una
(Owiamente
variabile
tramitela classeOutdi libreria.
le variabili
di out possonoesserepidi una)
Es.:
Outy;
lfThen(lsXN1(x1)&&lsXZ(x2),y,!2qi
Allafinedell'elenco
di regole,pertirarele somme,va lanciata
y (ditipoOut)la funzioneDefuzzy0.
sull'oggeuo
Es.:
int youl=y.Defuzzy{);
Fig.24 - Esempiodi definizione di un set di cinque classi.

90

5ettembre
2012- ELEffF0l{lCn
li

(metodo
Questafunzioneapplicala mediapesatadeisingleton

Es.:
Fv a1=af.IsXZ(x1);
Fv a2=af.IsXZ(xZ);
Fv a3=af.IsXP(x3);
Fv a4=a1&& a2 && !a3;
se x1=35,x2= -10,x3= -5
allora il valore
di verit di
a4 (a4.v):

Mf34(w,AN):
Orry;
while(true)
{'

a4.v=67ok
NelListatolmostrato
un esempio di utilizzo
della libreria Fuzzy che
realizzaun controller
per un pendolo inverso,
simulato con ult modello matematicosemplificato, senza attriti. I
programma completo

//&fnioni
//ciclodi i4faanza

//ti ivalsi di ae
If f le n(a,Isxr(a)& &4. IsW(ddb),-I 00);
If f hen(afJs$'@)a &aJst@4 * -60);
ItI'hen(aflsn't(a)& &4. IsJ?(da)*- 30);
fl mt your-y Daftzzy0; //oupttt tiil e
Fig, 25 - Esempio di processo di inferenza

e resettala variabiledi outputper una nuovainferenza


notareche con questalibreranon c' bisognodi definire
un set di singleton,in quantoad ogniregolapu
passatocome parametroun qualunqueinterocomevalore
FlE.25 rappresentatoun esempiodi processocomplessivo.
tibreriasono inoltrepredisposti2 tipi di fuzzycontroller
uno con 3 set e uno con 5 set .
unoper I'erroreed unoper la suavaduevariabili,
utilizzano
(o la derivata). necessarioconsiderareeventualifattori
in particolareper la variazionedell'errore
scala(moltipljcatori)

//tufmisceilftzzy set
MfJ e@0,A9Q;
int m*t3ltSl ={H00,AA-40}, /lD{nisce b mdlice
{:40,0,40}, //isinglon
{40,80,t04}};
FtzzyConrolIerl"S3WC(einE, 0);//&ns ceil cont
whilz(true)
{
.-dam wu fumioneestqu clv lomiscee e fu
e=e*kl;&=de*k2;
h:o?rilg
.l=FzC.Infqance(ede);
Fig.26

lo si pu trovare come
sketchincluso nella
libreria con nome: "FuzzyTest1".Nel Listato
2 mostrato invece lo
stessocontroller che
utilizza direttamentela
tunzione FuzzyCont roIler(...)contenutanella
libreria.
Il programma com-

- Esempio di utilizzo di un controller fuzzy di libre a.

Fig, 27
Mat ce dei valori
singleton passata
al controllei

pleto lo si pu trovare
come sketchincluso
nella libreria con nome:
"FttzzyTeslZ".

E\dE

)c{ xz

)Q

)C.I

-100 -80

-rto

xz

40
,10

)(P

40

80

100

(o per la derivata).
utilizzano
lo
In quantoambeduele grandezze
stesso fuzzyset.
Lutilizzodi questestruttureprevedesolo due fasi:
. La defnizione,con il passaggiodel fuzzyset e della maricedei
singleton.
. l-esecuzioneripetutadellafunzione"lnference'.
un esempiodi utilizzodi un controller
ln Flg.26 rappresentato
per
gli
inPut.
tre
set
fuzzycon
La matricedei singleton la matricedei valoriper classedi errore
comeprobabilmente
(riga)eclassedi variazione
errore(colonna),
pi
nellaFig.27.
appare chiaramente
ll terzoparametronelladefinizionedel controller un moltiplicatore per il funzionamentojncrementale.Se questovalore zero
non vienerestituitonessunafrazionedi azioneincrementalell
utilizzaun float, ma se O non
calcolodelvaloreincrementale
in virgolamobile
vieneeffettuatanessunamoltiplicazione
futilizzo del contributoincrementalepu permettereun eventuale
dellepossibili
a regime,ma introduce
dell'errore
azzeramento
oscillazioni.
Questaljbreriapu essereutilizzatatranquillamentesu hardware
atrotipodi microcontroller.
comequalunque
diversoda Arduino,
lnfatti oesaoochissimoed abbastanzaveloce.Da alcunitest
risultatauna velocitdi circa
O.3mllllsecondl
per un ciclodi inferenza
di9 regolepifunzionedi "defuzzifica(su
zione" ArduinoUno)
Owerocirca30 micrGecondl per regolacon ANDfra due funzioni
di aooartenenza.
La libreriava posizionata(conla sua cartella)nellacartella"lidi sviluppodi Arduinoe contieneancheun
braries"dell'ambiente
paio di esempie il file per I'evidenziazione
delle ke)'r,iord.

-'

ll{ - Settembre
2012
ELETTBoilICF

91