Você está na página 1de 96

JOOPAULOFIORI

ROBERTOTHIELE

digiducha
Termostatodigitalcomcontrolenebuloso
parachuveiroscomsistemadeaquecimentocentral

SOPAULO
2008

JOOPAULOFIORI
ROBERTOTHIELE

digiducha
Termostatodigitalcomcontrolenebuloso
parachuveiroscomsistemadeaquecimentocentral

Monografiaapresentada
EscolaPolitcnicadaUniversidadede
SoPauloparagraduaoem
EngenhariaEltricacomnfaseemComputao

SOPAULO
2008

JOOPAULOFIORI
ROBERTOTHIELE

digiducha
Termostatodigitalcomcontrolenebuloso
parachuveiroscomsistemadeaquecimentocentral

Monografiaapresentada
EscolaPolitcnicadaUniversidadede
SoPauloparagraduaoem
EngenhariaEltricacomnfaseemComputao

readeConcentrao:
EngenhariadeComputao
Orientador:
Prof.MarcoTlioCarvalhodeAndrade

SOPAULO
2008

FICHACATALOGRFICA
Thiele,Roberto
DIGIDUCHA/J.P.Fiori,R.Thiele
SoPaulo,2008
96p.
TrabalhodeFormaturaEscolaPolitcnicadaUniversidadede
SoPaulo.DepartamentodeEngenhariadeComputaoe
SistemasDigitais.
1.Sistemasdecontrole2.Controleautomtico3.Inteligncia
Artificial4.Microprocessadores
I.Fiori,JooPauloII.UniversidadedeSoPaulo.Escola
Politcnica.DepartamentodeEngenhariadeComputaoe
SistemasDigitaisIII.t.

The idea behind digital computers may


be explained by saying that these machines
are intended to carry out any operations
which could be done by a human computer.
(Alan Turing)

RESUMO
Nestamonografiaapresentouseummtododecontroleautomticodatemperatura
de chuveiros que possuem sistema de aquecimento central. Nestes sistemas, a
regulagemdetemperaturacomumenterealizadaajustandosedoisregistros,sendo
um de gua quente e o outro de gua fria. A temperatura da mistura de gua
determinadapelaposiodestesdoisregistros.
Omtododecontroleusadonestetrabalho,dotiponebulosoPI,visoualcanarum
controle satisfatrio da temperatura, sem a necessidade de otimizao online das
variveis do controlador, que uma prtica comum nos largamente utilizados
controladoresPID.
Um prottipo do sistema de controle foi implementado. O software de controle
nebuloso foi executado em um microcontrolador, que de acordo com o sinal de
temperatura fornecido por um sensor instalado na mistura d'gua, controlou as
potnciasdeduasbombasdegua(quesimulamosregistrosdeguaquenteede
gua fria), com o intuito de estabilizar a temperatura da mistura d'gua em um
determinadovalordesejado.

ABSTRACT
Inthismonographamethodforautomaticcontrolofwatertemperatureinshowers
with central heating systems was presented. In these systems, the temperature
regulationiscommonlydonebyadjustingtwoseparatetaps,oneforhotwaterand
another for cold water. In this case, the temperature of the water mixture is
determinedbythetwotaps'positions.
Thecontrolmethodused,whichisoftypefuzzyPI,aimedatprovidingasatisfactory
temperaturecontrol,withnoneedtooptimizethecontroller'svariablesonline,which
isacommonpracticeamongthelargerlyusedPIDcontrollers.
Aprototypeofthecontrolsystemwasimplemented.Thefuzzycontroller'ssoftware
wasexecutedonamicrocontrollerwhich,uponreceivingatemperaturesignalfroma
sensor,controlledthepoweroftwowaterpumps(whichsimulatedthehotandcold
taps),soastostabilizethetemperatureofthewatermixtureatadeterminedsetpoint.

Sumrio
Captulo1Introduo......................................................................................................................11
1.1Motivaoejustificativa.........................................................................................................13
1.2Objetivos..................................................................................................................................13
1.3Metodologia............................................................................................................................14
1.4Estruturadotexto.....................................................................................................................15
Captulo2FundamentosTericos..................................................................................................17
2.2Fundamentosdelgicanebulosa.............................................................................................18
2.2.1Conjuntosclssicos.........................................................................................................18
2.2.2Conjuntosnebulosos.......................................................................................................19
2.2.3Operaesemconjuntosnebulosos................................................................................20
2.2.4Variveislingsticaseregrasdeinferncia....................................................................21
2.3Fundamentosdecontrolenebuloso..........................................................................................22
2.3.1Funesdepertinncia.....................................................................................................22
2.3.2Fuzificao.......................................................................................................................23
2.3.3Mecanismodeinferncia.................................................................................................24
2.3.4Defuzificao...................................................................................................................25
Captulo3DefiniodoProblema..................................................................................................27
3.1Consideraessobreinstalaeshidrulicas..........................................................................27
3.2Funotemperatura.................................................................................................................28
3.3Regulagemmanual..................................................................................................................29
3.4Oproblemadoajustedetemperatura.....................................................................................30
3.5OProblemadoajustedevazo...............................................................................................31
Captulo4DesenvolvimentodaSoluo.........................................................................................33
4.1Introduo................................................................................................................................33
4.2Arquiteturadosistema.............................................................................................................34
4.3Hardwaredeinterfacecomousurio......................................................................................38
4.4Hardwaredecontrole...............................................................................................................39
4.5Softwaredeinterfacecomousurio.......................................................................................40
4.6Softwaredecontrole................................................................................................................42
4.6.1Arquiteturadocontroladornebuloso...............................................................................44
4.6.2Funesdepertinnciadocontroladornebuloso.............................................................44
4.6.4Regrasdeinfernciadocontroladornebuloso.................................................................47
4.6.5Fuzificao,infernciaedefuzificao............................................................................51
4.6.6Fluxograma......................................................................................................................58
4.7Funcionalidadesfuturas...........................................................................................................60
Captulo5Prottipoetestes.............................................................................................................61
5.1Hardware..................................................................................................................................62

5.1.1Resistnciaeltricaerecipientes......................................................................................64
5.1.2Kitdidticodo8051eseusperifricos............................................................................64
5.1.3Driversdasbombas..........................................................................................................66
5.2Software...................................................................................................................................67
5.3Resultados................................................................................................................................70
Captulo6ConsideraesFinais......................................................................................................73
6.1Quantoaocumprimentodosobjetivos....................................................................................73
6.2Quantoaodesenvolvimentoesuasdificuldades.....................................................................74
6.3Concluses...............................................................................................................................75
6.4Trabalhosfuturos.....................................................................................................................76
ARefernciasBibliogrficas..........................................................................................................77
BBibliografiaAdicional..................................................................................................................78
CCdigofontedoProttipo...........................................................................................................79

ndicedefiguras
Figura1:Exemplodefunesdepertinncia....................................................................................23
Figura2:Modelodesistemadecontrole...........................................................................................28
Figura3:Ajustemanualdosregistrosdeumchuveiro......................................................................29
Figura4:ComportamentoidealTemperaturavs.Tempo..................................................................30
Figura5:ComportamentotpicoTemperaturavs.Tempo.................................................................31
Figura6:Modelodesistemadecontrole...........................................................................................33
Figura7:Arquiteturageraldohardware............................................................................................35
Figura8:Arquiteturageraldosoftware.............................................................................................36
Figura9:Fluxogramageraldosoftware............................................................................................37
Figura10:Arquiteturadohardwaredeinterfacecomousurio........................................................38
Figura11:Arquiteturadohardwaredecontrole................................................................................39
Figura12:Arquiteturadosoftwaredeinterfacecomousurio.........................................................40
Figura13:Fluxogramadosoftwaredeinterfacecomousurio........................................................41
Figura14:Arquiteturadosoftwaredecontrole.................................................................................43
Figura15:Arquiteturadocontroladornebuloso................................................................................44
Figura16:Funesdepertinnciadoerro.........................................................................................45
Figura17:Funesdepertinnciadavariaodoerro......................................................................45
Figura18:Funesdepertinnciadavariaodaposiodoregistroquente..................................46
Figura19:Funesdepertinnciadavariaodaposiodoregistrofrio.......................................46
Figura20:Fuzificaodoerro...........................................................................................................52
Figura21:Fuzificaodavariaodoerro........................................................................................52
Figura22:Funesdepertinnciaresultantes....................................................................................54
Figura23:Defuzificaopelomtododocentrodemassa................................................................55
Figura24:Defuzificaopelomtododocentrodassomas..............................................................55
Figura25:Fuzificao,infernciaedefuzificao.............................................................................57
Figura26:Fluxogramadosoftwaredecontrole................................................................................58
Figura27:Exemplodefuncionamentodocontroledosregistros......................................................59
Figura28:Analogiaentreainstalaohidrulicaresidencialeoequipamentousadonasimulao 62
Figura29:Arquiteturageraldoprottipoquecontrolaoequipamentousadonasimulao............63
Figura30:Recipientedeguaquentecomresistncia.......................................................................64
Figura31:Funcionalidadesdeinteressedokit..................................................................................65
Figura32:ConexesdeinteressedodriverdemotorDC.................................................................66
Figura33:Geraodeduasondaspwmdistintas,defrequnciaiguala100Hz..............................70
Figura34:Grficodatemperaturaemfunodotempo....................................................................71
Figura35:Grficodaspotnciasdasbombasemfunodotempo..................................................72
Figura36:Conversodeumsinalde0a5Vparaumsinalde12a24V.........................................74

10

Captulo1Introduo
Oconceitodeconjuntonebuloso(ou fuzzy, emingls)foiintroduzido,em1965,por
LotfiA.Zadeh(UniversidadedaCalifrnia,Berkeley).Aeleatribudooreconhecimento
como grande colaborador do controle moderno. Em meados da dcada de 60, Zadeh
observou que os recursos tecnolgicos disponveis eram incapazes de automatizar as
atividades relacionadas a problemas de natureza industrial, biolgica ou qumica, que
compreendessem situaes ambguas, no passveis de processamento atravs da lgica
computacionalfundamentadanalgicabooleana.Procurandosolucionaressesproblemaso
Prof.Zadehpublicouem1965umartigoresumindoosconceitosdosconjuntosnebulosos,
revolucionandooassuntocomacriaodesistemasnebulosos[7RobertJMarks,1994].
A lgica nebulosa baseada na teoria dos conjuntos nebulosos. Esta uma
generalizaodateoriadosconjuntostradicionais(ouclssicos)afimdeestenderalimitada
classificaoverdadeirooufalsodalgicaclssica.Tradicionalmente,umaproposio
lgica tem dois extremos: completamente verdadeiro ou completamente falso.
Entretanto,nalgicanebulosa,umapremissavariaemgraudeverdadede0a1,oqueleva
aserparcialmenteverdadeiraouparcialmentefalsa[1Driankovetal.,1995].
Em1974,oProf.Mamdani,doQueenMaryCollege,UniversidadedeLondres,aps
inmerastentativasfrustradasemcontrolarumamquinaavaporcomtiposdistintosde
controladores,incluindooPID,somenteconseguiufazloatravsdaaplicaodocontrole
nebuloso[7RobertJMarks,1994].
Esse sucesso serviu de alavanca para muitas outras aplicaes, como em 1980, no
controlenebulosodeoperaodeumfornodecimento.Vieramemseguida,vriasoutras
aplicaes,destacandose,porexemplo,oscontroladoresnebulososdeplantasnucleares,
refinarias,processosbiolgicosequmicos,trocadordecalor,mquinadiesel,tratamentode
guaesistemadeoperaoautomticadetrens[5WitoldPedrycz,1993].
Estimuladospelodesenvolvimentoepelasenormespossibilidadesprticasdeaplicaes
que se apresentaram, os estudos sobre sistemas nebulosos e controle de processos
avanaramrapidamente,culminandocomacriaoem1984,daSociedadeInternacionalde
Sistemas Nebulosos, constituda, principalmente, por pesquisadores dos pases mais
avanadostecnologicamente[6ToshiroTeranoetal.,1994].
OssistemasnebulososforamamplamenteignoradosnosEstadosUnidosporqueforam
associados com inteligncia artificial, um campo que periodicamente se obscurecia,
resultandonumafaltadecredibilidadeporpartedaindstria.Apropsitodisto,eapenasa
ttulodeilustrao,maisde30%dosartigosathojepublicadossodeorigemjaponesa.
11

Os japoneses no tiveram este prejuzo; o interesse em sistemas nebulosos foi


demonstrado porSeijiYasunobu eSojiMiyamoto da Hitachi, queem 1985apresentou
simulaes que demonstraram a superioridade de sistemas de controle nebuloso para a
estradadeferrodeSendai;suasidiasforamadotadasesistemasnebulososforamusadas
paracontroledeacelerao,frenagem,eparada,quandoalinhafoiinauguradaem1987[1
Driankovetal.,1995].
Outroeventoem1987ajudouapromoverointeresseemsistemasnebulosos:durante
umencontrointernacionaldepesquisadoresdecontrolenebulosoemTquionaqueleano,
TakeshiYamakawademostrouousodetaltcnica(atravsdeumconjuntossimpleschips
nebulososdedicados)emumexperimentodeumpnduloinvertidoumproblemaclssico
de controle em que um veculo tenta manter um poste montado no seu topo por uma
dobradiaverticalcommovimentosdeidaevolta.
Observadoresficaramimpressionadoscomestademonstrao,comotambmcomos
experimentosdeYamakawaemqueelecolocouumcopocontendoguaouatmesmoum
rato vivo no topo do pndulo; o sistema manteve estabilidade em ambos os casos.
Yamakawaeventualmentefoiorganizandoseuprpriolaboratriodepesquisasdesistemas
nebulososajudandoaexplorarsuaspatentesnocampo[6ToshiroTeranoetal.,1994].
Seguindo semelhantes demonstraes, os japoneses se entusiasmaram com sistemas
nebulosos,desenvolvendotantoaplicaesindustriaiscomoaplicaesparaconsumo;em
1988elescriaramoLaboratrioInternacionaldeEngenhariaNebulosa,umacooperativa
quecompreendia48companhiasparapesquisanestecampo[7RobertJMarks,1994].
Bensdeconsumojaponeses incorporamextensamentesistemasnebulosos.Trabalhos
comtaissistemastambmumprocedimentonosEUAeEuropa,entretantonocomo
mesmoentusiasmovistonoJapo[1Driankovetal.,1995].
Em1995Maytagintroduziuumamquinadelavarpratosinteligentebaseadoemum
controladornebulosoeumonestopsensingmodule quecombinaumtermistor(para
medidadatemperatura),umsensorcondutivo(paramedironveldedetergenteatravsdos
onspresentesnagua),umsensordeturvaoquedifundemedidaquetransmiteluzpara
medirasujeiranalavagem,eumsensormagnticoparalerataxadegiro(rotao).O
sistemadeterminaumaotimizaonociclodelavagemparaqualquercarga,afimdeobter
osmelhoresresultadoscomomnimodeenergia,detergente,egua[8IanS.Shawetal.,
2001].
Pesquisaedesenvolvimentoestoemandamentoemaplicaesnebulosasemprojetos
de software e de hardware (com chips dedicados que implementam controle nebuloso),
incluindoaintegraodelgicanebulosacomredesneuraisecomalgoritmosgenticos,
dandoorigemaoschamadossistemashbridos,comoobjetivodeconstruirsistemasque
fornecem o melhor de cada uma destas tcnicas. Dentre as tcnicas de controle mais
promissoras,queacreditase,substituiroocontroladorPIDclssico(queaindaomais
12

utilizadonaindstria),destacamseoscontroladoresnebulososadaptativoseossistemas
hbridos,quecombinamcontrolenebuloso,redesneuraisaplicadasaocontroleealgoritmos
genticos[7RobertJMarks,1994].

1.1Motivaoejustificativa
NoJapo,omercadodeeletrodomsticoscomcontrolenebulosojbilionrio,eexiste
uma grande tendncia na Europa e nos Estados Unidos de grande crescimento deste
mercadodeeletrodomsticosinteligentesnosprximosanos.Alavadoraderoupasde1
sboto,quecalculaautomaticamenteaquantidadedeguaesaboaserutilizadoparase
obtermximaeficincianalavagem,degrandesucesso noJapo,umexemplodisto.
Eletrodomsticos com controle nebuloso tornaramse sinnimo de sofisticao e alta
tecnologia[1Driankovetal.,1995].
Vriosaspectostornaminteressantesparaoconsumidorousodeumtermostatodigital
no sistema de chuveiro residencial. Tal sistema pode proporcionar um aumento na
qualidadedevidadousurio,poisaexperinciadetomarumaduchatornasemaisprticae
agradvel,principalmenteparaidososoupessoasportadorasdenecessidadesespeciais.A
possibilidade de segurana contra queimaduras acidentais em crianas tambm um
diferencial.NosEstadosUnidosacontecemcercade3800ferimentose34mortesporano,
devidoaacidentesenvolvendotemperaturaelevadadaguadochuveiro [U.S.Consumer
ProductSafetyCommission: www.cpsc.gov]. Apossibilidadedeinterromperofluxode
gua (e retornlo com facilidade) para ensaboarse durante a ducha, pode evitar o
desperdciodegua,eassimincentivarumautilizaoecologicamentecorretadochuveiro.
Finalmente,talsistemaoferecesofisticaoemodernidadeparaousurio,eumpassorumo
residncia inteligente, tendncia de automao residencial, na qual todos os
componentesdaresidnciautilizadospelomoradorsocomputadorizados.

