Sie sind auf Seite 1von 13

Controle de tanques com supervisório

Control tanks with supervisory

Thais Marqui Guilherme1


Thiago Merighi de Souza2
Vitor Silveira Rolin3

Resumo
O trabalho que foi desenvolvido tem como intuito o controle de 3 (três) tanques de um
líquido qualquer, por meio de um supervisório criado no programa Visual Studio, este
por sua vez recebe os dados fornecidos pelo firmware programado na plataforma
Arduino que envia dados analógicos que serão tratados pelo programa supervisório e
com base nos resultados obtidos executará determinadas ações pré-definidas em sua
programação que serão ilustradas ao usuário por meio da tela do supervisório, bem
como os sinais analógicos poderão ser manipulados pelo Proteus ou por meio físico,
circuito montado em uma protoboard com o auxílio de potenciômetros simulando os
sensores.
PalavrasChave: Controle, Supervisório, Tanques.

Abstract
The homework developed there is intention to control three tanks with any liquid,
through a supervisory created in Visual Studio software, this in turn receives the data
provided by the firmware on Arduino platform that sends analog data which will be
handled by the supervisory program and based on the results perform certain pre-
defined actions in your programming that will be shown to the user through the
supervisory screen and analog signals can be handled by Proteus or by physical
means. Took a circuit on a breadboard with the aid of potentiometers simulating the
sensors.
Key words: Control, Supervision, Tanks.

1
Acadêmico do 9° termo do curso de Engenharia Mecat rônica no Centro Universitário Católico
Salesiano Auxilium de Araçatuba. E-mail: thaismarqui_g@hotmail.com
2
Acadêmico do 9° termo do curso de Engenharia Mecat rônica no Centro Universitário Católico
Salesiano Auxilium de Araçatuba. E-mail: thiagomerighi94@gmail.com
3
Acadêmico do 9° termo do curso de Engenharia Mecat rônica no Centro Universitário Católico
Salesiano Auxilium de Araçatuba. E-mail: vitorrollin@hotmail.com
Introdução
O trabalho desenvolvido tem como base a necessidade de controlar 3
(três) tanques ocupados por um líquido qualquer, através de um programa
supervisório criado no Visual Studio. Cada tanque possui diâmetro de 4
(quatro) metros e altura de 5 (cinco) metros, sendo sua ocupação total 63
(sessenta e três) m3, calculado através da fórmula: Volume = diâmetro * altura *
π.
Com base no volume calculado programou-se em linguagem visual basic
diversas comparações para serem executadas linhas de programação quando
atingissem determinados valores, como: se os tanques chegarem em um valor
abaixo de 6,3 m3 (ou seja, abaixo de 10 %) de sua capacidade a válvula do
tanque especifico se abrirá e ligará a bomba e a válvula geral do sistema, caso
elas estejam desligadas, para encher o tanque, assim que o tanque atingir o
valor de 56,7 m3 (ou 90 % de sua capacidade), desligará a válvula do tanque
não permitindo a entrada de líquidos no mesmo, bem como caso o tanque
continue enchendo mesmo depois da válvula fechada, ou seja, caso o valor
seja acima de 57,3 m3, sendo 91 % de sua ocupação, isto irá significar que a
válvula deste tanque está com defeito, visto que se a válvula estiver fechada
deverá proibir a passagem de qualquer fluído para o tanque, sendo assim a
válvula ficará vermelha e um aviso de "Válvula do Tanque x com defeito!" será
exibido no supervisório em sua tela de avisos. O sistema também irá verificar
se todos os 3 (três) tanques chegarem a valores superiores a 90 % de sua
capacidade, 56,7 m3, a válvula e a bomba geral será desligada.
Outra verificação realizada pelo programa é referente a temperatura da
tubulação, caso ela esteja acima de 80 ºC, será acionada uma válvula e uma
bomba de refrigeração que apenas será desligada, caso o valor diminua.

Softwares utilizados

Programação Visual Studio


Public Class Form1
Dim varbox As Integer
Dim recebe As String
Sub GetSerialPortName()
For Each sp As String In My.Computer.Ports.SerialPortNames
ListPortas.Items.Add(sp)
Next
End Sub

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs)


Handles MyBase.Load
GetSerialPortName()
btnAbrir.Enabled = True
btnFechar.Enabled = False
btLiga.Enabled = False
btDesliga.Enabled = False
tanque1.Forma = 3
tanque2.Forma = 3
tanque3.Forma = 3
ledOn.Ligado = False
ledOff.Ligado = True
ledOn.Cor = 2
End Sub

