Mono Alexis

Embed Size (px)

Citation preview

Alxis Rodrigues de Almeida

SISTEMA DE CONTROLE DE ROB BASEADO NA PLATAFORMA LINUX: UMA PROPOSTA

Monograa de Ps-Graduao Lato Sensu apresentada ao Departamento de Cincia da Computao para obteno do ttulo de Especialista em Administrao em Redes Linux

Orientador Prof. Wilian Soares Lacerda (DCC-UFLA)

Lavras Minas Gerais - Brasil 2004

Alxis Rodrigues de Almeida

SISTEMA DE CONTROLE DE ROB BASEADO NA PLATAFORMA LINUX: UMA PROPOSTA

Monograa de Ps-Graduao Lato Sensu apresentada ao Departamento de Cincia da Computao para obteno do ttulo de Especialista em Administrao em Redes Linux

Aprovada em 18 de Setembro de 2004

Prof. Luciano Mendes dos Santos (DCC-UFLA)

Prof. Roberto Alvez Braga Junior (DEG-UFLA)

Prof. Wilian Soares Lacerda (DCC-UFLA) (Orientador)

Lavras Minas Gerais - Brasil

AgradecimentosA Deus por ter me dado foras nos momentos em que os obstculos pareciam intransponveis. Ao professor Wilian por ter me indicado um tema de estudo to fascinante.

v

vi

ResumoEste trabalho apresenta todos os componentes de hardware e software necessrios para controle de um rob a partir de um computador tipo PC. A soluo, baseada em um sistema Linux, prov mecanismos de controle do rob Monty a partir da porta serial do computador. O rob ligado ao computador por meio de um cabo, que contm, em uma de suas extremidades, um circuito conversor de sinais entre os padres TTL e RS232. A comunicao entre o computador e o rob se d por meio do protocolo RS232. A linguagem utilizada para controlar o rob formada por um subconjunto de comando da linguagem LOGO. Esses comandos bsicos podem ser combinados de diversas maneiras, gerando, assim, um conjunto maior e mais complexo de aes por parte do rob. O sistema prev a execuo de comandos tanto de forma interativa quanto em bloco, de maneira que um conjunto de comandos pode ser previamente armazenado em um arquivo e submetido, em bloco, para execuo pelo rob.

vii

viii

minha esposa Gilzlia e minhas lhas Rebeca e Amanda, por todos os momentos que no pudemos estar juntos nos ltimos 16 meses.

ix

x

Sumrio1 INTRODUO 1.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . REVISO DA LITERATURA 2.1 O rob . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 Robs autnomos . . . . . . . . . . . . . . . 2.1.2 Robs controlados . . . . . . . . . . . . . . 2.1.3 O rob Monty . . . . . . . . . . . . . . . . . 2.2 Diferena entre microcontrolador e microprocessador 2.3 O microcontrolador PIC16F84 . . . . . . . . . . . . 2.4 Comunicao serial e os padres RS232 e TTL . . . 2.5 A linguagem LOGO . . . . . . . . . . . . . . . . . DESENVOLVIMENTO DO HARDWARE 3.1 O computador . . . . . . . . . . . . . . . . . 3.2 O rob . . . . . . . . . . . . . . . . . . . . . 3.3 Interface de comunicao . . . . . . . . . . . 3.3.1 Circuito conversor entre RS232 e TTL 3.4 Conexes . . . . . . . . . . . . . . . . . . . 1 1 3 3 3 4 5 7 9 11 13 15 15 16 16 16 17 19 19 20 20 21 22 24 26 28 29 30 30

2

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

3

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

4

DESENVOLVIMENTO DO SOFTWARE 4.1 O software do PIC16F84 . . . . . . . . . . . . . . . . 4.1.1 Acionamento dos motores . . . . . . . . . . . 4.1.2 Leitura dos sensores . . . . . . . . . . . . . . 4.1.3 Comunicao com o computador . . . . . . . . 4.1.4 Descrio dos principais trechos do programa . 4.2 O software do computador . . . . . . . . . . . . . . . 4.2.1 Mdulo de controle . . . . . . . . . . . . . . . 4.2.2 Mdulo interpretador . . . . . . . . . . . . . . 4.2.3 Mdulo de comunicao . . . . . . . . . . . . 4.3 Funcionamento do sistema . . . . . . . . . . . . . . . 4.3.1 Conexo do rob porta serial do computador xi

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

4.3.2 4.3.3 4.3.4 5

Testes da conexo . . . . . . . . . . . . . . . . . . . . . . Utilizao do programa robo . . . . . . . . . . . . . . . . Testes de velocidade de transmisso . . . . . . . . . . . .

30 31 33 35 35 35 37 41 43 51

CONCLUSO 5.1 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Discusso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Proposta de continuidade do projeto . . . . . . . . . . . . . . . .

A Diagrama do circuito conversor B Listagem do programa do rob C Listagem do programa do computador

xii

Lista de Figuras2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 3.1 3.2 3.3 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 Exemplo de rob industrial . . . . Exemplo de rob aspirador . . . . Rob jardineiro . . . . . . . . . . Rob vigilante . . . . . . . . . . . Exemplo de rob cirurgio . . . . Rob Monty . . . . . . . . . . . . Diagrama bsico do computador . Componentes do microcontrolador Encasulamento do PIC16F84 . . . Arquitetura do PIC16F84 . . . . . Exemplo de gravador do PIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 5 5 6 6 8 8 9 10 11 12 17 17 18 19 21 22 23 24 24 25 25 26 27 27 29 30 31 32

Tela do programa MPLAB . . . . . . . . . . . . . . . . . . . . . Circuito conversor baseado no MAX232 . . . . . . . . . . . . . . Cabo conversor . . . . . . . . . . . . . . . . . . . . . . . . . . . Arquitetura do programa do rob . . . . . . . . . . . . . . . . . . Resposta ao comando . . . . . . . . . . . . . . . . . . . . . Diagrama de uxo do programa do rob . . . . . . . . . . . . . . Loop principal do programa . . . . . . . . . . . . . . . . . . . . Bloco RECEBE_COMANDO . . . . . . . . . . . . . . . . . . . Trecho do bloco EXECUTA_COMANDO . . . . . . . . . . . . . Trecho do bloco de tratamento do comando . . . . . . . . . . Arquitetura do programa do computador . . . . . . . . . . . . . . Diagrama de uxo do programa do computador . . . . . . . . . . Loop principal do mdulo de controle do programa do computador Funes ExecutaPrograma e ExecutaComando . . . . . . . . . . Funo ExecPF . . . . . . . . . . . . . . . . . . . . . . . . . . . Funo EnviaPrimitiva . . . . . . . . . . . . . . . . . . . . . . . Menu principal do minicom . . . . . . . . . . . . . . . . . . . . . Congurao de Bps/Paridade/Bits da porta seiral . . . . . . . . . xiii

5.1 5.2

Rob na fase de testes . . . . . . . . . . . . . . . . . . . . . . . . Medio da velocidade do rob . . . . . . . . . . . . . . . . . . .

36 36 41 42

A.1 Circuito conversor RS232 x TTL . . . . . . . . . . . . . . . . . . A.2 Circuito impresso - lado da solda . . . . . . . . . . . . . . . . . .

xiv

Lista de Tabelas2.1 2.2 4.1 4.2 4.3 4.4 4.5 4.6 Disciplinas do curso de robtica . . . . . . . . . . . . . . . . . . Caractersticas do PIC16F84 . . . . . . . . . . . . . . . . . . . . Controle do motor . . . . . . . . . . . . . . . Primitivas para controle dos motores do rob Sinais dos sensores retornados pelo rob . . . Comandos internos . . . . . . . . . . . . . . Primitivas . . . . . . . . . . . . . . . . . . . Comandos da linguagem LOGO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 10 20 20 21 33 33 33

