Escolar Documentos
Profissional Documentos
Cultura Documentos
CORNÉLIO PROCÓPIO
2017
PEDRO ANDRADE DE ROSSI
CORNÉLIO PROCÓPIO
2017
Universidade Tecnológica Federal do Paraná
Campus Cornélio Procópio
Departamento Acadêmico de Elétrica
Curso de Engenharia Elétrica
FOLHA DE APROVAÇÃO
______________________________________________
Prof(a). Dr(a). Kleber Romero Felizardo - Presidente (Orientador)
______________________________________________
Prof(a). Dr(a). Luis Fernando Caparroz Duarte - (Membro)
______________________________________________
Prof(a). Dr(a). Luiz Francisco Sanches Buzachero - (Membro)
A minha namorada Letı́cia, que foi paciente com meus estudos e sempre esteve co-
migo, passando por alegrias e dificuldades.
Aos meu amigos de faculdade, que estiveram o tempo todo ao meu lado. Sem eles
minha caminhada seria muito mais dificultosa.
Ao meu orientador, Prof. Dr. Kleber Romero Felizardo, com o vasto conhecimento,
contribuição e compreensão no desenvolvimento do trabalho.
DE ROSSI, Pedro Andrade. Develop a supervision and control system of level and tempera-
ture of fluids for didatic purposes. 49 f. Trabalho de Conclusão de Curso – Graduação em
Engenharia Elétrica, Universidade Tecnológica Federal do Paraná. Cornélio Procópio, 2017.
In this paper, it is proposed the development of a didatic kit of supervision and control of
level and temperature of a liquid. The kit consist of an Arduino Uno microcontroller module,
temperature sensors and level, control modules (H L298N and Dimmer), a heater, a water pump
and the liquid reservatories. Supervision and control of the system are performed from a user
interface that will be developed using LabVIEW software. It is expected that the development
of this kit will help teachers in the laboratory classes of the control disciplines, making the
connection between theory and practice closer.
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.1 DELIMITAÇÃO DO TEMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2 OBJETIVOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.1 Objetivo Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.2 Objetivos Especı́ficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2 FUNDAMENTAÇÃO TEÓRICA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1 DEFINIÇÃO DE SISTEMAS DE CONTROLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2 CONFIGURAÇÃO DE SISTEMAS DE CONTROLE . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3 MODELAGEM MATEMÁTICA DO SISTEMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4 PRIMEIRO MÉTODO DE ZIEGLER-NICHOLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.5 CONTROLADOR PI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.5.1 Controlador PI discreto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.6 ARDUINO UNO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.7 SENSOR ULTRASSÔNICO HC-SR04 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.8 SENSOR DE TEMPERATURA DS18B20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.9 MÓDULO PONTE H L298N . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.10 MÓDULO DIMMER MC-8A PARA ARDUINO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.11 RESISTÊNCIA DE AQUECIMENTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.12 BOMBA D’ÁGUA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.13 SOFTWARE LABVIEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3 METODOLOGIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.1 DIAGRAMA DO SISTEMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2 CONEXÕES COM O ARDUINO UNO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.1 Conexão do Sensor Ultrassônico HC-SR04 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.2 Conexão do Módulo Ponte H L298N . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.3 Conexão do Sensor DS18B20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2.4 Conexão Módulo Dimmer MC-8A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.3 INTERFACE LABVIEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4 RESULTADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.1 PROTÓTIPO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.2 SINTONIA DO CONTROLADOR PI PARA OS SUBSISTEMAS . . . . . . . . . . . . . . . . 35
4.2.1 Sintonia do controlador PI para o Subsistema de Nı́vel . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.2.2 Sintonia do controlador PI para o Subsistema de Temperatura . . . . . . . . . . . . . . . . . . . . 36
4.3 PRIMEIRO EXPERIMENTO PARA SUBSISTEMA DE NÍVEL . . . . . . . . . . . . . . . . . 37
4.4 SEGUNDO EXPERIMENTO PARA SUBSISTEMA DE NÍVEL . . . . . . . . . . . . . . . . . 38
5 CONSIDERAÇÕES FINAIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.1 TRABALHOS FUTUROS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6 APÊNDICE A - CÓDIGO PARA SUBSISTEMA DE NÍVEL . . . . . . . . . . . . . . . . . . . 44
7 APÊNDICE B - CÓDIGO PARA SUBSISTEMA DE TEMPERATURA . . . . . . . . . 47
10
1 INTRODUÇÃO
A utilização de sistemas automáticos está em ascensão devido às mais variadas tec-
nologias disponı́veis no mercado. São utilizadas técnicas, equipamentos, softwares para que
processos industriais possam ser cada vez mais seguros, gastem menos recursos e tenham a
menor interferência humana possı́vel (NAKAGAWA, 2009).
1.2 OBJETIVOS
Este trabalho tem como principal objetivo desenvolver um kit didático que permita
fazer experiências de malha de controle de temperatura e de nı́vel.
2 FUNDAMENTAÇÃO TEÓRICA
Segundo Nise (2012), um sistema de controle pode ser representado por uma ordem de
processos e subsistemas com o objetivo de que uma entrada especificada possa gerar uma saı́da
desejada com o desempenho esperado. A Figura 1 representa um sistema de controle simples,
constituı́do de uma entrada e uma saı́da.
2006).
∆T (t)
q(t) = (2)
R
∆q(t)
C= dT (t)
(4)
dt
dT (t)
C = qi (t) − q0 (t) (5)
dt
dT (t) [T (s) − Ta (s)]
C = qi (t) − (6)
dt R
dT (t)
RC + T (t) = Rqi (t) + Ta (t) (7)
dt
15
R Ta (s)
T (s) = qi (s) + (9)
RCs + 1 RCs + 1
∆qh (t)
Ch = dn(t)
(11)
dt
A resistência hidráulica (Rh ) é dada pela taxa de variação da altura do nı́vel do reser-
vatório n em relação a variação da vazão de um fluı́do qh , Equação 12. Porém se o escoamento
for laminar (em casos de fluı́dos de alta viscosidade) a relação é dada pela Equação 13, já
para fluı́dos com escoamento turbulento é possı́vel utilizar a aproximação da Equação 14 para
pequenas variações de qh e n.
dn
Rh = (12)
dqh
nt
qh = (13)
Rh
16
2nt
qh = (14)
Rh
dn(t) nt
Ch = qhi (t) − (15)
dt Rh
n(s) Rh
= (17)
qhi (s) RhCh s + 1
A curva gerada através de uma entrada degrau apresenta alguns fatores: a constante de
tempo (T) e o atraso (L). Desenhando uma tangente no ponto de inflexão da curva S, pode-se
determinar T e L como mostrado na Figura 7. Com o levantamento dessas variáveis e utilizando
as fórmulas da Tabela 1 é possı́vel mensurar os parâmetros do controlador PID (OGATA, 2010).
17
2.5 CONTROLADOR PI
Sendo T o perı́odo total de amostragem, u(k) é a ação de controle no instante atual kT,
e(k) o erro atuante no sistema e i(k-1) é o valor do tempo anterior, ou seja, (k-1)T.
Dos quatorze pinos disponı́veis no Arduino Uno, dois pinos são utilizados para comunicação
serial, seis pinos são saı́das PWM e dois pinos são utilizados para interrupção externa. Os
quatorze pinos podem ser configurados tanto como saı́da quanto entrada, pelos comandos pin-
Mode(), digitalWrite() e digitalRead(). A placa Arduino Uno (Figura 8) necessita de um ambi-
ente de desenvolvimento integrado ou integrated development environment (IDE) própria para
programação (ARDUINO, 2016a).
Para a alimentação correta da placa é recomendado uma fonte externa de tensão que
trabalhe entre 7 V a 12 V, devido ao fato de que a placa opera com uma tensão de apenas 5 V.
Uma tensão de alimentação maior que 12 V pode gerar um sobreaquecimento no regulador de
tensão, podendo danificar o equipamento. A alimentação do microcontrolador pode também
ser via cabo USB (ARDUINO, 2016a).
19
A placa Arduino Uno será utilizada no kit com a finalidade de realizar a leitura dos
sensores e também responsável pela resposta enviada para os atuadores dos subsistemas.
O sensor HC-SR04 trabalha com sinais ultrassônicos de 40 kHz, que são imperceptı́veis
à audição humana, com uma velocidade de aproximadamente 34000 cm/s para determinar a
distância que há entre o sensor e o objeto/obstáculo desejado. A faixa de medida está entre 2
cm a 400 cm com uma exatidão de 0,3 cm (CYTRON TECHNOLOGIES, 2013).
Para dar inı́cio ao processo de leitura da distância, se faz necessário colocar o pino
TRIG em nı́vel lógico alto por pelo menos 10 µs, já que normalmente o mesmo se encontra
em nı́vel lógico baixo. No momento em que o microcontrolador retorna o TRIG para o nı́vel
lógico baixo, são transmitidos através do sensor oito pulsos de 40 kHz e o pino ECHO passa
para o nı́vel lógico alto como pode ser visto na Figura 10. O pino ECHO volta para nı́vel lógico
baixo apenas quando o sensor capturar os oito pulsos que serão rebatidos pelo objeto. O tempo
em que o pino ECHO permanece em nı́vel lógico alto é proporcional a distância do sensor ao
objeto (CYTRON TECHNOLOGIES, 2013).
que o ECHO permanece em nı́vel lógico alto em segundos pela velocidade do sinal em cm/s e
dividir o resultado por dois, já que o sinal percorre a distância d na ida e na volta, como pode
ser observado na Figura 11 (CYTRON TECHNOLOGIES, 2013).
Na Figura 12, é possı́vel observar que o sensor é composto por três fios, um vermelho,
um preto e um amarelo sendo eles: VCC, GND e DADOS nesta ordem. A alimentação pode
variar de 3 V a 5,5 V, podendo ser conectado aos terminais do Arduino sem que seja necessária
uma fonte externa de tensão.
A faixa de temperatura que o sensor é capaz de medir está entre -55 o C e 125 o C,
porém, é recomendado utilizá-lo em sua melhor faixa de operação, que é de -10 o C a 85 o C.
22
Nessa faixa a exatidão do sensor é de mais ou menos 0,5 o C. Por se tratar de um sensor im-
permeável a imersão do mesmo em lı́quidos acaba não comprometendo a exatidão nas medições
de temperaturas (MAXIM INTEGRATED, 2015).
O CI L298N possui duas pontes H internamente, cada ponte funciona de forma inde-
pendente. O circuito de uma ponte H (Figura 14) é constituı́do por quatro chaves (S1, S2, S3 e
S4) que funcionam em pares, S1 com S2 e S3 com S4. Sendo assim, o sentido de giro do motor
23
depende da configuração das chaves (MCROBERTS, 2010). Porém, para o kit a bomba d’água
não será invertida, ou seja, trabalhará em um único sentido.
• Tensão de operação: 5 a 35 V.
• Tensão lógica: 5 V.
• Potência máxima: 25 W.
O módulo dimmer MC-8A para Arduino (Figura 15) é baseado no Triac BT137 e nos
optoacopladores 4N25 e MOC3021 sendo esses dois últimos responsáveis por garantir que não
haja fuga de tensão elevada para os pinos Zero Cross (ZC) e Gate (DIM) do módulo (CAMPOS,
2016).
24
Após um tempo t1 (Figura 17) o pino DIM passa do nı́vel baixo para o alto (represen-
tado pela linha vermelha) por um tempo t2 permitindo a transferência de tensão para a carga
(representado na linha azul) até a passagem pelo próximo zero da rede elétrica. Todo esse pro-
cesso é realizado através do módulo dimmer, juntamente com o microcontrolador que define o
tempo necessário para a ativação do gatilho (CAMPOS, 2016).
25
• Corrente: 8A.
• Resistor: 15KΩ.
• Potência: 880W.
A resistência de aquecimento (Figura 18) presente no subsistema foi fabricada pela em-
presa Resiswal e possui suas especificações gravadas no equipamento. A tensão de alimentação
é alternada de 127 V, potência de 600 W e uma corrente de aproximadamente 4,8 A.
26
A Figura 19 representa uma bomba d’água universal fabricada pela empresa Tecno-
logia em Sistemas Automotivos (TSA) geralmente utilizada em bombas de aquário ou para
jogar água no para-brisa dos carros. Ela tem como caracterı́stica uma tensão nominal de 12 V
contı́nua, uma corrente máxima de 1,5 A e uma única saı́da (TSA, 2017).
27
3 METODOLOGIA
Esse sistema é divido em dois subsistemas: um deles para realizar o controle e super-
visão do nı́vel e o outro para a temperatura em reservatórios diferentes. O mesmo é composto
por dois sensores que são responsáveis por realizarem as leituras das medidas e também por dois
atuadores responsáveis por executarem as ações do sistema. Todos esses equipamentos estão
ligados ao Arduino Uno, que por sua vez realiza uma comunicação serial com o computador
onde recebe e envia informações da interface gerada pelo software LabVIEW.
A alimentação do sensor se faz através dos pinos VCC e GND que são ligados di-
retamente na saı́da de 5 Volts do Arduino Uno e no terra, respectivamente. O pino TRIG é
conectado ao pino número 4 e recebe um sinal digital para que possa estar em nı́vel lógico
30
alto ou baixo sendo possı́vel o envio dos pulsos e posteriormente dê inı́cio a leitura do sensor
como explicado anteriormente. Já o pino ECHO é conectado ao pino número 5 do Arduino para
realizar as leituras através de um sinal PWM, como pode ser visto na Figura 21.
O sensor de temperatura DS18B20 possui três fios: amarelo, vermelho e preto. Os dois
últimos são utilizados para alimentação do mesmo, portanto, são ligados em 5 Volts e terra do
microcontrolador, respectivamente. Já o fio amarelo, o fio de dados, necessita de um resistor de
4,7 kΩ, como mostrado na Figura 23.
A conexão do módulo dimmer com a placa Arduino Uno (Figura 24) se dá através dos
pinos GND, ZC, DIM e VCC. O pino GND é conectado ao terra do Arduino e o VCC na saı́da
5 Volts do mesmo. Já os pinos ZC e DIM, em que o primeiro é responsável por verificar o
zerocross e o segundo de enviar os sinais de controle para o módulo, são conectados aos pinos
2, que fornece uma interrupção, e 9, que fornece um sinal PWM, respectivamente.
A interface gerada pelo programa LabVIEW para que o usuário possa realizar a super-
visão e também o controle de temperatura ou de nı́vel de um lı́quido para diferentes reservatórios
pode ser observada na Figura 25, facilitando assim o manuseio do sistema.
33
4 RESULTADOS
4.1 PROTÓTIPO
Na Figura 26 é mostrado o protótipo onde foi utilizado água como lı́quido para realizar
os testes e sintonizar o controlador PI, tanto do subsistema de nı́vel, quanto o de temperatura. Já
o circuito montado com o Arduı́no Uno, ponte H L298N, módulo dimmer e os sensores podem
ser vistos na Figura 27.
Para o subsistema de temperatura não foi possı́vel aplicar o primeiro método de Ziegler-
Nichols, pois a resistência utilizada para a implementação do mesmo, possui potência muito
elevada. Pode-se dizer que o módulo dimmer conseguiu amenizar a potência empregada na
resistência, mas não o suficiente, já que o mesmo não consegue trabalhar com exatidão abaixo
de 9 Volts (valor controlado pelo tempo t1 , Figura 17).
No segundo teste, foram utilizados os mesmos parâmetros para o controlador PI, porém
para um setpoint diferente (10 cm). Também com o auxı́lio da interface gerada no programa
LabVIEW, foi possı́vel obter as Figuras 32 e 33 que representam a resposta do subsistema.
39
5 CONSIDERAÇÕES FINAIS
Criou-se uma interface gráfica por meio do software LabVIEW, com o propósito de
analisar os dois subsistemas: o de nı́vel e o de temperatura. Juntamente com um módulo micro-
controlador Arduino Uno que foi capaz de realizar ações de controle nos atuadores e capturar
dados dos sensores.
O projeto ainda tem muito a evoluir. Baseado em algumas orientações e nas dificulda-
des geradas durante o desenvolvimento do trabalho, foi criada uma lista de possı́veis melhorias:
REFERÊNCIAS
CAMPOS, A. Arduino e dimmer com Triac: criando um amanhecer artificial. 2016. Dis-
ponı́vel em: <http://br-arduino.org/2016/03/arduino-triac-dimmer.html>. Acesso em: 15 de
maio de 2016.
DORF, R. C.; BISHOP, R. H. Sistemas de controle modernos. [S.l.]: Livros Técnicos e Ci-
entı́ficos, 2001.
IBRAHIM, D. Microcontroller based applied digital control. [S.l.]: John Wiley, 2006.
OGATA, K. Engenharia de controle moderno. 5. ed. [S.l.]: Pearson education do Brasil, 2010.
USINAINFO. Módulo Dimmer para Arduino Pic MC 8A. 2016. Disponı́vel em:
<https://goo.gl/g8NHWF>. Acesso em: 15 de maio de 2016.
44
/ / P r o g r a m a ç ã o p a r a o c o n t r o l e e s u p e r v i s ã o de n ı́ v e l
/ / I n c l u s ã o da b i b l i o t e c a do s e n s o r u l t r a s s ô n i c o HC−SR04
# i n c l u d e <U l t r a s o n i c . h>
/ / D e f i n i ç ã o d o s p i n o s do A r d uı́ n o UNO
# define p i n o t r i g g e r 4
# define pino echo 5
# d e f i n e IN1 1
# d e f i n e IN2 7
# define vazao 6
/ / A t i v a o s e n s o r u l t r a s s ô n i c o a t r a v é s da b i b l i o t e c a U l t r a s o n i c
Ultrasonic u l t r a s o n i c ( pino trigger , pino echo ) ;
/ / D e c l a r a ç ã o de v a r i á v e i s p r e s e n t e s na p r o g r a m a ç ã o
String string ;
char c ;
f l o a t cm , hmax = 3 2 , n i v e l , s e t p o i n t ;
f l o a t erro , p = 0 , i = 0 , pi = 0 , t d e c o r r i d o ;
/ / D e c l a r a ç ã o d o s p a r â m e t r o s do P I que podem s e r a l t e r a d s p e l o u s u á r i o
f l o a t kp = 8 . 7 5 ;
float ki = 0.24;
void s e t u p ( ) {
/ / D e f i n e a t a x a de t r a n s i ç ã o de d a d o s s e r i a i s
S e r i a l . begin (115200);
/ / D e f i n e o p i n o IN1 como s a ı́ d a
pinMode ( IN1 , OUTPUT ) ;
/ / D e f i n e o p i n o IN2 como s a ı́ d a
pinMode ( IN2 , OUTPUT ) ;
/ / D e f i n e o p i n o v a z a o como s a ı́ d a
pinMode ( vazao , OUTPUT ) ;
void loop ( ) {
45
/ / R e a l i z a a l e i t u r a e armazena dados e n t r a d a s e r i a l ( s t r i n g )
/ / Limpa a s t r i n g
i f ( S e r i a l . a v a i l a b l e ( ) > 0) {
string = ”” ;
}
while ( S e r i a l . a v a i l a b l e ( ) > 0) {
c = S e r i a l . read ( ) ;
i f ( c == ’ ; ’ ) {
break ;
} else {
/ / Concatena a s t r i n g
string = string + c;
}
delay ( 1 ) ;
}
/ / R e a l i z a a t r a n s f o r m a ç ã o de uma S t r i n g em F l o a t p a r a que s e j a p o s s ı́ v e l
/ / d e f i n i r um v a l o r de s e t p o i n t
setpoint = string . toFloat ();
/ / U t i l i z a n d o a b i b l i o t e c a U l t r a s s o n i c p a r a e x t r a i r os dados
/ / do s e n s o r HC−SR04
long microsec = u l t r a s o n i c . timing ( ) ;
cm = u l t r a s o n i c . c o n v e r t ( m i c r o s e c , U l t r a s o n i c : :CM) ;
/ / R e a l i z a a l e i t u r a do n ı́ v e l do l ı́ q u i n o no r e s e r v a t ó r i o
n i v e l = ( hmax − cm ) ;
/ / C a l c u l a a v a r i a ç ã o e n t r e o n ı́ v e l medido e o s e t p o i n t .
erro = setpoint − nivel ;
/ / C a l c u l a a d i f e r e n ç a em s e g u n d o s e n t r e um l o o p
f l o a t d e l t a = ( ( m i l l i s ( ) − t d e c o r r i d o ) ) / 1000;
/ / C o n t a q u a n t o tempo l e v o u p a r a d a r um l o o p
tdecorrido = millis ();
/ / Controle Proporcional
p = kp ∗ e r r o ;
/ / Controle I n t eg r a l
i += ( k i ∗ e r r o ) ∗ d e l t a ;
/ / PI
pi = p + i ;
/ / C o n t r o l e P I ( l i m i t a ç õ e s )
i f ( pi < 0) {
pi = 0;
p = 0;
i = 0;
}
i f ( pi > 255) {
46
pi = 255;
}
/ / Insere o controle
a n a l o g W r i t e ( vazao , p i ) ;
/ / Realiza a e s c r i t a serial
Serial . p r i n t ( nivel , 1);
S e r i a l . p r i n t ( ”\ t ” ) ;
S e r i a l . p r i n t ( ”\ t ” ) ;
Serial . println ( setpoint );
delay (150);
}
47
/ / P r o g r a m a ç ã o p a r a o c o n t r o l e e s u p e r v i s ã o de t e m p e r a t u r a
/ / I n c l u s ã o da b i b l i o t e c a s p a r a o f u n c i o n a m e n t o do s e n s o r DS18B20
/ / e tamb ém da b i b l i o t e c a do Timer1
# i n c l u d e <OneWire . h>
# i n c l u d e <D a l l a s T e m p e r a t u r e . h>
# i n c l u d e <TimerOne . h>
/ / D e f i n e o s p i n o s do A r d uı́ n o UNO
# d e f i n e ONE WIRE BUS 3
# d e f i n e PINO ZC 2
# d e f i n e PINO DIM 9
/ / A t i v a o s e n s o r DS18B20
OneWire oneWire ( ONE WIRE BUS ) ;
D a l l a s T e m p e r a t u r e s e n s o r s (& oneWire ) ;
/ / P r o c u r a o e n d e r e ç o s o s e n s o r
DeviceAddress sensor1 ;
/ / D e c l a r a ç ã o d a s v a r i á v e i s p r e s e n t e s na p r o g r a m a ç ã o
String string ;
char c ;
f l o a t temp , s e t p o i n t , t 1 ;
f l o a t erro , p , i , pi , t d e c o r r i d o , p o t e n c i a ;
/ / D e c l a r a ç ã o d o s p a r â m e t r o s do P I que podem s e r a l t e r a d s p e l o u s u á r i o
f l o a t kp = 1 ;
f l o a t ki = 10;
/ / Funç ão p a r a d e t e c t a r o z e r o c r o s s
void z e r o c r o s s ( ) {
i f ( pi > 0) {
/ / C a l c u l a o tempo de d e l a y ( t 1 ) p a r a o d i s p a r o do mod úlo dimmer
l o n g d i m t i m e = i n t ( map ( p o t e n c i a , 0 , 1 0 0 , 8 0 0 0 , 1 5 0 ) ) ;
/ / A s s o c i a a f u n ç ã o DIM com i n t e r r u p c a o do Timer1
Timer1 . a t t a c h I n t e r r u p t ( DIM , d i m t i m e ) ;
// I n i c i a c o n t a g e m Timer1
Timer1 . s t a r t ( ) ;
}
else {
/ / Mantém g a t e do m ódulo d e s a t i v a d o .
d i g i t a l W r i t e ( PINO DIM , LOW) ;
48
Timer1 . s t o p ( ) ;
}
}
void s e t u p ( ) {
/ / D e f i n e a t a x a de t r a n s i ç ã o de d a d o s s e r i a i s
S e r i a l . begin (115200);
/ / I n i c i a l i z a o s e n s o r DS18B20
sensors . begin ( ) ;
/ / E n c o n t r a o e n d e r e ç o do s e n s o r DS18B20
sensors . getAddress ( sensor1 , 0 ) ;
/ / I n i c i a l i z a Timer1
Timer1 . i n i t i a l i z e ( ) ;
/ / C o n f i g u r a a i n t e r r u p ç ã o z e r o c r o s s a c a d a p a s s a g e m p e l o z e r o da r e d e
a t t a c h I n t e r r u p t ( 0 , z e r o c r o s s , FALLING ) ;
/ / D e f i n e o PINO DIM como s a ı́ d a
pinMode ( PINO DIM , OUTPUT ) ;
/ / D e f i n e o PINO DIM em n ı́ v e l l ó g i c o b a i x o
d i g i t a l W r i t e ( PINO DIM , LOW) ;
}
void loop ( ) {
/ / R e a l i z a a l e i t u r a e armazena dados e n t r a d a s e r i a l ( s t r i n g )
/ / Limpa a s t r i n g
i f ( S e r i a l . a v a i l a b l e ( ) > 0) {
string = ”” ;
}
while ( S e r i a l . a v a i l a b l e ( ) > 0) {
c = S e r i a l . read ( ) ;
i f ( c == ’ ; ’ ) {
break ;
} else {
/ / Concatena a s t r i n g
string = string + c;
}
delay ( 1 ) ;
}
/ / R e a l i z a a t r a n s f o r m a ç ã o de uma S t r i n g em F l o a t p a r a que s e j a p o s s ı́ v e l
/ / d e f i n i r um v a l o r de s e t p o i n t
setpoint = string . toFloat ();
49
/ / Funç ão d a s b i b l i o t e c a s p a r a c a l c u l o da t e m p e r a t u r a em oC
sensors . requestTemperatures ( ) ;
temp = s e n s o r s . getTempC ( s e n s o r 1 ) ;
/ / C a l c u l a a v a r i a ç ã o e n t r e a t e m p e r a t u r a medida e o s e t p o i n t .
e r r o = s e t p o i n t − temp ;
/ / C a l c u l a a d i f e r e n ç a em s e g u n d o s e n t r e um l o o p
f l o a t d e l t a = ( ( m i l l i s ( ) − t d e c o r r i d o ) ) / 1000;
/ / C o n t a q u a n t o tempo l e v o u p a r a d a r um l o o p
tdecorrido = millis ();
/ / Controle Proporcional
p = kp ∗ e r r o ;
/ / Controle I n t eg r a l
i += ( k i ∗ e r r o ) ∗ d e l t a ;
/ / PI
pi = p + i ;
/ / C o n t r o l e P I ( l i m i t a ç õ e s )
i f ( pi < 0) {
pi = 0;
p = 0;
i = 0;
}
/ / N e c e s s á r i o l i m i t a r a p o t ê n c i a da r e s i s t ê n c i a de a q u e c i m e n t o
i f ( pi > 60) {
pi = 60;
}
potencia = pi ;
/ / Realiza a e s c r i t a serial
S e r i a l . p r i n t ( ”\ t ” ) ;
S e r i a l . p r i n t ( temp , 2 ) ;
S e r i a l . p r i n t ( ”\ t ” ) ;
Serial . println ( setpoint );
}