Private Sub btnAbrir_Click(sender As System.Object, e As


System.EventArgs) Handles btnAbrir.Click
On Error GoTo Saida
If lblPortaAtual.Text = "......" Then
varbox = MsgBox("Selecione uma porta listada.", vbOKOnly +
MsgBoxStyle.Exclamation, "Acesso a porta")
GoTo Saida
End If
If IsNothing(lblPortaAtual.Text) Then
varbox = MsgBox("Selecione uma porta listada.", vbOKOnly +
MsgBoxStyle.Exclamation, "Acesso a porta")
GoTo Saida
End If
If SerialPort1.IsOpen = False Then
SerialPort1.PortName = lblPortaAtual.Text
SerialPort1.Open()
btnAbrir.Enabled = False
btnFechar.Enabled = True
txtMensagem.Enabled = True
btnLimpar.Enabled = True
btLiga.Enabled = True
btDesliga.Enabled = True
End If
Saida:
End Sub
Private Sub ListPortas_SelectedIndexChanged(sender As System.Object, e
As System.EventArgs) Handles ListPortas.SelectedIndexChanged
lblPortaAtual.Text = ListPortas.Text
End Sub

Private Sub btnFechar_Click(sender As System.Object, e As


System.EventArgs) Handles btnFechar.Click
If SerialPort1.IsOpen = True Then
SerialPort1.Close()
btnAbrir.Enabled = True
btnFechar.Enabled = False
lblPortaAtual.Text = "......"
txtMensagem.Enabled = False
btnLimpar.Enabled = False
End If
End Sub

Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs)


Handles Timer1.Tick
If SerialPort1.IsOpen = True Then
SerialPort1.Write("R")
recebe = ""
If SerialPort1.BytesToRead > 0 Then
recebe = SerialPort1.ReadExisting()
txtMensagem.Text = recebe & "/" & vbCrLf & txtMensagem.Text

If Len(recebe) = 16 Then

tanque1.Valor = Mid(recebe, 1, 4) * 1 * 0.061583577712609971


tanque2.Valor = Mid(recebe, 5, 4) * 1 * 0.061583577712609971
tanque3.Valor = Mid(recebe, 9, 4) * 1 * 0.061583577712609971
valvulaRefrigeracao.Valor = Mid(recebe, 13, 4) * 1 *
0.11730205278592376

mostrador.Valor = valvulaRefrigeracao.Valor

' Verifica se todos os tanques estão com nível igual ou superior a


90 % e desliga a bomba e a válvula geral
If tanque1.Valor >= 56.7 And tanque2.Valor >= 56.7 And
tanque3.Valor >= 56.7 Then
bombaValvulas.Situacao = 0
valvulaGeral.Situacao = 0
End If

' Verifica se algum tanque esta com nível abaixo de 10 % e liga a


bomba e a válvula geral
If tanque1.Valor < 6.3 Or tanque2.Valor < 6.3 Or tanque3.Valor <
6.3 Then
bombaValvulas.Situacao = 1
valvulaGeral.Situacao = 1
End If

'Faz as verificações do Tanque 1


If tanque1.Valor >= 57.3 And tanque1.Valor <= 63 Then
avisos.Text = "Válvula do Tanque 1 com defeito!"
valvula1.Situacao = 2
ElseIf tanque1.Valor >= 56.7 And tanque1.Valor <= 57.2 Then
valvula1.Situacao = 0
avisos.Text = " "
ElseIf tanque1.Valor < 6.3 Then
valvula1.Situacao = 1
avisos.Text = " "
ElseIf tanque1.Valor < 57.3 And valvula1.Situacao = 2 Then
valvula1.Situacao = 0
avisos.Text = " "
End If

'Faz as verificações do Tanque 2


If tanque2.Valor >= 57.3 And tanque2.Valor <= 63 Then
avisos2.Text = "Válvula do Tanque 2 com defeito!"
valvula2.Situacao = 2
ElseIf tanque2.Valor >= 56.7 And tanque2.Valor <= 57.2 Then
valvula2.Situacao = 0
avisos2.Text = " "
ElseIf tanque2.Valor < 6.3 Then
valvula2.Situacao = 1
avisos2.Text = " "
ElseIf tanque2.Valor < 57.3 And valvula2.Situacao = 2 Then
valvula2.Situacao = 0
avisos2.Text = " "
End If