xv

xvi

Captulo 1

INTRODUOH muito que se fala em robtica e todas as facilidades e avanos que essa cincia pode trazer para o dia-a-dia da sociedade. Atualmente, algumas discusses ainda utuam em torno do mito do rob totalmente autnomo, com inteligncia prpria e at, em alguns casos, com capacidade de expressar sentimentos prprios. Entretanto, o que se tem realmente consolidado ultimamente o uso da robtica em situaes prticas de alta periculosidade ou insalubridade para o ser humano, ou em tarefas que exigem extrema preciso em sua execuo, ou simplesmente em atividades com um alto grau de repetitividade. Dentro desse espectro de possveis atuaes, os robs atualmente so utilizados, por exemplo, para desarmar bombas, limpar dutos de ar condicionado, montar placas de circuito impresso com alto ndice de integrao ou participar da linha de montagem de automveis. A partir desses exemplos possvel perceber que a aplicao prtica dos robs nos dias de hoje ainda est muito longe da viso romntica dos livros e lmes de co cientca. Apesar disso, esses incrveis equipamentos tornaram-se indispensveis em diversos setores produtivos em todo o mundo.

1.1 ObjetivosO objetivo principal do trabalho fornecer comunidade Linux uma descrio detalhada de todos os elementos necessrios para a construo de um sistema de controle remoto de um rob a partir de uma estao Linux. Como objetivos especcos podem ser citados: Construir um programa para o rob que possibilite receber os comandos do computador, execut-los e fornecer ao programa controlador o resultado da execuo desses comandos. Construir um cabo conector capaz de interconectar o rob e o computador. 1

Construir um programa controlador que seja capaz de interpretar comandos, fornecidos pelo usurio em uma linguagem de alto nvel, e envi-los ao rob, para execuo.

2

Captulo 2

REVISO DA LITERATURA2.1 O robConforme denio do dicionrio Aurlio, em sua 1 a edio, o termo rob originase do francs robot, que por sua vez vem do tcheco robota, palavra criada pelo escritor tchecoeslovaco, Karel Chapek, e que signica "trabalho forado". Segundo Aurlio, um dos signicados do termo rob : Mecanismo automtico, em geral com aspecto semelhante ao de um homem e que realiza trabalhos e movimentos humanos. Os robs podem ser divididos em dois grandes grupos: autnomos e controlados.

2.1.1 Robs autnomosOs robs autnomos so aqueles que j trazem em sua memria a programao necessria para desempenhar todas as atividades que lhe so atribudas. Ainda se pode dividir esse grupo em dois outros diferentes. No primeiro subgrupo esto os robs autnomos com seqncia de passos predeterminada, tendo, portanto, atuao limitada e especca. Por exemplo, no caso de um brao mecnico, exemplicado na Figura 2.1, responsvel por soldar a carroceria de um automvel na linha de produo de uma indstria automobilstica, a programao feita de tal forma que o rob aplicar solda sempre nos mesmos pontos, partindo sempre de uma mesma posio de repouso. Caso o tipo de carroceria seja alterado, a programao do rob dever ser adaptada para essa nova realidade. No segundo subgrupo, esto os robs autnomos com capacidade de tomada de deciso a partir de informaes retiradas do seu prprio ambiente de atuao, atravs de sensores analgicos, tais como: sensor de luz, de som, de ultra-som, de contraste, de toque, etc. Essas informaes fornecero subsdios para que o 3

Figura 2.1: Exemplo de rob industrial Fonte: Revista Robs, n. 25, ano 2002

rob possa optar por uma determinada seqncia de passos de acordo com o valor captado pelo sensor. Um exemplo desse tipo de rob o aspirador de p automtico (Figura 2.2), j disponvel em lojas de eletrodomsticos. Esse rob atua em um espao delimitado e muda de direo sempre que encontra um obstculo no ambiente em que est atuando. Ou seja, o valor recebido dos sensores determina a direo que o rob deve tomar nos prximos movimentos. Salienta-se que esse apenas um exemplo das inmeras possibilidades dentro dessa categoria de robs. Outros exemplos de robs autnomos podem ser vistos nas guras 2.3 e 2.4.

2.1.2 Robs controladosPor outro lado, os robs controlados so aqueles cuja programao se restringe apenas a um algoritmo interpretador de comandos. Comandos esses que so envi4

Figura 2.2: Exemplo de rob aspirador Fonte: http://www.odebate.com.br/noticias.asp?ID=19975

Figura 2.3: Rob jardineiro Fonte: http://www.inovacaotecnologica.com.br

ados por uma unidade controladora remota. Nesse caso, o meio de conexo entre o rob e a estao controladora pode ser de diversos tipos, por exemplo: cabo, ultra-som, infravermelho ou rdio. Um exemplo desse tipo o rob cirurgio, visto na Figura 2.5, onde est sendo controlado a partir de comandos dados pelos mdicos cirurgies.

2.1.3 O rob MontyO rob, objeto do presente estudo, foi construdo com base no microcontrolador PIC16F84, fabricado pela empresa MICROCHIP, e foi batizado de Monty. O projeto do rob Monty de autoria da editora espanhola F&G Editores que 5

Figura 2.4: Rob vigilante Fonte: http://www.geocities.com/jcrobotics/gol_nort.pdf

Figura 2.5: Exemplo de rob cirurgio Fonte: http://www.dw-world.de/brazil/0 3367 7115_A_1184292_1_A 00.html

o publicou, em vrios pases, por meio de uma obra em forma de fascculos semanais. Essa obra, que discorre em profundidade sobre as disciplinas listadas na Tabela 2.1, foi a principal base bibliogrca para este trabalho. O Monty (ver Figura 2.6), usando toda a fora do PIC16F84, conta com os dispositivos listados a seguir, montados em um conjunto de cinco placas de CI totalmente integradas. Dois sensores de toque, posicionados na parte dianteira, um em cada lateral do rob, estando conectados s linhas RB2 e RB3. Dois sensores ticos de raios infravermelhos por reexo capazes de distin6

Fundamentos de eletrnica Microprocessadores Sensores e atuadores Comunicaes Motores Microcontroladores Robtica industrial e inteligncia articial Programao Prticas de laboratrioTabela 2.1: Disciplinas do curso de robtica

guir entre superfcies claras e escuras, estando conectados s linhas RB0 e RB1. Um sensor de ultra-som, conectado linha RB6. Um sensor de limiar sonoro, conectado linha RB7. Dois sensores de luz, conectados em paralelo linha RB4. Um motor acionador da pina controlado a partir da linha RB5. Dois motores conectados s linhas RA0,RA1,RA2 e RA3, responsveis pelo movimento do rob. A linha RA4 foi reservada para a utilizao de um encoder, que poderia ser usado para controlar a velocidade do rob.

2.2 Diferena entre microcontrolador e microprocessadorConforme (FGEDITORES, 2002), o microcontrolador um computador construdo dentro de um nico circuito integrado, enquanto o microprocessador apenas um dos componentes bsicos de um computador. Uma outra descrio da diferena entre o microprocessador e o microcontrolador pode ser encontrada em (MATIC, 2000), onde podem ser encontradas especialmente muitas e importantes informaes sobre os microcontroladores da famlia PIC. Na Figura 2.7 possvel ver um diagrama de blocos simplicado de um computador. Nessa gura v-se claramente que o microprocessador atua em conjunto com a memria e o mdulo de entradas e sadas para prover as diversas funcionalidades existentes em um computador. Por outro lado, como pode ser visto na Figura 2.8, o microcontrolador possui em seu interior todos esses elementos totalmente integrados dentro de um nico chip. 7