1.2Objetivos
Oobjetivodestetrabalhofoidesenvolverumcontroladornebulosoparaaregulagem
automticadatemperatura(cujovalordesejadofornecidopelousurio)edavazo(cujo
13

valorfornecidode1,2ou3)daguaemchuveiros,instaladoseminstalaeshidrulicas
residenciais tpicas, com fornecimento de gua fria e quente por meio de tubulaes
distintas(isto,comsistemadeaquecimentocentral).Osistemadecontrolefoiprojetado
parapossuirasseguintescaractersticas:

ajusteautomticodatemperatura
ajusteautomticodavazo
possibilidadedealteraratemperaturadesejadacomosistemaligado
possibilidadedealteraravazodesejadacomosistemaligado
sensibilidadeperturbaesexternas(exemplo:variaesnapressodastubulaes)

Este trabalho utilizou conceitos bem estabelecidos de controle nebuloso para o


desenvolvimentodeumcontroladorautomticodetemperaturaevazoemchuveirosde
instalaeshidrulicasresidenciais.Isto,nofoiobjetivodestetrabalhoodeapresentar
tcnicasinovadorasdecontrole.
Apesardosistemaapresentadonoserpotencialmenteinstvel,nofoiobjetivodeste
trabalhoodeestudarougarantirsuaestabilidade.
Umpontoimportanteaserressaltadoqueomaterialtericonestedocumentono
possui carterdidtico,e apresentado apenascomo referncia.Nofoiobjetivodeste
documentoabrangertodososconceitosrelativosteoriadeconjuntos,lgicanebulosae
suasaplicaesemengenhariadecontrole.Osconceitosapresentados,deformaresumida,
tmointuitodeapenasapresentaraoleitorconceitosbsicossobreateoriautilizadano
desenvolvimentodesteprojeto.Maioresinformaessobreoassuntoobrigaleituramais
aprofundadadabibliografia.

1.3Metodologia
ApesquisabibliogrficafoirealizadanabibliotecadeEngenhariaEltricadaEscola
Politcnica,ondediversoslivrosreferentesalgicanebulosaecontrolenebulosoforam
consultados.Naopiniodosautores,omelhorlivrodisponvel(omaiscompleto,didticoe
matematicamenterigoroso)nabiblioteca[1Driankovetal.,1995].Amaiorpartedesta
monografiasebaseiaemidiasextradasdestelivroede[3ZhiqiangGaoetal.].Todasas
outrasbibliografiasforampuramentecomplementaresnaelaboraodestetrabalho.

14

Diversastcnicasforamutilizadasnodesenvolvimentodestetrabalho.Fluxogramaspara
descreverosalgoritmosutilizadosediagramasdecasodeusoparadescreverasinterfaces
homemmquina foram elaborados. Foram utilizadas tcnicas de programao para o
microcontrolador 8051 e seus perifricos, utilizando o paradigma de programao
estruturadanalinguagemC.TcnicasdegeraodeondasPWMparaocontroledemotores
DCtambmforamutilizadas.
Nodesenvolvimentodosoftwarefoiutilizadoomtodo topdown. Primeiramenteo
sistema foidefinidode umaforma geral,especificandoseasentradase assadas.Este
sistemafoientodivididoemsubsistemas(interfacehomemmquina,controlador,etc)
que por sua vez tambm foram divididos em sistemas menores e assim por diante. Os
sistemas resultantes foram desenvolvidos e testados separadamente. Finalmente estes
pequenossistemas,oumdulos,foramagregadoscomodesenvolvimentodeummdulo
queorquestratodoseles,nolaoprincipaldoprograma.
Osconceitosdotradicionalciclodedesenvolvimentodesoftwareemcascata(waterfall
process)foramutilizados,poisaestruturageraldosoftwareeradebaixacomplexidade.Isto
,depoisqueoscomplexosalgoritmosdecontroleforamprojetados,aimplementaodo
softwarefoibastantesimples,poisenvolviapoucosmdulos.Osseguintesprocessosforam
realizadosduranteodesevolvimento:
1.
2.
3.
4.
5.

Anlisedosrequisitos
Projeto
Programao
Testes
Documentao

Estas etapas foram seguidas ciclicamente durante o desenvolvimento. Assim, a


documentaofoicontinuamentesendoalteradaduranteosciclos.

1.4Estruturadotexto
Estetrabalhodivideseemseiscaptulos:ocaptulo1descreveotemadestetrabalho.O
captulo 2 trata dos conceitos bsicos da teoria dos conjuntos, de lgica nebulosa e de
controle nebuloso, descrevendo de forma sucinta aspectos relevantes para o projeto e
implementaodecontrolodadoresnebulosos.Ocaptulo3tratadadefiniodoproblema,
15

ondesodescritasconsideraessobreasinstalaeshidrulicas,funesdetemperaturae
regulagem manual do sistema. O captulo 4 trata da descrio funcional do sistema,
detalhando as abordagens utilizadas e suas funcionalidades. O captulo 5 descreve o
prottipo desenvolvido e o resultado dos testes. O captulo 6 conclui o trabalho com
consideraes quanto ao cumprimento dos objetivos propostos, dificuldades no
desenvolvimentodotrabalhoesugestesdedesenvolvimentosfuturos.

16

Captulo2FundamentosTericos
Nossistemasdecontroleemengenhariaexistemduasfontesimportantesdeinformao:
sensoreseespecialistas.Ossensoresfornecemmedidasnumricasdevariveisdosistema,
representadaspornmeros.Osespecialistasporsuavez,forneceminstrueslingsticase
descries sobre o sistema, por meio de palavras, como por exemplo pequeno, muito
pequeno,mdio,grande,etc.
Daevidenteimportnciadoconhecimentolingsticodeespecialistasedadificuldade
deimplementlosdeformasistemticaemsoluesdecontroleemengenharia,surgiuo
conceitodesistemaespecialista.Oconceitodesistemaespecialistaaplicadoaocontroleem
malhafechadapode
serdefinidocomosegue[1Driankovetal,1995]:
Umsistemaespecialistaparacontroleemmalhafechadaumsistemadecontroleque
melhoraodesempenho,aconfiabilidadeearobustez docontrole,incorporandoao
sistemaoconhecimentoquenopodeseracomodadonomodeloanalticoemqueo
projeto de um algoritmo de controle baseado. Este conhecimento geralmente
incorporadonaformadeoperaomanualdosistema,ouporalgumaoutraforma
heurstica.
Umcontroladornebuloso,queumtipodeimplementaodeumsistemaespecialista,
utiliza um artifcio matemtico, conhecido como lgica nebulosa, para traduzir o
conhecimentolingsticodeespecialistas emvariveisnumricas,eassimpossibilitar o
controledosistema.Aimportnciadetalcontroladoradvmdaimpossibilidadedetais
conhecimentos lingsticos serem descritos na forma de parmetros PID ou atravs de
equaesdiferenciais,isto,daimpossibilidadedosistemasermodeladomatematicamente.
Emumcontroladornebuloso,taisconhecimentoslingsticossofornecidosnaformade
regrassituao/ao,comoporexemplo:
Seapressoestiveraltaeaumentandodeformalenta,entoaforanegativaede
grandezamdia.
Osistemadecontrolenebulosopodeservistocomoumcasoparticularderedeneural[2
LiXinWang,1994],podendoportantoserotimizadoonline,comagrandevantagemdea
redejestarinicialmente"treinada"comconhecimentolingstico.

17

Alm disto, o sistema de controle nebuloso um aproximador universal, eportanto


qualquerfunocontnuaenolinearpodeserdescritaatravsdeumnmerofinitode
regras[1Driankovetal,1995].

2.2Fundamentosdelgicanebulosa
2.2.1Conjuntosclssicos
Nateoriaclssicadeconjuntosasduasformasusuais dedefinirumconjuntosoade
enumerar seus elementos e a de usar um predicado P x , que significa que todo
elementodoconjuntotemapropriedade P .Umaoutraformadedefinirumconjunto
clssicopormeiodeumafunodepertinncia A ,comosegue:
Definio:
A : X [0,1] umafunodepertinnciadoconjunto A se,esomentese

paratodo x X

A x =

1 , se x pertence a A
.
0 , se x no pertence a A

Attulodeexemplo,seja A ocojuntodetodososnmerosmpares.Ento A
igual a 1 para todos os mpares e igual a zero para todos os pares, isto ,
A N =N mod 2 .
Comestafunodepertinncia,possvelredefinirasoperaes"complementao",
"interseo"e"unio",comosegue:

Complementaode A ,ou A : A x =1 A x

Interseode A e B ,ou AB : AB x=min A x , B x

Uniode A e B ,ou AB : AB x=max A x , B x

18

A escolha destas funes arbitrria, contanto que o valor de retorno, de 1 ou 0,


conforme a propriedade da operao, seja mantido. Por exemplo, a propriedade que a
operaodeinterseodeveteraderetornar1seambososargumentoforemiguaisa1e
retornarzerocasocontrrio.Afuno min satisfazessapropriedade,masexistem
muitasalternativas.
Nateoriaclssicadeconjuntostaisfunestmpoucautilidadepoisovalorderetorno
igualparatodas.Noentanto,nateoriadeconjuntosnebulosos,taisfunesadquiremum
significadomaisimportante.

2.2.2Conjuntosnebulosos
Nateoriaclssicadeconjuntos,seja u umelementododomnio U eseja C um
conjuntoarbitrriocontidoem U .Ento,exclusivamente uC ou uC .Nateoria
de conjuntos nebulosos esta propriedade generalizada, de forma que se tivermos um
conjuntonebuloso F ,nonecessrioquesetenhaexclusivamente u F ou uF .
De forma semelhante definio do conjunto clssico por meio de uma funo de
pertinncia, um conjunto nebuloso definido atravs de uma funo de pertinncia
estendida,daseguinteforma.
Definio:
Afunodepertinncia F deumconjuntonebuloso F afuno
F : U [0,1] .

Entocadaelemento u de U possuiumgraudepertinncia F u pertencentea


[0,1] .
F completamentedeterminadopeloconjuntodetuplas
F={ u , F u : u U } .

Exemplo:
Suponhaquealgumqueiradefinirumconjuntodenmerosnaturais"pertode6".
Talconjuntopodeserexpressopor
19

6 = { 3, 0.1 , 4, 0.3 , 5, 0.6 , 6, 1.0 , 7, 0.6 , 8, 0.3 , 9, 0.1 } .

Afunodepertinnciadesteconjuntonebulosopodeserexpressapor
6 x =

1
2

1 x6

2.2.3Operaesemconjuntosnebulosos
Asoperaessobreconjuntosnebulosospodemserdefinidasestendendose
asoperaesclssicas,conformeasdefiniesaseguir:
Definio:
Doisconjuntosnebulosossoiguaisse,esomentese
x S : A x = B x .

Definio:
A umsubconjuntode B ( AB )se,esomentese
x X : A x B x .

Aoperaodeinterseo,definidacomonormatriangularouTnorma,satisfazasseguintes
propriedades:
T1: ab = ba
T2: ab c = abc
T3: ac e bd ab cd
T4: a1 = a

20

Aoperaodeunio,definidacomoconormatriangularouSnorma,satisfazasmesmas
propriedadesdainterseo,excetoaltima,quesubstitudapor
S4: a0 = a
Aoperaodecomplementao c satisfazasseguintespropriedades:
c1: c 0 = 1
c2: ab c a c b
c3: c c a = a
Estastrsimportantesoperaesestoresumidasaseguir.

Interseo: x X : A B x = A x B x

Unio: x X : A B x = A x B x

Complementao: x X : A x = c A x

Asoperaesmaiscomumenteusadasemaplicaesdecontrolesoasseguintes:

Interseo: min A x , B x

Unio: max A x , B x

Complementao: 1 A x

2.2.4Variveislingsticaseregrasdeinferncia
Na matemtica, geralmente as variveis assumem valores numricos. Em aplicaes de
lgica nebulosa, variveis no numricas so usadas. Estas variveis so denominadas
variveis lingusticas, e so usadas para facilitar o equacionamento de regras. Por
exemplo,avarivellingusticaerropodeapresentarosvaloreslingusticospequeno,
zerooumuitogrande.
21

Comestasvariveislingusticaseseusrespectivospossveisvaloreslingusticos,podese
definirregrasdeinferncia,naformadeparescondioao,quepodemserdiretamente
extradasdeconhecimentodeoperadoreshumanos.
Asregrasgeralmenteassumemaseguinteforma:
IF VL1 IS x 1 AND VL 2 IS x 2 AND ... VL n IS x n THEN VLC IS y c

ondeos VLi sovariveislingusitcas(erro,temperatura,presso,etc)eos x i


sovaloreslingusticos(muitoalto,muitopoucofrio,levementeforte,etc).
VLC e y c denotam a varivel lingustica e valor lingustico, respectivamente, do

consequente. Isto , do valor sendo controlado (variao da fora aplicada, posio do


motor,etc).
Porexemplo,umcontroladordefreioABSpodeconteraseguinteregra:
IFTemperaturaISquenteANDVelocidadeISbaixa
THENVariaodapressodofreioISsutilmentebaixa.

importantenotarquenoexisteaexpressoELSE.Todasasregrassotestadas,porque
o erro pode ser grande e pequeno ao mesmo tempo, com graus de pertinncia
possivelmente(masnonecessariamente)distintos.

2.3Fundamentosdecontrolenebuloso
2.3.1Funesdepertinncia
Asfunesdepertinnciasodefinidasparaosvaloreslingusticos(umafunopara
cadavalor),atribuindograusdepertinncia(ougrausdeverdade),dadovaloresnumricos.
Por exemplo, dado a varivel lingustica erro, e seus valores lingusticos negativo
22

Grande, negativo Mdio, negativo Pequeno, Zero, positivo Pequeno, positivo


