Escolar Documentos
Profissional Documentos
Cultura Documentos
Frequencímetro
LISTA DE ILUSTRAÇÕES
FIGURA
1. Tela Principal 5
FIGURA 2. TELA PRINCIPAL...........................................................................5
FIGURA 3. TELA PRINCIPAL............................................................................6
FIGURA 4. EXPORTAR DADOS.........................................................................6
FIGURA 5. IMPORTAR DADOS..........................................................................6
FIGURA 7. ACIOANAMENTO BOMBA DE AQUARIO..........................................8
APÊNDICE B – FLUXOGRAMA.........................................................................25
Departamento de Engenharia Elétrica
SUMÁRIO
1. INTRODUÇÃO..........................................................................................4
2. METODOLOGIA.......................................................................................5
2.1. Software...................................................................................................................................................5
2.2. Interfaces Gráficas e Fluxogramas (UML)..............................................................................................5
2.3. Classes e Funções....................................................................................................................................7
2.4. Orçamento do projeto..............................................................................................................................7
3. MATERIAIS E MÉTODOS.........................................................................8
3.1. Descrição dos Testes Realizados no Hardware.......................................................................................8
3.2. Descrição dos Sistemas de Aquisição de Dados.....................................................................................9
4. CONSIDERAÇÕES FINAIS......................................................................10
4.1. Avaliação dos Objetivos Propostos.......................................................................................................10
4.2. Problemas Encontrados.........................................................................................................................10
4.3. Conclusões.............................................................................................................................................10
5. REFERÊNCIAS......................................................................................11
APÊNDICE A – CÓDIGO..................................................................................12
APÊNDICE B – FLUXOGRAMA.........................................................................25
Departamento de Engenharia Elétrica
1. INTRODUÇÃO
2. METODOLOGIA
2.1. Software
O software foi desenvolvido através do programa C++ Builder, que mostrará
a tela de navegação e supervisório do Frequencímetro e utilizado a interface arduino
para a leitura da freqüência.
Departamento de Engenharia Elétrica
Caso não for digitado um número será exibida uma mensagem, conforme
Figura 3.
3. MATERIAIS E MÉTODOS
Para criação desse projeto foi utilizado o software e hardware onde teve
como objetivo automatizar o processo de controle de nível de um material qualquer.
O sensor emite uma onda ultrassônica durante um determinado tempo, esta onda
sonora rebate no material e retorna ao receptor do sensor. O tempo que a onda leva
para ir e voltar são medidos pelo sensor, e como a velocidade do som é conhecida, é
possível calcular a distância do objeto através da equação:
Bomba de
Aquário
O software foi desenvolvido através do Borland C++ Builder onde será feita
a programação orientada a objetos para ter a interface visual do usuário através do
Windows. Será utilizado um sensor ultrassom HC-SR04 onde será emitido um
pulso pelo pino Trigger e recebido pelo pino Echo, esse pulsos serão enviados para a
placa Arduino MEGA 2560 e após enviados os dados pela serial. Esses dados são
tratados por 2 classes onde na Nivel.h é responsável pelo cálculo para se ter a
distância sendo que na Unit4.h / Unit4.cpp faz o controle do acionamento onde
verifica o estado que se encontra a partir dos dados enviados pelo sensor.
Os dados recebidos pela serial são armazenados em uma matriz onde esses
dados são exportados para uma nova janela onde o software permite ao usuário
realizar o salvamento das informações adquiridas nas leituras realizadas.
Departamento de Engenharia Elétrica
4. CONSIDERAÇÕES FINAIS
4.3. Conclusões
Neste trabalho aprendemos como desenvolver, planejar e executar o projeto
tendo como objetivo da cadeira a criação de classes, construtores, destrutores onde
agregamos conhecimento para proporcionar uma programação mais simplificada
sem repetição dos comandos e com uma compreensão mais fácil.
5. REFERÊNCIAS
http://www.arduinoecia.com.br/2013/05/ligando-uma-lampada-com-
rele.html
http://users.ece.utexas.edu/~valvano/Datasheets/HCSR04b.pdf
Departamento de Engenharia Elétrica 11
APÊNDICE A – CÓDIGO
#include <Ultrasonic.h>
#define TRIGGER_PIN 12
#define ECHO_PIN 13
int led = 11,rele;
Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);
void setup()
{
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop()
{
float cmMsec, inMsec;
long microsec = ultrasonic.timing();//Leitura do tempo
byte txbf[10];
sprintf((char*)txbf,"%06d",microsec);//Converte para formato 6 digitos
Serial.write(txbf,6);
if(Serial.available())
{//Verifica se chegou algum byte
char Valor = Serial.read();//Lê o valor que foi enviado
if(Valor == '1')
{
digitalWrite(led, HIGH);
}
else
{
digitalWrite(led, LOW);
– Revisão A
Universidade Luterana do Brasil
Departamento de Engenharia Elétrica 12
}
}
delay(1000);
}
II. NIVEL.H
#ifndef NivelH
#define NivelH
#include <math.h>
#include <iostream.h>
//------------------------------------------------------------------------------
class Nivel{
private:
public:
float v;
float k;
float d;
void Nivel::fCalculaVelocidade(int Temperatura, double Velocidade);
void Nivel::fCalculaAltura(double);
};
//------------------------------------------------------------------------------
void Nivel::fCalculaVelocidade(int Temperatura, double Velocidade)
{
k=pow(Velocidade,2)/(Temperatura+273);
v=sqrt(k*(Temperatura+273));
}
//------------------------------------------------------------------------------
void Nivel::fCalculaAltura(double tempo)
{
d=(29.7-((tempo*v/20000)));
}
//------------------------------------------------------------------------------
#endif
– Revisão A
Universidade Luterana do Brasil
Departamento de Engenharia Elétrica 13
III. RELE.H
#ifndef ReleH
#define ReleH
//---------------------------------------------------------------------------
class Rele{
private:
bool estado // estado do rele
public:
Rele(int); // metodo construtor
void Ligar(void); // liga o rele
void Desligar(void); // desliga o rele
bool Ligado(void); // verifica o estado do rele
bool Desligado(void); // verifica o estado do rele
~Rele(void); // metodo destrutor
};
//---------------------------------------------------------------------------
#endif
IV. UNIT1.CPP
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Nivel.h"
#include "Rele.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CPort"
#pragma link "CPortCtl"
– Revisão A
Universidade Luterana do Brasil
Departamento de Engenharia Elétrica 14
– Revisão A
Universidade Luterana do Brasil
Departamento de Engenharia Elétrica 15
}
else
{
if (!ComPort1->Connected)
{
ComPort1->Open();
try
{
Valor=InputBox("Amostras","Numeros de Leituras","");
Edit6->Text=AnsiString(Valor);
m=StrToInt(Valor);
Button2->Caption="Desconectar";
i=0;
while(Button2->Caption=="Desconectar")
{
if( Edit6->Text>i || Edit6->Text=="")
{
for (m;m>i; i++)
{
while(ComPort1->InputCount()<6)
{
Application->ProcessMessages();
}
ComPort1->ReadStr(Str,6);
Edit3->Text=Str;
res=StrToInt(Label11->Caption);
if(res>sup)// se ultrapassou o superior, desliga a bomba
{
rele1->Desligar();
}
if(res<inf) // se ultrapassou o inferior, liga a bomba
{
rele1->Ligar();
}
if(rele1->Ligado())
{
ComPort1->WriteStr('1');
– Revisão A
Universidade Luterana do Brasil
Departamento de Engenharia Elétrica 16
Application->ProcessMessages();
}
else
{
ComPort1->WriteStr('0');
Application->ProcessMessages();
}
if(res>interm) // mostra imagem no nivel alto
{
Image1->Visible=false;
Image3->Visible=false;
Image4->Visible=true;
}
if(res<inf) // mostra imagem no nivel baixo
{
Image1->Visible=true;
Image3->Visible=false;
Image4->Visible=false;
}
if(res==med) // mostra imagem no nivel intermediario
{
Image1->Visible=false;
Image3->Visible=true;
Image4->Visible=false;
}
Memo1->Lines->Add(Str);
Edit3->Text ="";
}
}
else
{
rele1->Desligar(); // desliga a bomba
ShowMessage("Leituras Realizadas");
Button2->Caption="Conectar";
ComPort1->Close();
}
}
– Revisão A
Universidade Luterana do Brasil
Departamento de Engenharia Elétrica 17
}
catch (Exception & e)
{
ShowMessage("Insira o numero de leitura a serem feitas");
ComPort1->Close();
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count)
{
AnsiString Str;
ComPort1->ReadStr(Str, Count);
Edit3->Text =Str;
Memo1->Text = Memo1->Text +Str;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
T=Edit1->Text.ToDouble();
}
//---------------------------------------------------------------------------
– Revisão A
Universidade Luterana do Brasil
Departamento de Engenharia Elétrica 18
vv=Edit2->Text.ToDouble();
h.fCalculaVelocidade(tt,vv);
strr=StrToFloat(Edit3->Text);
Edit4->Text = h.v;
h.fCalculaAltura(strr);
Dados[0][i]=i;
Dados[1][i]=h.v;
Dados[2][i]=tt;
Dados[3][i]=h.k;
Dados[4][i]=h.d;
AnsiString AS;
Label3->Caption = AS.sprintf("%3.1f",h.d);
Label11->Caption= AS.sprintf("%3.0f",h.d);
Series2->AddY(atof(Form1->Label3->Caption.c_str()),"",clHotLight);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Configurar1Click(TObject *Sender)
{
ComPort1->ShowSetupDialog();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
ComPort1->Close();
}
//---------------------------------------------------------------------------
– Revisão A
Universidade Luterana do Brasil
Departamento de Engenharia Elétrica 19
if(Button2->Caption=="Conectar")
{
Application->ProcessMessages();
for(b=0;b<=i;b++)
{
Form2->Dados->Cells[0][b+1]= Dados[0][b];
Form2->Dados->Cells[1][b+1]= Dados[1][b];
Form2->Dados->Cells[2][b+1]= Dados[2][b];
Form2->Dados->Cells[3][b+1]= Dados[3][b];
Form2->Dados->Cells[4][b+1]= Dados[4][b];
Form2->Dados->RowCount = b+1;
}
}
else
{
ShowMessage("Leituras não Finalizadas");
Form2->Close();
}
}
//---------------------------------------------------------------------------
– Revisão A
Universidade Luterana do Brasil
Departamento de Engenharia Elétrica 20
V. UNIT2.CPP
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#pragma hdrstop
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
Dados->Cells[0][0]="Leitura";
Dados->Cells[1][0]="Velocidade";
Dados->Cells[2][0]="Temperatura";
Dados->Cells[3][0]="Constante";
Dados->Cells[4][0]="Distância";
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button2Click(TObject *Sender)
{
int l=0;
FILE *ArqNovo=NULL;
SaveDialog1->Execute();
ArqNovo = fopen(SaveDialog1->FileName.c_str(),"w");
– Revisão A
Universidade Luterana do Brasil
Departamento de Engenharia Elétrica 21
if(ArqNovo==NULL)
cout<<"Erro ao abrir o arquivo para gravação \n";
else
{
for(l=0;l<1;l++)
{
fprintf(ArqNovo,"%s\t%s\t%s\t%s\t%s\n",Dados->Cells[0]
[0],Dados->Cells[1][0],Dados->Cells[2][0],Dados->Cells[3][0],Dados->Cells[4]
[0]);
for(int a = 1; a <Dados->RowCount;a++)
{
fprintf(ArqNovo,"%s\t\t%s\t\t%s\t\t%s\t\t%s\n",Dados-
>Cells[0][a],Dados->Cells[1][a],Dados->Cells[2][a],Dados->Cells[3][a],Dados-
>Cells[4][a]);
}
fclose(ArqNovo);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button4Click(TObject *Sender)
{
for(int a = 0; a <Dados->RowCount;a++)
{
Dados->Cells[0][a]="";
Dados->Cells[1][a]="";
Dados->Cells[2][a]="";
Dados->Cells[3][a]="";
Dados->Cells[4][a]="";
– Revisão A
Universidade Luterana do Brasil
Departamento de Engenharia Elétrica 22
}
}
//---------------------------------------------------------------------------
VI. UNIT3.CPP
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm3 *Form3;
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
: TForm(Owner)
{
Memo1->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button1Click(TObject *Sender)
{
FILE *ArqNovo;
OpenDialog1->Execute();
ArqNovo = fopen(OpenDialog1->FileName.c_str(),"r");
Memo1->Lines->LoadFromFile(OpenDialog1->FileName.c_str());
fclose(ArqNovo);
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button2Click(TObject *Sender)
{
Memo1->Clear();
}
//---------------------------------------------------------------------------
– Revisão A
Universidade Luterana do Brasil
Departamento de Engenharia Elétrica 23
VII. UNIT4.CPP
#include<Rele.h>
//------------------------------------------------------------------------------
Rele::Rele(int nruRele) // metodo construtor
{
Desligar(); // Sempre inicia o rele desligado
}
//------------------------------------------------------------------------------
void Rele::Ligar(void) // liga o rele
{
estado = true;
}
//------------------------------------------------------------------------------
void Rele::Desligar(void) // desliga o rele
{
estado = false;
}
//------------------------------------------------------------------------------
bool Rele::Ligado(void) // verifica se o estado do rele e ligado
{
return (estado ? true : false); // retorna true se ligado e false se desligado
}
//------------------------------------------------------------------------------
bool Rele::Desligado(void) // verifica se o estado do rele e desligado
{
return (estado ? false : true); // retorna true se desligado e false se ligado
}
//------------------------------------------------------------------------------
Rele::~Rele(void) // metodo destrutor
{
– Revisão A
Universidade Luterana do Brasil
Departamento de Engenharia Elétrica 24
APÊNDICE B – FLUXOGRAMA
Não
Início
Leituras
de Dados Leituras
Realizadas
Conectar
Sim
Verifica
Não
Nível
Baixo Não
Visualizar
Inserir Dados
leituras Sim
Sim
Aciona Bomba
D'Água
Não
Leituras > 0 Abrir Salvar
Dados Dados
Não
Figura 8 – Fluxograma
– Revisão A
Universidade Luterana do Brasil
Departamento de Engenharia Elétrica 25
– Revisão A
Universidade Luterana do Brasil