Figura 2.6: Rob Monty Fonte: Revista Robs, n. 53, ano 2002

Figura 2.7: Diagrama bsico do computador Fonte: Revista Robs, n. 4, ano 2002

8

Figura 2.8: Componentes do microcontrolador Fonte: Revista Robs, n. 52, ano 2002

Os microcontroladores esto muito presentes no dia-a-dia das pessoas. Em (FGEDITORES, 2002), apresentada uma estimativa segundo a qual no ano de 2000, em uma residncia americana padro, encontravam-se cerca de 240 microcontroladores. Esses pequenos computadores so encontrados, por exemplo, em mquinas de lavar, fornos microondas, aparelhos de TV, celulares, controles de iluminao, alarmes contra roubo, elevadores, alarmes de incndio, ar-condicionados, em vrios componentes de um automvel e dentro do prprio computador ou em seus perifricos.

2.3 O microcontrolador PIC16F84O PIC16F84 um microcontrolador bastante verstil, possuindo, entre outras, as caractersticas listadas na Tabela 2.2. Na Figura 2.9 possvel ver uma imagem do PIC16F84 em seu encapsulamento de 18 pinos, enquanto na Figura 2.10 pode-se ver a arquitetura bsica desse microcontrolador. O PIC16F84 pode tabalhar numa faixa de velocidades de 4 a 10MHz, sendo que a fase de busca de cada instruo dura 4 ciclos enquanto que a fase de execuo dura mais 4 ciclos. Isso faria com que cada instruo consumisse 8 ciclos 9

Recurso Memria de programa Memria de dados RAM Memria de dados EEPROM Nveis de pilha Jogo de instrues Tempo de execuo das instrues normais Tempo de execuo de salto Fontes de interrupo Frequencia mxima de trabalho Linhas de E/S digitais Temporizadores Voltagem de alimentao Voltagem de gravao Encapsulamento

Valor 1K x 14, tipo FLASH 68 bytes 64 bytes 8 35 de 14 bits 4 ciclos 8 ciclos 4 10MHz 13 um de usurio e um co de guarda de 2 a 6VDC de 12 a 14 VCD DIP de 18 pernas

Tabela 2.2: Caractersticas do PIC16F84

Figura 2.9: Encasulamento do PIC16F84 Fonte: Revista Robs, n. 4, ano 2002

de mquina. Porm, graas ao seu paralelismo, o microcontrolador consegue executar duas fases simultaneamente, o que faz com que uma instruo normal seja executada em apenas 4 ciclos, enquanto que as instrues de salto s podem ser executadas realmente em 8 ciclos. O programa a ser executado pelo PIC16F84 armazenado em sua memria ash, que pode ser gravada a partir de um computador, no qual o PIC deve ser conectado atravs da interface serial ou da interface paralela. O processo de gravao exige ainda um software gravador, que executado no computador, bem como um 10

Figura 2.10: Arquitetura do PIC16F84 Fonte: Revista Robs, n. 7, ano 2002

circuito eletrnico responsvel por efetivamente gerar os comandos de gravao da memria ash. Na Internet possvel encontrar vrias solues de hardware para gravao dos microcontroladores da famlia PIC. Em (MADSEN, 2000) podem ser encontrados alguns exemplos. Um desses exemplos pode ser visto na Figura 2.11. Em (PALONEN, 2003) podem ser encontradas mais informaes sobre a utilizao dos microcontroladores PIC a partir do sistema operacional Linux. Nesse site possvel encontrar softwares de gravao para Linux, compilador Assembly, alm de uma srie de informaes no formato passo-a-passo sobre como gravar o PIC ou como compilar um programa.

2.4 Comunicao serial e os padres RS232 e TTLO padro RS232 utilizado pelo computador para estabelecer comunicao serial com perifricos a ele conectados. A comunicao serial pode se dar nos modos sncrono ou assncrono. Na comunicao serial assncrona, as duas pontas a serem conectadas, chamados de hosts, devem conhecer previamente alguns parmetros, que devem ser 11

Figura 2.11: Exemplo de gravador do PIC Fonte: http://www.jdm.homepage.dk/newpic.htm

congurados de forma idntica em ambas as pontas, sob pena da comunicao no se realizar. Ambas as pontas devem utilizar a mesma quantidade de bits de dados e de stop, assim como o mesmo tipo de bit de paridade. Um exemplo de congurao poderia ser 8N2, que signica: 8 bits de dados, 2 bits de stop e nenhum bit de paridade. Um outro parmetro muito importante no processo de comunio de dados a velocidade de transmisso. Esse valor medido em bauds, que a quantidade de bits transmitida em cada intervalo de tempo em que trasmissor e receptor esperam que seja transmido de um novo conjunto de bits (CORREIA; SILVA, 2002). Para efeitos prticos, esse valor pode ser interpretado como 1 bit por segundo, considerando-se, portanto, que cada variao de tenso representar um nico bit de dados. No padro RS232, a velocidade de transmisso deve ser escolhida dentre um dos valores padres em bits por segundo ou, simplesmente, bps: 330, 660, 1200, 2400, 4800, 9600, 19200, 38400, 57600 ou 115200 bps. O RS232 dene os seguintes nveis de voltagem para representar cada bit transmitido: Sinais de sada: +5 a +15VCD para o nvel lgico alto e -5 a -15DCV para o nivel lgico baixo. Sinais de entrada: +3 a +15VCD para o nvel lgico alto e -3 a -15DCV para o nivel lgico baixo. 12

O TTL, por sua vez, usado pelo rob, normalmente trabalha com os nveis de sinais mostrados abaixo. Sinais de sada: mnimo de +2 para o nvel lgico alto e mximo de +0.8 para o nivel lgico baixo. Sinais de entrada: mnimo de +3.5 para o nvel lgico alto e mximo de +0.8 para o nivel lgico baixo. Em (CUGNASCA, 2002) so encontradas informaes sobre comunicao serial apresentadas de forma bastante prtica e objetiva. Mais informaes podem ser encontradas em (LACERDA, 2002).

2.5 A linguagem LOGOSegundo (CHELLA, 2002) e (SALVADOR, 2001), a linguagem LOGO foi criada por Seymourt Papert no nal da dcada de 60 com a principal nalidade de ser uma linguagem de programao para crianas. Por ter como uma das principais caractersticas a simplicidade, a linguagem LOGO muito utilizada em processos de aprendizagem de crianas. A partir de comandos simples de direcionamento, o usurio da linguagem pode comandar o que se conhece como uma tartaruga de solo. Essa tartatura, que hoje normalmente implementada como um simples sinal grco na tela do computador, inicialmente era uma contruo eletro-mecnica, ligada a um computador e capaz de receber deste, os comandos para sua movimentao. Isso possibilitava que o aprendiz constatasse, na prtica, a relao entre os comandos enviados ao computador e o movimento da tartatura originado a partir desses comandos, facilitando, assim, o processo de aprendizagem.

13

14

Captulo 3

DESENVOLVIMENTO DO HARDWAREA parte de hardware do sistema de controle remoto do rob apresentado neste trabalho, consiste basicamente de trs mdulos: Computador do tipo PC: onde ser a implementado o programa de controle do rob. Rob: construdo sobre um microcontrolador PIC16F84. Cabo conversor: responsvel por interconectar sicamente os dois mdulos anteriores, alm de converter os nveis de sinais entre o padro RS232, utilizado pelo computador, e o padro TTL, utilizado pelo PIC16F84. Nas sees a seguir sero descritos cada um desses trs mdulos.