Mdio e positivo Grande, podese definir as funes de pertinncia apresentadas na
figura1,nointervalo ] ,[ :

Figura1:Exemplodefunesdepertinncia

Nesteexemplo,ovalornumrico3possuigraudepertinncia0,5parapositivoPequenoe
0,5parapositivoMdio.
As funes de pertinncia mais comumente usadas so triangulares, mas funes
trapezoidaisougaussianastambmpodemserusadas.

2.3.2Fuzificao
Afuzificaoconsistenomapeamentodosvaloresnumricosemgrausdepertinncia.
Paraisto,asfunesdepertinnciasousadas.Comoresultado,umdeterminadovalor
lingustico(porexemplo,oerro)terumgraudepertinnciaparacadavalorlingustivoa
eleassociado.
Porexemplo,apsafuzificaodovalornumricodeerrodevalor3,avarivellingustica
erropossuirosseguintesgrausdepertinncia:
{(negativoGrande,0),(negativoMdio,0),(negativoPequeno,0),(Zero,0),(positivo
Pequeno,0.5),(positivoMdio,0.5),(positivoGrande,0)}

23

2.3.3Mecanismodeinferncia
Estaaprincipalpartedeumsistemadecontrolenebuloso,quecombinaosfatosobtidos
dafuzificao(grausdepertinncia)comasregrasdeinferncia.
Dadaumaregranaforma

IF VL1 IS x 1 AND VL 2 IS x 2 AND ... VL n IS x n THEN VLC IS y c

elaserdisparadasetodasvariveislingusticas VLi possuremgraudepertinnciamaior


que1paraosrespectivosvaloreslingusticos x i .
Porexemplo,dadaaregra
IFTemperaturaISquenteANDVelocidadeISbaixa
THENVariaodapressodofreioISsutilmentebaixa.
elasomenteserdisparadaseovalordeTemperaturapossuirgraudepertinnciaem
quentemaiorque1,eovalordeVelocidadepossuirgraudepertinnciaembaixa
tambmmaiorque1.
Aindanestamesmaregra,supondosequeelasejadisparada,equeTemperaturapossui
graudepertinnciaemquenteiguala0.3,equeVelocidadepossuigraudepertinncia
em baixa igual a 0.5, por se tratar de uma operao AND entre dois conjuntos
nebulosos,aoperaodeinterseodeveserutilizada,isto,ovalormnimoentreosdois
grausdepertinnciaescolhido.
Desta forma, para cada regra disparada existir um valor entre 0 e 1, que pode ser
interpretadocomoopesoatribudoquelaregra.
Estepesoograudepertinnciadavarivellingusticadoconsequentedaregra,parao
valorlingusticorelacionado.
Usandooexemploanterior,ograudepertinncia0.3foiescolhido,eportantovarivel
lingusticaVariaodapressodofreioatribudoograudepertinnciaemsutilmente
baixaiguala0.3.
24

Noentanto,maisdeumaregrapodetercomoconsequenteovalorlingusticosutilmente
baixa,dandoorigemamaisdeumgraudepertinnciapossvel.Istoresolvidoutilizando
aoperaodeuniodeconjuntosnebulosos,ouseja,escolhendoseomaiorentreosgraus
depertinnciapossveis.
Portanto,apsodisparodevriasregras,avarivellingusticadoconsequenteterumgrau
depertinnciamximoparacadavalorlingustico,ouseja,umlimitesuperiorparaograu
depertinncia.
Utilizando ainda o mesmo exemplo, aps o disparo de vrias regras, poderiase ter os
seguinteslimitessuperioresparaosgrausdepertinnciadavarivellingusticaVariao
dapressodofreio:

VLC sup = { baixa , 0.6 , sutilmente baixa , 0.3 , zero , 0 , sutilmente alta , 0 , alta , 0 }

Cadavarivellingusticaestatribudaaumconjuntonebulosocontnuo(i.e.,funesde
pertinncia).Portanto,aoperaodeunio(mximo)sobretodoouniversodediscursoda
varivel lingustica d origem uma s funo de pertinncia, que assume os valores
mximosemcadapontodetodasasfunesdepertinnciadoconsequente.Estafuno
resultante pode ser vista como a unio (mximo) de todas as funes de pertinncia,
ceifadasnoscorrespondenteslimitessuperiores.

2.3.4Defuzificao
Esteconjuntonebulosocontnuo(uniodasfunesdepertinnciaceifadas)davarivel
lingusticadoconsequentedeveserdealgumaformatransformadoemumvalornumrico,
demodoquesepossatomarumaaotangvel.Atransformaodesteconjuntonebuloso
emumvalornumricoconhecidocomodefuzificao.
Utilizandoaindaoexemploanterior,esupondoqueasfunesdepertinnciabaixae
sutilmentebaixasotriangulares(eprovavelmentesesobrepem),oconjuntonebuloso
resultanteauniodafunodepertinnciatriangularbaixaceifadaem0.6comafuno
triangularsutilmentebaixaceifadaem0.3.Estafunodepertinnciaassumeosvalores
mximosdasduasfunesemcadaponto.
25

Adefuzificaopodeserobtidapeloclculodocentrodemassadestafunoresultante.
Referncia:[1Driankovetal.,1995]

26

Captulo3DefiniodoProblema
3.1Consideraessobreinstalaeshidrulicas
Algumas premissas sobre as instalaes hidrulicas residenciais foram consideradas
nesteprojeto.Considerousequeainstalaopossuiduastubulaes:umaparaguaquente
eaoutraparaguafria.Amisturadaguafriaedaguaquentedochuveiroconvencional
nestetipodeinstalaofeitapormeiodosregistrosdeguaquenteedeguafria,queso
chamadosdemisturadores.Esteajustedeterminaatemperaturaeavazodamisturade
gua. Tambmfoiconsiderado quecadaumadastubulaespossuiumacaracterstica
aproximadamentelineardevazoemfunodaaberturadosregistros,equeainstalao
talqueparaumdeterminadograudeaberturadoregistrodeguaquenteeumdeterminado
graudeaberturadoregistrodeguafria,atemperaturaconstantedecorridoumtempo
suficientementegrande tempo temperatura=constante .Outrahiptesefoideque
atemperaturadaguadochuveiro,resultantedamisturadaguafriaequente,funodo
graudeaberturadoregistrodeguaquente,dograudeaberturadoregistrodeguafriae
dotempo,epossuiasseguintescaractersticas:

nolinearemrelaoaograudeabertura(doregistroquenteoudoregistrofrio),
isto,umaumentodoregistrodeguaquentenonecessariamenteacarretaemum
aumentoproporcionaldatemperaturadagua,ouviceversa(videgrfico3ce3d);
no linear em relao ao tempo, isto , dada uma perturbao nas condies do
sistema, a temperatura se estabiliza em um novo valor decorrido um tempo
suficientementegrande,deformanolinearemfunodotempo(videgrfico3b);

Emumatpicainstalaohidrulicaresidencial,existeumainrciatrmica(atraso)da
guanochuveiro,devidoprincipalmentedistnciaatosistemadeaquecimentocentral,e
perdadecaloraolongodatubulao.
Isto resulta em um atraso na estabilizao da temperatura da gua do chuveiro. No
momentoemqueograudeaberturadealgumdosregistrosalterado,atemperaturada
guatendeaumcertovalor,comumaconstantedetempodependentedascaractersticasda
instalaohidrulica.Deacordocom[3ZhiqiangGaoetal.],umsistemadecontrolepara
umainstalaohidrulicacomoestapodesermodeladodeacordocomafigura2.

27

Figura2:Modelodesistemadecontrole

Onde C s representaocontroladore G ses representaainstalaohidrulica,


com uma funo de transferncia G s e uma constante de tempo , ambas
desconhecidas.bemsabidoqueinstalaesdestetipo,quepossuemumaconstantede
tempo desconhecida, so difceis de serem controladas [3 Zhiqiang Gao et al.]. Mais
detalhessobreaimpossibilidadedemodelarestesistemamatematicamentesodescritosno
captulo4.
Noquedizrespeitoaocomportamentodavazoemfunodaaberturadosregistros,as
presses nas tubulaes de gua fria e quente so geralmente diferentes, sendo que a
tubulaodeguafriageralmentepossuipressomaior.Istoresultaemcoeficienteslineares
diferentes (considerando comportamento aproximadamente linear) nas caractersticas de
vazoemfunodeaberturadoregistroparaasduastubulaes.

3.2Funotemperatura
Atemperaturadaguadochuveirodependedetrsvariveis:ograudeaberturado
registrodeguafria f [0,1] ,ograudeaberturadoregistrodeguaquente
q [ 0,1] eotempo t [ 0, [ .
Portanto,atemperaturafunode q , f e t ,epodemosescrever
temperatura = q , f ,t .

Comojfoivisto,aguadaduchapossuiumainrciatrmica(atrasotrmico),com
umaconstantedetempoquevariaparacadainstalaohidrulica.Almdisso,osensorde
temperaturatambmpossuiumatraso.

28

3.3Regulagemmanual
Umchuveiroconvencionalreguladodeformamanual,porumapessoaquecontinuamente
senteatemperaturainstantneadaguacomamoe,deacordocomatemperatura,decide
amagnitudedoincrementoaserexecutadonograudeaberturadoregistroquenteoudo
registrofrio.Oajustedecadaumdosregistrosgeralmentefeitoindividualmente,isto,
umdecadavez,alternadamente.Afigura3ilustraestasituao.

Figura3:Ajustemanualdosregistrosdeumchuveiro

Aregulagemmanualporumoperadorquejconheceascaractersticasdosistema
consideravelmentesimples,poiselejsabeaproximadamentequantodeveserograude
aberturadecadaregistro.Depoisdeabrirosregistroseesperarumcertotempoatquea
temperaturafiqueestvel,ooperadorfazoajustefinodatemperatura,ajustandodeforma
sutilosregistros.
Oajustefeitoporumoperadorquenoconheceascaractersticasdosistemamais
demorado,poiselenotemconhecimentodovaloraproximadodeaberturadosregistros.
Deformageral,esteoperadorirabrirosregistrosdeformacontnua,comvelocidadede
aberturagrande(i.e.incrementosdenaturezagrandeemintervalosdetempodiscretos),a
fimdetestararespostadatemperaturasobreosincrementos.medidaqueovalorda
temperatura se aproxima do valor desejado, o ajuste fica cada vez mais sutil (i.e. os
29

incrementossocadavezmenores).

3.4Oproblemadoajustedetemperatura
Este o problema central do projeto. O problema consiste em ajustar os graus de
aberturadosregistrosdeguaquenteedeguafriadetalformaqueatemperaturase
estabilizenumdeterminadovalordesejado(setpoint).
Osgrausdeaberturadosregistrosdevemsertaisqueovaloraoqualatemperatura
tende, deve ser igual ao valor desejado (setpoint). Idealmente, a caracterstica da
temperaturaemfunodotempodeveseaproximardovalordesejadodeformarpidae
suave.Afigura4ilustraogrficoidealparaumatemperaturaambienteinicialde22grau
Celsius, um valor desejado de 35 grau Celsius e um tempo de estabilizao de
aproximadamente15segundos.
Idealmente,estetempodeestabilizaodeveseromenorpossvel,detalmodoquea
respostadosistemasejamuitoprximafunodegrau.

Figura4:ComportamentoidealTemperaturavs.Tempo

Noentanto,devidoscaractersticasdosistemacontrolado(atrasoseperturbaes),a
30

temperatura controlada geralmente passa um pouco o valor desejado, devido inrcia


trmicadosistema.Istoconhecidocomosobresinal[4Ogata,2003].Assimqueoerro
computado, o controlador atua de forma a diminuir a temperatura, e mais uma vez, a
temperatura decrescente passa um pouco o valor desejado. Desta forma, o sinal da
temperaturaoscilaaoredordovalordesejadoe,emumsistemaestvel,tendeaestevalor
comopassardotempo.Afigura5mostraarespostadosistema(osinaldetemperatura
sendocontrolado),paraumvalordesejadode35grauCelsius.Notasequeoerrotendea
zero,equeatemperaturainicialde22grauCelsius.

Figura5:ComportamentotpicoTemperaturavs.Tempo

3.5OProblemadoajustedevazo
Considerandoashipteseslevantadassobreainstalaohidrulica,oajustedavazo
simples,poisavazopossuicaractersticaaproximadamentelinear,comcomportamento
crescentecomaaberturadosregistros.
Devidoscaractersticasdainstalaohidrulica,existemvriassoluesdeajustepara
umadeterminadatemperatura,ouseja,paraumvalordesejado(setpoint)detemperatura,
existeminfinitospares q , f deaberturadosregistrosdeguaquenteedeguafriaque
31

fazemcomqueatemperaturadochuveiroseestabilizenovalordesejado.
Noentanto,comoservistomaisadiante,ocontroladordetemperaturabuscaosvalores
mximos de q e de f que correspondem ao valor de temperatura desejado. Isto , a
prprianaturezadocontroladordetemperaturavisamaximizaravazo.Portanto,basta
limitar os valores mximos de q e de f em valores que correspondam aos nveis de
vazodesejados.Porexemplo,seforestipuladoqueavazodevesermxima(nvel3),os
valoresde q ede f nosolimitados.Masseporoutrolado,seavazodevesermdia
(nvel2),osvaloresde q ede f podemserlimitadosem,porexemplo,70%deseus
valoresmximosnominais.

32

Captulo4DesenvolvimentodaSoluo
4.1Introduo
Deacordocom [3ZhiqiangGaoetal.],agrandevantagemdocontrolenebulosoa
possibilidade de definir o controle por meio de expresses ligsticas simples, que so
deduzidasapartirdoconhecimentoheursticodecontroledoprocesso.Emboraousode
algoritmosgenticoseredesneuraispossamterumdesempenhoequivalente,emmuitos
casosocontrolenebulosopossuiavantagemdeformularasoluoparaoproblemaem
termosdevariveislingsticas,deumaformacompreensvelparapessoas,cujasregras
podemusaraexperinciadeoperadoreshumanos.Istofacilitaaautomatizaodetarefas
quejsomuitobemcontroladasporoperadoreshumanos.
Levandoseemcontaqueinstalaeshidrulicasresidenciaispossuem caractersticas
diferentes,equeocontroladordevefuncionarsemanecessidadedeajustesporpartedo
usurio(i.edevefuncionar"outofthebox"),eainda,queatarefadecontrolarosregistros
de gua quente e de gua fria perfeitamente realizvel por um operador humano, o
controladornebulosofoiescolhidocomoumasoluoeficazedebaixacomplexidadepara
a regulagem da temperatura em chuveiros de instalaes residenciais, cujo sistema de
aquecimentocentral(boilers,aquecedoresags,etc).

Nocaptulo3ummodeloclssicodecontroledetemperaturaeminstalaeshidrulicas
foiapresentado.Estemodeloestreproduzidonafigura6.

Figura6:Modelodesistemadecontrole

Deacordocom[3ZhiqiangGaoetal.],oquefazestemodeloparticularmentedifcilde
serconstrudooatrasoindeterminadodosistema.Ovalordeatraso, es ,representa
um deslocamento de fase de , onde a freqncia angular. Pequenos
deslocamentosemfreqnciasdeinteressepodemservistascomoperturbaes,epodem
serincorporadasemummodelosematraso.Umatrasoclassificadocomogrande,seo
33

atrasoafetademodosignificativoaestabilidadeeasmargensdefaseatalponto,queum
modelosematrasonosuficiente.
Comointuitodeconsiderargrandesatrasosnomodelomatemticodosistema,alguns
esquemas de compensao do atraso ou previso do atraso foram desenvolvidos, cujo
desempenhomuitodependentedosparmetrosparticularesdosistema[3ZhiqiangGao
etal.].Emparticular,nossistemascomatrasosgrandes,amaioriadossistemasutilizacomo
partedocontroladorummecanismodeprevisodosistema,comparmetrosparticulares
dados,comoporexemploaconstantedetempo.
Aindaassim,aimplementaodestesmecanismosdeprevisonoumatarefasimples,e
adiciona uma complexidade considervel s plantas mais simples. Esta complexidade
adicional destes sistemas, juntamente com o desempenho insuficiente para parmetros
desconhecidos, a principal razo de o modelo noprevisvel PID com mtodos de
otimizaocomoodeZieglerNichols'aindaserpredominantenaindstria,emsistemas
comatrasos[3ZhiqiangGaoetal.].
Assim,parasistemascomatrasos,emparticularaquelesemqueosparmetrosso
desconhecidos(emespecialaconstantedetempo),umatcnicadecontrolequeconsiga
obterumdesempenhoaceitvelnestascondiesdeveserutilizada.

4.2Arquiteturadosistema
Ohardwaredosistemapodeserdividoemduaspartes:hardwaredeinterfacecomousurio
e hardwaredecontrole.Aarquiteturageraldehardwaredosistemaestrepresentadana
figura7.

34

Figura7:Arquiteturageraldohardware

Deacordocomafigura,ousuriointeragecomumdisplayebotes,quesocontrolados
porummicrocontrolador.Omicrocontroladorporsuavez,recebeosinaldetemperaturade
umsensordetemperatura,quedigitalizadoporumconversorA/D.Osdriversdosmotores
depassorecebemcomandosdomicrocontrolador,paragirarosmotoresdepassoqueesto
mecanicamenteacopladosaosregistrosdegua.
Ohardwaredeinterfacecomousuriopossuiumpainelimpermevelcomdisplayde
cristal lquido e botes, que so controlados por um microcontrolador, enquanto que o
hardwaredecontrolepossuidoisregistrosdepresso(misturadores),acopladosaummotor
de passo cada um, um sensor de temperatura da gua cuja informao passada ao
microcontrolador atravs de um conversor A/D e dois drivers de motor de passo que
controlam a posio dos motores de passo, e que recebem informaes de controle do
microcontrolador.

35

Aarquiteturadosoftwarecontmdoisblocoseestilustradanafigura8.

Figura8:Arquiteturageraldosoftware

Oblocodeinterfacecomousuriocontrolaopainel,quecontmo display decristal


lquidoeosbotes.
Oblocodecontroledetemperaturaevazolosdadosdosensordetemperaturada
gua,processaestesdadosutilizandotcnicasdecontrolenebulosoecontrolaosatuadores.

Fluxograma

Ofluxogramadaestruturageraldosoftwareestapresentadonafigura9.

36

Figura9:Fluxogramageraldosoftware

Nolaoprincipal,primeiramentetodasasvariveissoinicializadas,easinterrupes
so habilitadas. Desta forma, sempre que ocorrer o estouro do timer ou um boto for
pressionado, as rotinas de tratamento de interrupo correspondentes sero executadas.
Enquantoosistemaestiverligado,ocontroledosregistrosexecutadoacadasegundo.
Existemduasrotinasdetratamentodeinterrupo.Aprimeiraocorresemprequeum
boto for pressionado. Neste caso, o boto pressionado detectado, e a funo
correspondenteexecutada(porexemplo,incrementodatemperaturadesejada).Asegunda
interrupoocorreacada0,01s(10ms),quedefineabasedetempodosistema.Sendo
assim,acadaocorrnciadestainterrupo,avariveltempoincrementadaem0,01.

37

4.3Hardwaredeinterfacecomousurio
Ohardwaredeinterfacecomousuriocompostopeloconjuntodebotesedisplay,que
estointegradosnopainel,epelomicrocontrolador,querecebeeemitesinaisparaestes
dispositivos.
Aarquiteturageraldohardwaredeinterfacecomousurioestilustradanafigura10.

Figura10:Arquiteturadohardwaredeinterfacecomousurio

Operao
Aoperaodopainelbastantesimpleseintuitiva.Ousurioajustaatemperatura
desejadaatravsdosbotesdeaumentoediminuiodatemperaturaetambmajustaa
intensidade (vazo) desejada atravs dos botes de ajuste da intensidade. O display
apresentaovalordesejadodatemperaturadagua,ovalormedido,otempodecorrido
desdeoligamentodosistema,aintensidade(1,2ou3)escolhidaeseosistemaestligado
(ON)oudesligado(OFF).
EmseguidaousuriopressionaobotoLIGA/PAUSAparaligarochuveiro.
Aqualquermomentoousuriopodealterarosajustesdetemperaturaedeintensidade
atravsdosbotesapropriados.
Quando o usurio terminar de usar o sistema, ou quiser interromper a ducha
temporariamente, o boto LIGA/PAUSA deve ser pressionado para pausar/desligar o
38

chuveiro.
Excees
Casoosistemanoconsigaatingirovalordesejadodatemperaturaaps120segundos,
umavisoapresentadonodiplay,eochuveiroimediatamentedesligado.
Ajustedatemperatura
Atemperaturadaguapodeserajustadaentre21grauCelsiuse46grauCelsius.
Ajustedaintensidade
Aintensidadedagua(vazo)podeserajustanosvalores1(fraca),2(mdia)ou3
(forte).

4.4Hardwaredecontrole
Ohardwaredecontroleestapresentadonafigura11.

Figura11:Arquiteturadohardwaredecontrole

Osistemapossuiumsensordetemperaturadagua(LM35),quecolocadoemcontato
39

diretocomaguaresultantedamisturadasguasquenteefria(i.e.guadaducha)
OsinaldetensodosensorlidopelomicrocontroladoratravsdeumconversorA/D.

Cadaumdosdoisatuadoressocompostosporummotordepasso,queacoplado
mecanicamenteaumregistrodepressode3/4(comumeminstalaeshidrulicas).Este
motor acionado por um driver de motor de passo que recebe comandos do
microcontrolador.

4.5Softwaredeinterfacecomousurio
Afigura12ilustraofuncionamentobsicodosoftwaredeinterfacecomousurio,que
bastantesimples.Sealgumbotoforpressionado,osoftwaredetectaobotopressionado,e
executaaaocorrespondente.Odisplayatualizadocontinuamentecomovalordesejado
datemperaturaecomovalormedidodetemperatura.

Figura12:Arquiteturadosoftwaredeinterfacecomousurio

Diversasfunesestodisponveisaousurio:oaumentoediminuiodovalor
desejadodatemperatura,oaumentoediminuiodovalordesejadodaintensidade
(vazo),eligaredesligar(pausar)osistema.

40

Ofluxogramadosoftwaredeinterfacecomousurioestilustradonafigura13.

Figura13:Fluxogramadosoftwaredeinterfacecomousurio

Osoftwaredeinterfacecomusuriobastantesimples.Obotoquefoipressionado
detectado,eafunocorrespondenteexecutada.Odisplayatualizadonolaoprincipal
doprograma.

41

4.6Softwaredecontrole
Utilizandoanomenclaturade[1Driankovetal.,1995],omecanismodeinferncia
nebuloso utilizado um FKBC (Fuzzy Knowledge Based Controller), tipo PI
(ProportionalIntegral),atuandocomoumDECS(DirectExpertControlSystem).
EmumcontroladorPIconvencional,avariveldecontroleasomadoerromultiplicado
porumfator K P somadointegraldoerromultiplicadaporumfator K I .
Ouseja,emumcontroladorPIconvencional,temse
u = K Pe K It edt ,onde u avarivelcontroladae e oerro.

Emalgumasaplicaes, u controladaincrementalmente,isto,atravsdesuataxade
variaode

du
dt

ReescrevendoaequaodocontroladorPIincremental,temse
du

de
= K P
K Ie
dt
dt

Paraocasodiscreto,queocasoquandosetemumcontroledigital,estaequaoescrita
daseguinteforma:
u k = K Pe k K Ie k

onde:
u k = u k u k1 oincrementorealizadonavarivelcontroladaentreosinstantes
discretos k 1 e k .
e k = e k e k 1 avariaodoerro,entredoisinstantesdiscretos k 1 e k .

EmumcontroladornebulosoPIdotipoincremental,oincrementodavariveldecontrole
42

entredoisinstantesdiscretosdadopor
u k = F e k , e k

onde F umafunonolinear,definidapelomecanismodeinferncianebuloso.

Osoftwaredecontrolepossuiumcontroladornebulosotipo PI,isto,asvariveisde
entradadocontroladorsooerro e eavariaodoerro e ,eassadassovariaesde
posiodosregistros.Oerroadiferenaentreovalordesejadodetemperatura(setpoint
de temperatura) e o valor da temperatura da gua lido pelo sensor de temperatura. A
variaodoerroadiferenaentreduasleiturasconsecutivasdoerro,numdeterminado
perododeamostragem.
Existemduassadasdecontrole, uQ e u F ,quesoasvariaesdaposiodos
registrosdeguaquenteefria,respectivamente.Umvalornegativodevariaoserefereao
sentidodefechamentodoregistro.
Aestruturageraldosoftwaredecontroleestesquematizadanafigura14.

Figura14:Arquiteturadosoftwaredecontrole

O primeiro bloco l o valor desejado de temperatura fornecido pelo usurio e a


temperaturaatualdaguafornecidapelosensor,ecalculaoerroeavariaodoerro.Estas
variveissopassadasaoprximobloco,queocontroladornebuloso.Esteblococalcula
43

asvariaesdaposiodosregistrosQ(quente)eF(frio).Oprximoblocolovalor
desejado de vazo fornecido pelo usurio (que pode ser 1, 2 ou 3), e as varies das
posiesdosregistros,ecalculaqualdeveserovalordaposiodosregistrosQeF.

4.6.1Arquiteturadocontroladornebuloso
AarquiteturadocontroladornebulosodotipoPI,eestesquematizadanafigura15.

Figura15:Arquiteturadocontroladornebuloso

Ocontroladornebulosoloerroeavariaodoerro,ecalculaasvariaesdasposies
dosregistros.

4.6.2Funesdepertinnciadocontroladornebuloso
Existemquatroclassesdefunesdepertinncia:asfunesdepertinnciadoerro,da
variaodoerro,davariaodaposiodoregistrodeguaquenteedavariaodaposio
doregistrodeguafria.
Todasasfunesdepertinnciasotriangulares(comexceodasfunesdeborda,que
so trapezoidais), pois a literatura mostra que alm da forma destas funes no
apresentarem grandes diferenas no resultado final neste tipo de controle em relao
44

funesmaisprecisas(gaussianasporexemplo),opodercomputacionalrequeridotambm
bastantereduzido[1Driankovetal.,1995].
Devesenotarquetodasfunesdepertinnciapodemassumirvaloresentre0e1(grau
depertinncia).
Estasquatroclassesdefunesestorepresentadasnasfiguras16a19.
Funesdepertinnciadoerro e :

Figura16:Funesdepertinnciadoerro

Funesdepertinnciadavariaodoerro e :

Figura17:Funesdepertinnciadavariaodoerro

Funesdepertinnciadavariaodaposiodoregistrodeguaquente uQ :
45

Figura18:Funesdepertinnciadavariaodaposiodoregistroquente

Funesdepertinnciadavariaodaposiodoregistrodeguafria u F :

Figura19:Funesdepertinnciadavariaodaposiodoregistrofrio

Obs: Para as funes de pertinncia das variveis uQ e u F (variaes de


posiodosregistros),aunidadedadaem%(porcentagemdovalormximo,iguala1).
Portanto,seporexemplo uQ = 7,3 (avariaodaposiodoregistrodeguaquente
deve ser de 7,3%) e Q k1 = 0,30 (a posio do registro de gua quente 30%, onde
Q[0,1] ) , ento a posio do registro quente passar a ser de
Q k = Qk1 uQ = 0,300,7 = 0,37 .

46

4.6.4Regrasdeinfernciadocontroladornebuloso
Asregrasdeinfernciasobaseadasnomodelopropostoem[1Driankovetal.,1995]
paracontroladoresnebulososdotipoPI,epossui49regrasparaocontroledo registro
quente,dispostasnoseguinteformato:
IF erro IS L k AND erro IS L k THEN uQ IS M k

onde erro , erro e uQ so as variveis lingusticas, e L k so os valores


lingusticosde erro ede erro (comojfoidescrito,oerroevariaodoerropossuem
asmesmasregrasdepertinncia,eportantoosmesmosvaloreslingusticos)e M k soos
valoreslingusticosde uQ .
Osvaloreslingusticos L k soosseguintes:

nG:negativoGrande
nM:negativoMdio
nP:negativoPequeno
Z:Zero
pP:positivoPequeno
pM:positivoMdio
pG:positivoGrande

Osvaloreslingusticos M k soosseguintes:

fB:fechaBastante
fP:fechaPouco
fS:fechaSutilmente
M:Mantm
aP:abrePouco
aS:abreSutilmente
aB:abreBastante

Devidoequivalnciaentreasregrasdocontroladordoregistroquenteedoregistro
47

frio,nofoinecessriocriardoismecanismosdeinfernciadistintos.Apenasomecanismo
deinfernciadoregistroquentefoiconstrudoe,pararealizarocontroledoregistrofrio,
usouseomesmomecanismo,pormcomavariaode uQ invertida.Isto,usouse
u F= uQ .

Basicamente,asregrasseguemosseguintesprincpios:
A. O erro igual diferena entre o valor desejado (setpoint) e o valor atual da
temperatura.Seoerroforpositivo,deveseatuarnoregistrodeguaquentedeformaa
abrlo,eatuarnoregistrodeguafriadeformaafechlo.Seoerrofornegativo,
devesefazerocontrrio.
B.Seoerroforgrande,aatuaonosregistrosdevesergrosseira,eseoerrofor
pequeno,aatuaodevesersutil.
C. Se a variao do erro (entre duas inferncias consecutivas) for grande, muito
provvelqueocorraumsobresinalmuitograndepoisavarivelcontroladaestse
aproximandomuitorapidamentedovalordesejado.Nestecaso,deveseatuardeforma
inversa(emrelaosregrasbaseadasnoerro)nosregistros,nosentidodecompensar
ouamenizarestabruscavariao.
As49regrasdocontroledoregistroquenteestolistadasabaixo:
01 IF erro IS nG AND erro IS nG THEN uQ IS fB

02 IF erro IS nG AND erro IS nM THEN uQ IS fB


03 IF erro IS nG AND erro IS nP THEN uQ IS fB
04 IF erro IS nG AND erro IS Z THEN uQ IS fB
05 IF erro IS nG AND erro IS pP THEN u Q IS fP
06 IF erro IS nG AND erro IS pM THEN u Q IS fS
07 IF erro IS nG AND erro IS pG THEN u Q IS M

48

08 IF erro IS nM AND erro IS nG THEN u Q IS fB

09 IF erro IS nM AND erro IS nM THEN uQ IS fB


10 IF erro IS nM AND erro IS nP THEN u Q IS fB
11 IF erro IS nM AND erro IS Z THEN u Q IS fP
12 IF erro IS nM AND erro IS pP THEN uQ IS fS
13 IF erro IS nM AND erro IS pM THEN uQ IS M
14 IF erro IS nM AND erro IS pG THEN uQ IS aS

15 IF erro IS nP AND erro IS nG THEN uQ IS fB

16 IF erro IS nP AND erro IS nM THEN u Q IS fB


17 IF erro IS nP AND erro IS nP THEN uQ IS fP
18 IF erro IS nP AND erro IS Z THEN uQ IS fS
19 IF erro IS nP AND erro IS pP THEN u Q IS M
20 IF erro IS nP AND erro IS pM THEN u Q IS aS
21 IF erro IS nP AND erro IS pG THEN u Q IS aP

22 IF erro IS Z AND erro IS nG THEN uQ IS fB

23 IF erro IS Z AND erro IS nM THEN uQ IS fP


24 IF erro IS Z AND erro IS nP THEN uQ IS fS
25 IF erro IS Z AND erro IS Z THEN uQ IS M
26 IF erro IS Z AND erro IS pP THEN u Q IS aS
27 IF erro IS Z AND erro IS pM THEN u Q IS aP
28 IF erro IS Z AND erro IS pG THEN uQ IS aB

49

29 IF erro IS pP AND erro IS nG THEN u Q IS fP

30 IF erro IS pP AND erro IS nM THEN uQ IS fS


31 IF erro IS pP AND erro IS nP THEN uQ IS M
32 IF erro IS pP AND erro IS Z THEN uQ IS aS
33 IF erro IS pP AND erro IS pP THEN u Q IS aP
34 IF erro IS pP AND erro IS pM THEN u Q IS aB
35 IF erro IS pP AND erro IS pG THEN u Q IS aB

36 IF erro IS pM AND erro IS nG THEN uQ IS fS

37 IF erro IS pM AND erro IS nM THEN uQ IS M


38 IF erro IS pM AND erro IS nP THEN u Q IS aS
39 IF erro IS pM AND erro IS Z THEN u Q IS aP
40 IF erro IS pM AND erro IS pP THEN uQ IS aB
41 IF erro IS pM AND erro IS pM THEN uQ IS aB
42 IF erro IS pM AND erro IS pG THEN uQ IS aB

43 IF erro IS pG AND erro IS nG THEN uQ IS M

44 IF erro IS pG AND erro IS nM THEN u Q IS aS


45 IF erro IS pG AND erro IS nP THEN uQ IS aP
46 IF erro IS pG AND erro IS Z THEN u Q IS aB
47 IF erro IS pG AND erro IS pP THEN uQ IS aB
48 IF erro IS pG AND erro IS pM THEN u Q IS aB
49 IF erro IS pG AND erro IS pG THEN u Q IS aB

50

Asregraspodemservisualizadasdeumaformamaiscompactanaseguintetabela:
erro

erro

nG

nM

pP

pP

pM

pG

nG

fB

fB

fB

fB

fP

fS

nM

fB

fB

fB

fP

fS

aS

nP

fB

fB

fP

fS

aS

aP

fB

fP

fS

aS

aP

aB

pP

fP

fS

aS

aP

aB

aB

pM

fS

aS

aP

aB

aB

aB

pG

aS

aP

aB

aB

aB

aB

Podesenotarqueosvaloresdatabelasosimtricosemrelaosduasdiagonais,que
estodestacadasnatabela.Istoocorreporqueaaoasertomadaparaumerronegativo
exatamenteaaosimtricaemrelaoaoerropositivo.Omesmoocorreparaavariao
doerro.Destamaneira,onmeroefetivoderegras,ouseja,onmeroderegrasobtidoaps
eliminaodetodasregrasquepossuemaessimtricas,desomente16.

4.6.5Fuzificao,infernciaedefuzificao
Osistemadecontrolenebulosopossuiasseguintescaractersticas:
funesdepertinnciatriagulares(Obs:paraoerroevariaodoerroasfunesde
pertinnciaso trapezoidaisnosextremos), comcrosspoint level iguala 0.5 e
crosspointratioiguala1
nmeroderegras:49
tipodeinferncia:maxminscaledindividualrulebasedinference
Tnorma:min(a,b)
defuzificao:CenterofSums(COS)
Parailustrarosprocessosdefuzificao,infernciaedefuzificao,apresentadoaseguir
umexemplo,utilizandoosvaloresmedidos erro = 6.4 erro = 2.1 .

51

Obs:Oexemploapresentadodocontroledoregistroquente.

a)Fuzificao
As funes de pertinncia do erro que possuem valor maior que zero para umerro de
entradaiguala6.4soasfunespositivoMdioepositivoGrande.Estasfunesassumem
osvaloresde0.4e0.6,respectivamente,paraumerroiguala6.4.Afiguraa20ilustraa
fuzificaodovalordeerroiguala6.4:

Figura20:Fuzificaodoerro

Paraavariaodoerro,asfunesdepertinnciaqueassumemvalormaiorquezeropara
umavariaodoerroigual2.1soasfunes negativoMdio e negativoPequeno. Os
valores assumidos por elas so de 0,05 e 0,95, respectivamente. A figura 21 ilustra a
fuzificaodavariaodoerro:

Figura21:Fuzificaodavariaodoerro

52

b)Inferncia
Asregrasafetadassoaquelasquepossuemnoantecedenteosvaloreslingusticospositivo
Mdio ou positivo Grande parao erro, e negativoMdio ou negativoPequeno paraa
variaodoerro.
Sendoassim,asseguintesregrassodisparadas:
37 IF erro IS pM AND erro IS nM THEN uQ IS M
38 IF erro IS pM AND erro IS nP THEN u Q IS aS

44 IF erro IS pG AND erro IS nM THEN u Q IS aS


45 IF erro IS pG AND erro IS nP THEN uQ IS aP

Deacordocomaregra37,olimitesuperiorde Mantm deveserovalormnimoentreo


valordepositivoMdiodoerroeovalordenegativoMdiodavariaodoerro.Isto,

min pM erro , nM erro = min pM 6.4 , nM 2.1 = min 0.4,0 .05 = 0.05

Sendoassim,paraaregra37,temos Mantm SUP = 0.05 .

Seguindoomesmoraciocnioparaasregras38,44e45,temos:
regra38: abre SutilmenteSUP = min pM 6.4 , nP2.1 = min 0.4,0 .95 = 0.4
regra44: abre SutilmenteSUP = min pG 6.4 , nM 2.1 = min 0.6,0 .05 = 0.05
regra45: abre PoucoSUP = min pG 6.4 , nP 2.1 = min 0.6,0 .95 = 0.6

Sehouvermaisde1valordelimitesuperiorparaalgumvalorlingusiticodoconsequente,
comonestecasoocorrecomovalorabreSutilmente,ovalormximoescolhido.
Ainferncianesteexemploforneceportantoosseguintesresultados:
53

Mantm SUP = 0.05


abre SutilmenteSUP = 0.4

abre PoucoSUP = 0.6

Isto significa que as funes de pertinncia resultantes da inferncia so as funes de


pertinnciaMantm,abreSutilmenteeabrePouco,ceifadasrespectivamenteem0.05,0.4,
0.6.
Noentanto,pelofatodomtododeinfernciaescolhidoserdotiposcaled, aoinvsde
seremceifadas,asfunesdepertinnciasomultiplicadas(scaled)pelosrespectivos
valores calculados de limite superior. Desta forma, a implementao um pouco
simplificada,eolimitesuperiordecadafunodepertinncianoalterado.
Afigura22ilustraasfunesdepertinnciaresultantes.

Figura22:Funesdepertinnciaresultantes

c)Defuzificao
Nadefuzificao,asfunesdepertinncia(ouosconjuntosnebuloscontnuos)resultantes
dainfernciasotransformadosemumvalornumrico.
OmtodoutilizadopararealizaradefuzificaoomtodoconhecidocomoCenterof
Sums(COS).Estemtodoligeiramentediferentedoclculodovalordaabcissadocentro
demassa.
54