'Faz as verificações do Tanque 3


If tanque3.Valor >= 57.3 And tanque3.Valor <= 63 Then
avisos3.Text = "Válvula do Tanque 3 com defeito!"
valvula3.Situacao = 2
ElseIf tanque3.Valor >= 56.7 And tanque3.Valor <= 57.2 Then
valvula3.Situacao = 0
avisos3.Text = " "
ElseIf tanque3.Valor < 6.3 Then
valvula3.Situacao = 1
avisos3.Text = " "
ElseIf tanque3.Valor < 57.3 And valvula3.Situacao = 2 Then
valvula3.Situacao = 0
avisos3.Text = " "
End If

' Faz as verificações da válvula de temperatura


If valvulaRefrigeracao.Valor > 80 Then
valvulaRefrigeracao.Situacao = 1
bombaRefrigeracao.Situacao = 1
Else
valvulaRefrigeracao.Situacao = 0
bombaRefrigeracao.Situacao = 0
End If

End If
End If
End If
End Sub

Private Sub btnLimpar_Click(sender As System.Object, e As


System.EventArgs) Handles btnLimpar.Click
txtMensagem.Text = ""
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles


btLiga.Click
Timer1.Enabled = True
ledOn.Ligado = True
ledOff.Ligado = False
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles
btDesliga.Click
Timer1.Enabled = False
txtMensagem.Text = ""
ledOn.Ligado = False
ledOff.Ligado = True
bombaValvulas.Situacao = 0
valvulaGeral.Situacao = 0
valvulaRefrigeracao.Situacao = 0
bombaRefrigeracao.Situacao = 0
valvula1.Situacao = 0
valvula2.Situacao = 0
valvula3.Situacao = 0
tanque1.Valor = 0
tanque2.Valor = 0
tanque3.Valor = 0
avisos.Text = " "
avisos2.Text = " "
avisos3.Text = " "
btLiga.Enabled = False
btDesliga.Enabled = False
End Sub

End Class
Telas do Visual Studio

Figura 1 - Tela do Visual Studio simulando o supervisório desligado.


Fonte: Fonte própria.

Figura 2 - Tela do Visual Studio simulando o supervisório apontando problemas nas


válvulas dos tanques.
Fonte: Fonte própria.
Figura 3 - Tela do Visual Studio simulando o supervisório com os tanques em 90 % de
sua ocupação.
Fonte: Fonte própria.

Figura 4 - Tela do Visual Studio simulando o supervisório com os tanques abaixo de


10 % de sua ocupação.
Fonte: Fonte própria.
Proteus

Figura 5 - Layout do circuito elétrico no Proteus.


Fonte: Fonte própria.

Arduino
byte recebe = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
recebe = Serial.read();
if (recebe==82) {

// Recebe variáveis da porta A0


if (analogRead(A0) < 1000) { Serial.print("0");}
if (analogRead(A0) < 100) { Serial.print("0");}
if (analogRead(A0) < 10) { Serial.print("0");}
Serial.print(analogRead(A0));

// Recebe variáveis da porta A1


if (analogRead(A1) < 1000) { Serial.print("0");}
if (analogRead(A1) < 100) { Serial.print("0");}
if (analogRead(A1) < 10) { Serial.print("0");}
Serial.print(analogRead(A1));

// Recebe variáveis da porta A2


if (analogRead(A2) < 1000) { Serial.print("0");}
if (analogRead(A2) < 100) { Serial.print("0");}
if (analogRead(A2) < 10) { Serial.print("0");}
Serial.print(analogRead(A2));

// Recebe variáveis da porta A3


if (analogRead(A3) < 1000) { Serial.print("0");}
if (analogRead(A3) < 100) { Serial.print("0");}
if (analogRead(A3) < 10) { Serial.print("0");}
Serial.print(analogRead(A3));

delay(100);
}
}
}
Considerações finais
Ao término deste projeto concluiu-se que é necessário criar um esboço
antes de efetuar qualquer programação ou circuito elétrico, visto que é a
melhor forma de compreender o que o enunciado esta pedindo, pois como o
mesmo contem uma gama de verificações e condições para os tanques,
válvulas e bombas, por meio de um esboço é possível achar os melhores
caminhos para iniciar a programação. E após a conclusão da programação é
necessário efetuar diversos testes com base em todas as condições que o
enunciado propôs, para ter certeza que todas as condições estão sendo
devidamente atingidas.

Das könnte Ihnen auch gefallen