3.1 O computadorO computador utilizado nas experincias foi um Pentium 133 MHz, com 48 Mb de memria RAM, gerenciado pelo sistema operacional Linux na sua distribuio Conectiva verso 8. Para efeito do controle propriamente dito, os parmetros velocidade e memria, mencionados no pargrafo anterior, no tm muita relevncia, uma vez que a comunicao entre o computador e o rob se d em baixa velocidade e, portanto, mesmo mquinas com pouca capacidade de processamento estaro aptas a fazer o controle. Para a estao controladora apresentada neste modelo, indispensvel que ela possua: teclado, monitor e uma sada serial padro RS232. Para comunicao com o rob a porta serial do computador foi congurada no modo assncrono, com a congurao 9600 8N2: 15

Velocidade: 9600 bps bit de dados: 8 bit de paridade: Nenhum bit de stop: 2

3.2 O robPara atingir os propsitos do presente trabalho, algumas alteraes se zeram necessrias nas conexes eltricas do rob. Foram desabilitados o controle de pina e os sensores de luz. Essas entradas passaram, ento, a ser utilizadas para as linhas de recepo e transmisso de dados entre o rob e o computador. No projeto aqui apresentado, a gravao do programa na memria ash do PIC16F84 se deu atravs da prpria placa controladora do rob Monty. Essa placa acumula duas funes que podem ser selecionadas a partir de uma chave comutadora especca. Com a chave de seleo na posio RUN, o PIC16F84 apenas executa o programa nele gravado. Por outro lado, com a chave na posio PROG, o microcontrolador passa a gravar em sua memria os dados recebidos da porta paralela do computador. O MPLAB, software gravador fornecido juntamente com o rob Monty, funciona no sistema operacional DOS. Na Figura 3.1 pode-se ver uma imagem da tela principal desse programa. O processo de gravao do MPLAB se d por meio da porta paralela do computador.

3.3 Interface de comunicaoO rob controlado ligado estao controladora atravs de um cabo exvel associado a um circuito de converso de sinais entre os padres utilizados pelo computador e pelo rob.

3.3.1 Circuito conversor entre RS232 e TTLA utilizao de diferentes voltagens para representar o mesmo nvel lgico no padro RS232 e no padro TTL tornou necessrio interpor, entre o rob e o computador, um circuito conversor de sinais. Esse circuito, baseado no chip MAX232, de fabricao da Texas Instrument (TEXASINSTRUMENT, 2002), recebe os sinais do rob no padro TTL e entrega ao computador o mesmo sinal no padro RS232 e vice-versa. Na Figura 3.2 pode ser vista a congurao padro desse circuito. 16

Figura 3.1: Tela do programa MPLAB

Figura 3.2: Circuito conversor baseado no MAX232 Fonte: TEXAS Instrument

3.4 ConexesNo lado do computador foi utilizado um conector DB9, do qual somente foram utilizados os pinos 2, 3 e 5, conectados, no circuito conversor, aos pinos de transmisso, recepco e terra, respectivamente. Essa inverso dos pinos 2 e 3 neces17

sria, visto que a linha de transmisso da sada do computador deve ser ligada linha de recepo do MAX232 e vice-versa. No lado do rob, os os de transmisso e recepo foram ligados diretamente s linhas RB5 e RB4 da placa de controle, promovendo, assim, a mesma inverso que foi realizada no conector do computador. De forma que, do ponto de vista do PIC16F84, a linha RB4 de transmisso, enquanto que a linha RB5 de recepo. Na Figura 3.3 pode ser vista uma representao esquemtica do cabo conversor, onde pode-se perceber, inclusive, que a alimentao do circuito conversor foi retirada do prprio rob.

Figura 3.3: Cabo conversor

18

Captulo 4

DESENVOLVIMENTO DO SOFTWARE4.1 O software do PIC16F84O programa do PIC16F84, cuja arquitetura pode ser vista na Figura 4.1, foi desenvolvido em Assembly e apresenta trs funcionalidades que sero detalhadas nas trs subsees seguintes. No programa do rob foi utilizado o conceito de primitiva: um conjunto simples e reduzido de comandos que devidamente agrupados podem criar aes mais complexas. So reconhecidas pelo rob as seguintes primitivas: , , , , , , e . A primitiva retorna a verso corrente do programa do PIC. As demais primitivas sero detalhadas a seguir.

Figura 4.1: Arquitetura do programa do rob

19

4.1.1 Acionamento dos motoresO rob Monty possui dois motores que so responsveis pelo seu movimento. Cada um desses motores controlado por duas linhas digitais do PIC16F84. Caso as duas linhas apresentem em sua sada valores iguais, o motor interromper o seu funcionamento. Se apenas uma das linhas apresentar valor 1, ento o motor ser acionado em um ou outro sentido, dependendo de qual linha foi acionada. Na Tabela 4.1 pode ser vista a correlao entre o movimento do motor e os valores presentes nas linhas digitais RB0 e RB1. RB0 0 0 1 1 RB1 0 1 0 1 Motor Para de girar Gira para trs Gira para frente Para de girar

Tabela 4.1: Controle do motor

As primitivas aceitas pelo rob, para controle dos motores, podem ser vistas na Tabela 4.2. Primitiva Comando Avanar Esquerda Direita Retornar Parar Descrio Os dois motores giram para frente O motor esquerdo gira para trs enquanto o motor direito gira para frente O motor direito gira para trs enquanto o motor esquerdo gira para a frente Os dois motores giram para trs Os dois motores param

Tabela 4.2: Primitivas para controle dos motores do rob

4.1.2 Leitura dos sensoresCom as adaptaes efetuadas no Monty especicamente para este trabalho, o rob passou a gerenciar os seguintes sensores: 1. Bumpers esquerdo e direito. Sensores de toque que geram em sua sada o valor 1 sempre que so acionados, ou seja, sempre que o rob tocar em um obstculo sua esquerda ou sua direita. 2. Sensores de contraste esquerdo e direito. Sensores de reexo capazes de diferenciar entre superfcies claras e escuras. Sempre que o sensor pas20

sar sobre uma superfcie de cor preta, ser gerado o valor 1 em sua sada. Este sensor indispensvel na tarefa de seguir uma determinada trajetria marcada no solo. 3. Ultrasom. Sensor capaz de detectar movimentos. Sempre que houver movimento frente do rob, este sensor gerar o valor 0 em sua sada. 4. Limiar sonoro. Sensor responsvel por detectar um sinal sonoro acima de uma determinada intensidade. Quando detectado um determinado volume de som, este sensor retornar o valor 1. O programa do rob capaz de informar os valores desses sensores. Isso se d atravs das primitivas e . Os possveis valores retornados em resposta diretiva podem ser vistos na Tabela 4.3. Havendo mais de um valor, eles sero separados por ",". Na Figura 4.2 pode ser vista a string retornada aps o recebimento da diretiva e o signicado de cada dgito nessa string. Sinal BEsq BDir CEsq CDir USom Som Sensor O bumper esquerdo O bumper direito Contraste Esquerdo Contraste Direito Ultra-som Limiar sonoro Linha do PIC B1 B0 B2 B3 B6 B7

Tabela 4.3: Sinais dos sensores retornados pelo rob

Figura 4.2: Resposta ao comando

4.1.3 Comunicao com o computadorFoi utilizado ainda um mdulo de comunicao serial sem o qual no seria possvel a transmisso de dados entre o computador e o microcontrolador. Essa necessidade 21

