Robô Explorador O Robô Explorador é um robô capaz de "explorar" um ambiente conectado através do canal serial de um PC. Todo o controle do robô é feito através de um programa desenvolvido, especificamente para isso, na linguagem LOGO . O robô possui um braço manipulador com dois graus de liberdade que permite uma maior interação do robô com o ambiente a ser explorado. Ele também tem uma câmera de vídeo P&B acoplada ao braço. O sinal de vídeo é remetido para uma TV ou mesmo placa no PC através de um sistema RF (vídeo link). Ele também possui uma lâmpada para auxiliar a sua navegação em ambientes fechados e escuros, dois bumpers para prevenir colisões, uma saída extra através de um relé com contatos NA/NF e uma entrada extra para um sensor TTL (5V ativo em "0"). Veja mais algumas imgens. Clique para ampliar.
Na figura abaixo temos o circuito eletrônico do robô explorador. Todo o controle é feito pelo microcontrolador PIC16F628A. Os servos SRV2 a SRV4 controlam o braço manipulador e o servo SRV1 a roda traseira utilizada no controle da direção. O motor M1 é controlado através de uma ponte “H”, formada por Q1, Q2, Q3 e Q4. Esta ponte é controlada diretamente pelo microcontrolador através da parte mais significativa da porta “B” (pinos RB4 a RB7). Na tabela abaixo estão os bits inseridos na porta do microcontrolador para o controle do motor
(X)
Valor pode ser “1” ou “0” lógico
As chaves S2 e S3 ligadas aos pinos RA0 e RA4, respectivamente, são na verdade bumpers de colisão utilizados para detecção de obstáculos. Os estados destas portas I/O são mantidos sempre em nível lógico “alto” (5VDC) através de R6 e R7. Quando uma chave é pressionada, o nível lógico nestes pinos de I/O vai a “zero” lógico (0VDC). O programa desenvolvido para o robô permite ler o status dos bumpers (pressionados ou não). Assim o programa de controle poderá tomar a atitude necessária (desvio, retorno, etc) ao detectar um obstáculo. O pino RA7 é utilizado como saída e permite ligar/desligar um relé (saída extra) através de um transistor Q5. Este relé pode controlar cargas de 12V por até 3 ampères, por exemplo, com bastante folga. Já o pino RB3 controla um buzzer através do transistor Q6. É importante salientar que este buzzer deve ser do tipo continuo, ou seja, com oscilador interno. Buzzers sem oscilador interno não servem neste projeto! O pino RB0 permite acender e apagar a lâmpada auxiliar de navegação (LP1) através da configuração darlington Q7 (BC548) e Q8 (TIP31). Q8 suporta uma corrente máxima de coletor IC = 3 A. Sendo assim a potência máxima que a lâmpada LP1 poderá ter será de: P = V x I => P = 12V x 3A => 36W Porém acredito que trabalhar no limite máximo do componente não seja o mais recomendado e para evitar situações de super aquecimento e até queima do transistor, aconselho não ultrapassar o limite de 20W máximos. As lâmpadas de 12V utilizadas nos painéis dos carros têm boa luminosidade e baixa potência, e assim são ideais neste caso. O pino RA5 foi utilizado como uma entrada extra, TTL, ativa em nível lógico baixo (exatamente como RA0 e RA4). Nesta entrada você poderá, por exemplo, ligar um sensor IR que seja ativo em nível lógico baixo (como o sensor IR do Robô Lixobô) ou outro qualquer que se comporte da maneira explicada. Sensores com saída do tipo coletor aberto são os mais recomendados para esta entrada. A entrada e saída extra foram implementadas para permitir ligar dispositivos não pensados durante a fase inicial do projeto, permitindo desta maneira uma personalização maior com a execução de tarefas diferentes das propostas para o robô (não existem limites para a criatividade, certo?!) Todo o circuito é alimentado por uma bateria de 12VDC GEL com 1.3Ah. Esta bateria alimentará de forma direta a lâmpada, o relé, o buzzer e o motor. Ela também poderá servir de alimentação para o dispositivo extra de saída (ligado ao relé) caso sua alimentação seja compatível com esta tensão. O circuito prevê ainda um regulador de tensão para 5VDC (CI2). Os capacitores C1 e C2 funcionam como filtros para a alimentação. D2 permite uma proteção “a mais” contra uma possível inversão ao ligar a bateria. R5 e D1 formam a indicação visual da presença da alimentação (5VDC). Temos ainda CI3 no circuito. Trata-se de um MAX232 (ou qualquer outro compatível). Este CI adapta os níveis de tensão da norma RS-232 para os níveis TTL (0 e 5VDC) do microcontrolador e vice-versa. É através deste CI que o cérebro do Robô Explorador (microcontrolador) se comunicará com o PC. Você deve ter notado a ausência do cristal de oscilação, muito comum aos microcontroladores. O PIC16F628A possui um oscilador R/C interno com boa precisão. Optei por usá-lo e assim conseguí a liberação de mais dois pinos de I/O.
Nas figuras abaixo você encontrará o lay-out que usei para a confecção dos circuitos impressos da placa principal (cérebro) e da placa de comunicação, respectivamente, do meu robô. Aconselho o uso de soquetes para todos os CI’s (exceto CI2), principalmente para o microcontrolador. Tenha muito cuidado ao soldar os componentes polarizados como capacitores eletrolíticos, diodos e LEDs, transistores, reguladores de tensão (CI2), buzzer e outros. Qualquer inversão poderá ser fatal para o componente e/ou impedir o funcionamento do robô. Os transistores Q1 a Q4 e também Q8 necessitam de radiadores de calor. A mesma recomendação é valida para o regulador de tensão CI2. Para os servos recomendo o uso de uma barra de pinos para a sua fácil conexão a placa. Caso você tenha dificuldade em encontrá-las em sua cidade, poderá cortar o conector original dos servos e soldar diretamente os fios na placa. Lembre-se apenas que o comprimento dos fios que controlaram os servos no braço manipulador deve ser tal que permita o livre movimento deste. A ligação entre a placa principal e a placa de comunicação (alimentação e comunicação) também pode ser feita com barra de pinos. Na falta desta, os fios poderão ser soldados diretamente na placa.
Para a ligação da lâmpada, do motor, da saída e entrada extra e a entrada da alimentação utilizei em meu protótipo conectores do tipo parafusável, também conhecidos como conectores KRE. Estes conectores ajudam muito nas conexões e facilitam qualquer montagem e desmontagem (se necessário). Seu uso é opcional (claro!).
CABO DE COMUNICAÇÃO A montagem do cabo de comunicação é bem simples. Você irá utilizar alguns metros de cabo do tipo “manga” com pelo menos quatro vias e dois conectores DB09 (uma macho e outro fêmea). A norma RS-232C determina que um cabo de comunicação serial deve ter no máximo 15 metros para uma comunicação segura. Porém se você utilizar um cabo blindado de boa qualidade pode chegar a 30 metros de distância sem maiores problemas. Não recomendo o uso de cabos utilizados na montagem de redes de computadores (UTP CAT-5) ou ainda os tipo flat cable. No primeiro caso, estes cabos não são muito flexíveis e isso pode prejudicar os movimentos do robô. No segundo caso, a interferência irradiada e captada por este tipo de cabo pode prejudicar a comunicação e conseqüentemente o funionamento do robô. Monte o cabo conforme a figura e de acordo com a metragem passada. Se notar qualquer problema na comunicação, diminua o comprimento do cabo ou melhore a sua qualidade até obter êxito na comunicação.
MONTAGEM MECÂNICA A montagem mecânica deste robô não é das mais simples, mas também não é das mais complexas. Ela exige alguma experiência com serras, furadeiras elétricas, colas e outros. O protótipo do meu Robô Exporador foi desenvolvido em madeira (manipulador e chassi), com exceção da plataforma superior que foi montada com um pedaço de acrílico de 3 mm aproveitado de uma prancheta escolar, adquirida em papelarias e lojas do ramo. Porém você poderá utilizar o material que achar mais conveniente. A montagem do manipulador deste robô já foi descrita no artigo Robô Manipulador RM-1 e sendo assim não falarei da mesma aqui, pois você poderá se valer da descrição e desenhos já expostos no referido artigo. A lâmpada e a câmera de vídeo foram presas ao manipulador do robô. Acredito ter sido esta a solução mais interessante, pois assim foi possível guiar o robô, com o manipulador voltado para frente, e também ao operar o braço ver o que o robô estava “manipulando”. O case utilizado para abrigar a lâmpada é uma caixa de sinalização código SI-1V da Patola. A câmera pode ser qualquer uma desde que esta tenha saída tipo RCA. Este tipo de câmera é muito utilizada em circuito interno de segurança. Para prender o conjunto “Lâmpada e câmera” utilizei dois parafusos de 3mm de espessura com 60mm de comprimento e um pedaço de madeira com 4mm de espessura. O link de comunicação para a câmera foi instalado na plataforma superior (base de acrílico) do robô. Preferí retirar o equipamento de sua caixa para realizar a sua instalação. O sistema de direção do robô foi feito com uma “bequilha” dianteira para aeromodelos. A mesma é facilmente encontrada em lojas de aeromodelismo. A ligação entre a bequilha e o servo SRV1 foi feita através de um arame de aço com 2mm de espessura, com suas pontas dobradas em forma de “Z”. A bateria foi presa à base do robô, na parte inferior, com o auxílio de cintas plásticas, porém você poderá realizar sua fixação de outra maneira. Utilizei conectores para a ligação da bateria ao circuito. Assim ficou bem fácil realizar a carga da bateria. O motor utilizado em meu protótipo foi aproveitado de um brinquedo fora de uso doado por um amigo. Ele deve ser, preferencialmente, do tipo com rodas em ambas as pontas do eixo. A fixação deste motor irá variar de caso para caso e você terá de estudar o tipo de motor que tem em mãos e proceder a sua fixação da melhor maneira possível. Em meu caso usei uma braçadeira comercial de ¾ de polegada. A fixação da plataforma superior foi feita, na parte frontal, com dois pedaços de haste “roscada” de 3mm de espessura. A parte traseira da plataforma foi fixada na extensão superior do chassi utilizando parafusos de madeira. A montagem das chaves S2 e S3 (bumpers) foi feita na parte frontal inferior do chassi. Estas chaves permitem que o robô detecte obstáculos abaixo da linha de visão da câmera, como pequenos degraus e ou saliências no terreno.
PROTOCOLO DE COMUNICAÇÃO Sempre que falamos na comunicação entre um dispositivo de “controle” e um dispositivo “controlado” é preciso entender um pouco sobre o protocolo de comunicação utilizado. Um protocolo de comunicação define o formato dos dados, como os mesmos devem ser transmitidos, como os mesmos serão gerados pelo elemento transmissore e como estes serão interpretados pelo elemento receptor. Atualmente estamos cercados por inúmeros equipamentos que utilizam protocolos na sua comunicação. Por exemplo, nossos computadores utilizam o protocolo TCP/IP para comunicação na Internet. Caso você deseje desenvolver um programa de controle diferente do que ofereço ou ainda em uma outra linguagem, deverá se valer do protocolo utilizado. Ele é bem simples. A figura abaixo o detalha bem. Basicamente temos um caracter de inicio (“E”) e mais 5 caracters que podem variar entre números e letras. Obs.: Os caracteres utilizados no protocolo de comunicação são tratados no formato ASCII pelos programas, tanto no robô (programa ROBO_EXPLORADOR.ASM) como também no PC (programa ROBO_EXPLORADOR.LGO).
PROGRAMAÇÃO - SOFTWARES DE CONTROLE São dois os programas necessários para o uso do Robô Explorador. O primeiro deles é o "ROBO_EXPLORADOR.ASM". Este é o código fonte. O arquivo a ser gravador no microcontrolador PIC16F628A tem o mesmo nome, mudando apenas a extensão para ".HEX". A geração do arquivo ".HEX" é conseguida a partir da compilação do código fonte por um programa Assemblador (no caso o MPASM da Microchip, presente na IDE MPLAB). Para gravar o arquivo ".HEX" será necessário um gravador para a linha de microcontroladores PIC da Microchip®. Neste site há um gravador, o PROG PIC II, que poderá ser utilizado para esta tarefa. Sua montagem foi descrita no artigo e não tratarei disso aqui. Considero que se você se propôs a montar o Robô Explorador é porque tem a experiência necessária com microcontroladores PIC. O funcionamento do programa "ROBO_EXPLORADOR.ASM" pode ser visto no fluxograma apresentado na figura mais abaixo. Para ajudar ainda mais a compreensão do programa, eu o comentei bem.
O funcionamento do programa é bem simples. Primeiro ele define as variáveis de memória que serão utilizadas. Após isto, é determinado como serão configurados os pinos de I/O e os vários registradores de controle dos periféricos (conversores analógicos, USART, etc). Feito as devidas configurações, o programa limpa os pinos de controle do buzzer, lâmpada, motor e saída extra (todos desligados), e seta os valores iniciais para os servos. Após o processo de “inicialização” o programa entrará em um “loop” para o tratamento dos servos. Os dados recebidos pela USART serão tratados por uma interrupção, facilitando bastante o controle. Assim não é preciso checar o canal serial para verificar se chegou algum dado. Quando um dado é recebido, uma interrupção é gerada e o fluxo do programa é então deviado. Nesta parte do programa, os caracteres recebidos são comparados com os caracteres previamente estabelecidos no protocolo de comunicação. Se os mesmo forem válidos, ele os armazena em variáveis e segue até que o comando esteja completo (número de caracteres recebidos igual ao número total de caracteres protocolo). Uma vez recebido um "comando inteiro" e com o mesmo devidamente interpretado, uma ação é feita:
-
Ligar o motor em um
sentido ou outro, ou ainda desligá-lo. O clock adotado para o PIC é interno de 4MHz. Assim tem-se a execução de uma instrução a cada 1 µs (0,000001 segundos). Essa velocidade é mais que suficiente para tratar todo o protocolo e controlar o robô de maneira bastante eficiente. Um detalhe importante sobre o robô é a velocidade da comunicação serial adotada. Ela é de 2400 bps (bits por segundo). Você poderá alterar este valor, se assim achar melhor, bastando alterar o valor inserido dentro do registrador SPBRG, conforme a tabela abaixo. Lembrando apenas que estes valores são validos apenas para o modo de comunicação “assíncrono”, considerando a velocidade selecionada em modo high através do bit BRGH do registrador TXSTA e o microcontrolador operando com clock de 4MHz (interno ou externo).
O outro programa, a que me referi anteriormente é o "ROBO_EXPLORADOR.LGO". Este programa foi desenvolvido na linguagem LOGO e serve basicamente para demonstrar o funcionamento das entradas e saídas presentes no robô e também efetuar o controle "manual" do robô através de um PC. Para executá-lo é necessário ter o interpretador Super LOGO instalado em seu PC. O mesmo pode ser obtido gratuitamente no site http://www.nied.unicamp.br . A linguagem LOGO é muito utilizada no mundo todo, principalmente por professores/educadores. Ela é bem fácil de se usar, muito intuitiva e poderosa. Eu já utilizei esta linguagem no controle de outros robôs, e a considero bem satisfatória. Obs.: É extremamente recomendável conhecer a linguagem, caso você pretenda fazer alguma alteração no programa original. O programa Super LOGO foi desenvolvido para ser utilizado com o sistema operacional Windows 95/98/Me e assim, seu comportamento no Windows XP/2000 pode aprensentar problemas (no Vista eu não sei como ele se comportaria!). Isso porque o WinXP/2000 restringe o acesso as portas I/O do PC. Neste site é possível encontrar dicas e até um programa que permite liberar as portas do PC. Veja isso neste link. O funcionamento do programa está detalhado no fluxograma apresentado na figura abaixo. O programa também foi ricamente comentado para uma melhor compreensão do funcionamento do mesmo. Seu funcionamento é bem simples. O programa abre o canal de comunicação serial do PC com endereço 3F8H (COM1). Caso você não tenha esta porta liberada, terá de alterar o programa para operar com uma outra qualquer que esteja livre.
Recomendo o estudo de ambos os programas, juntamente com as informações passadas a respeito do protocolo de comunicação, para uma melhor compreensão do funcionamento do conjunto “PC + robô”.
TESTE E USO Acredito que o mais prudente seja testar primeiro a parte eletrônica na bancada, antes da sua instalação definitiva no chassi do robô (isso é valido para todo e qualquer robô). Vou considerar aqui apenas os testes eletrônicos. Os testes de montagem mecânica são de sua responsabilidade, pois cada montagem é um caso. Após todo o checkup da montagem eletrônica, ligue a placa principal. Ela deverá emitir um beep por um segundo e logo em seguida cessá-lo. Após o beep os servos são centralizados. Conecte o cabo de comunicação e rode o programa no Super LOGO. Se não houver nenhum problema com a porta serial RS-232 do micro, a tela do programa irá abrir. Utilize os botões presentes na tela do programa "ROBO_EXPLORADOR.LGO" para controlar as saídas digitais como: buzzer, lâmpada, relé e motor. Verifique se tudo está funcionando. Verifique o posicionamento dos servos. Atue sobre as barras de rolagem e clique no botão enviar. Os servos deverão modificar seu posicionamento. Verifique o curso dos servos, o sentido de rotação do motor, etc. Confirmado o funcionamento do circuito, você já pode realizar a montagem das placas no chassi e realizar as “conexões” mecânicas. Quando tudo estiver ok o seu robô explorador estará pronto para o uso!
CONCLUSÃO Esta foi um dos robôs mais interessantes que criei, e um dos mais "cheio" de detallhes. Sua complexidade e os avisos dados no artigo não devem desestimular os "menos experientes". Pelo contrário, esta montagem é um desafio tanto para os mais experientes quanto para os menos experientes. Basta estudar e tudo se torna possível! Boa montagem e até a próxima!
- Circuito do
Robô Explorador - cérebro
|
Copyright deste
conteúdo reservado para Márcio José Soares e protegido
pela Lei de Direitos Autorais LEI N° 9.610, de 19 de Fevereiro de 1998.
É estritamente proibida a reprodução total ou
parcial do conteúdo desta página em outros pontos da
internet, livros
ou
outros tipos de publicações comerciais ou não, sem a prévia autorização
por escrito do autor.
|