Nomtododocentrodemassa,calculadoocentrodemassadafunodepertinncia
resultante da unio de todas as funes de pertinncia resultantes. Esta funo de
pertinnciaestilustradanafigura23.

Figura23:Defuzificaopelomtododocentrodemassa

NomtodoCenterofSums(oucentrodassomas),calculadoocentrodemassaaolongo
daabcissa,utilizandoacontribuioindividualparaocentrodemassadecadafunode
pertinncia. Isto , ao invs de calcular o centro de massa da unio das funes de
pertinncia,ocentrodemassadasomadasfunesdepertinnciacalculado.
Comoconsequencia,asregiesdeinterseoentreasfunesdepertinnciacontribuem
duasvezesparaoclculodocentrodemassa.
Afigura24mostraafunodepertinnciausadanestemtodo,queasomadasfunes
depertinnciaresultantesdainferncia.

Figura24:Defuzificaopelomtododocentrodassomas

55

Areaemcinzaclaroevidenciaadiferenaentreestafigura(soma)eafiguraanterior
(unio).
Ovalornumricode uq paraoexemplodadoestindicadonafigura,evale4.63.
Estevalornumricooresultadodadefuzificao,ecalculadodaseguinteforma:
uq =

U uf u du
U f u du

U u f 1 u duU uf 2 u du...U u f n u du
U f 1 u duU f 2 u du...U f n u du