se deu pelo fato do PIC16F84 no possuir em seu hardware uma porta especca para comunicao serial. A implementao desse mdulo foi baseada na biblioteca rs232low, distribuda com rob Monty. A congurao dos parmetros de comunicao serial do rob foi xada dentro do prprio fonte. Os parmetros utilizados foram 8N2, ou seja, 8 bits de dados, nenhum bit de paridade e 2 bits de stop. O mdulo rs232low exporta simplesmente duas funes, alm de algumas variveis. As duas funes, RxD e TxD, so responsveis, respectivamente, por receber e enviar um caractere para o computador.

4.1.4 Descrio dos principais trechos do programaNa Figura 4.3 pode ser visto um diagrama de uxo do programa do rob. A seguir sero apresentados os principais trechos do programa.

Figura 4.3: Diagrama de uxo do programa do rob

Aps a inicializao dos registradores de interrupo e de temporizao, o programa entra em seu loop principal, cujo cdigo fonte mostrado na Figura 4.4. Na 22

linha 1, o temporizador "co de guarda" zerado para evitar que o PIC16F84 seja reinicializado em situao normal de execuo. Nas linhas 2 a 4, enviado o caractere de pronto para a estao controladora. Na linha 5, o programa aguarda at que receba um caractere qualquer do computador. Nas demais linhas, o programa verica se o primeiro caractere recebido um ). Em caso positivo, desvia para o bloco EXECUTA_COMANDO. Nesse momento, o comando estar armazenado na varivel Buffer. Nas linhas 9 a 12 vericado o limite do buffer. Caso esteja tudo certo, nas linhas 13 e 14 o caractere armazenado no buffer. Finalmente, nas linhas 15 a 17, o ponteiro do buffer incrementado e o programa passa a esperar um novo caractere. Na Figura 4.6 pode ser visto um trecho do bloco EXECUTA_COMANDO, onde, para cada primitiva reconhecida pelo programa, executado um conjunto de comandos similares queles que se encontram nas linhas 1 a 4. Uma exceo o bloco de tratamento do comando , que pode ser visto na Figura 4.7. Nas linhas 5 a 16 so testadas todas os sinais de entrada do PIC16F84, sendo chamada a rotina correspondente a cada sinal ativo. 23

Figura 4.5: Bloco RECEBE_COMANDO

Figura 4.6: Trecho do bloco EXECUTA_COMANDO

4.2 O software do computadorPara controlar o rob remotamente, foi desenvolvido um programa em C, que ser executado no computador e cuja arquitetura pode ser vista na Figura 4.8. O diagrama de uxo desse programa pode ser visto na Figura 4.9. A arquitetura da aplicao foi projetada de forma modular com o objetivo principal de permitir futuras expanses com um mnimo de alteraes no programa. Assim, por exemplo, todo o tratamento de comunicao em baixo nvel entre o rob e o computador foi isolado em mdulos especcos, sendo um para cada tipo de comunicao. Cada mdulo deve implementar e exportar as funes exigidas pelo mdulo de controle. Nas subsees a seguir sero apresentados os principais mdulos do programa. 24

Figura 4.7: Trecho do bloco de tratamento do comando

Figura 4.8: Arquitetura do programa do computador

25

Figura 4.9: Diagrama de uxo do programa do computador

4.2.1 Mdulo de controleO mdulo de controle responsvel por fazer a integrao entre todos os demais mdulos. Na Figura 4.10 pode ser visto o loop principal desse mdulo. O comando fornecido pelo usurio capturado pelo mdulo de interface, que o entrega para o mdulo de controle (linhas 3 e 4). Este, por sua vez, tentar executlo caso seja um comando interno ou primitiva (linhas 6 a 24). Em caso contrrio, executar uma funo do mdulo interpretador (linhas 25 a 27) que se encarregar de transformar os comandos em primitivas, devolvendo-as, em seguida, ao mdulo de controle, que as encaminhar ao mdulo de comunicao. As funes ExecutaComando e ExecutaPrograma (Figura 4.11) funcionam apenas com um wrapper de roteamento para a real funo no mdulo interpretador. Uma vez que podem existir vrios mdulos interpretadores no programa, o usurio dever especicar o interpretador com o qual deseja trabalhar, sendo que o interpretador default o LOGO. Essas funes, ento, enviaro o comando para o mdulo correspondente ao interpretador selecionado pelo usurio. A funo de inicializao do interpretador, chamada no momento da denio da linguagem a ser utilizada, passa para o mdulo interpretador o endereo da fun26

Figura 4.10: Loop principal do mdulo de controle do programa do computador

Figura 4.11: Funes ExecutaPrograma e ExecutaComando

o ExecutaPrimitiva. Isso permite que as funes vistas na Figura 4.11 chamem a funo ExecutaPrimitiva em forma de callback. Dessa maneira, toda a inteligncia de execuo das primitivas ca restrita ao mdulo de controle, que atuar em conjunto com o mdulo de comunicao para comandar a efetiva execuo da primitiva pelo rob. 27

4.2.2 Mdulo interpretadorUm mdulo interpretador diferente poder ser desenvolvido para cada linguagem que se deseje suportar no programa controlador. Neste projeto, foi implementado, a ttulo de exemplo, apenas um subconjunto mnimo de comandos da linguagem LOGO. Qualquer mdulo interpretador deve implementar e exportar as seguintes funes: Inicializa: Funo chamada pelo mdulo de controle no momento da denio da linguagem utilizada. O implementador do mdulo deve aproveitar esta funo para promover todas as inicializaes necessrias ao interpretador. Uma inicializao obrigatria o armazenamento, em uma varivel local, do ponteiro para a funo ExecutaPrimitiva, que ser utilizada pelas funes ExecutaComando e ExecutaProg. ExecutaProg: Chamada pelo mdulo de controle quando este receber um comando EXEC. Esta funo deve abrir o arquivo cujo nome passado como parmetro e execut-lo segundo seu prprio engenho. Para cada comando que necessitar executar uma das primitivas do rob, dever ser chamada a funo ExecutaPrimitiva, implementada pelo mdulo de controle. Um ponteiro para essa funo passado na chamada da funo Inicializa. ExecutaComando: Esta funo chamada pelo mdulo de controle sempre que este receber um comando que no seja uma primitiva nem um comando interno. Aqui, como na funo ExecutaProg, caso seja necessrio executar uma primitiva, a funo dever chamar, em forma de callback, a funo ExecutaPrimitiva do mdulo de controle. Finaliza: Chamada na nalizao normal do programa. Pode ser usada para fazer todo o trabalho de "limpeza" de memria e/ou outras aes necessrias para que tudo seja nalizado corretamente. Na gura 4.12 pode ser vista a funo ExecPF, onde executado o comando PF da linguagem LOGO. Observe-se nas linhas 9 e 12 a chamada funo ExecPrimitiva. Na linha 9 executada a primitiva fazendo os dois motores girarem para frente. Em seguida, na linha 11, executado um delay. Finalmente, na linha 12, os motores so desligados por meio da execuo da primitiva . Para se determinar o tempo de delay usado na chamada da funo sleep, foi usada a frmula 4.1: (N K) (4.1) T empoDelay = 50 Onde N, dado em centmetros, o parmetro recebido pela funo ExecPF, e K o tempo, em segundos, necessrio para o rob percorrer 50cm. O valor de K de difcil preciso devido a pelo menos duas variveis: 28

Figura 4.12: Funo ExecPF

1. A superfcie onde o rob est atuando: caso a superfcie se apresente demasiadamente lisa, poder haver deslisamento das rodas, o que provocar uma diferena no valor. 2. A intensidade da fonte de alimentao: dependendo da fora da alimentao, os motores podero girar mais ou menos rpido, gerando, assim, considerveis diferenas nos tempos. De igual forma, para gerar o delay necessrio s funes ExecPE e ExecPD, cujo parmetro um ngulo, foi utilizada a frmula 4.2: T empoDelay = (N K) 360 (4.2)

