Execução da primeira tarefa https://drive.google.com/file/d/0Bw8xbxTPPdYmVVJQQXhwekVEdlE/view
Figura - Estrutura Final
No início do projeto, fizemos um levantamento dos eletrônicos que precisariamos para conseguir realizar a prova, como faríamos cada circuito e quais componentes seriam necessários. Como não tínhamos esses componentes fizemos uma lista de compras com o orçamento de cada componente nas maiores lojas de eletrônica do Brasil.
Figura - Lista de Compras de Componentes Eletrônicos
Enquanto os componentes comprados não chegavam, foram feitas simulações dos circuitos usando o software 123D Circuits. Este software, que pode ser usado no browser gratuitamente, permite aos utilizadores simularem a construção de circuitos com placas de ensaio e plataformas de código aberto Arduíno.
A ferramenta oferece acesso a vários componentes, designs predefinidos e ainda a uma série de chips, inclusive os que nós usamos.
Figura - Simulação do CI L293D
O desafio eletrônico foi basicamente conseguir controlar velocidade e direção de dois motores DC. Para cumprí-lo utilizamos o microcontrolador ATMEGA328, contido na plataforma de prototipagem Arduino, fizemos um shiled com ponte-H e um botão, para iniciar a rotina do manipulador, e outra placa com um regulador de tensão.
Como as saídas digitais do Arduino não fornecem corrente suficiente para acionamento dos motores, utilizamos o CI L293D para fazer esse acionamento, sendo assim, foi possível controlar velocidade e direção de giro dos motores. A modulação por largura de pulso (PWM) permitiu fornecer uma tensão variada aos motores, e a forma de fornecer essa tensão, mudando a polaridade, permitiu trocar a direção com que os motores giravam.
Figura - Conexões dos Pinos do CI L293D e shield Ponte-H
Na alimentação foram usadas 3 baterias de 3,7V cada uma conectadas em série. Para sempre fornecer uma mesma tensão de alimentação tanto para o Arduino quanto para a ponte-H foi feito um regulador de tensão usando o chip LM3171. Esse circuito fez com que sempre fosse fornecida uma tensão fixa aos motores, ou seja, independente da fonte de alimentação ser de 12V ou 9V o chip sempre regulava para 6V, permitindo assim que tivessemos maior controle sobre a velocidade dos motores, pois um valor de PWM sempre iria fornecer a mesma tensão, independente da bateria estar totalmente carregada ou não.
Figura - Circuito regulador de tensão na protoboard e na placa de fenolite
Por fim, um botão foi utilizado para indicar ao manipulador que este poderia começar a fazer o movimento entre os pontos, facilitando a repetibilidade dos testes e a programação, já que os fios de alimentação dos motores poderiam continuar conectados sem que o arduino tentasse suprir a tensão dos motores e acabasse exigindo mais corrente do que suas portas conseguem fornecer.
Os fios e conexões eletrônicas foram feitos da forma mais modular possível. Os conectores KK molex permitiram que os fios pudessem ser encaixados de apenas uma maneira, evitando erros na conexão e possíveis curtos. Além disso os terminais dos motores foram isolados usando cola quente.
Escolha do Manipulador
O desafio do manipulador consistia em percorrer com um trajeto específico uma área circular plana de raio inferior igual a 10√2 cm e um raio superior de 20√2 cm. A primeira condição era que a base do manipulador se mantivesse no centro da montagem e a segunda condição era que fossem usados dois motores. Dadas as exigências do projeto, foram levantadas três opções de manipuladores:
Os manipuladores RR tem um alcance amplo e compatível com o especificado. No entanto, para atingir todos os pontos, o esforço contínuo e sincronizado dos dois motores sem o uso de sensores tornaria uma tarefa simples de traçado bastante complicada. Portanto, a opção foi descartada.
Figura - À esquerda o desenho esquemático da base, elos e juntas de um motor RR. À direita, a representação do seu alcance em um círculo plano
As duas opções restantes foram manipuladores RP.
Figura - Modelo de manipulador RP comercial. Os tamanhos não correspondem ao manipulador construído
O controle do traçado em um manipulador RP pode ser feito de forma simples, até mesmo mantendo a junta de revolução em velocidade constante, enquanto apenas a prismática é variada. Entretanto, as duas opções se diferenciavam na junta prismática. A primeira, e mais comum, consistia em empurrar e puxar uma haste através de uma esteira, enquanto a garra do manipulador ficava em uma de suas extremidades. A segunda se inspirava em uma tesoura e movia a garra para frente e para trás com a abertura e fechamento da tesoura.
Figura - Exemplo de junta prismática no formato de tesoura. Muito usada comercialmente para ganho de força
Inicialmente, a ideia da tesoura parecia mais desafiadora e interessante, mas após sua montagem percebemos que faltava estabilidade nos movimentos e que sua robustez gerava um peso e atrito muito intenso na junta de revolução tornando-a inviável.
Dada a simplicidade da montagem e previsibilidade do movimento, o modelo escolhido foi um manipulador RP com junta prismática no formato de esteira.
Decisões de Projeto
A montagem mecânica foi dividida em três partes móveis: a base, o suporte da esteira e a esteira. E cada parte impunha seu próprio desafio ao objetivo do projeto.
Figura - Imagens da montagem da base e da esteira no suporte
Para garantir uma estabilidade do suporte e da esteira, a base deveria realizar um movimento angular em apenas uma direção e com o máximo de previsibilidade possível. Os dois problemas foram parcialmente resolvidos com uma torre cúbica, onde ficava o motor da junta rotacional e eram fixadas com hastes as engrenagens que transmitiam o movimento ao suporte. A torre também servia como apoio para que o suporte girasse sem inclinação lateral e, consequentemente, com mais previsibilidade. Os problemas de estabilidade que persistiram estão relacionados às folgas intrínsecas das engrenagens disponíveis e à fragilidade da esteira.
A missão do suporte da esteira era servir de apoio para a esteira, sustentar o motor, o shield e as baterias. Sua rigidez foi satisfatória para as quatro funções, sem que se tornasse pesada o suficiente para a base.
A esteira era o elo que ligava a junta prismática à garra. Dado seu longo comprimento relativo às outras dimensões e sua estrutura fracionada, um problema previsto era que sem uma estrutura robusta, essa esteira seria frágil e poderia não ser rígida o suficiente, ao ponto de prejudicar a previsibilidade do movimento. No entanto, um outro problema é que também dado seu longo comprimento apoiado no suporte, uma estrutura robusta gerasse muito atrito, forçasse demais os motores e o suporte, tornando o movimento igualmente imprevisível. Optamos então pela esteira mais frágil, porém leve.
Sugestões para trabalhos e montagens futuras
Uma boa quantidade de reduções pode converter velocidade em força para os motores e viabilizar estruturas mais robustas e estáveis que as que foram construídas. É necessário prestar atenção ao atrito gerado por cada redução e garantir que ele não supere o benefício conseguido com essa manobra.
Alguns encaixes das peças do LEGO são mais fortes e confiáveis que outras. Privilegiar esses encaixes tornam mesmo uma estrutura simples, mais forte e resistente.
A parte de programação consistia no desenvolvimento do código de controle dos motores DC para realizar o trajeto proposto. Como na proposta o manipulador não possui nenhum tipo de input sensorial, o controle dos motores foi feito através da velocidade e direção com o passar do tempo. Os motores DC eram controlados através de um circuito de ponte H, onde dois outputs ditavam a direção e velocidade do motor que estava sendo controlado e outro output que ativava o controle de tal motor. Para o auxílio do controle dos motores, foram construídas duas funções auxiliares descritas a seguir:
spinMotor(id, vel): A função “spinMotor” funcionava como uma abstração do direcionamento dos motores, desta forma o motor descrito por “id” girava na direção dada pelo sinal do argumento vel. O atributo vel, além definir a direção do motor, determinada o valor do duty cycle do PWM enviada ao motor.
moveMotor(id, dis): A função “moveMotor” abstraia o movimento do motor de modo a ser definido por uma distância a ser percorrida. O atributo “id” define o motor a ser movido, o atributo “dis”, por sua vez, define o número de centímetros o motor deve mover a junta prismática. A velocidade aplicada ao motor é constante, portanto o tempo é controlado de maneira a mover a distância desejada. O movimento é iniciado com um pequeno arranque de modo a vencer a inércia e o atrito inicial da ferramenta com o papel.
Com as duas funções auxiliares definidas, a programação do percurso consistiu em mover a junta rotacional a uma velocidade angular constante, com a rota era controlada com impulsos na junta prismática de maneira a manter a ferramenta dentro do percurso.