= 4.63

onde U ointervalodeintegrao,de15a+15, u avariveldeintegraonoeixo


dasabcissas,e f u asomadetodasasfunesdepertinnciaresultantes.
Isto, f u = f 1 u f 2 u... f n u ,
ondeas f i u soasfunesdepertinnciaresultantesdainferncia.
Estemtodo,almdesermuitomaisrpidoqueomtododecentrodemassa,simplifica
muito a implementao, pois no preciso calcular a unio de todas as funes de
pertinncia.
Na implementao para o prottipo (veja o captulo C) as integrais do numerador so
calculada numericamente, e as integrais do denominador so simplesmente as reas de
tringulos(poisasfunesdepertinnciaresultantessotriangulares).

Afigura25resumeosprocessosdefuzificao,infernciaedefuzificao.

56

Figura25:Fuzificao,infernciaedefuzificao

57

4.6.6Fluxograma
Ofluxogramadosoftwaredecontroleestilustradonafiguraaseguir:

Figura26:Fluxogramadosoftwaredecontrole

Primeiramenteoerrocalculado.Emseguida,seosistemaacaboudeserligado,as
variveis das posies dos registros so inicializadas com os valores padro, e o
primeiroregistroasercontroladooconfiguradocomosendooregistroquente.Como
o sistema acaba de ser ligado, no h variao do erro, e por isto esta varivel
colocadaemzero.
58

Seosistemajestiveroperando,avariaodoerrocalculada,levandoemcontao
erroatualeoerroantigo.Avariveldevariaodoregistroquente(delta_u_quente)
calculada utilizando o algoritmo de inferncia nebulosa (chamando a funo
inferencia_nebulosa).Emseguida,oregistroquenteouofrioajustado,dependendodo
valordavarivelregistro_controlado,que contmainformaodequalregistroest
sendocontrolado.Emseguida,asfunesqueenviamasinformaesodeposiodos
registrosaosdriversdosmotoressochamadas.Nestaschamadasdefuno,avarivel
fator_vazo,quepossuivalorespossveisde0.5, 0.75ou1,estabeleceumfatorde
escalaparaposiodosregistros,deacordocomaintensidadedesejada(1,2ou3).
Finalmente,seambososregistrosestiveremnovalormximo(100%),umatentativade
incrementonoregistroquentealteraocontroleparaoregistrofrio,eumatentativade
incrementenoregistrofrioalteraocontroleparaoregistroquente.
Afigura27demonstraumexemplodecontrole.

Figura27:Exemplodefuncionamentodocontroledosregistros

Nesteexemplodafigura,osistemaligadoeasposiesdosregistrosquenteefrioso
inicialmentede0%e100%,respectivamente.
Atemperaturamedidaestabaixodovalordesejado(i.e.aguaestmuitofria),eportanto
59

a posio do registro quente vai sendo incrementada. Aps vrias iteraes, o registro
quentecheganaposiomximade100%.Noentanto,atemperaturaaindacontinuaabaixo
dovalor desejado, e portanto o controle do registro trocado para o registro frio, que
comeaaserdecrementado.

4.7Funcionalidadesfuturas
Algumassugestesdemelhoriadoprojetoerecursosadicionaisquepoderiamviraser
incorporadasfuturamenteestolistadasaseguir.

Desligamentoautomticodeseguranaparaaprevenodeacidentesrelacionadosa
temperaturaselevadas.Seatemperaturadagua,porqualquermotivo,seigualarou
ultrapassar o valor de 48C (1 unidade abaixo do valor recomendado pelo U.S.
ConsumerProductSafetyComission),osistemadeverserdesligadoimediatamente.
De acordo com o rgo norteamericano U.S. Consumer Product Safety
Comission,umaexposiodeaproximadamente5minutosaumatemperaturade
49Cpodelevaraqueimadurasdeterceirograu.
Botes de memria de temperatura padro: diferentes pessoas podem definir
temperaturaspreferidascomosbotesdememria.
Tempodedesligamentoautomtico(timer)paraochuveiro,ajustvelpelousurio,
comointuitodeevitarodesperdciodegua.

60

Captulo5Prottipoetestes
Aconstruodeumprottipoparaumainstalaohidrulicaresidencialenvolveriao
projeto e construo de dois drivers de motor de passo (que efetuariam o controle de
posioangulardosmotores,dadasasposiesdesejadas),etambmoprojetomecnicode
acoplamentodestesmotoresaosregistrosdepresso(osregistrosquenteefrio),queseria
consideravelmentecomplexopoisestesrequeremumtorqueconsidervel.Almdisso,a
realizao de testes deste prottipo seria muito difcil de se realizar em um banheiro
residencial, pois no haveria fcil acesso equipamentos que normalmente s so
encontradosembancadasdetestedelaboratrios(fontesdealimentao,instrumentosde
medio,etc).
Tendoistoemvista,optouseporsimularumainstalaohidrulicaresidencial.Aoinvs
demotoresdepassoacopladosmecanicamentearegistrosdepresso,foramusadasbombas
deguacujasvazespodemserajustadasvariandoseatensodeentrada.Estasbombasj
seencontravamdisponveisnoLaboratriodeMicroprocessadoresdaEPUSP.Aanalogia
com uma instalao hidrulica residencial imediata. Se naquela devemos ajustar os
registrosparavariaravazodoquenteedofrio,noequipamentoutilizadoparaasimulao
devemos ajustar as tenses das bombas para variar asvazes. claro que a ordem de
grandezadasvazesencontradaseminstalaeshidrulicasresidenciaismuitomaiorque
asobservadasnesteequipamentoparasimulao,quepodeservistocomoumaminiaturade
umainstalaohidrulicareal.
Afigura28ilustraaanalogiaentreainstalaohidrulicaresidencialeoequipamento
utilizadonasimulao:

61

Figura28:Analogiaentreainstalaohidrulicaresidencialeoequipamentousadona
simulao

Noequipamentoutilizadonasimulao,aguaquentesugadapelabombaquente,de
umrecipientecontendoguaaquecida,eaguafriasugadapelabombafria,deum
recipientecontendoguanatemperaturaambiente.

5.1Hardware
Aarquiteturageraldohardwareestapresentadonafigura29.

62

Figura29:Arquiteturageraldoprottipoquecontrolaoequipamentousadonasimulao

Oprottipopodeserconsideradocomosendooconjuntodecompontentes{PC,Kit8051,
Conversor A/D, Sensor LM35}. J o equipamento usado na simulao da instalao
hidralica dado pelo conjunto de componentes {Resistncia, Recipientes, Mangueiras,
Drivers,Bombas,ConectorY}.
Comopodeservistonafigura,ousuriointeragecomumPC,peloqualenviacomandose
recebedadosdoprocesso.Ousuriopodetambmvisualizaralgunsdadosdoprocessono
displaydokit.
Aresistnciaeltrica(queligadaem220Vac)aqueceaguadorecipientedeguaquente,
quesugadapelabombaQ.JabombaFsugaguadorecipientedeguafria(temperatura
ambiente).Paratransportaragua,sousadasmangueirasdeplstico.
Osdriversdasbombas(quesoligadosem+5Vdce+24Vdc)permitem(atravsdesinais
PWMvindosdomicrocontrolador)variarastensesaplicadasnasbombas,eassim,variar
asvazesdeguaproduzidaspelasmesmas.

63

5.1.1Resistnciaeltricaerecipientes
Paraaqueceraguanorecipientedeguaquente,foiutilizadaumaresistnciaeltricade
imerso,marcaDennex(www.dennex.com.br),compotncianominalde3000W,comtubo
decobre,comtensodeentradade220V.
Aresistnciaeltricapossuiumtermostatomecnicoacoplado,quefacilitaaregulagemda
temperaturadaguaemaproximadamente50grauCelsius.
Os recipientes usados so tanques de leo para compressores, com capacidade para 20
litros,comtubossoldadosemsuasbordas,parafailconexodasmangueiras.
Afigura30ilustraorecipientedeguaquente.

Figura30:Recipientedeguaquentecomresistncia

Orecipientedeguafriaanlogoaeste,eapenasnopossuiaresistncia.

5.1.2Kitdidticodo8051eseusperifricos
Paraaconstruodesteprottipo,foiutilizadookitdidticodisponvelnoLaboratriode
Microprocessadores da EPUSP. As funcionalidades/componentes do kit que foram de
64

interesseparaaconstruodoprottiposoasseguintes:

comunicaoserialRS232
2bitsdaportadigitalP1(P1.6eP1.7)
entradadoconversorA/D(conectadanosensorLM35)
displaydecristallquido

Programas podem ser enviados facilmente para a memria RAM da placa graas ao
programa monitor residente na ROM. Atravs de comandos no programa Monitor,
possvelenviarocdigoexecutvelparaumaregiodememriadaplacaeemseguida
executlo.
AcomunicaocomoprogramamonitorfeitaatravsdocanalRS232dokit.
O conversor A/D foi utilizado para ligar o LM35, tambm disponvel no material do
laboratrio.ComoconjuntoLM35+conversorA/Dpossvelleratemperaturadagua
comumaboapreciso(cercade+/1grauCelsius,deacordocomodatasheetdomesmo).
Odisplaydecristallquidoutilizadoparaapresentarosseguintesdadosdoprocesso:

temperaturadesetpoint
temperaturamedida
tempodecorrido
intensidade
estado(ligado/desligado).

Afigura31ilustraoscomponentesdeinteressedokit.

Figura31:Funcionalidadesdeinteressedokit

65