Onde N o ngulo passado no parmetro de chamada da funo, em graus, e K uma constante que representa o tempo necessrio para o rob girar 360 o .

4.2.3 Mdulo de comunicaoDa mesma forma que no mdulo interpretador, pode existir um mdulo para cada tipo de comunicao. Neste trabalho foi implementado apenas o mdulo de comunicao serial, baseado, principalmente, nas informaes contidas em (SWEET, 2003). Cada mdulo de comunicao deve implementar e exportar as seguintes funes: Inicializa: Funo chamada pelo mdulo de controle no momento da denio do protocolo utilizado. Aqui devem ser colocadas todas as aes necessrias inicializao da comunicao com o rob. Por exemplo, a abertura da porta serial cuja identicao passada como parmetro. 29

EnviaPrimitiva: Chamada pelo mdulo de controle quando este receber uma solicitao de execuo de uma primitiva. Esta funo deve enviar a primitiva para o rob e, em seguida, receber a resposta do rob para repassla ao mdulo de controle. Finaliza: Chamada na nalizao normal do programa. Pode ser usada para executar procedimentos de nalizao da comunicao assim como liberao de variveis alocadas dinamicamente. Na Figura 4.13 pode ser vista a funo EnviaPrimitiva. Na linha 4, a primitiva enviada para o rob, que dever estar conectado porta serial apontada pelo handle hPorta. Se tudo correu bem no envio da primitiva (linhas 5 a 9), ento o programa aguardar a resposta do rob (linha 10), que ser repassada ao mdulo de controle.

Figura 4.13: Funo EnviaPrimitiva

4.3 Funcionamento do sistema4.3.1 Conexo do rob porta serial do computadorAntes de qualquer coisa, necessrio conectar o rob porta serial do computador. Essa conexo feita por meio do cabo conversor, cuja extremidade do computador dotada de um conector DB9. Normalmente, a primeira porta serial (/dev/ttyS0), que acessada atravs de um conector DB9, usada pelo mouse, restando, portanto, a porta serial 2. Em muitos computadores, entretanto, a segunda porta dotada de um conector DB25, o que exige a utilizao de um adaptador DB9(macho) x DB25(fmea).

4.3.2 Testes da conexoPara testar a conexo com o rob, pode ser utilizado o programa minicom ou qualquer outro programa de emulao de terminal serial. 30

A congurao do minicom muito simples. Uma vez iniciado o programa, basta digitar "CTRL-A O" para acessar o menu de congurao. A partir desse menu, selecionar a opo "Congurao da Porta Serial" (Figura 4.14). Nesse menu, devem ser conguradas: Dispositivo Serial (Opo A): Para a serial 2, informar "/dev/ttyS1". Bps/Paridade/Bits (Opo E): Devem ser selecionados os valores mostrados na Figura 4.15. Controle de Fluxo por Hardware (Opo F): Dever ser escolhida a opo "No". Controle de Fluxo por Software (Opo G): Dever ser escolhida a opo "No".

Figura 4.14: Menu principal do minicom

Depois de congurado o minicom, basta ligar o rob, colocando a chave "ONOFF" na opo "ON". Salienta-se que a chave "RUN-PROG" deve estar na posio "RUN". Se tudo estiver corretamente congurado, dever aparecer na tela do minicom a saudao inicial do rob, que consiste de duas linhas. Na primeira linha dever surgir a verso do programa do rob, enquanto que na segunda linha dever aparecer a string . Finalmente, dever aparecer o sinal de pronto (caractere >). A partir desse momento, o rob estar apto a receber comandos.

4.3.3 Utilizao do programa roboPara executar o programa no computador basta executar o comando robo na linha de prompt do Linux. A sintaxe do comando pode ser vista a seguir: 31

Figura 4.15: Congurao de Bps/Paridade/Bits da porta seiral

robo [ling logo][prot serial:/dev/ttyS1] Os dois parmetros so opcionais. Entretanto, caso o parmetro prot no seja informado na execuo do programa, o usurio dever executar o comando prot, dentro do programa, visto que, enquanto no for denido um protocolo vlido, no ser possvel estabelecer comunicao com o rob. Com relao ao parmetro ling, que dene o interpretador a ser utilizado pelo programa, o usurio poder interagir com o rob, mesmo sem deni-lo, uma vez que, por default, assumida a linguagem LOGO. Nessa primeira verso do programa, o nico protocolo aceito o serial, enquanto que a nica linguagem suportada o LOGO. No caso da linguagem, foi implementado apenas um subconjunto dos comandos do LOGO. Dessa forma, aps executar o programa, o usurio poder digitar: Um dos comandos internos mostrados na Tabela 4.4, Uma das primitivas do rob, mostradas na Tabela 4.5 ou Um dos comandos suportados pelo interpretador carregado no momento. No caso do interpretador LOGO implementado aqui, somente so suportados os comandos listados na Tabela 4.6.

32

Comando PROT : LING EXEC FIM

Signicado Dene um protocolo Dene uma linguagem Solicita que o interpretador execute o programa contido em Finaliza o programa

Tabela 4.4: Comandos internos

Comando

Signicado Avana Gira para a esquerda Gira para a direita Retorna Para os motores Informa a verso Retorna a lista de sensores que est recebendo um evento externo Retorna o status de todos os sensoresTabela 4.5: Primitivas

Comando PF PE PD PT REPITA [] DIGA

Signicado Avana N centmetros Gira N graus para a esquerda Gira N graus para a direita Retorna N centmetros Repete N vezes Escreve o resultado da primitiva X (V, S ou s)

Tabela 4.6: Comandos da linguagem LOGO

4.3.4 Testes de velocidade de transmissoNessa fase de testes constatou-se a necessidade de se colocar uma pausa aps o envio de cada caractere para o rob. Essa necessidade explica-se pelo fato do rob no suportar controle de transmisso por software ou por hardware. Dessa forma, o programa do computador deve aguardar o tempo necessrio para que o rob processe o caractere anteriormente enviado. Esse tempo foi calculado com base na frmula: 33

P ausa = (InstrN ormT empoInstrN orm)+(InstrSaltoT empoInstrSalto) (4.3) onde: InstrNorm: Quantidade de instrues normais no bloco de tratamento de um caractere. TempoInstrNorm: Tempo necessrio para execuo de uma instruo normal. InstrSalto: Quantidade de instrues de salto no bloco de tratamento de um caractere. TempoInstrSalto: Tempo necessrio para execuo de uma instruo de salto. Para se obterem os valores a serem aplicados na equao 4.3, foram assumidas as seguintes constantes: Velocidade de processamento do PIC16F84: 4MHz. Ciclos necessrios para execuo de uma instruo normal: 4. Ciclos necessrios para execuo de uma instruo de salto: 8. Quantidade de instrues normais no bloco de recepo: 11. Quantidade de instrues de salto no bloco de recepo: 2. Aplicando-se ento as constantes acima no equao 4.3, foi obtido o seguinte valor para a varivel Pausa: P ausa = (10 1) + (3 2s) = 16s (4.4)

A esse valor foi acrescentada uma margem de segurana de 2s. Dessa forma, cada primitiva, cujo tamanho de 3 caracteres, ser transmitida para o rob em aproximadamente 54s.

34

Captulo 5

