Jaguarina 2006
Monografia apresentada disciplina Trabalho de Graduao III, do curso de Cincia da Computao da Faculdade de Jaguarina, sob orientao do Prof. Dr. Andr Mendeleck, como exigncia parcial para concluso do curso de graduao.
Jaguarina 2006
SANTOS, Andr Luiz Romeiro. Robtica Mvel - Controle de Movimentos. Monografia defendida e aprovada na FAJ em xx de dezembro e 2006 pela banca examinadora constituda pelos professores:
Dedico este trabalho a minha me Eber Maria Romeiro, que me proporcionou a oportunidade de hoje estar aqui finalizando este curso.
3
Agradecimentos
Gostaria de agradecer a minha esposa Priscila, pela pacincia com a distncia e pelo amor concedido - tenham certeza que o recproco verdadeiro. Agradeo ao professor, orientador e amigo Andr Mendeleck, pela ateno e confiana depositada; e tambm ao coordenador Peter Jandl Junior e professores do curso de Cincia da Computao da FAJ pelo curso proporcionado: serei eternamente grato pela oportunidade. Agradeo tambm meus amigos por todos os momentos inesquecveis que vivemos ao longo destes 4 anos de caminhada. Sem vocs o curso no teria a menor graa! A Deus, pela plenitude da vida; pela maravilha do mundo.
"Cincia da computao est to relacionada aos computadores quanto a Astronomia aos telescpios, Biologia aos microscpios, ou Qumica aos tubos de ensaio. A Cincia no estuda ferramentas. Ela estuda como ns as utilizamos, e o que descobrimos com elas. (Edsger Dijkstra)
SANTOS, Andr Luiz Romeiro Santos. Robtica Mvel - Controle de Movimentos. 2006. Monografia (Bacharelado em Cincia da Computao) Curso de Cincia da Computao da Faculdade de Jaguarina, Jaguarina.
SUMRIO
LISTA DE FIGURAS ..................................................................................................9 1. INTRODUO .....................................................................................................10 1.1. Objetivos........................................................................................................................10 1.2. Motivaes ....................................................................................................................11 1.3. Estrutura da Monografia................................................................................................11 2. ROBTICA...........................................................................................................12 2.1. Origem ...........................................................................................................................12 2.2. Histria ..........................................................................................................................12 2.3. Definio .......................................................................................................................13 2.4. Classificao Geral ........................................................................................................14 3. PROJETO ............................................................................................................15 3.1. Rdio Freqncia...........................................................................................................16 3.2. IHM Interface Homem Mquina. ..................................................................................16 3.2.1. Definio de IHM....................................................................................................16 3.2.2. Desenvolvimento da Interface. ................................................................................16 3.3. IHC Interface Humano Computador ..........................................................................17 3.4. Controle de Veculo Robtico .......................................................................................18 3.4.1. Locomoo ..............................................................................................................18 3.5. Descrio dos Componentes..........................................................................................18 3.5.1. Descrio do Veculo ..............................................................................................18 3.5.2. Descrio do Controle do Veculo...........................................................................19 3.5.3. Porta Paralela...........................................................................................................20 3.5.4. Placa Comunicao..................................................................................................21 3.6. Desenvolvimento do Software.......................................................................................22 3.7. Software Controle de Veculo .......................................................................................25 3.7.1. Modo Manual ..........................................................................................................28 3.7.2. Modo Comandos .....................................................................................................32 3.7.3. Modo Grfico ..........................................................................................................36 3.8. Funcionamento Geral e Diagrama.................................................................................38 4. CONCLUSO.......................................................................................................42 5. REFERNCIAS BIBLIOGRFICAS .....................................................................43 Anexo I..............................................................................................................................45 Anexo II ............................................................................................................................52
LISTA DE FIGURAS
Figura 1 - FIDO Rover .........................................................................................................13 Figura 2 - Diagrama dos Principais Componentes ...............................................................15 Figura 3 - Diagrama do Veculo ...........................................................................................19 Figura 4 - Foto do Veculo ...................................................................................................19 Figura 5 - Diagrama da Placa do Controle ..........................................................................19 Figura 6 - Foto da Placa do Controle....................................................................................19 Figura 7 - Diagrama da Porta Paralela .................................................................................20 Figura 8 - Descrio de cada pino da Porta Paralela ............................................................21 Figura 9 - Diagrama da Placa ...............................................................................................22 Figura 10 - Foto da Placa......................................................................................................22 Figura 11 - Diagrama Software Teste...................................................................................23 Figura 12 - Diagrama da Tela Principal ...............................................................................27 Figura 13 - Tela Principal.....................................................................................................28 Figura 14 - Ampliao do Menu...........................................................................................28 Figura 15 - Diagrama Modo Manual....................................................................................31 Figura 16 - Foto Modo Manual ............................................................................................32 Figura 17 - Diagrama Modo Comandos ...............................................................................35 Figura 18 -Tela Modo Comandos.........................................................................................35 Figura 19 - Diagrama Modo Grfico....................................................................................36 Figura 20 - Modo Grfico.....................................................................................................37 Figura 21 Exemplo de Percurso ........................................................................................38 Figura 22 - Diagrama Geral..................................................................................................39 Figura 23 - Computador .......................................................................................................39 Figura 24 - Porta Paralela .....................................................................................................40 Figura 25 - Cabo ...................................................................................................................40 Figura 26 - Conectores .........................................................................................................40 Figura 27 - Caixa ..................................................................................................................41 Figura 28 - Foto dos Componentes.......................................................................................41
1. INTRODUO
A robtica deixou de ser apenas tema de filmes de fico para fazer parte da realidade da sociedade h algum tempo. O desenvolvimento tecnolgico mostrou que possvel e vantajoso construir este tipo de mquina visando facilitar diversas atividades humanas. Em 1961 surgiu o UNIMATE, primeiro rob instalado numa linha de montagem (no caso, da General Motors, fabricante de automveis) e que deu origem automao industrial. A indstria continua, nos dias atuais, polarizando a utilizao da robtica, mas j se observa crescimento em outros setores[2]. Neste trabalho de graduao, consideraremos a questo-problema de como controlar por rdio freqncia de um veculo capaz de executar rotas pr-estabelecidas pelo usurio, navegando em ambientes conhecidos. Os trabalhos nas reas de robticas e automao tm como caractersticas estruturais a multi-disciplinaridade, envolvendo vrias reas do conhecimento, principalmente as relacionadas a software e programao. Tendo como objetivo utilizar de forma especifica os conhecimentos adquiridos no curso de Cincias da computao e adquirir novos conhecimentos, aplicando no desenvolvimento de software para robtica, foi desenvolvido um estudo sobre software para construo de movimentos de rob e veculos mveis, focando no controle de trajetria e interface homem computador.
1.1. Objetivos
O objetivo do projeto foi desenvolver um software em uma linguagem de alto nvel conhecida como Object Pascal (Pascal com extenses orientadas a objetos), em um ambiente de programao chamado Delphi da empresa Borland, focando IHM interface homem computador para o controle do veculo. Controlar os movimentos de um veculo robtico atravs de um componente de hardware para transmitir os comandos usando rdio freqncia. Desenvolvimento de uma IHC (interface homem Computador) para controle do veculo, usando software desenvolvido com linguagem de alto nvel, onde o usurio ter trs maneiras de controlar veculo, no modo manual ou no modo automtico e gerar movimentos pr-programados e realizar tarefas ambientes conhecidos. Modo manual: Usurio controla o veculo usando as teclas do computador; Modo Automtico: Usurio determina uma rota para o veculo, quando o mesmo der o comando o veculo percorrera a rota. Modo Grfico: Usurio poder montar um circuito atravs de imagens que podem ser deslocadas para um ponto especifico e assim percorrido pelo veculo.
10
O veculo possui uma plataforma com 4 rodas, sendo duas traseiras que esto conectadas a um motor de corrente continua e duas rodas dianteira, que esto ligadas a um mecanismo de quatro barras possibilitando mobilidade para esquerda e direita.
1.2. Motivaes
Como esse projeto d grandes noes de como feito o controle de robs atravs de software que tem linguagem de grande nvel. O interesse deste projeto no apenas acadmico, o seu mercado potencialmente considervel. Cada dia que passa mais as indstrias esto se automatizando para produzir mais com qualidade e menor custo, esse projeto pode ser usado em ambientes conhecidos e repetidos vrias vezes por dia.
11
2.2. Histria
A palavra rob tem origem da palavra tcheca robotnik, que significa servo, o termo rob foi utilizado inicialmente por Karel Capek em 1923, nesta poca a idia de um "homem mecnico" parecia vir de alguma obra de fico. No s do homem moderno o desejo de construir tais robs, existem alguns fatos histricos que nos mostram que a idia no nova, por exemplo, existem inmeras referncias sobre o "Homem Mecnico" construdo por relojoeiros com a finalidade de se exibir em feiras. Temos relatos tambm da realizao de vrias "Animaes Mecnicas" como o leo animado de Leonardo da Vinci, e seus esforos para fazer mquinas que reproduzissem o vo das aves. Porm estes dispositivos eram muito limitados, pois no podiam realizar mais que uma tarefa, ou um nmero reduzido delas. A idia de se construir robs comeou a tomar fora no incio do sculo XX com a necessidade de aumentar a produtividade e melhorar a qualidade dos produtos. nesta poca que o rob industrial encontrou suas primeiras aplicaes, o pai da robtica industrial foi George Devol. Atualmente devido aos inmeros recursos que os sistemas de microcomputadores nos oferece, a robtica atravessa uma poca de contnuo crescimento que permitir, em um curto espao de tempo, o desenvolvimento de robs inteligentes fazendo assim a fico do homem antigo se tornar realidade do homem atual.
12
2.3. Definio
Existe atualmente na sociedade tarefas que devem ser executadas com muita eficincia e preciso, alem de outras que devem ser realizadas em locais de difcil ou at mesmo impossvel acesso humano como o fundo do mar ou a imensido do espao, sendo assim, necessrio a utilizao de dispositivos (Robs) que possam realizar essas tarefas sem risco. A Figura 1 mostra o FIDO Rover, um rob mvel projetado pela Agncia Espacial Norte Americana (NASA) para a explorao do planeta Marte.
Figura 1 - FIDO Rover A Robtica, sendo atualmente uma altamente ativa e multidisciplinar, tem como objetivo o desenvolvimento e a integrao de tcnicas e algoritmos para a criao de Robs. A engenharia mecnica, eltrica, cincias da computao, a inteligncia artificial e outras, so matrias que fazem parte da Robtica, para que integradas possam desenvolver maravilhas tecnolgicas. Podemos observar robs em vrias reas de nossa sociedade atualmente, em tarefas como os desarmadores de bombas, robs com finalidade de pesquisa cientfica e educacional e at os robs operrios, que so instalados em fbricas e responsveis pela "Segunda Revoluo Industrial", revolucionando a produo em srie [5].
13
14
3. PROJETO
Neste captulo entraremos em detalhes em tecnologias e tcnicas de desenvolvimento de hardware e software que foram fundamentais para a concluso do projeto. Na figura 2 contm o diagrama dos principais componentes do projeto, que so software, controle do veculo, rdio freqncia e veculo. Para desenvolvimento do software foi elaborado estudo de movimento de rob (Locomoo), comunicao com hardware utilizando a porta paralela e IHC (Interface Homem Computador) para aumentar aceitabilidade e a funcionalidade. Controle do veculo foi necessrio o desenvolvimento de uma Placa de Comunicao que recebe os sinais do software em os envia para o controle do veculo. Tambm foi estudado o controle do veculo para compreender seu funcionamento e como os sinais so enviados para o veculo. Na Rdio freqncia foi feita uma pesquisa para compreender o funcionamento das ondas de rdio, definies, tamanho e freqncia. O veculo foi estudado para compreender como recebe os sinais que so enviados pelo controle e o funcionamento das rotas. Os tpicos a seguir esto relacionados diretamente e indiretamente.
Software Controle
Rdio Freqncia
Veculo
Figura 2 - Diagrama dos Principais Componentes
15
16
17
respeitvel de profissionais, pesquisadores e empresas, ativos na pesquisa e divulgao de estudos, pesquisas e testes na rea de usabilidade. Nilsen (1993)... as interfaces no sejam um empecilho quando os usurios precisam realizar os seus trabalhos, ela um quadro mais amplo que aceitabilidade do sistema pelo usurio.
O veculo tambm contm uma placa receptora que recebe o sinal de rdio freqncia de 27Mhz, dependendo dos sinais que receber um tipo de comando a executar, como, por exemplo, virar as rodas dianteiras, girar as rodas de traseiras para trs e para frente. Se a placa receber dois tipos de sinais ela ira executar os dois juntos, por exemplo, girar as rodas traseiras para frente com as rodas dianteiras viradas para a esquerda, fazendo assim uma curva para esquerda.
20
A porta paralela padro do computador a LPT1, e seu endereo 378h (para enviar um byte de dados pela Porta), 378+1h (para receber um valor atravs da Porta) e, 378+2h (para enviar dados).
Nome da Porta
LPT1
Endereo de memria
0000:0408
Endereo da Porta
378 hexadecimal 888 decimal
Descrio
Endereo base
21
22
Figura 11 - Diagrama Software Teste A diferena entre um boto e outro o valor do nmero decimal passado na procedure. Procedure como se fosse uma funo, a diferena que na funo retorna um resultado enquanto na procedure no retorna. Cada nmero decimal tem uma representao na forma binria e esses nmeros so endereos de pinos da porta paralela, a procedure trabalha com nmeros decimais convertendo para binrio antes de se comunicar com a porta paralela. A Tabela a seguir, mostra os comandos e nmeros decimais convertido em binrios.
Tabela de Comando Comando R Frente Esquerda Direita Centro Nmero Decimal 128 64 32 16 0 Tabela 2 - Comandos dos Botes
23
Como dito anteriormente, o primeiro valor da funo o endereo da porta e o segundo o valor decimal que indica qual pino ser ativado. Nas propriedades Onclick dos botes, tem o seguinte cdigo: Boto Frente. Procedure TTeste.FrenteClick(Sender: Tobject); Begin Outportb($378,$ 64); End; Boto R Procedure TTeste.ReClick(Sender: Tobject); Begin Outportb($378,$ 128); End; Boto Direita Procedure TTeste.DireitaClick(Sender: Tobject); Begin Outportb($378,$16); End; Boto Esquerda Procedure TTeste.EsqurdaClick(Sender: Tobject); Begin Outportb($378,$32); End; Boto Centro Procedure TTeste.CentroClick(Sender: Tobject); Begin Outportb($378,$0); End;
24
25
procedure FormShow(Sender: TObject); procedure Comandos1Click(Sender: TObject); procedure Grafico1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var FormPrincipal: TFormPrincipal; implementation uses Principal, UnitComandos, UnitGraficos; {$R *.dfm} // Declarao do componente Inpout32 procedure outportb(EndPorta: Integer; Valor:BYTE); stdcall; external 'inpout32.DLL' name 'Out32'; function inportb(EndPorta: Integer): BYTE stdcall; external 'inpout32.DLL' name 'Inp32'; procedure TFormPrincipal.Manual1Click(Sender: TObject); begin FormModoManual := TFormModoManual.Create(self); FormModoManual.ShowModal; end; procedure TFormPrincipal.Sair2Click(Sender: TObject); begin Close; end; procedure TFormPrincipal.Sair1Click(Sender: TObject); begin Close;
26
end; // Desativa o sinal enviado para Porta Paralela procedure TFormPrincipal.FormShow(Sender: TObject); begin outportb($378,0); end; end. A figura 12 o diagrama da tela principal, a tela que tem a funo de desativar o sinal padro que o windows XP enviar para a porta paralela e contm um menu que tem a funo de facilitar a utilizao do software.
INICIO
Automtico
MENU
Manual
Comand o
Grfico
FIM
Figura 12 - Diagrama Tela Principal O Menu possui um subMenu e dois botes, o primeiro boto denominado Manual e o segundo Sair. O Boto Manual tem a funo de abrir a tela Modo Manual descrito no capitulo 3.7.1, o boto Sair tem a funo de fechar o programa. O subMenu possui tambm dois botes o primeiro denominado Comandos e o segundo Grfico, o primeiro te a funo de abrir a tela Modo Comando e o outro de abrir a tela Modo Grfico. A figura 13 mostra a tela principal com o menu circulado em vermelho.
27
Figura 13 - Tela Principal A figura 14 mostra uma ampliao do menu da tela principal.
time ou repetido aps um intervalo medido. Voc escreve o cdigo que voc quer ocorrer no tempo especificado dentro do evento de OnTimer do componente do temporizador. Tarefas para especificar a quantidade de tempo decorrido antes que o evento do temporizador esteja provocado, usar a propriedade do intervalo. O primeiro temporizador tem a funo de monitorar as teclas de direo (Teclas com setas) como mostra a figura 18, quando a tecla acionado enviado um nmero decimal correspondente ao endereo do pino, este nmero ser convertido em binrio e enviado para a porta paralela, de acordo com o nmero, um pino de sada de 6 a 9 enviar um sinal para placa de comunicao, a qual receber o sinal, filtrar e repassar ao controle do veiculo que converter o mesmo em uma freqncia de rdio e mandar para o veculo, que ira receber o sinal e executar. O segundo temporizador tem a funo de controlar a velocidade do veculo, atravs de tempo de execuo, criando em pequeno intervalo no nvio do sinal. O tamanho do intervalo que determina a velocidade quanto maior o intervalo menor a velocidade e com quanto o menor o intervalo maior a velocidade do veculo (Anexo I). A seguir cdigo fonte mostrando como feita a monitorao do teclado e declarao do componente Inpout32. // Declarao do Componente Inpout32 procedure outportb(EndPorta: Integer; Valor:BYTE); stdcall; external 'inpout32.DLL' name 'Out32'; function inportb(EndPorta: Integer): BYTE stdcall; external 'inpout32.DLL' name 'Inp32';
// Monitoramento das setas Teclado procedure TFormModoManual.Timer1Timer(Sender: TObject); begin If ((tbKeyIsDown(VK_LEFT)) And (tbKeyIsDown(VK_RIGHT))) Or ((tbKeyIsDown(VK_RIGHT)) And (tbKeyIsDown(VK_LEFT))) Then Para; If ((tbKeyIsDown(VK_UP)) And (tbKeyIsDown(VK_DOWN))) Or ((tbKeyIsDown(VK_DOWN)) And (tbKeyIsDown(VK_UP))) Then Para; If (tbKeyIsDown(VK_UP)) Then
29
Begin Image1.Top := Image1.Top -5; Frente; End; If (tbKeyIsDown(VK_DOWN)) Then Begin Image1.Top := Image1.Top +5; Re; End; If (tbKeyIsDown(VK_LEFT)) Then Begin Image1.Left := Image1.Left -5; Esquerda; End; If (tbKeyIsDown(VK_RIGHT)) Then Begin Image1.Left := Image1.Left +5; Direita; End; If (tbKeyIsDown(VK_LEFT)) And (tbKeyIsDown(VK_UP)) Then Begin Image1.Left := Image1.Left -2; Image1.Top := Image1.Top -2; FrenteEsquerda; End; If (tbKeyIsDown(VK_LEFT)) And (tbKeyIsDown(VK_DOWN)) Then Begin Image1.Left := Image1.Left -2; Image1.Top := Image1.Top +2; ReEsquerda; End; If (tbKeyIsDown(VK_RIGHT)) And (tbKeyIsDown(VK_UP)) Then Begin
30
Image1.Left := Image1.Left +2; Image1.Top := Image1.Top -2; FrenteDireita; End; If (tbKeyIsDown(VK_RIGHT)) And (tbKeyIsDown(VK_DOWN)) Then Begin Image1.Left := Image1.Left +2; Image1.Top := Image1.Top +2; ReDireita; End; If (Not tbKeyIsDown(VK_LEFT)) And (Not tbKeyIsDown(VK_RIGHT)) And (Not tbKeyIsDown(VK_DOWN)) And (Not tbKeyIsDown(VK_UP)) Then Begin Para; End; end;
INICIO
Monitora Teclado
Acionar
Sim
No
Para
Executa
Figura 15 - Diagrama Modo Manual
31
A figura 16 a tela do Modo Manual, o veculo o controle de velocidade esto circulado em vermelho. O veculo apenas uma figura ilustrativa do veculo original, quando o usurio ativar a seta do teclado afigura ilustrativa ir se mover junto com o veculo original.
32
A segunda maneira de determinar as rotas, o usurio ativa o componente CheckBox aparecera um componente chamado Edit, esse componente o usurio digita a rota comeando com os comandos direita, esquerda, frente e r, seguindo de dois nmeros, o primeiro nmero digitado poder ser grau ou distncia, dependendo do comando digitado, se for esquerda ou direita o nmero ter o valor em ngulo e se for frente ou r o valor ser em distncia. O segundo nmero a velocidade do veculo. Depois que o usurio escolheu todas as opes ou digitou os comandos , ele ir clicar no boto adicionar. O boto adicionar tem a funo de ler todos os componentes RadioGroup, a velocidade e o componente Edit. Caso os RadiosGroups no estejam todos selecionados o software vai verificar o componente CheckBox, se tiver selecionado ir verificar se o comando digitado no componente Edit est correto. Supondo que tenha algum RadioGroup em branco ou erro no comando digitado no Edit ser emitido um aviso visual informado o erro ocorrido, caso esteja tudo correto os comandos selecionados no RadioGroup ou digitados no Edit sero adicionados no componente Memo. O processo de adicionar os comandos no componente Memo poder ser repetido quantas vezes o usurio determinar. Quando todos comandos estiverem no componente Memo podero ser salvos ou executados. Quando clicar no boto salvar os comandos que esto no componente Memo sero salvos em um arquivo texto determinado pelo usurio. A Terceira maneira de determinar as rotas usando o boto abrir, abrir um arquivo texto de qualquer lugar do disco rgido ou de perifricos que contenha comandos vlidos, esses comandos so adicionados no componente Memo. Aps todos os comandos estarem no componente Memo, independentes da maneira que foram adicionados o usurio poder clicar no boto executar. Esse boto tem a funo de ler todo componente Memo, identificar os comandos e transmitir para o veculo (Anexo II). Na figura 18 mostra todos os componentes descritos a acima e na figura 17 mostra o diagrama de funcionamento. A seguir parte do cdigo fonte mostrando declarao do componente Inpout32 e identificao de erros nos comandos. // Declarao do componente Inpout32 procedure outportb(EndPorta: Integer; Valor:BYTE); stdcall; external 'inpout32.DLL' name 'Out32'; function inportb(EndPorta: Integer): BYTE stdcall; external 'inpout32.DLL' name 'Inp32'; // Identificao de erros nos comandos Function VerificaComandos(Comandos : String ) : Char; var i, Num : integer;
33
Verifica : String; Begin Try For i := 1 to (Length(Comandos)) Do Begin If Comandos[i] = '-' Then Begin Verifica := copy( Comandos, 0, i - 2 ); If (Verifica = 'DIREITA') or (Verifica = 'ESQUERDA') or (Verifica = 'FRENTE') or (Verifica = 'RE') Then Begin Num := StrToInt(copy( Comandos, i + 2, i - 7 )); If Num <> 0 Then Begin Num := StrToInt( copy( Comandos, i + 7, i - 3 )); If Num <> 0 Then Begin exit; End; End; End; End; End; Except ShowMessage('Erro no Comando'); exit; end; End; A figura 17 mostra basicamente o diagrama de funcionamento do modo comandos, receber os comandos l verificando se contm erro, caso no haja nenhum o usurio tem duas opes gravar em arquivos ou executar.
34
INICIO
Recebe Comando
Grava
L Comando
Executa
Figura 17 - Diagrama Modo Comandos A figura 18 mostra a interface grfico do Modo de Comando.
35
INICIO
Recebe Figuras
L Figuras
Executa
Figura 19 - Diagrama Modo Grfico
36
Figura 20 - Modo Grfico Quando o usurio escolhe uma das imagens e clica no painel o software identifica qual imagem foi escolhida e relaciona com o comando correspondente, por exemplo, se a primeira imagem da esquerda da figura 20 for selecionada o comando correspondente ser para frente, depois que usurio montou todo percurso desejado, clicara no boto executar o qual ir verificar os comandos inseridos atravs das imagens no painel e os executar. A figura 21 mostra o exemplo de um percurso.
37
Figura 21 Exemplo de Percurso O percurso da figura 21 tem incio com uma curva para a esquerda, seguido de uma curva para a direita outra novamente esquerda, segue em frente, faz uma curva para direita, segue em frente, executa a ultima curva a esquerda e segue em linha reta para frente at o final do percurso.
38
Figura 23 - Computador
39
Figura 24 Porta Paralela A figura 25 e 26 o cabo que conecta o computador com a placa de comunicao.
Figura 25 Cabo
Figura 26 - Conectores
40
Figura 27 - Caixa
4. CONCLUSO
Durante o projeto foi implementado um hardware e dois softwares. O hardware que chamamos de Placa de Comunicao tem o papel de receber os sinais, proteger a porta paralela no deixando a corrente voltar e filtrar os sinais recebidos repassando os mesmo para o controle do veculo e os softwares tem a funo receber os comandos do usurio e repassar para a Placa de Comunicao. O primeiro software desenvolvido para teste da placa de comunicao e tem o mesmo principio do segundo programa que o principal, denominado Controle de Veculo desenvolvido para a concluso do curso. O software capaz de controlar um veculo em tempo real, gerar movimentos prprogramados, realizar tarefas em ambientes conhecidos. As maiores dificuldades no desenvolvimento do projeto foi o desenvolvimento do hardware que se comunica com o controle do veculo. Por falta de conhecimento em desenvolvimento de hardware foi necessria muita pesquisa e teste, usando programas que simulam o hardware e um aparelho conhecido como multmetro, muito usado na rea de eltrica e eletrnica. Outra grande dificuldade encontrada foi o controle da velocidade do veculo, por no ter experincia em controlar robs, o maior tempo gasto no desenvolvimento do software foi para controle da velocidade. Com a concluso do projeto obtive bastantes conhecimentos em robtica, princpios bsicos necessrio para o desenvolvido e funcionamentos. A rea de robtica tem amplo campo de atuaes, indo destas reas indstrias at nas reas de medicina, tambm tem grandes evolues, quase todos os dias uma nova tecnologia nesta rea desenvolvida e papel para estudos em quase todo mundo. O objetivo do projeto foi alcanado, que era controlar o veculo atravs de rdio freqncia, utilizado vrios modos de controles, o principal problema foi o controle de velocidade que o veculo pode atingir, quando o veculo controlado na velocidade mxima tem um melhor funcionamento ao contrrio da baixa velocidade. Esse projeto no teve interesse acadmico, pelo contrrio por ter amplo campo de atuao e grandes evolues, suas potencialidades de mercado so considerveis. Cada dia que passa mais o mundo esta se automatizado para desenvolvimento de pesquisa e produzir mais com qualidade e com menor custo, esse projeto pode ser usado em percursos conhecidos e repetidos vrias vezes por dia. A adaptando sensores ou at uma cmera no veculo esse projeto poder ter mais utilidades ou melhorar usa preciso.
42
5. REFERNCIAS BIBLIOGRFICAS
[1] A MINHA RDIO. O que a Rdio. [INTERNET: http://www.aminharadio.com/radio/radio_q, recuperado em: 14/06/06] [2] BIBLIOTECA DIGITAL. UNIMATE. [INTERNET: http://www.bibliotecadigital.ufrgs.br/da.php?nrb=000441364&loc=2005&l=2a93731b0 ac6bf98, recuperado em: 05/12/06]. [3] CENTRO UNIVERSITRIO DA FEI. Robtica. [INTERNET: http://www.fei.edu.br/eletrica/rbianchi/robotica/ROBOTICA-10.pdf, recuperado em: 09/05/06] [4] ESCOLAS TRENDNET. Origem e leis da Robtica. [INTERNET: http://www.escolas.trendnet.com.br/stamarcerj/e24h/robotica/origemleis/index.htm, recuperado em: 10/05/06] GOMIDE, Fernando Antnio Campos; GUDWIN, Ricardo Ribeiro. Modelagem, Controle, Sistemas e Lgica Fuzzy. Artigo publicado na SBA Controle & Automao, Vol. 4 n 3, Set-Out 1994. MANZANO, Jos Augusto N. G.; MENDES, Sandro Santa Vicca. Estudo Dirigido Delphi 6. 2.ed.. So Paulo: rica, 2003. PIERI, Edson Roberto de. Curso de Robtica Mvel. UFSC. 2002 [5] Revista Globo Cincia, Dezembro/97, pg. 26 e 27. [6] ROGERCOM, Porta Paralela. [Internet: http://www.rogercom.com/pparalela/introducao.htm#conector, recuperado em: 15/06/06]
43
[7] UNIVERSIDADE DE SO PAULO. Interface Homem Computador. [INTERNET: http://www.pcs.usp.br/~lucia/teses/FernandoZancheta.pdf, recuperado em: 17/11/06] [8] UNIVERSIDADE FEDERAL DO RIO DE JANEIRO. Definio de Usabilidade. [INTERNET: http://www.eco.ufrj.br/semiosfera/conteudo_org_02Bertolo.htm, recuperado em 19/11/06].
44
Anexo I
Cdigo Fonte Modo Manual unit Principal; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, MMSystem, Menus, Buttons, ComCtrls, Spin, jpeg; type TFormModoManual = class(TForm) Timer1: TTimer; Panel1: TPanel; Image1: TImage; GroupBox1: TGroupBox; SBSair: TBitBtn; ProgressBar1: TProgressBar; Button2: TButton; Button3: TButton; Timer2: TTimer; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Timer1Timer(Sender: TObject); procedure SBSairClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Timer2Timer(Sender: TObject); private { Private declarations } Mensagem : String; public { Public declarations } Velocidade : Integer;
45
end; var FormModoManual: TFormModoManual; implementation {$R *.dfm} // Declarao do Componente Inpout32 procedure outportb(EndPorta: Integer; Valor:BYTE); stdcall; external 'inpout32.DLL' name 'Out32'; function inportb(EndPorta: Integer): BYTE stdcall; external 'inpout32.DLL' name 'Inp32'; procedure ZeraVelocidade(); begin FormModoManual.Velocidade := 0; end; procedure Para(); begin outportb($378,0); end; procedure Frente(); begin outportb($378,64); Sleep(FormModoManual.Velocidade); end; procedure Re(); begin outportb($378,128); Sleep(FormModoManual.Velocidade); end; procedure Direita(); begin outportb($378,16); end; procedure Esquerda(); begin outportb($378,32); end; procedure FrenteDireita(); begin outportb($378,80); end; procedure FrenteEsquerda(); begin outportb($378,96); end; procedure ReDireita(); begin outportb($378,144); end; procedure ReEsquerda(); begin outportb($378,160); end; function tbKeyIsDown(const Key: integer): boolean;
46
begin Result := GetKeyState(Key) and 128 > 0; end; procedure TFormModoManual.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); Begin IF Key = VK_F2 Then Begin SndPlaySound('C:\Sistemas\Andre\buzina.wav',SND_ASYNC); End; IF Key = VK_LEFT Then Begin Image1.Left := Image1.Left -5; Esquerda; End; IF Key=VK_RIGHT Then Begin Image1.Left := Image1.Left +5; Direita; End; IF Key=VK_UP Then Begin Image1.Top := Image1.Top -5; Frente; End; IF Key=VK_DOWN Then Begin Image1.Top := Image1.Top +5; Re; End; IF (Key = VK_LEFT) Then Begin If (Key = VK_RIGHT) Then Para; End; End;
47
// Monitoramento das setas Teclado procedure TFormModoManual.Timer1Timer(Sender: TObject); begin If ((tbKeyIsDown(VK_LEFT)) And (tbKeyIsDown(VK_RIGHT))) Or ((tbKeyIsDown(VK_RIGHT)) And (tbKeyIsDown(VK_LEFT))) Then Para; If ((tbKeyIsDown(VK_UP)) And (tbKeyIsDown(VK_DOWN))) Or ((tbKeyIsDown(VK_DOWN)) And (tbKeyIsDown(VK_UP))) Then Para; If (tbKeyIsDown(VK_UP)) Then Begin Image1.Top := Image1.Top -5; Frente; End; If (tbKeyIsDown(VK_DOWN)) Then Begin Image1.Top := Image1.Top +5; Re; End; If (tbKeyIsDown(VK_LEFT)) Then Begin Image1.Left := Image1.Left -5; Esquerda; End; If (tbKeyIsDown(VK_RIGHT)) Then Begin Image1.Left := Image1.Left +5; Direita; End;
48
If (tbKeyIsDown(VK_LEFT)) And (tbKeyIsDown(VK_UP)) Then Begin Image1.Left := Image1.Left -2; Image1.Top := Image1.Top -2; FrenteEsquerda; End; If (tbKeyIsDown(VK_LEFT)) And (tbKeyIsDown(VK_DOWN)) Then Begin Image1.Left := Image1.Left -2; Image1.Top := Image1.Top +2; ReEsquerda; End; If (tbKeyIsDown(VK_RIGHT)) And (tbKeyIsDown(VK_UP)) Then Begin Image1.Left := Image1.Left +2; Image1.Top := Image1.Top -2; FrenteDireita; End; If (tbKeyIsDown(VK_RIGHT)) And (tbKeyIsDown(VK_DOWN)) Then Begin Image1.Left := Image1.Left +2; Image1.Top := Image1.Top +2; ReDireita; End; If (Not tbKeyIsDown(VK_LEFT)) And (Not tbKeyIsDown(VK_RIGHT)) And (Not tbKeyIsDown(VK_DOWN)) And (Not tbKeyIsDown(VK_UP)) Then Begin Para; End; end; procedure TFormModoManual.SBSairClick(Sender: TObject); begin Close; end;
49
procedure TFormModoManual.FormShow(Sender: TObject); begin ZeraVelocidade; Timer1.Enabled := true; Para(); end; procedure TFormModoManual.FormClose(Sender: TObject; var Action: TCloseAction); begin Timer1.Enabled := False; end; procedure TFormModoManual.Button2Click(Sender: TObject); begin ProgressBar1.Position := ProgressBar1.Position + 10; Timer1.Interval := Timer1.Interval - 20; If ProgressBar1.Position = 100 Then Begin Timer2.Enabled := False; Timer1.Interval := 1; End Else Begin Timer2.Enabled := True; End; end; procedure TFormModoManual.Button3Click(Sender: TObject); begin ProgressBar1.Position := ProgressBar1.Position - 10; Timer1.Interval := Timer1.Interval + 20; If ProgressBar1.Position = 0 Then Begin Timer2.Enabled := False; Timer1.Enabled := False; End
50
Else Begin Timer2.Enabled := True; Timer1.Enabled := True; End; end; procedure TFormModoManual.Timer2Timer(Sender: TObject); begin outportb($378,0); sleep(1); end; end.
51
Anexo II
Cdigo Fonte Modo Comandos. implementation {$R *.dfm} // Declarao do componente Inpout32 procedure outportb(EndPorta: Integer; Valor:BYTE); stdcall; external 'inpout32.DLL' name 'Out32'; function inportb(EndPorta: Integer): BYTE stdcall; external 'inpout32.DLL' name 'Inp32'; // Identificao de erros nos comandos Function VerificaComandos(Comandos : String ) : Char; var i, Num : integer; Verifica : String; Begin Try For i := 1 to (Length(Comandos)) Do Begin If Comandos[i] = '-' Then Begin Verifica := copy( Comandos, 0, i - 2 ); If (Verifica = 'DIREITA') or (Verifica = 'ESQUERDA') or (Verifica = 'FRENTE') or (Verifica = 'RE') Then Begin Num := StrToInt(copy( Comandos, i + 2, i - 7 )); If Num <> 0 Then Begin Num := StrToInt( copy( Comandos, i + 7, i - 3 )); If Num <> 0 Then Begin exit; End; End;
52
End; End; End; Except ShowMessage('Erro no Comando'); exit; end; End; procedure TFormComandos.FormShow(Sender: TObject); begin Memo1.Lines.Clear; ProgressBar1.Max := 100; ProgressBar1.Position := 100; end; procedure TFormComandos.RadioGroupDirecaoClick(Sender: TObject); begin If (RadioGroupDirecao.ItemIndex = 2) Or (RadioGroupDirecao.ItemIndex = 3) Then Begin RadioGroupVirar.ItemIndex := -1; RadioGroupVirar.Enabled := False; RadioGroupVirar.Visible := False; RadioGroupDistancia.Visible := True; RadioGroupDistancia.Enabled := True; End Else Begin RadioGroupVirar.Visible := True; RadioGroupVirar.Enabled := True; RadioGroupDistancia.Visible := False; RadioGroupDistancia.ItemIndex := -1; End; end; procedure TFormComandos.RadioGroupVirarClick(Sender: TObject); begin
53
If RadioGroupVirar.ItemIndex = 0 Then Begin RadioGroupDistancia.ItemIndex := -1; RadioGroupDistancia.Enabled := False; End; end; procedure TFormComandos.Button2Click(Sender: TObject); begin ProgressBar1.Position := ProgressBar1.Position + 10; end; procedure TFormComandos.Button3Click(Sender: TObject); begin ProgressBar1.Position := ProgressBar1.Position - 10; end; procedure TFormComandos.CheckBox1Click(Sender: TObject); begin If CheckBox1.Checked = True Then GroupBox2.Visible := True Else GroupBox2.Visible := False; end; procedure TFormComandos.ButtonAbrirArquivoClick(Sender: TObject); Var NomeArquivo, Texto, Campo : String; TXT : TextFile; I : Integer; begin OpenDialog1.Execute; Memo1.Lines.Clear; AssignFile(TXT,OpenDialog1.FileName); Reset(TXT); While Not Eof (TXT) Do
54
Begin Readln(TXT,Texto); For I := 1 to (Length(Texto)) Do Begin Campo := Campo + Trim(Texto[i]); End; Memo1.Lines.Add(Trim(Campo)); Campo := ''; End; CloseFile(TXT); end; procedure TFormComandos.Button5Click(Sender: TObject); Var TextoFinal :String; F : TextFile; I : Integer; begin If FileExists('c:\arq.txt') Then Begin DeleteFile('c:\arq.txt'); End; Assignfile(F, 'c:\arq.txt'); Rewrite(F); For I := 0 To Memo1.Lines.Count -1 Do Begin TextoFinal := Memo1.Lines[I]; Writeln(F,TextoFinal); End; CloseFile(F); MessageBox(Handle,'Processo de Exportao Terminado.','Trmino.',mb_Ok or mb_IconInformation or mb_DefButton1); end; procedure TFormComandos.Button4Click(Sender: TObject); Var
55
TextoFinal :String; F : TextFile; I : Integer; begin Try SaveDialog1.Execute; If FileExists(SaveDialog1.Filename) Then Begin DeleteFile(SaveDialog1.Filename); End; Assignfile(F, SaveDialog1.Filename); Rewrite(F); For I := 0 To Memo1.Lines.Count -1 Do Begin TextoFinal := Memo1.Lines[I]; Writeln(F,TextoFinal); End; CloseFile(F); MessageBox(Handle,'Processo de Exportao Terminado.','Trmino.',mb_Ok or mb_IconInformation or mb_DefButton1); Except exit; End; end; procedure TFormComandos.Timer1Timer(Sender: TObject); begin outportb($378,0); sleep(1); end; procedure TFormComandos.Timer2Timer(Sender: TObject); begin outportb($378,64); // sleep(17); end;
56
procedure TFormComandos.Timer3Timer(Sender: TObject); begin outportb($378,0); // sleep(1); end; procedure TFormComandos.Button6Click(Sender: TObject); begin Timer1.Enabled := True; Timer2.Enabled := True; end; procedure TFormComandos.BitBtn1Click(Sender: TObject); begin Timer1.Enabled := True; Timer2.Enabled := True; end; procedure TFormComandos.BitBtnGravarClick(Sender: TObject); var Comandos : String; begin Comandos := ''; If RadioGroupDirecao.ItemIndex <> -1 Then Begin If RadioGroupDirecao.ItemIndex = 0 Then Comando := 'DIREITA'; If RadioGroupDirecao.ItemIndex = 1 Then Comando := 'ESQUERDA'; If RadioGroupVirar.ItemIndex <> -1 Then Begin If RadioGroupVirar.ItemIndex = 0 Then Comando := Comando + ' - ' + '30'; If RadioGroupVirar.ItemIndex = 1 Then Comando := Comando + ' - ' + '60'; End;
57
If RadioGroupDirecao.ItemIndex = 2 Then Comando := 'FRENTE'; If RadioGroupDirecao.ItemIndex = 3 Then Comando := 'RE'; If RadioGroupDistancia.ItemIndex <> -1 Then Begin If RadioGroupDistancia.ItemIndex = 0 Then Comando := Comando + ' - ' + '10'; If RadioGroupDistancia.ItemIndex = 1 Then Comando := Comando + ' - ' + '50'; If RadioGroupDistancia.ItemIndex = 2 Then Comando := Comando + ' - ' + '100'; End; Comando := Comando + ' ' + IntToStr(ProgressBar1.Position); End Else Begin If CheckBox1.Checked = True Then Begin Comandos := EditComandosDigitados.Text; VerificaComandos(Comandos); End; End; Memo1.Text := Comandos; end;
58