5.1.3Driversdasbombas
AsbombasnarealidadesomotoresDC,quefuncionamde12a24Vdc,comumacorrente
nominalde1A.AplacadriverdabombaumdriverdemotorDC,efuncionade6a24
Vdc,esuportacorrentesdeat5A.
EstaplacapossuitransistorestipoMOSFET,opticamenteisolados,quepodemchaveara
tensofornecidaplaca(quede+24Vdc)paraasuasada,queconectadanomotor.Ao
chavearestatensocomumaondaPWM,possvelregularatensomdianasada.Ao
regularatensomdianasada(queaentradadomotorDC),variaseavelocidadedo
motorDC,eassimcontrolaseavazoproduzidapelabomba.
EstasplacasdriverforamadquiridasnalojavirtualdecomponenteseletrnicosFuturlec
(http://www.futurlec.com).Ocdigodocomponente(partNr.)ETDCMOTOR,eele
denominadoOptoDCMotorController.
Afigura32ilustraasconexesdeinteressedestaplaca.

Figura32:ConexesdeinteressedodriverdemotorDC

Obs1:aplacapossuiumjumperquealternaentrecontrolemanualeremoto.Paracontrole
remotoporPWM,ojumperdevesercolocadonaposioCONTROL.
Obs2:aplacapossuiduasconexesdejumperparaescolheradireoderotaodomotor.
Com o jumper SWL acionado o motor gira em uma direo, e com o jumper SWR
acionado,omotorgiranadireocontrria.
66

5.2Software
Interfacecomousurioeaquisiodedados

Aoiniciaraexecuo,osoftwaredadigiduchaapresentaaseguintemensagemaousurio
peloterminalserial:
digiduchaTermostatodigitalparachuveiroscomaquecimentocentral
Comandos:
+:incrementaatemperaturadesejada
:decrementaatemperaturadesejada
>:incrementaaintensidade
<:decrementaaintensidade
1:liga
0:desliga

Comopodesernotado,aoinvsdebotescomofoipropostonoprojeto,oprottiporecebe
os comandos pelo terminal serial. Outra sutil diferena com relao ao comando de
LIGA/PAUSA.Noprottipoexisteumcomandoparaligareoutrocomandodistintopara
desligar o sistema, enquanto que no projeto proposto existia apenas 1 comando de
LIGA/PAUSA.
Noentanto,aoperaodestainterfacecomousurioanlogaquelaquefoiprojetada.
Oscomandosdomenuapresentadosointuitivoseautoexplicativos.
Ao ligar o sistema, o software apresentar no terminal serial a mensagem [Sistema
Ligado].Emseguidaseroapresentadososdadosdoprocesso,acadainferncia,isto,
aproximadamenteacada1segundo.
Otextoaseguirilustraumexemplo:
[SistemaLigado]
tempo=+001.00:Temperatura_setpoint=+035.00,Temperatura_medida=+027.45
erro=+007.54,delta_err=+000.00,delta_u=+009.63(Q)

67

potenciaQuente=+009.63,potenciaFrio=+100.00
tempo=+002.00:Temperatura_setpoint=+035.00,Temperatura_medida=+027.45
erro=+007.54,delta_err=+000.00,delta_u=+009.63(Q)
potenciaQuente=+019.27,potenciaFrio=+100.00

(...)

Destaforma,osdadosdoprocessopodemsercoletadosparaaelaboraodegrficos.
ControledasbombascomsinaisPWM
Comoatensodeentradadodriverdasbombasde+24Vdc,aoenviaraodriverumaonda
PWMcomumdutycycleentre45%e95%,obtmseumatensovarivelnasadado
driver (entrada do motor DC da bomba), de 0,4524 = 10,8 Vdc a
0,9524 = 22,8 Vdc .
Comoomotordabombafuncionade12a24Vdc,com10,8Vdcnaentradaomotor
praticamentenogira,ecom22,8Vdcnaentradaelegiraconsideravelmenterpido.
Paracontrolarasduasbombas,osoftwaredadigiduchageraduasondasPWM,umana
sadaP1.6(bombadeguafria)eaoutranasadaP1.7(bombadeguaquente).Asondas
possuemfrequnciade100Hzedevidoscaractersticasdotimerdomicrocontrolador,
paraestafrequncia,omaiornmerodedutycyclesdiferentes(entre45%e95%)possveis
paraumaondade
0,95 0,459216 = 4608 dutycyclesentre45%e95%.

Obs:9216onmerodeincrementosdotimerdo8051paraobterumtempodecorridode
0,01s(100Hz),dadoumafrequnciadeclockde11,0592Mhz.
Ouseja,cadabombapodeserajustadaem4608potnciasdiferentes,queumaresoluo
consideravelmentegrande(aproximadamenteequivalenteaumconversorD/Ade12bits).

MtododeobtenodasduasondasPWM

68

AsduasondasPWMpossuemfrequnciaconstantede100Hz,dutycyclesdistintos,que
podemvariarentre45%e95%.
Odutycyclevarivelalcanadovariandosecontinuamenteotempodeestourodotimer.
Attulodeexemplo,suponhaqueaondaPWM_Qdeveterumduty_cyclede57,3%,ea
ondaPWM_Fdeveterumdutycyclede78,1%.
Estado0:Inicialmente,aossinaisdasduasondasatribudoovalor'1'.Emseguidaotimer
configuradoparaqueseuestouroocorradaquia
0,5730,01 = 0,00573 segundos .

Estado1:Quandoocorreresteestouro,osinalPWM_Qcolocadoemzero,eoestourodo
timerreajustadoparaocorrerdaquia
0,781 0,5730,01 = 0,00208 segundos .

Estado2:Quandoocorreresteestouro,osinalPWM_Fcolocadoemzero,eoestourodo
timero
reajustadoparaocorrerdaquia
1 0,7810,01 = 0,00219 segundos .

Destaforma,quantoocorreresteestourovoltaremosaoEstado0,reiniciandoociclo.
Otempodecorridoem1ciclodeexatamente
0,005730,002080,00219 = 0,01 segundos ,

estabelendoumafrequnciade100Hzparaambosossinais.
Estespassosestoresumidosnafigura33.

69

Figura33:Geraodeduasondaspwmdistintas,defrequnciaiguala100Hz

5.3Resultados
Diversostestesforamrealizados.Optouseporapresentaraquiapenasosresultados
maisrelevantes.
Aps a realizao de muitos testes, notouse que o setpoint de temperatura foi
alcanadorapidamente(emaprox.30segundos)namaioriadasvezes,equeacurvade
temperatura apresentou um sobressinal consideravelmente baixo (no mximo +1 grau
Celsius).Apesardarpidaestabilizaodatemperatura,aestabilizaodaspotnciasdas
duas bombas (ou pela analogia feita, as posies dos registros) foi vagarosa (de 2 a 3
minutos).Noentanto,esteefeitojeraesperadodevidoadiversosfatoresqueperturbamou
atrasamosistema,taiscomoogradualaquecimentodamangueira,aimprecisodasbombas
eaaltainrcianotempoderespostadosensor.

70

Ogrficodafigura34apresentaoresultadodavariaodetemperaturacomotempo,
paraumtesterealizadocomumvalordesejadode35grauCelsius.

Figura34:Grficodatemperaturaemfunodotempo

Osegundogrficodeinteresseodaspotnciasdasbombas(poranalogia,asposies
dosregistros)emfunodotempo.Estegrficoestilustradonafigura35.

71

Figura35:Grficodaspotnciasdasbombasemfunodotempo

Apartirdogrfico35,notasequeinicialmenteapotnciadabombafriade100%,
enquantoqueapotnciadabombaquentedezero.Gradualmenteapotnciadabomba
quenteaumentada,atchegaremseuvalormximoe,apartirda,ocontrolepassado
bombafria,quedecresceataproximadamente40%eentoretornagradualmenteaseu
valor original, de 100%, momento no qual o contrle novamente trocado, desta vez
repassado bomba quente. A potncia da bomba quente ento gradualmente
decrementada,tendendolentamenteaumvalorestvel,prximode75%.
Aps200segundos,temsedoisvalorespraticamenteestveisdepotnciadasbombas,
sendoqueapotnciadabombafriaestem100%,eapotnciadabombaquenteestem
aproximadamente75%.

72

Captulo6ConsideraesFinais
Para projetar o controlador nebuloso proposto, os autores tiveram que estudar
minuciosamentevriosmtodosdecontrolenebulosodiferentes,atchegaraummtodo
que,aomenosnavisodosmesmos,maisseadequaaoproblema.
Apesardegraficamenteainferncianebulosaparecerumconceitobastantesimples,a
implementaodetalcontroladoremsoftwarebastantetrabalhosa.Comofoivistona
parte4.6.5,algunsmtodosalternativosdecontrolenebulosotiveramqueserpesquisados,
particularmenteaquelesquemaisseadequavamimplementaoemsoftware,taiscomoo
mtododecentrodassomasparaadefuzificaoaoinvsdomtododecentrodemassa.

6.1Quantoaocumprimentodosobjetivos
Todososobjetivosestabelecidosnaseo1.3foramalcanados:

oajusteautomticodatemperatura
oajusteautomticodavazo
possibilidadedealteraratemperaturadesejadacomosistemaligado
possibilidadedealteraravazodesejadacomosistemaligado
sensibilidadeperturbaesexternas(exemplo:variaesnapressodastubulaes)

Oajusteautomticodatemperatura,queoobjetivomaisimportantedestetrabalho,
estdemonstradonocaptulo5,naseodetestesrealizados.
Osobjetivosrestantestambmforamalcanadosdurantesasobservaesdostestes.Isto
,oscomandosdeinterfacecomousurioparaalteraratemperaturaeavazo, como
sistemaligado,funcionaramcorretamente.

73

6.2Quantoaodesenvolvimentoesuasdificuldades
Vrias dificuldades foram encontradas ao longo deste trabalho, principalmente
relacionadasahardware.Semdvidaamaiordificuldadenesteprojetofoicomrelao
interface entre o microcontrolador e os motores DC de alta corrente (bombas).
Primeiramente,haviasidopropostoummtodoparacontrolaratensonosmotorespor
meiodeamplificadoresdepotncia.Isto,oconversorD/Adomicrocontroladorforneceria
umsinalentre0e5Vaumamalhadeampops(LM741)queconverteriamestesinalpara
umsinalproporcionalentre4e8V.Comoltimoestgio,seriausadoumamplificadorde
potnciaparamultiplicarestesinalde4a8Vporumganhode3,resultandonumsinalde
12a24V,quepoderiaserligadonosterminaisdomotor,edrenarumacorrenteelevadapor
setratardeumamplificadordepotncia.Estaidiaestilustradanafiguraaseguir:

Figura36:Conversodeumsinalde0a5Vparaumsinalde
12a24V

Noentanto,apesardoestgiodebaixapotncia(oconversor05a48)terfuncionado
perfeitamente utilizando os ampops LM741, o estgio de potncia que foi construdo
utilizandooampopdepotnciaLM675(queinclusivetevedeserimportadoporserumCI
raro) no chegou a funcionar. Primeiramente, o erro estava em utilizar um ganho de
somente3paraesteampop(deformapoucoclaranodatasheetestdescritoqueesteCIs
funciona se ele fordispostocom resistores detal formaa ter ganhos maioresque 11).
Inmerostestesforamrealizadonolaboratrio,utilizandoaconfiguraoidnticaaoque
estdescritonodatasheetdomesmo,semsucesso.DepoisdeoCIsobreaquecerefalharpor
completo,estaidiafoiabandonada.
Estaidiafoientosubstitudaporoutramuitomaissimples,queutilizaumaplaca
driverdemotorDC.

74

Outradificuldadefoicomrelaoaosoftwaredoprottipo.Afunodetratamentode
interrupodotimerestavarealizandooperaesdepontoflutuante.Aparentemente,no
havianadadeerradocomocdigo,masosoftwarefalhavaconstantemente.Nomanualdo
compiladorSDCC,existeumavisoparanorealizaroperaesdepontoflutuantedentrode
funesdetratamentodeinterrupo(paraqueistosejapossvel,necessriorecompilar
algumaspartesdocompilador).Apsaremoodasoperaesdepontoflutuantededentro
dasrotinasdetratamentodeinterrupo,osoftwarefuncionouperfeitamente.
Outroproblemamenorfoitambmrelacionadoarotinasdetratamentodeinterrupo.
DeacordocomomanualdoSDCC,sevariveisglobaissomodificadasdentroderotinas
detratamentodeinterrupo,estasdevemserdeclaradascomovolteis(volatile),eo
acessoelasdeveseratmico.
Esteproblemafoifacilmenteresolvido,bastandoapenasdeclararasvariveisglobaiscomo
volatile.
Finalmente,umdosproblemasmaisincovenientesfoirelacionadoaosensorLM35.
Primeiramente, o LM35 utilizado foi totalmente encoberto por silicone para
impermeabilizlo.Noentanto,istoocasionouumainrciabastantegrandenotempode
respostadosensor.Isto,quandoemcontatocomguaquente,osensoracusavadurante
muito tempo a temperatura ambiente ainda. Com a lenta troca de calor entre o
encapsulamentodoLM35eosilicone,aleituradosensoraumentavamuitolentamente.
Asoluoadotadaenvolveuremovercompletamenteosiliconeedeixarpoucomaisda
metadedoencapsulamentoemcontatodiretocomagua,sendoquesomenteosconectores
doLM35esuabaseforamimpermeabilizadascomsilicone.Assim,comocontatodiretoda
guacomoencapsulamento,atrocadecalorentreesteltimoeaguaficoumaisrpida,
resultandoemumabaixainrcianotempoderespostadosensor.

6.3Concluses
Verificouse atravs dos testes que o mtodo de controle proposto neste trabalho
apresentou resultados satisfatrios, pois a temperatura desejada foi alcanada aps
aproximadamente40segundos.Assim,podeseconcluirqueestemtododevefuncionar
tambm para controlar registros de gua em sistemas hidrulicos residencias, com o
objetivodeestabilizaratemperatura.

75

Na opinio dos leitores, este trabalho no s forneceu um vasto e importante


conhecimentonareadelgicanebulosaedecontrolenebuloso,mastambmfoitilparao
aprendizado por experincia prtica de conceitos antes vistos apenas de forma muito
simplificadaemteoria,comoporexemploocontrolePWMdemotoresDC.

6.4Trabalhosfuturos
Osseguintestrabalhosfuturospoderiamviraserrealizados:

Desenvolvimentodeumprottiporeal(isto,paraumainstalaohidrulicareal),
commotoresdepassoacopladosaosregistrosdegua,assimcomofoiproposto
nestetrabalho
Estudo da influncia da alterao das funes de pertinncia no desempenho do
controlador
Compararaocomoutrastcnicasdecontrole
Especificaodemtodosparacalibraodosensor,paraqueatemperaturalidaseja
defatoatemperaturareal

76

ARefernciasBibliogrficas
[1Driankovetal.,1995]

AnIntroductiontoFuzzyControl
D.Driankov,H.Hellendorn,M.Reinfrank
SecondEdition,SpringerVerlag1995
[2LiXinWang,1994]

AdaptiveFuzzySystemsandControl
LiXinWang
FirstEdition,PrenticeHall,1994
[3ZhiqiangGaoetal.]

AStableSelfTuningFuzzyLogicControlSystemforIndustrialTemperatureRegulation
ZhiqiangGao,ThomasA.TrautzschandJamesG.Dawson
[4Ogata,2003]

TeoriadeControleModerno

KatsuhikoOgata
EditoraPearson,4aedio,2003
[5WitoldPedrycz,1993]

Fuzzycontrolandfuzzysystems
WitoldPedrycz
FirstEdition,1993

[6ToshiroTeranoetal.,1994]

Appliedfuzzysystems

ToshiroTerano,KiyojiAsai,MichioSugeno,1994
[7RobertJMarks,1994]

Fuzzylogictechnologyandapplications
RobertJMarks,1994
[8IanS.Shawetal.,2001]

Controleemodelagemfuzzy

IanS.Shaw,MarceloGodoySimes,2001

77

BBibliografiaAdicional
SDCCCompilerUserGuide
http://sdcc.sourceforge.net/doc/sdccman.html/

ManualdoKitDidticodo8051
DisponvelnoLaboratriodemicroprocessadoresdoPCS,EPUSP

ManualdoDriverOptoDCMotorController
Fabricante:ETT

DatasheetdoLM35
Fabricante:NationalSemiconductor
http://www.national.com/mpf/LM/LM35.html

PginawebdadisciplinaPCS2497LaboratriodeProcessadoresI
http://www.pcs.usp.br/~pcs2497/

PginawebdadisciplinaPCS2498LaboratriodeProcessadoresII
http://www.pcs.usp.br/~pcs2498/

Tutorialonlinedomicrocontrolador8051
http://www.8052.com/tut8051

FuzzyLogic:APracticalApproach
F.MartinMcNeill,EllenThro
FirstEdition,AcademicPress,1994

TheFoundationsofFuzzyControl
HaroldW.Lewis,III
FirstEdition,PlenumPress,1997

78

CCdigofontedoProttipo
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//

====================================
digiducha
Termostato digital para chuveiros com aquecimento central
====================================
Nome do arquivo: digiducha_v2.c
Versao: 2
Data: 30/12/2008
Obs1: oscilador de 11,0592 MHz
Obs2: para compilar para o kit do 8051, use o comando:
sdcc --xram-loc 0x8000 --code-loc 0xA000 <nome do arquivo>
====================================
Autor: Roberto Thiele (bob.thiele@gmail.com)
====================================

#include <8051.h>
// Constantes dos perifericos
// ===================
#define
#define
#define
#define

WCOMMAND 0x2000 // Endereco de escrita de comandos no display


WDATA 0x2010 // Endereco de escrita de dados no display
RSTATUS 0x2020 // Endereco de leitura de estado do display
RDATA 0x2030 // Endereco de leitura de dados do display

#define ADC 0x2200 // Endereco do conversor A/D (termometro)


#define PWM_Q P1_7 // Sinal PWM da bomba de agua quente
#define PWM_F P1_6 // Sinal PWM da bomba de agua fria
// Constantes do controlador nebuloso
// ========================
// abcissas das funcoes de pertinencia do
// erro e da variacao do erro (delta_erro)
#define E1 2
#define E2 4
#define E3 8
// abcissas das funcoes de pertinencia da
// variacao da variavel de controle u (delta_u)
#define U1 2.5
#define U2 5
#define U3 10
#define U4 15
// ganho do erro
// => aumente para aumentar o rise-time (e vice-versa)
#define Ne 1
// ganho da variacao do erro
// => aumente para diminuir o overshoot (e vice-versa)
#define Nv 1
// passo do calculo numerico das integrais na defuzificacao
// => quanto menor, mais preciso sera o calculo, porem
// tambem sera mais demorado
#define PASSO 0.1
#define DELTA 1 // Intervalo de tempo entre duas inferencias
#define SP_PADRAO 38.00 // Valor padrao do setpoint de temperatura
#define SP_MIN 22.00 // Valor minimo do setpoint de temperatura
#define SP_MAX 48.00 // Valor maximo do setpoint de temperatura
typedef unsigned char byte;
// Variaveis globais

79

// ============
__xdata volatile long int __tempo;
__xdata volatile float _tempo_k;
__xdata volatile float tempo_aux;
__xdata volatile float _dc_Q;
__xdata volatile float _dc_F;
__xdata
__xdata
__xdata
__xdata
__xdata
__xdata
__xdata
__xdata
__xdata

volatile
volatile
volatile
volatile
volatile
volatile
volatile
volatile
volatile

byte _N0_L;
byte _N0_H;
unsigned int _N0;
byte _N1_L;
byte _N1_H;
unsigned int _N1;
byte _N2_L;
byte _N2_H;
unsigned int _N2;

__bit _dc_menorQ;
__xdata volatile float _temperatura_setpoint;
__xdata volatile float _fator_pot;
__xdata volatile byte _ligado;
__xdata volatile byte _ligou;
__xdata volatile byte _tipo_inferencia;
// Dispositivos mapeados na memoria
// ========================
// Termometro mapeado em memoria
byte
far at @ADC adc;
// Display
byte
far
byte
far
byte
far
byte
far

mapeado em memoria
at @WDATA wdata;
at @RDATA rdata;
at @WCOMMAND wcommand;
at @RSTATUS rstatus;

// Declaracao das funcoes


//=================
// Inferencia ============================ >
float min(__xdata float x, __xdata float y);
float max(__xdata float x, __xdata float y);
float f_triangular(__xdata float x, __xdata float inicio, __xdata float meio, __xdata float fim);
float area_f_triangular(__xdata float altura, __xdata float inicio, __xdata float fim);
float integral(__xdata float fator_de_escala, __xdata float inicio, __xdata float meio, __xdata
float fim);
float nG(__xdata float x);
float nM(__xdata float x);
float nP(__xdata float x);
float Z(__xdata float x);
float pP(__xdata float x);
float pM(__xdata float x);
float pG(__xdata float x);
float inferencia_nebulosa(__xdata float erro, __xdata float delta_erro);
// < ====================================
// Perifericos ============================= >
void bomba_liga();
void bomba_desliga();
void bomba_potenciaQ(__xdata float potenciaQ);
void bomba_potenciaF(__xdata float potenciaF);
float termometro_leitura();
void
void
void
void
void
void
void

display_comando(byte cmd);
display_espera();
display_escreve(byte car);
display_escreveString(byte *string);
display_inicializa();
display_limpa();
display_linha(byte lin);

80

void
void
void
void
// <

terminal_escreve(byte dado);
terminal_escreveString(byte *string);
terminal_escreveNumero(__xdata float num);
terminal_novaLinha();
====================================

// Interrupcoes ============================ >


void interrupcao_inicializa();
void interrupcao_timer0() interrupt 1 using 2;
void interrupcao_serial() interrupt 4 using 3;
// < ====================================
// Conversao de numero para ASCII ============= >
float abs(__xdata float x);
byte centena(__xdata float x);
byte dezena(__xdata float x);
byte unidade(__xdata float x);
byte decimal1(__xdata float x);
byte decimal2(__xdata float x);
// < ====================================
// Interface com o usuario ===================== >
void iu_display(__xdata float temperatura_atual);
void iu_comando(byte cmd);
void iu_menu();
// < ====================================
//=======================================================
// Inferencia : Apoio aos calculos
//=======================================================
// Minimo entre dois numeros
float min(__xdata float x, __xdata float y)
{
if (x < y)
return(x);
else
return(y);
}
// Maximo entre dois numeros
float max(__xdata float x, __xdata float y)
{
if (x > y)
return(x);
else
return(y);
}
// Funcao de pertinencia triangular generica
float f_triangular(__xdata float x, __xdata float inicio, __xdata float meio, __xdata float fim)
{
if (x < inicio || x > fim) {
return(0);
} else if (x >= inicio && x <= meio) {
return((float) (x - inicio)/(meio - inicio));
} else {
return((float) (x - fim)/(meio - fim));
}
}
// Area sob uma funcao de pertinencia triangular
float area_f_triangular(__xdata float altura, __xdata float inicio, __xdata float fim)
{
return((float) ((fim - inicio)*altura)/2);
}
// Calculo numerico da integral do numerador da defuzificacao
float integral(__xdata float fator_de_escala, __xdata float inicio, __xdata float meio, __xdata
float fim)
{
__xdata float res = 0;
__xdata float j = inicio;
while(j < fim) {
res += 2*PASSO*(j + PASSO)*fator_de_escala*f_triangular(j + PASSO, inicio, meio,
fim);

81

j+= 2*PASSO;
}
return(res);
}
//=======================================================
// Inferencia : Funcoes de pertinencia
//=======================================================
// Funcao de pertinencia 'negativo Grande'
float nG(__xdata float x)
{
if (x > -E2) {
return(0);
} else if (x < -E3) {
return(1);
} else {
return((float) (x + E2)/(-E3 + E2));
}
}
// Funcao de pertinencia 'negativo Medio'
float nM(__xdata float x)
{
return(f_triangular(x,-E3,-E2,-E1));
}
// Funcao de pertinencia 'negativo Pequeno'
float nP(__xdata float x)
{
return(f_triangular(x,-E2,-E1,0));
}
// Funcao de pertinencia 'Zero'
float Z(__xdata float x)
{
return(f_triangular(x,-E1,0,E1));
}
// Funcao de pertinencia 'positivo Pequeno'
float pP(__xdata float x)
{
return(f_triangular(x,0,E1,E2));
}
// Funcao de pertinencia 'positivo Medio'
float pM(__xdata float x)
{
return(f_triangular(x,E1,E2,E3));
}
// Funcao de pertinencia 'positivo Grande'
float pG(__xdata float x)
{
if (x < E2) {
return(0);
} else if (x > E3) {
return(1);
} else {
return((float) (x - E2)/(E3 - E2));
}
}
//=======================================================
// Inferencia: Execucao da inferencia nebulosa
//=======================================================
float inferencia_nebulosa(__xdata float erro, __xdata float delta_erro)
{
__xdata byte cont; // contador generico
__xdata byte is_erro[7]; // vetor dos coeficientes de disparo do erro
__xdata byte is_delta_erro[7]; // vetor dos coeficientes de disparo do delta_erro
__xdata float numerador; // numerador da defuzificacao CoS
__xdata float denominador; // denominador da defuzificacao CoS
__xdata float delta_u; // variacao da variavel de controle u (delta_u(k))
// graus de pertinencia maximos de cada funcao de pertinencia do consequente

82

// (e consequentemente tmb fatores de escala da inferencia tipo 'scaled inference')


__xdata float max_fB, max_fP, max_fS, max_M, max_aS, max_aP, max_aB;
// inicializa com zero os valores maximos de
// cada funcao de pertinencia do consequente
max_fB = max_fP = max_fS = max_M = max_aS = max_aP = max_aB = 0;
// inicializa com zero o numerador e denominador
// da defuzificacao
numerador = denominador = 0;
// MAPEAMENTO DOS COEFICIENTES DE DISPARO
// verifica quais regras devem ser disparadas
// limpa os vetores com as regras a serem disparadas
for(cont = 0; cont < 7; cont++)
is_erro[cont] = is_delta_erro[cont] = 0;
// mapeia os coeficientes de disparo do erro
if (nG(erro) > 0)
is_erro[0] = 1;
if (nM(erro) > 0)
is_erro[1] = 1;
if (nP(erro) > 0)
is_erro[2] = 1;
if (Z(erro) > 0)
is_erro[3] = 1;
if (pP(erro) > 0)
is_erro[4] = 1;
if (pM(erro) > 0)
is_erro[5] = 1;
if (pG(erro) > 0)
is_erro[6] = 1;
// mapeia os coeficientes
if (nG(delta_erro) > 0)
is_delta_erro[0] =
if (nM(delta_erro) > 0)
is_delta_erro[1] =
if (nP(delta_erro) > 0)
is_delta_erro[2] =
if (Z(delta_erro) > 0)
is_delta_erro[3] =
if (pP(delta_erro) > 0)
is_delta_erro[4] =
if (pM(delta_erro) > 0)
is_delta_erro[5] =
if (pG(delta_erro) > 0)
is_delta_erro[6] =
//
//
//
//
if

de disparo da variacao do erro


1;
1;
1;
1;
1;
1;
1;

FUZIFICACAO E DISPARO DAS REGRAS


dispara apenas as regras cujos coeficientes de disparo
do erro e da variacao do erro sao ambos iguais a 1
i.e., dispara apenas as regras afetadas
(is_erro[0] == 1) {
if (is_delta_erro[0] == 1) {
// regra 1 : IF erro IS nG AND delta_erro IS nG THEN delta_u IS fB
max_fB = max(min(nG(erro), nG(delta_erro)), max_fB);
}
if (is_delta_erro[1] == 1) {
// regra 2 : IF erro IS nG AND delta_erro IS nM THEN delta_u IS fB
max_fB = max(min(nG(erro), nM(delta_erro)), max_fB);
}
if (is_delta_erro[2] == 1) {
// regra 3 : IF erro IS nG AND delta_erro IS nP THEN delta_u IS fB
max_fB = max(min(nG(erro), nP(delta_erro)), max_fB);
}
if (is_delta_erro[3] == 1) {
// regra 4 : IF erro IS nG AND delta_erro IS Z THEN delta_u IS fB
max_fB = max(min(nG(erro), Z(delta_erro)), max_fB);
}
if (is_delta_erro[4] == 1) {
// regra 5 : IF erro IS nG AND delta_erro IS pP THEN delta_u IS fP
max_fP = max(min(nG(erro), pP(delta_erro)), max_fP);
}
if (is_delta_erro[5] == 1) {
// regra 6 : IF erro IS nG AND delta_erro IS pM THEN delta_u IS fS

83

max_fS = max(min(nG(erro), pM(delta_erro)), max_fS);


}
if (is_delta_erro[6] == 1) {
// regra 7 : IF erro IS nG AND delta_erro IS pG THEN delta_u IS M
max_M = max(min(nG(erro), pG(delta_erro)), max_M);
}
}
if (is_erro[1] == 1) {
if (is_delta_erro[0] == 1) {
// regra 8 : IF erro IS nM AND delta_erro IS nG THEN delta_u IS fB
max_fB = max(min(nM(erro), nG(delta_erro)), max_fB);
}
if (is_delta_erro[1] == 1) {
// regra 9 : IF erro IS nM AND delta_erro IS nM THEN delta_u IS fB
max_fB = max(min(nM(erro), nM(delta_erro)), max_fB);
}
if (is_delta_erro[2] == 1) {
// regra 10 : IF erro IS nM AND delta_erro IS nP THEN delta_u IS fB
max_fB = max(min(nM(erro), nP(delta_erro)), max_fB);
}
if (is_delta_erro[3] == 1) {
// regra 11 : IF erro IS nM AND delta_erro IS Z THEN delta_u IS fP
max_fP = max(min(nM(erro), Z(delta_erro)), max_fP);
}
if (is_delta_erro[4] == 1) {
// regra 12 : IF erro IS nM AND delta_erro IS pP THEN delta_u IS fS
max_fS = max(min(nM(erro), pP(delta_erro)), max_fS);
}
if (is_delta_erro[5] == 1) {
// regra 13 : IF erro IS nM AND delta_erro IS pM THEN delta_u IS M
max_M = max(min(nM(erro), pM(delta_erro)), max_M);
}
if (is_delta_erro[6] == 1) {
// regra 14 : IF erro IS nM AND delta_erro IS pG THEN delta_u IS aS
max_aS = max(min(nM(erro), pG(delta_erro)), max_aS);
}
}
if (is_erro[2] == 1) {
if (is_delta_erro[0] == 1) {
// regra 15 : IF erro IS nP AND delta_erro IS nG THEN delta_u IS fB
max_fB = max(min(nP(erro), nG(delta_erro)), max_fB);
}
if (is_delta_erro[1] == 1) {
// regra 16 : IF erro IS nP AND delta_erro IS nM THEN delta_u IS fB
max_fB = max(min(nP(erro), nM(delta_erro)), max_fB);
}
if (is_delta_erro[2] == 1) {
// regra 17 : IF erro IS nP AND delta_erro IS nP THEN delta_u IS fP
max_fP = max(min(nP(erro), nP(delta_erro)), max_fP);
}
if (is_delta_erro[3] == 1) {
// regra 18 : IF erro IS nP AND delta_erro IS Z THEN delta_u IS fS
max_fS = max(min(nP(erro), Z(delta_erro)), max_fS);
}
if (is_delta_erro[4] == 1) {
// regra 19 : IF erro IS nP AND delta_erro IS pP THEN delta_u IS M
max_M = max(min(nP(erro), pP(delta_erro)), max_M);
}
if (is_delta_erro[5] == 1) {
// regra 20 : IF erro IS nP AND delta_erro IS pM THEN delta_u IS aS
max_aS = max(min(nP(erro), pM(delta_erro)), max_aS);
}
if (is_delta_erro[6] == 1) {
// regra 21 : IF erro IS nP AND delta_erro IS pG THEN delta_u IS aP
max_aP = max(min(nP(erro), pG(delta_erro)), max_aP);
}
}
if (is_erro[3] == 1) {
if (is_delta_erro[0] == 1) {
// regra 22 : IF erro IS Z AND delta_erro IS nG THEN delta_u IS fB
max_fB = max(min(Z(erro), nG(delta_erro)), max_fB);
}
if (is_delta_erro[1] == 1) {
// regra 23 : IF erro IS Z AND delta_erro IS nM THEN delta_u IS fP
max_fP = max(min(Z(erro), nM(delta_erro)), max_fP);
}
if (is_delta_erro[2] == 1) {

84

// regra 24 : IF erro IS Z AND delta_erro IS nP THEN delta_u IS fS


max_fS = max(min(Z(erro), nP(delta_erro)), max_fP);
}
if (is_delta_erro[3] == 1) {
// regra 25 : IF erro IS Z AND delta_erro IS Z THEN delta_u IS M
max_M = max(min(Z(erro), Z(delta_erro)), max_M);
}
if (is_delta_erro[4] == 1) {
// regra 26 : IF erro IS Z AND delta_erro IS pP THEN delta_u IS aS
max_aS = max(min(Z(erro), pP(delta_erro)), max_aS);
}
if (is_delta_erro[5] == 1) {
// regra 27 : IF erro IS Z AND delta_erro IS pM THEN delta_u IS aP
max_aP = max(min(Z(erro), pM(delta_erro)), max_aP);
}
if (is_delta_erro[6] == 1) {
// regra 28 : IF erro IS Z AND delta_erro IS pG THEN delta_u IS aB
max_aB = max(min(Z(erro), pG(delta_erro)), max_aB);
}
}
if (is_erro[4] == 1) {
if (is_delta_erro[0] == 1) {
// regra 29 : IF erro IS pP AND delta_erro IS nG THEN delta_u IS fP
max_fP = max(min(pP(erro), nG(delta_erro)), max_fP);
}
if (is_delta_erro[1] == 1) {
// regra 30 : IF erro IS pP AND delta_erro IS nM THEN delta_u IS fS
max_fS = max(min(pP(erro), nM(delta_erro)), max_fS);
}
if (is_delta_erro[2] == 1) {
// regra 31 : IF erro IS pP AND delta_erro IS nP THEN delta_u IS M
max_M = max(min(pP(erro), nP(delta_erro)), max_M);
}
if (is_delta_erro[3] == 1) {
// regra 32 : IF erro IS pP AND delta_erro IS Z THEN delta_u IS aS
max_aS = max(min(pP(erro), Z(delta_erro)), max_aS);
}
if (is_delta_erro[4] == 1) {
// regra 33 : IF erro IS pP AND delta_erro IS pP THEN delta_u IS aP
max_aP = max(min(pP(erro), pP(delta_erro)), max_aP);
}
if (is_delta_erro[5] == 1) {
// regra 34 : IF erro IS pP AND delta_erro IS pM THEN delta_u IS aB
max_aB = max(min(pP(erro), pM(delta_erro)), max_aB);
}
if (is_delta_erro[6] == 1) {
// regra 35 : IF erro IS pP AND delta_erro IS pG THEN delta_u IS aB
max_aB = max(min(pP(erro), pG(delta_erro)), max_aB);
}
}
if (is_erro[5] == 1) {
if (is_delta_erro[0] == 1) {
// regra 36 : IF erro IS pM AND delta_erro IS nG THEN delta_u IS fS
max_fS = max(min(pM(erro), nG(delta_erro)), max_fS);
}
if (is_delta_erro[1] == 1) {
// regra 37 : IF erro IS pM AND delta_erro IS nM THEN delta_u IS M
max_M = max(min(pM(erro), nM(delta_erro)), max_M);
}
if (is_delta_erro[2] == 1) {
// regra 38 : IF erro IS pM AND delta_erro IS nP THEN delta_u IS aS
max_aS = max(min(pM(erro), nP(delta_erro)), max_aS);
}
if (is_delta_erro[3] == 1) {
// regra 39 : IF erro IS pM AND delta_erro IS Z THEN delta_u IS aP
max_aP = max(min(pM(erro), Z(delta_erro)), max_aP);
}
if (is_delta_erro[4] == 1) {
// regra 40 : IF erro IS pM AND delta_erro IS pP THEN delta_u IS aB
max_aB = max(min(pM(erro), pP(delta_erro)), max_aB);
}
if (is_delta_erro[5] == 1) {
// regra 41 : IF erro IS pM AND delta_erro IS pM THEN delta_u IS aB
max_aB = max(min(pM(erro), pM(delta_erro)), max_aB);
}
if (is_delta_erro[6] == 1) {
// regra 42 : IF erro IS pM AND delta_erro IS pG THEN delta_u IS aB

85

max_aB = max(min(pM(erro), pG(delta_erro)), max_aB);


}
}
if (is_erro[6] == 1) {
if (is_delta_erro[0] == 1) {
// regra 43 : IF erro IS pG AND delta_erro IS nG THEN delta_u IS M
max_M = max(min(pG(erro), nG(delta_erro)), max_M);
}
if (is_delta_erro[1] == 1) {
// regra 44 : IF erro IS pG AND delta_erro IS nM THEN delta_u IS aS
max_aS = max(min(pG(erro), nM(delta_erro)), max_aS);
}
if (is_delta_erro[2] == 1) {
// regra 45 : IF erro IS pG AND delta_erro IS nP THEN delta_u IS aP
max_aP = max(min(pG(erro), nP(delta_erro)), max_aP);
}
if (is_delta_erro[3] == 1) {
// regra 46 : IF erro IS pG AND delta_erro IS Z THEN delta_u IS aB
max_aB = max(min(pG(erro), Z(delta_erro)), max_aB);
}
if (is_delta_erro[4] == 1) {
// regra 47 : IF erro IS pG AND delta_erro IS pP THEN delta_u IS aB
max_aB = max(min(pG(erro), pP(delta_erro)), max_aB);
}
if (is_delta_erro[5] == 1) {
// regra 48 : IF erro IS pG AND delta_erro IS pM THEN delta_u IS aB
max_aB = max(min(pG(erro), pM(delta_erro)), max_aB);
}
if (is_delta_erro[6] == 1) {
// regra 49 : IF erro IS pG AND delta_erro IS pG THEN delta_u IS aB
max_aB = max(min(pG(erro), pG(delta_erro)), max_aB);
}
}
//
//
//
if

DEFUZIFICACAO
calcula a parcela do numerador e do denominador
de cada funcao de pertinencia do consequente
(max_fB > 0) {
// calcula as parcelas correspondentes da funcao 'feche Bastante'
numerador += integral(max_fB, -U4, -U3, -U2);
denominador += area_f_triangular(max_fB, -U4, -U2);

}
if (max_fP > 0) {
// calcula as parcelas correspondentes da funcao 'feche Pouco'
numerador += integral(max_fP, -U3, -U2, -U1);
denominador += area_f_triangular(max_fP, -U3, -U1);
}
if (max_fS > 0) {
// calcula as parcelas correspondentes da funcao 'feche Sutilmente'
numerador += integral(max_fS, -U2, -U1, 0);
denominador += area_f_triangular(max_fS, -U2, 0);
}
if (max_M > 0) {
// calcula as parcelas correspondentes da funcao 'Mantenha'
numerador += integral(max_M, -U1, 0, U1);
denominador += area_f_triangular(max_M, -U1, U1);
}
if (max_aS > 0) {
// calcula as parcelas correspondentes da funcao 'abra Sutilmente'
numerador += integral(max_aS, 0, U1, U2);
denominador += area_f_triangular(max_aS, 0, U2);
}
if (max_aP > 0) {
// calcula as parcelas correspondentes da funcao 'abra Pouco'
numerador += integral(max_aP, U1, U2, U3);
denominador += area_f_triangular(max_aP, U1, U3);
}
if (max_aB > 0) {
// calcula as parcelas correspondentes da funcao 'abra Bastante'
numerador += integral(max_aB, U2, U3, U4);
denominador += area_f_triangular(max_aB, U2, U4);
}
if (denominador != 0)
delta_u = (__xdata float) numerador/denominador;
else
delta_u = 0;

86

return(delta_u);
}
//=======================================================
// Perifericos : Bombas
//=======================================================
// Liga a bomba
void bomba_liga()
{
bomba_potenciaF(_fator_pot * 100);
bomba_potenciaQ(0);
}
// Desliga a bomba
void bomba_desliga()
{
// coloca a potencia das bombas em zero
bomba_potenciaQ(0);
bomba_potenciaF(0);
PWM_Q = 0;
PWM_F = 0;
}
// Faz o ajuste de potencia da bomba de agua quente
void bomba_potenciaQ(__xdata float potenciaQ)
{
// transforma potencia 0-100 em duty-cycle 50%-95%
if (potenciaQ == 0)
_dc_Q = 0.10; // coloca duty cycle baixo p/ potencia zero
else
_dc_Q = 0.50 + 0.0045*potenciaQ;
}
// Faz o ajuste de potencia da bomba de agua fria
void bomba_potenciaF(__xdata float potenciaF)
{
// transforma potencia 0-100 em duty-cycle 50%-95%
if (potenciaF == 0)
_dc_F = 0.10;
else
_dc_F = 0.50 + 0.0045*potenciaF;
}
//=======================================================
// Perifericos : Termometro
//=======================================================
// Le o valor do ADC e o converte para graus Celsius
float termometro_leitura()
{
__xdata float r = 0;
adc = 0xFF; // dispara a conversao A/D
r = (float) (100*adc)/255;
return(r);
}
//=======================================================
// Perifericos : Display
//=======================================================
// Envia comandos ao display
void display_comando(byte cmd)
{
display_espera(); // espera Busy Flag
wcommand = cmd;
}
// Espera busy flag
void display_espera()
{
// testa busy flag (BF = bit7 de rstatus)

87

while((rstatus & 0x80) != 0);


}
// Envia um caractere ao display
void display_escreve(byte car)
{
display_espera(); // espera 'busy flag'
wdata = car;
}
// Envia uma string de bytes ao display
void display_escreveString(byte *string)
{
while(*string != '$') {
display_escreve(*string);
string++;
}
}
// Inicializa o display
void display_inicializa()
{
display_comando(0x38);
display_comando(0x06);
display_comando(0x0E);
display_comando(0x01);
display_comando(0x0C);

//
//
//
//
//

2 linhas 5x7
cursor com autoincremento para a direita
liga display & cursor
limpa display & cursor home
sem cursor

display_limpa();
}
// Limpa o display
void display_limpa()
{
display_comando(0x01);
}
// Seleciona a linha do display (1a ou 2a)
void display_linha(byte lin)
{
if (lin == 1)
display_comando(0x80); // desloca cursor 1a.lin e 1a.col
else
display_comando(0xC0); // desloca cursor 2a.lin e 1a.col
}
//=======================================================
// Perifericos : Terminal Serial
//=======================================================
// Envia um caractere ao terminal serial
void terminal_escreve(byte dado)
{
while(!TI);
TI = 0;
SBUF = dado;
while(!TI);
}
// Escreve uma string de bytes no terminal serial
void terminal_escreveString(byte *string)
{
while(*string != '$') {
terminal_escreve(*string);
string++;
}
}
// Escreve um numero x no terminal, -999.99 < x < 999.99
void terminal_escreveNumero(__xdata float num)
{
// escreve o sinal do numero
if (num < 0)
terminal_escreve('-');
else
terminal_escreve('+');

88

// escreve a centena
terminal_escreve(centena(abs(num)));
// escreve a dezena
terminal_escreve(dezena(abs(num)));
// escreve a unidade
terminal_escreve(unidade(abs(num)));
// escreve o ponto
terminal_escreve('.');
// escreve a primeira casa decimal
terminal_escreve(decimal1(abs(num)));
// escreve a segunda casa decimal
terminal_escreve(decimal2(abs(num)));
}
// Posiciona o cursor em uma nova linha no terminal serial
void terminal_novaLinha()
{
terminal_escreve(0x0A); // line feed
terminal_escreve(0x0D); // carriage return
}
//=======================================================
// Interrupcoes
//=======================================================
// Inicializa as interrupcoes
void interrupcao_inicializa()
{
/* Insere instrucoes de desvio para o endereco das rotinas
de tratamento de interrupcao. Obs: isso somente eh necessario
se o programa monitor estiver presente na memoria */
__xdata int *aux;
// interrupcao timer 0: 02A00BFF @ 0xFFF3
aux = (__xdata int *) 0xFFF3;
*aux = 0xA002;
aux = (__xdata int *) 0xFFF5;
*aux = 0xFF0B;
// interrupcao serial: 02A023FF @ 0xFFFC
aux = (__xdata int *) 0xFFFC;
*aux = 0xA002;
aux = (__xdata int *) 0xFFFE;
*aux = 0xFF23;
// configuracao de interrupcoes
EA = 1; // [1:habilita , 0:desabilita] interrupcoes
ET0 = 1; // [1:habilita , 0:desabilita] interrupcao do timer0
EX0 = 0; // [1:habilita , 0:desabilita] interrupcao externa 0
EX1 = 0; // [1:habilita , 0:desabilita] interrupcao externa 1
ES = 1; // [1:habilita , 0:desabilita] interrupcao serial
}
// Tratamento da interrupcao do timer0 em 0x000B
void interrupcao_timer0() interrupt 1 using 2
{
static int estado = 0;
TF0 = 0; // limpa o 'flag' de estouro do timer0
switch(estado) {
case 0: // coloca os sinais em alto
// incrementa a contagem de tempo (a cada 0.01 s)
__tempo++;
PWM_Q = PWM_F = 1;
TL0 = _N0_L;
TH0 = _N0_H;
estado++;
break;

89

case 1:
if (_N1 == 0) { // dcQ e dcF sao iguais
estado = 0;
PWM_Q = PWM_F = 0;
TL0 = _N2_L;
TH0 = _N2_H;
} else if (_dc_menorQ == 1) { // dcQ eh o menor
PWM_Q = 0;
TL0 = _N1_L;
TH0 = _N1_H;
estado++;
} else { // dcF eh o menor
PWM_F = 0;
TL0 = _N1_L;
TH0 = _N1_H;
estado++;
}
break;
case 2: // coloca os sinais em zero
PWM_Q = PWM_F = 0;
TL0 = _N2_L;
TH0 = _N2_H;
estado = 0;
break;
default:
TL0 = _N0_L;
TH0 = _N0_H;
estado = 1;
break;
}
TR0 = 1; // dispara o timer0
}
// Tratamento da interrupcao serial em 0x0023
void interrupcao_serial() interrupt 4 using 3
{
ES = 0; // desabilita int. serial
ET0 = 0; // desabilita int. timer0
if (RI == 1) {
RI = 0;
TI = 1;
iu_comando(SBUF); // executa o comando recebido
}
if (TI == 1)
TI = 0;
ES = 1; // reabilita int. serial
ET0 = 1; // reabilita int. timer0
}
//=======================================================
// Conversao de numero para ASCII
//=======================================================
// Retorna o valor absoluto do numero x
float abs(__xdata float x)
{
if (x >= 0)
return(x);
else
return(-x);
}
// Retorna em ASCII a centena do numero x
byte centena(__xdata float x)
{
byte res;
res = (byte) ((((int) x)%1000)/100) + 0x30;
return(res);
}

90

// Retorna em ASCII a dezena do numero x


byte dezena(__xdata float x)
{
byte res;
res = (byte) (((int) x)%100)/10 + 0x30;
return(res);
}
// Retorna em ASCII a unidade do numero x
byte unidade(__xdata float x)
{
byte res;
res = (byte) (( (int) x)%10) + 0x30;
return(res);
}
// Retorna em ASCII a primeira casa decimal do numero x
byte decimal1(__xdata float x)
{
__xdata float res;
res = 10 * (x - (int) x);
res = res + 0x30;
return((byte) res);
}
// Retorna em ASCII a segunda casa decimal do numero x
byte decimal2(__xdata float x)
{
__xdata float res;
res = 100 * (x - (int) x);
res = ((int) res) % 10;
res = res + 0x30;
return((byte) res);
}
//=======================================================
// Interface com o Usuario
//=======================================================
// Mostra as informacoes do sistema no display
void iu_display(__xdata float temperatura_atual)
{
byte aux;
// APRESENTA A TEMPERATURA DE SETPOINT (DESEJADA)
display_linha(1); // seleciona a primeira linha do display
display_escreveString("T_sp:$");
// dezena
aux = dezena(_temperatura_setpoint);
display_escreve(aux);
// unidade
aux = unidade(_temperatura_setpoint);
display_escreve(aux);
// ponto
display_escreve(0x2E);
// primeira casa decimal
aux = decimal1(_temperatura_setpoint);
display_escreve(aux);
// simbolo de graus celsius
display_escreve(0xDF);
display_escreve('C');
// APRESENTA A INTENSIDADE

91

display_escreveString(" I:$");
if (_fator_pot == 1)
display_escreve('3');
else if (_fator_pot == 0.75)
display_escreve('2');
else
display_escreve('1');
// APRESENTA A TEMPERATURA ATUAL (MEDIDA)
display_linha(2); // seleciona a segunda linha do display
display_escreveString("T_at:$");
// dezena
aux = dezena(temperatura_atual);
display_escreve(aux);
// unidade
aux = unidade(temperatura_atual);
display_escreve(aux);
// ponto
display_escreve(0x2E);
// primeira casa decimal
aux = decimal1(temperatura_atual);
display_escreve(aux);
// simbolo de graus celsius
display_escreve(0xDF);
display_escreve('C');
// APRESENTA O TEMPO DECORRIDO
display_escreveString("

$");

if (_ligado == 1) {
// centena
aux = centena(_tempo_k);
display_escreve(aux);
// dezena
aux = dezena(_tempo_k);
display_escreve(aux);
// unidade
aux = unidade(_tempo_k);
display_escreve(aux);
} else {
display_escreveString("OFF$");
}
}
// Le e executa o comando
void iu_comando(byte cmd)
{
switch (cmd) {
case '1': // liga o sistema
if (_ligado == 0) {
terminal_novaLinha();
terminal_escreveString("[Sistema Ligado]$");
terminal_novaLinha();
TR0 = 1; // dispara o timer0
_ligado = 1;
_ligou = 1;
bomba_liga();
}
break;
case '0': // desliga o sistema
if (_ligado == 1) {
terminal_novaLinha();
terminal_escreveString("[Sistema Desligado]$");
terminal_novaLinha();
ET0 = 0; // desabilita interrupcao do timer0
TR0 = 0; // desliga o timer0
TF0 = 0; // limpa o 'flag' de estouro do timer0

92

case

case

case

case

case

_ligado = 0;
_ligou = 0;
bomba_desliga();
__tempo = tempo_aux = 0;
iu_menu();
} else {
terminal_escreveString("[O sistema nao esta ligado!]$");
}
break;
'+': // incrementa a temperatura desejada
//terminal_escreveString("Incrementa Temperatura$");
if (_temperatura_setpoint < SP_MAX)
_temperatura_setpoint += 0.10;
break;
'-': // decrementa a temperatura desejada
//terminal_escreveString("Decrementa Temperatura$");
if (_temperatura_setpoint > SP_MIN)
_temperatura_setpoint -= 0.10;
break;
'>': // incrementa a intensidade
if (_fator_pot < 1)
_fator_pot += 0.25;
break;
'<': // decrementa a intensidade
if (_fator_pot > 0.5)
_fator_pot -= 0.25;
break;
'C': // altera tipo de inferencia usada
_tipo_inferencia++;
if (_tipo_inferencia == 4) {
terminal_escreveString("[Selecionado
_tipo_inferencia = 0;
} else if (_tipo_inferencia == 1) {
terminal_escreveString("[Selecionado
} else if (_tipo_inferencia == 2) {
terminal_escreveString("[Selecionado
} else if (_tipo_inferencia == 3) {
terminal_escreveString("[Selecionado

controle nebuloso-PI]$");

controle P]$");
controle PI]$");
controle 'variacao

constante']$");
}
terminal_novaLinha();
break;
default: // comando invalido
terminal_escreveString("[Comando invalido!]$");
terminal_novaLinha();
break;
}
}
// Apresenta o menu de comandos
void iu_menu()
{
terminal_novaLinha();
terminal_novaLinha();
terminal_escreveString("digiducha - Termostato digital para chuveiros com aquecimento
central$");
terminal_novaLinha();
terminal_novaLinha();
terminal_escreveString("Comandos:$");
terminal_novaLinha();
terminal_escreveString("+ : incrementa a temperatura desejada$");
terminal_novaLinha();
terminal_escreveString("- : decrementa a temperatura desejada$");
terminal_novaLinha();
terminal_escreveString("> : incrementa a intensidade$");
terminal_novaLinha();
terminal_escreveString("< : decrementa a intensidade$");
terminal_novaLinha();
terminal_escreveString("C : altera metodo de controle entre nebuloso-PI, P, PI e variacao
constante$");
terminal_novaLinha();
terminal_escreveString("1 : liga$");
terminal_novaLinha();

93

terminal_escreveString("0 : desliga$");
terminal_novaLinha();
terminal_novaLinha();
}

//=======================================================
// Rotina Principal
//=======================================================
void main()
{
__xdata
__xdata
__xdata
__xdata
__xdata
__xdata
__xdata
__xdata
__xdata

byte tipo_controle = 'q';


float temperatura_atual = 0;
float erro = 0;
float erro_antigo = 0;
float delta_erro = 0;
float delta_u = 0;
float potQ = 0;
float potF = 100;
unsigned int N_aux = 0;

// zera as variaveis globais


__tempo = 0; // zera a variavel global __tempo
_temperatura_setpoint = SP_PADRAO; // inicializa setpoint para o padrao
_fator_pot = 1.0; // fator de potencia padrao no maximo
_ligado = 0; // sistema inicialmente desligado
_ligou = 0;
_tipo_inferencia = 0; // padrao : controle nebuloso-PI
// desligas as bombas
bomba_desliga();
// configura os valores padroes das potencias das bombas
bomba_potenciaQ(_fator_pot * potQ);
bomba_potenciaF(_fator_pot * potF);
// inicializa o display
display_inicializa();
// inicializa as interrupcoes
interrupcao_inicializa();
// inicializa a base de tempo
TMOD &= 0xFC;
TMOD |= 0x01; // configura timer0 no modo 1
TF0 = 0; // limpa o 'flag' de estouro do timer0
TL0 = 0x00; // ajusta o estouro do timer0 para 10ms,
TH0 = 0xDC; // colocando o valor (65536-9216=56320) no timer0
tempo_aux = 0;
// apresenta o menu de comandos
ES = 0;
TI = 1;
iu_menu();
ES = 1;
// laco principal
for(;;) {
_tempo_k = (float) 0.01 * __tempo;
critical // desabilita interrupcoes
{
if (_dc_Q < _dc_F) {
_dc_menorQ = 1;
_N0 = (unsigned int)
_N0_L = _N0 & 0xFF;
_N0_H = (_N0 >> 8) &
_N1 = (unsigned int)
_N1_L = _N1 & 0xFF;
_N1_H = (_N1 >> 8) &
_N2 = (unsigned int)
_N2_L = _N2 & 0xFF;
_N2_H = (_N2 >> 8) &

(65536 - _dc_Q * 9216);


0xFF;
(65536 - (_dc_F - _dc_Q) * 9216);
0xFF;
(65536 - (1 - _dc_F) * 9216);
0xFF;

94

} else {
_dc_menorQ = 0;
_N0 = (unsigned int)
_N0_L = _N0 & 0xFF;
_N0_H = (_N0 >> 8) &
_N1 = (unsigned int)
_N1_L = _N1 & 0xFF;
_N1_H = (_N1 >> 8) &
_N2 = (unsigned int)
_N2_L = _N2 & 0xFF;
_N2_H = (_N2 >> 8) &
}

(65536 - _dc_F * 9216);


0xFF;
(65536 - (_dc_Q - _dc_F) * 9216);
0xFF;
(65536 - (1 - _dc_Q) * 9216);
0xFF;

}
// le a temperatura do termometro
temperatura_atual = termometro_leitura();

if (_ligado == 1 && _tempo_k > tempo_aux + DELTA) {


ES = 0; // desabilita int. serial (para garantir acesso atomico)
// calcula o erro
erro_antigo = erro;
erro = _temperatura_setpoint - temperatura_atual;
erro *= Ne; // ganho do erro
// calcula a variacao do erro
if (_ligou == 1) {
potQ = 0;
potF = 100;
tipo_controle = 'q';
delta_erro = 0; // sistema acaba de ser ligado, nao ha erro(k-1)
_ligou = 0;
} else {
delta_erro = erro - erro_antigo;
delta_erro *= Nv; // ganho do delta_erro
}
// calcula a variacao da variavel de controle
if (_tipo_inferencia == 0) {
// controle tipo nebuloso-PI
delta_u = inferencia_nebulosa(erro, delta_erro);
} else if (_tipo_inferencia == 1) {
// controle tipo P
delta_u = erro;
} else if (_tipo_inferencia == 2) {
// controle tipo PI
delta_u = erro + delta_erro;
} else if (_tipo_inferencia == 3) {
// controle tipo 'variacao constante'
if (erro < 2)
delta_u = 0;
else
delta_u = (erro > 0) ? 1 : -1;
delta_u *= 5;
}
// controla a bomba adequada (Q ou F), de acordo com o tipo
// de controle em andamento
if (tipo_controle == 'q') {
// calcula a nova potencia
potQ = potQ + delta_u;
// restringe a nova potencia ao intervalo [0, 100]
if (potQ > 100)
potQ = 100;
else if (potQ < 0)
potQ = 0;
} else {
// calcula a nova potencia
potF = potF - delta_u;
// restringe a nova potencia ao intervalo [0, 100]
if (potF > 100)
potF = 100;
else if (potF < 0)
potF = 0;

95

}
// Atua nas bombas
bomba_potenciaQ(_fator_pot * potQ);
bomba_potenciaF(_fator_pot * potF);
// Escreve os dados do processo no terminal serial
TI = 1;
terminal_novaLinha();
terminal_escreveString("tempo=$");
terminal_escreveNumero((float) ((int)_tempo_k));
terminal_escreveString(" : $");
terminal_escreveString("Temperatura_setpoint=$");
terminal_escreveNumero(_temperatura_setpoint);
terminal_escreveString(", Temperatura_medida=$");
terminal_escreveNumero(temperatura_atual);
terminal_novaLinha();
terminal_escreveString("erro=$");
terminal_escreveNumero(erro);
terminal_escreveString(", delta_err=$");
terminal_escreveNumero(delta_erro);
terminal_escreveString(", delta_u=$");
if (tipo_controle == 'q') {
terminal_escreveNumero(delta_u);
terminal_escreveString("(Q)$");
} else {
terminal_escreveNumero(-delta_u);
terminal_escreveString("(F)$");
}
terminal_novaLinha();
terminal_escreveString("potencia Quente=$");
terminal_escreveNumero(_fator_pot * potQ);
terminal_escreveString(", potencia Frio=$");
terminal_escreveNumero(_fator_pot * potF);
terminal_novaLinha();
// verifica se o tipo de controle deve ser trocado
// (de Q para F ou de F para Q).
if (potQ == 100 && potF == 100) {
if (tipo_controle == 'q' && delta_u > 0) {
// troca Q -> F
tipo_controle = 'f';
} else if (tipo_controle == 'f' && delta_u < 0) {
// troca F -> Q
tipo_controle = 'q';
}
}
tempo_aux = _tempo_k;
ES = 1; // reabilita int. serial
} else {
ES = 0; // desabilita int. serial
// apresenta alguns dados do processo no display
iu_display(temperatura_atual);
ES = 1; // reabilita int. serial

}
}
}

96