CONCLUSO5.1 ResultadosNos vrios testes realizados, o sistema de controle remoto do rob mostrou-se bastante estvel. Inicialmente foram utilizados programas emuladores de terminal serial. No ambiente grco do Linux (KDE) foi utilizado o terminal do kppp, enquanto no modo texto utilizou-se o minicom. Ambos se mostraram bastante fceis de congurar. Nesses primeiros testes, as diretivas foram digitadas diretamente no terminal, que as enviava para o rob. As respostas do rob eram capturadas e exibidas pelo prprio terminal. Esse mtodo de testes possibilitou identicar a necessidade de vrios ajustes na programao do rob. Nessa fase, foram realizadas cerca de 50 gravaes no microcontrolador. Na segunda fase de testes, j com o programa do computador em funcionamento, foram realizados testes de execuo em bloco, interpretao da linguagem de comandos e, principalmente, o envio de caracteres em uma alta taxa de transmisso de forma a determinar a real capacidade de recepo do rob. Nessa fase, conforme detalhado no captulo 4, foi necessrio acrescentar uma pausa aps a transmisso de cada caractere, o que no inviabilizou o funcionamento do sistema. Na Figura 5.1 pode ser visto o rob conectado ao computador, mas ainda sem a carcaa. Na Figura 5.2, j com o rob dentro da carcaa, est sendo feita a medio dos tempos para o clculo da sua velocidade.

5.2 DiscussoA partir deste trabalho, constatou-se a relativa facilidade de se construir um sistema de controle de um rob, desde que este seja capaz de se comunicar por meio de um protocolo de comunicao padro, tal como o protocolo serial. 35

Figura 5.1: Rob na fase de testes

Figura 5.2: Medio da velocidade do rob

As ferramentas necessrias para se construir o programa de controle so facilmente encontradas na forma de software livre. Neste trabalho, por exemplo, foi utilizada a linguagem C, cujo compilador normalmente acompanha as distribuies Linux. A construo do programa do rob baseado no microcontrolador PIC, embora 36

mais complexa do que a programao do computador, tambm amplamente documentada tanto na Internet como em livros especializados. Uma combinao dessas duas fontes o livro (MATIC, 2000), que pode ser encontrado em meio eletrnico gratuitamente na Web. A construo de um circuito eletrnico para gravar o microcontrolador pode ser o ponto considerado mais complexo na implementao do sistema apresentado, mas tambm podem ser encontrados vrios exemplos desse circuito na Internet. Uma alternativa para fugir do desenvolvimento do programa para o PIC e, consequentemente, da sua gravao, buscar solues tais como o BasicStep, do fabricante brasileiro Tato Equipamentos. Esse produto, cuja descrio bsica pode ser vista em (ANGNES, 2003), uma soluo integrada de microcontrolador, circuito de hardware para gravao, linguagem de programao e IDE para desenvolvimento e gravao do software.

5.3 Proposta de continuidade do projetoSo muitas as possibilidades de continuidade do projeto. Entre elas, destaca-se a possibilidade de desenvolvimento de um driver que substituiria parte do programa de controle. O driver poderia implementar tambm um handler para tratamento de interrupes vindas do rob. Tambm poderia se pensar em construir um interpretador de comandos mais completo. Este programa, utilizando recursos de inteligncia articial, seria capaz de utilizar os sinais captados pelos sensores do rob para promover aes mais complexas como: Seguir uma trajetria predeterminada, desviando dos obstculos encontrados no percurso ou "Varrer" um determinado ambiente procura de determinado objeto. Se forem consideradas mudanas na parte do rob, as possibilidades so inmeras. Por exemplo, poderia ser implementada uma comunicao via rdio, o que traria uma maior liberdade de movimentos para o rob. Tambm pode se pensar em implementar uma comunicao sobre o protocolo IP, o que garantiria o controle do rob a partir de qualquer ponto de uma rede. J existe, inclusive, projetos de implementao de uma verso simplicada da pilha TCP/IP no PIC16F84. Uma lista bastante variada, contendo esse e outros projetos baseados no PIC, pode ser encontrada na Internet, em (AID, 2003). Outro incremento possvel seria a instalao de uma microcmera de forma que o rob pudesse transmitir seu posicionamento para a estao de controle. Nesse caso, o microcontrolador deveria ser substitudo por uma verso mais potente como o PIC16F87. 37

O projeto do rob poderia ainda evoluir para um controlador PLC. Assim, o programa do computador poderia ser, na verdade, um painel de controle de equipamentos industriais. Mais informaes sobre controladores PLC podem ser encontradas em (MATIC, 2001). Como pode-se observar, as possibilidade so inmeras se consideradas todas as combinaes possveis entre os elementos do sistema. O conjunto de implementaes possveis no hardware e no software podem, enm, conduzir a aplicaes completamente distintas, cabendo, portanto, ao pesquisador, apenas decidir que rumo dever seguir.

38

Referncias BibliogrcasAID. Links para projetos baseados no PIC. http://www.interaccess.org/aid/links.html: [s.n.], 2003. ANGNES, D. L. Introduo ao Microontrolador Basic Step. 2003. CHELLA, M. T. Ambiente de Robtica Educacional com Logo. http://www.nied.unicamp.br/~siros/doc/artigo_sbc2002_wie_nal.PDF: [s.n.], 2002. CORREIA, L. H. A.; SILVA, R. M. de A. Redes de Computadores. 1. ed. Lavras: UFLA/FAEPE, 2002. CUGNASCA, C. E. Comunicao Serial - Reviso. 2002. FGEDITORES. Robs. 1. ed. Madrid: FG Editores, 2002. LACERDA, W. S. Arquitetura de Computadores. 1. ed. Lavras: UFLA/FAEPE, 2002. MADSEN, J. D. PIC-Programmer 2 for PIC16C84 etc. http://www.jdm.homepage.dk/newpic.htm: [s.n.], 2000. MATIC, N. PIC microcontrollers. 1. ed. Belgrade: mikroElektronika, 2000. MATIC, N. Introduction to PLC controllers. 1. ed. Belgrade: mikroElektronika, 2001. PALONEN, H. Penguin PICn. http://www.yty.net/pic/index.html: [s.n.], 2003. SALVADOR, M. B. L. Introduo ao Superlogo. http://www.dma.ufs.br/slogo.ppt: [s.n.], 2001. SWEET, M. R. Serial Programming Guide for POSIX Operating Systems. http://www.easysw.com/ mike/serial/: [s.n.], 2003. TEXASINSTRUMENT. MAX232, MAX232I DUAL EIA-232 DRIVERS/RECEIVERS. 2002. SLLS047I - FEBRUARY 1989 - REVISED OCTOBER 2002. 39

40

Apndice A

Diagrama do circuito conversor

Figura A.1: Circuito conversor RS232 x TTL

41

Figura A.2: Circuito impresso - lado da solda

42

Apndice B

Listagem do programa do rob************************************************** ; Ps-graduao em Administrao de Redes Linux/UFLA ; Projeto de integrao Monty x Linux ; Programa de controle do rob Monty ; ; Autor: Alxis Rodrigues de Almeida ; Data primeira verso: 18/07/2004 ; ; Este programa responsvel por estabelecer uma comunicao serial ; com o programa controlador no Linux atravs da porta serial do ; computador. O programa tambm gerencia os sensores suportados ; pelo rob e repassa os valores capturados para o computador. Uma ; terceira funo do programa executar os comandos enviados pelo ; programa do computador. ;--------------------------------------------list p=16f84 include "p16f84.inc" CLKIN BAUDIOS T_MODO R_MODO T_Nbit R_Nbit Sbit Rs232_var EQU EQU EQU EQU EQU EQU EQU EQU .4000000 .9600 1 1 8 8 2 0xC

cblock 0x31 PontTab IdEvento Contador Eventos Buffer endc TamMaxBuffer equ (0x3F-Buffer+1)

43

