Escolar Documentos
Profissional Documentos
Cultura Documentos
9º PERÍODO
UBERABA
2023
Felipe Mendes Marques
UBERABA
2023
SUMÁRIO
1. INTRODUÇÃO..................................................................................................................... 4
2. OBJETIVOS.........................................................................................................................5
3. DESENVOLVIMENTO......................................................................................................... 5
3.1. COMPONENTES ELETRÔNICOS E PRECIFICAÇÃO.............................................. 6
3.2. FUNCIONAMENTO...................................................................................................14
3.3. CÓDIGO PARA O ARDUÍNO....................................................................................18
3.4. IMPLEMENTAÇÃO PARA O CONTROLE PID......................................................... 22
4. SUPERVISÓRIO NO ELIPSE SCADA.............................................................................. 24
4.1. CORREÇÃO DO ERRO DE TELA AZUL..................................................................24
4.2. TELA E ELEMENTOS DE CONFIGURAÇÃO.......................................................... 25
5. APRESENTAÇÃO............................................................................................................. 27
6. CONSIDERAÇÕES FINAIS...............................................................................................34
REFERÊNCIAS BIBLIOGRÁFICAS..................................................................................... 35
4
1. INTRODUÇÃO
2. OBJETIVOS
3. DESENVOLVIMENTO
Para montar este projeto, separamos uma lista completa com os componentes
eletrônicos necessários, e também o esquemático mais abaixo na Figura 01.
● 2 Transistores BC548
Valor (10 Unidades): R$ 13,42
● 1 Diodo 1N4007
Valor (100 Unidades): R$ 20,04
● 1 Resistor de 1K 5% (1/4W)
Valor (50 Unidades): R$ 18,37
● Fios Jumpers
-40/pcs De 20cm Macho/fêmea: R$ 17,00
-40/pcs De 20cm Macho/macho: R$ 23,52
O valor total dos componentes foi R$ 316,82. Porém efetivamente o valor foi R$
281,82 por já termos a fonte e o cooler.
3.2. FUNCIONAMENTO
Figura 04. Esquema com base na Placa McLab2 para alimentar o fan.
Figura 05. Esquema com base na placa McLab2 para alimentar o resistor de fio 5W.
18
Utilizamos este código abaixo, onde após enviar para o Arduino e observar o
Display LCD, ou o Supervisório, será possível visualizar o resultado das medições.
Iniciamos o SetPoint da temperatura como 25ºC, e se a leitura do termopar ultrapassar
esse valor, desligamos o resistor e a ventoinha entra em funcionamento.
É interessante pontuar que existe a necessidade de importar os arquivos zipados
das bibliotecas Wire, Modbusino e LiquidCrystal_I2C para que o código compile e
funcione corretamente.
int resistor = 7;
int fan = 6;
int botaoAumenta = 5; // BOTAO DE AUMENTAR A SP
int botaoDiminui = 4;
int botaoONOFF = 2;
int lastAumenta = HIGH;
int lastDiminui = HIGH;
int lastONOFF = HIGH;
bool teto = false; // 0 EMBAIXO 1 EM CIMA
bool chao = false;
float histerese = 0.25;
bool ONOFF = false;
int ktcSO = 8; //PINO DIGITAL (SO)
int ktcCS = 9; //PINO DIGITAL (CS)
int ktcCLK = 10; //PINO DIGITAL (CLK / SCK)
float set_point = 25.0;
void setup() {
modbusino_slave.setup(9600); /* Definindo a taxa de
transferencia em bauds */
pinMode(fan, OUTPUT);
pinMode(resistor, OUTPUT);
pinMode(botaoAumenta, INPUT_PULLUP);
pinMode(botaoDiminui, INPUT_PULLUP);
pinMode(botaoONOFF, INPUT_PULLUP);
lcd.begin();
lcd.clear();
void setDisplay() {
lcd.setCursor(0, 0);
lcd.print("SP: ");
lcd.setCursor(3, 0);
lcd.print(set_point);
lcd.setCursor(0, 1);
lcd.print("MV: ");
lcd.setCursor(3, 1);
lcd.print(ktc.readCelsius());
lcd.setCursor(9, 1);
lcd.print("H: ");
lcd.setCursor(11,1);
lcd.print(histerese);
lcd.setCursor(13, 0);
if (ONOFF) {
lcd.print("ON ");
} else {
lcd.print("OFF");
}
}
void readBotaoAumenta() {
int readingAumenta = digitalRead(botaoAumenta);
if (readingAumenta != lastAumenta) {
if (readingAumenta == LOW) {
set_point++;
}
delay(50);
}
20
if (tab_reg[3] == 1) {
set_point++;
tab_reg[3] = 0;
}
lastAumenta = readingAumenta;
}
void readBotaoDiminui() {
int readingDiminui = digitalRead(botaoDiminui);
if (readingDiminui != lastDiminui) {
if (readingDiminui == HIGH) {
set_point--;
}
delay(50);
}
if (tab_reg[4] == 1) {
set_point--;
tab_reg[4] = 0;
}
lastDiminui = readingDiminui;
}
void readBotaoONOFF() {
int readingONOFF = digitalRead(botaoONOFF);
if (readingONOFF != lastONOFF) {
if (readingONOFF == LOW) {
ONOFF = !ONOFF;
}
delay(50);
}
lastONOFF = readingONOFF;
}
void loop() {
/*Exemplo de como passar valores para os registradores
tab_reg[0] = 600;
setDisplay();
ONOFF = tab_reg[2];
histerese = (float) (tab_reg[7] / 100.0);
21
readBotaoAumenta();
readBotaoDiminui();
readBotaoONOFF();
if (ONOFF) {
if (ktc.readCelsius() >= (set_point + histerese)) {
digitalWrite(fan, HIGH);
digitalWrite(resistor, LOW);
}
else if (ktc.readCelsius() <= (set_point - histerese)) {
digitalWrite(resistor, HIGH);
}
if (ktc.readCelsius() < (set_point + histerese)) {
digitalWrite(fan, LOW);
}
} else {
digitalWrite(fan, LOW);
digitalWrite(resistor, LOW);
}
tab_reg[0] = set_point;
tab_reg[1] = (int16_t) (ktc.readCelsius() * 100);
tab_reg[2] = ONOFF;
tab_reg[5] = digitalRead(resistor);
tab_reg[6] = digitalRead(fan);
tab_reg[7] = (int16_t) (histerese * 100);
void setup() {
Serial.begin(9600);
}
void loop() {
y=map.(analogRead(A0), 20, 358, -40, 125); //LEITURA DA PV
Serial.print("PV = ");
Serial.println(y);
float e=y-sp; //DEFINE O ERRO DO PROCESSO
Serial.print("Erro = ");
Serial.println(e);
p=kd*e; //DEFINE O ERRO PROPORCIONAL
i=i+(ki*h*e); //DEFINE O CONTROLE INTEGRAL
float u=p+i //DEFINE O SINAL DE CONTROLE (MV)
u=map(u, -4098, 4098, 0, 225);
Serial.print("MV= ");
Serial.println(u);
analogWrite(10, u); //ESCREVE O SINAL DE CONTROLE NO ATUADOR
delay(500);
}
O código acima representa uma possível implementação para o controle PID que
foi proposto no escopo do projeto. Porém o grupo não conseguiu realizar a
implementação, e nós acreditamos que foi pelos motivos a seguir.
Uma das referências de montagem no escopo era a presente na Figura 06.
23
Para se ter um controle de tensão da ventoinha, pelo arduíno, por exemplo, seria
ideal que a alimentação dela fosse de 5V. Porém nós só tínhamos ventoinhas de 12V,
então ao conectarmos pelo arduíno, o RPM ficou bem baixo pelo fato da placa só
conseguir alimentar devidamente até 0,5A no pino de 5V.
Outro ponto é que o grupo decidiu que o esquema de montagem da placa
McLab2 seria mais interessante e mais simples, decisão essa que também foi
aconselhada pelo professor. Porém, mesmo a montagem do McLab2 possuindo um
transistor BC548 / 547, acreditamos que não foi o suficiente para controlarmos a tensão.
Por isso o controle feito foi ON/OFF com histerese, emitindo HIGH para a base do
transistor quando o resistor atingir o valor de SetPoint, e LOW para quando o valor
normalizar.
Acreditamos que para o controle de tensão seja necessário um transistor de
potência feito o BD679, presente na Figura 06. Ou então um relé para realizar o
chaveamento com tensão. Contudo, mesmo o controle não atingindo esse ponto de
sofisticação, ele ficou preciso e bastante eficiente nos experimentos.
24
No Elipse Scada, utilizamos Tags PLC como variáveis para nosso programa, Tags
com expressões matemáticas para amostragem adequada como HIST_FLOAT e
MOSTRAR_PV, Tag Demo para fazer um contador para animação do cooler, realizando
assim comunicação bidirecional pelo supervisório, ou seja, para receber e enviar dados
para o Arduino. Criamos Tags para estados dos elementos finais de controle, estado dos
botões, valores de SP e também foi definida uma última para histerese. A histerese nada
mais é do que um “atraso”, essa é uma função disponível nos controladores de temperatura
que tem como objetivo definir a diferença de temperatura na qual o sistema irá ligar
novamente, após desligar pelo setpoint. Assim sendo, possibilitamos definir um valor para
histerese diretamente pelo programa.
Para transmissão dos dados seriais para nosso Arduino, utilizamos o driver Modicon
Modbus, responsável por implementar comunicação serial entre o sistema supervisório e o
Arduino. Esse driver não vem instalado por padrão no Elipse Scada, mas é possível fazer o
download na seguinte página:
<https://www.elipse.com.br/en/downloads/?key=Modbus.dll&language=ptbr>.
27
5. APRESENTAÇÃO
6. CONSIDERAÇÕES FINAIS
REFERÊNCIAS BIBLIOGRÁFICAS
[1] CAVALIERI, Renan; MESSINA, Ana Paula. Tecdicas. Um site sobre desenvolvimento,
Linux, eletrônica, informática e tecnologia em geral. Disponível em:
<https://tecdicas.com/controle-de-fan-com-sensor-de-temperatura-e-arduino/>. Acesso
em: 06 mai. 2023.
[5] GUSTAVO, Luis. Como integrar o Supervisório ELIPSE SCADA com o Arduino? -
Projeto Integrador 4. 2020. (1h4m46s). Disponível em:
<https://www.youtube.com/watch?v=a4Ab418E9sM&t=3373s&ab_channel=LGUSTAVOE
xerc%C3%ADcioseProjetosdoLivro>. Acesso em: 07 jul. 2023.
[7] BECHELENI, Ilgner. Tutorial - Supervisório ELIPSE SCADA com ARDUINO - Parte
2. 2021. (8m13s). Disponível em:
<https://www.youtube.com/watch?v=PHk2lKHxBFg&ab_channel=CodificaDev>. Acesso
em: 07 jul. 2023.