ORG 0x00 goto INICIO ORG 0x04 goto INTER ORG 0x05 Tabela sCRLF dt sBE sBD sCE sCD sUS sS EQU dt EQU dt EQU dt EQU dt EQU dt EQU dt movwf EQU 0x0D,0x0A,0x00 \$ "BEsq",0x00 \$ "BDir",0x00 \$ "CEsq",0x00 \$ "CDir",0x00 \$ "USom",0x00 \$ "Som",0x00 PCL \$

sOk sErr sVer

EQU \$ dt "",0x0D,0x0A,0x00 EQU \$ dt "",0x0D,0x0A,0x00 EQU \$ dt "",0x0D,0x0A,0x00 INCLUDE "RS232LOW.INC"

INICIO clrf PORTA bsf STATUS,RP0 movlw movwf ; ; movlw movwf movlw movwf movlw movwf movlw movwf b10001111 OPTION_REG b00000000 INTCON b00000000 TRISA b11101111 TRISB b00000111 TMR0

bcf STATUS,RP0 call DELAY1S call DELAY1S call Call EnviaVersao EnviaOk

44

AGUARDA_COMANDO clrwdt movlw movwf call call movlw subwf btfsc goto ; atualiza cao de guarda ; envia sinal de pronto ; ; aguarda primeiro caractere ; o caractere de inicio de comando?

> Txdreg TxD RxD Rxdreg,W STATUS,Z EXECUTA_COMANDO Rxdreg,w Txdreg TxD EnviaEnter Contador,W TamMaxBuffer STATUS,Z ERRO Rxdreg,W INDF Contador,F FSR,F RECEBE_CAR ; Estourou o buffer? ; aguarda caractere ; o caractere de fim de comando?

; sim, ento recebe o comando

; sim, chama erro e retorna ; no, armazena o car e espera prximo ;

Buffer FSR INDF,W A STATUS,Z AVANCA INDF,W E STATUS,Z ESQUERDA

45

movf sublw btfsc goto movf sublw btfsc goto movf sublw btfsc goto movf sublw btfsc goto movf sublw btfsc goto movf sublw btfsc goto goto AVANCA movlw movwf call goto ESQUERDA movlw movwf call goto DIREITA movlw movwf call goto PARA movlw movwf call goto

INDF,W D STATUS,Z DIREITA INDF,W P STATUS,Z PARA INDF,W R STATUS,Z RETROCEDE INDF,W S STATUS,Z SENSORES INDF,W s STATUS,Z sensores INDF,W V STATUS,Z ENVIA_VER ERRO

b00000110 PORTA EnviaOk AGUARDA_COMANDO

; avana

b00000101 PORTA EnviaOk AGUARDA_COMANDO

; avana para a esquerda

b00001010 PORTA EnviaOk AGUARDA_COMANDO

; avana para a direita

b00000000 PORTA EnviaOk AGUARDA_COMANDO

; para

46

RETROCEDE movlw movwf call goto SENSORES ; incf ; movf ; sublw ; btfsc ; goto ; bsf ; call

b00001001 PORTA EnviaOk AGUARDA_COMANDO

; retrocesso

FSR,F INDF,W 0 STATUS,Z DESLIGA PORTB,7 EnviaOk

;

clrf Eventos call EnviaEnter movlw movwf Txdreg call TxD call EnviaEnter goto ;----sensores ; call EnviaEnter AGUARDA_COMANDO

movlw movwf Txdreg call TxD call goto ;----DESLIGA bcf PORTB,7 call goto ENVIA_VER call goto ERRO call goto EnviaErro AGUARDA_COMANDO EnviaOk AGUARDA_COMANDO EnviaEnter AGUARDA_COMANDO

;EvUltraSom

;EvSom

EnviaVersao AGUARDA_COMANDO

;-----------------------------------------EnviaEnter movlw sCRLF movwf PontTab goto EnviaString ;----------Subrotinas de Tratamento de Eventos --------

48

EvContrasteEsq call incf movlw movwf goto EvContrasteDir call incf movlw movwf goto EvBumperEsq call incf movlw movwf goto EvBumperDir call incf movlw movwf goto EvUltraSom call incf movlw movwf goto EvSom call incf movlw movwf goto

EnviaSeparador Eventos,F sCE PontTab EnviaString

EnviaSeparador Eventos,F sCD PontTab EnviaString

EnviaSeparador Eventos,F sBE PontTab EnviaString

EnviaSeparador Eventos,F sBD PontTab EnviaString

EnviaSeparador Eventos,F sUS PontTab EnviaString

EnviaSeparador Eventos,F sS PontTab EnviaString

EnviaSeparador movf Eventos,W andwf Eventos,F btfsc STATUS,Z return movlw , movwf Txdreg call TxD return ;----Subrotina EnviaOk ----------------------------EnviaOk movlw movwf goto sOk PontTab EnviaString

;----Subrotina EnviaErro -----------------------------

49

EnviaErro movlw movwf goto

sErr PontTab EnviaString

;----Subrotina EnviaVersao ----------------------------EnviaVersao movlw sVer movwf PontTab goto EnviaString ;----Subrotina EnviaString ----------------------------EnviaString call movwf andwf btfsc return call incf movf goto return

Tabela Txdreg Txdreg,F STATUS,Z

TxD PontTab,F PontTab,W EnviaString

;-----------------------------------------------DELAY1S: bcf STATUS,RP0 movlw .100 movwf Contador DELAY10MS: movlw movwf TMR0 clrwdt DEL10: btfss goto DEL10 bcf INTCON,2 decfsz Contador,F goto DELAY10MS return 0xD8 ; atualiza cao de guarda INTCON,2

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INTER movlw . movwf Txdreg call TxD bcf INTCON,INTF retfie ; ;

end

50

Apndice C

Listagem do programa do computador********************************************** /* Projeto: robo - programa de controle do rob Monty Autor: Alxis Rodrigues de Almeida main.c: mdulo principal data: 01/09/2004 */ #include #include #include #include #include #include #include "com_serial.h" "int_logo.h" "interface.h" "util.h"

#include "main.h" int main(int argc, char * argv[]) { char Comando[TAM_MAX_CMD+1]; char Param[TAM_MAX_CMD+1]; char Resp[TAM_MAX_CMD+1]; int Result; int CodCmd; if (!ProcessaParam(argc,argv)) { Help(argv[0]); exit(1); } do { Comando[0]=0; Result=PegaComando(Comando);

51

if (Comando[0]==",1); Tam=read(0,Comando,TAM_MAX_CMD); if (Tam>0) Comando[-Tam]=0; // Tam=fgets(Comando,TAM_MAX_CMD,STDIN); return(Tam); }

65

void Help(char *NomeProg) { printf("Execute: %s [ling ] [prot ]\n",NomeProg); printf("\nLinguagem: logo\n"); printf("Protocolo: serial:\n\n"); printf("Exemplo: %s ling logo prot serial:/dev/ttyS1\n",NomeProg); } void Mensagem(int Tipo,char *Mens,...) { va_list PontArg; char MensExp[250]; va_start( PontArg, Mens ); // va_start( PontArg); vsprintf( MensExp, Mens, PontArg ); va_end( PontArg); switch(Tipo) { case MSG_ERRO: printf("Erro: %s\n",MensExp); break; case MSG_ADV: printf("Ateno: %s\n",MensExp); break; case MSG_AVISO: printf("%s\n",MensExp); break; } } /* Projeto: robo - programa de controle do rob Monty Autor: Alxis Rodrigues de Almeida interface.h: include do mdulo de interface data: 01/09/2004 */ #define MSG_ERRO 0 #define MSG_ADV 1 #define MSG_AVISO 2 int PegaComando(char *Comando); void Help(char *); void Mensagem(int Tipo,char *Mens,...);

66