TCC Final PDF
TCC Final PDF
TCC Final PDF
em cada dimenso (X, Y e Z). Tal relao pode ser observada na Figura 32.
Figura 32 - Rob planar e suas expresses da cinemtica direta (SANTOS, 2004).
Obtendo assim sua forma matricial como demostrado:
Obtemos nesse capitulo o conhecimento terico necessrio para desenvolver o brao
manipulador. No prximo capitulo ser demonstrado como foram aplicadas as teorias
expostas.
39
3 PROJETO DO ROB MANIPULADOR DIDTICO
Foi adotada inicialmente a ideia de elaborar um manipulador cujas funes pudessem se
aproximar ao mximo do manipulador existente na Faculdade UCL, como demonstrado na
Figura 33. Porm, pretendeu-se fazer uma plataforma simples de ensino e com melhor
facilidade de manuseio e operao. Sendo assim, foram utilizadas as dimenses demonstradas
na Figura 34, que exibe a vista lateral e frontal do manipulador. A Figura 35 exibe a vista
superior e na Figura 36 o efetuador.
Para confeco da estrutura foi elaborado um esboo mostrado no apndice H, e enviado a
uma empresa, denominada Projetos Especiais, para usinagem e preparao das partes, o que
gerou bons resultados na aplicao dos acionamentos, das engrenagens e unio com as juntas
e seus graus de liberdade, devido ao material aplicado e ao acabamento realizado com
equipamentos profissionais.
Figura 33 - Brao manipulador didtico da UCL.
40
Figura 34 - Vista Frontal e Lateral.
41
Figura 35 - Vista Superior.
Figura 36 Efetuador.
42
3.1 ACIONAMENTOS DO ROB
Aps definio da dimenso e da disposio dos motores de acionamento foi necessrio a
especificao dos tipos de motores a serem aplicados a cada junta. Para isso, foram
especificados trs tipos de servomotores por serem compactos, precisos, possuir fcil
integrao com o circuito eletrnico adotado, serem robustos pelos seus tamanhos para as
devidas aplicaes facilitando o acoplamento e tambm por possurem um controle digital
interno de posicionamento conforme o sinal PPM
3
recebido.
O servomotor SG90, Figura 37, possui o ngulo de trabalho entre 0 e 180 graus com a
velocidade mxima de giro igual a 60 graus a cada 0,12 segundos, alimentado a 5 volts.
Possui suas engrenagens de nylon que permitem um torque de 1,6kg / cm e um peso total de
9g , o que fica excelente para a aplicao nos elementos finais de braos robticos (TOWER
PRO, 2013).
Este tipo de motor foi aplicado em dois movimentos do brao robtico Spider, sendo um na
abertura e fechamento da garra e outro no giro da mesma.
Figura 37 - Motor SG90.
Outro modelo utilizado foi MG995, Figura 38, que um poderoso servomotor da TowerPro
com engrenagens de metal que compem o peso mximo deste motor de 65 gramas. Possui
um controle preciso de posio angular especificamente designado para aplicaes em
robticas que requerem alta qualidade com um range de operao entre 0 e 180 graus. O
torque dinmico deste servo de aproximadamente 15kg/cm o que atende perfeitamente o
3
Modulao por Posio de Pulso
43
projeto, que necessita de 14.66kg/cm conforme clculos apresentados no apndice I, o
servomotor MG995 tambm fornece a velocidade de 60 graus por 0,16 segundos a uma
alimentao de 5 volts e consumo maximo de corrente igual a 3 ampres (TOWER PRO,
2013).
Usando a biblioteca Arduino para servomotores possvel facilmente o controle de
posicionamento para ngulos requeridos por controle de sinais PPM com resoluo de 2s e
range de largura de pulso positivo entre 400s e 2550s. A frequencia PWM
4
mxima de
4khz.
Este modelo de servomotor foi aplicado em trs movimentos do brao robtico Spider, sendo
um no cotovelo, dois no obro devido ao torque requerido e um no giro da base.
Figura 38 Servomotor MG995.
Os servomotores citados foram posicionados conforme a Figura 39, de forma a executar os
movimentos desejados de um manipulador antropomrfico com as seguintes funcionalidades:
Motor 1: Abrir e fechar o efetuador;
Motor 2: Giro do efetuador;
Motor 3: Movimento do cotovelo;
Motor 4 e 5: Movimento do ombro;
Motor 6: Giro da base.
4
Modulao por Largura de Pulso uma tcnica utilizada para obter resultados analgicos por meios digitais. O
controle digital utilizado para criar uma onda quadrada, ou seja, um sinal chaveado entre ligado e desligado.
Este liga/desliga padronizado pode simular tenses entre 0Ve 5V, alterando a parcela de tempo que o sinal
utilizado associado ao tempo em que o sinal retirado. A durao deste tempo chamado de largura de pulso.
Para ter valores analgicos variando, alterada ou modulada a largura do pulso.
44
Figura 39 - Localizao dos servomotores.
3.2 PROCESSAMENTO
Dando prosseguimento ao projeto, foi definido um controlador que j possuisse toda a
interface para programao e aplicabilidade de entradas e sadas analgicas e digitais,
principalmente com o controle PWM.
O Arduino Duemilanove, Figura 40, uma placa microcontrolada baseada no Atmega 168 ou
Atmega 328. Esse possui tenso de entrada recomendada entre 7 e 12V, 14 pinos de entradas /
sadas digitais (Destas 6 podem ser utilizadas como sadas PWM), 6 entradas analgicas, um
cristal oscilador de 16 MHz, conexo USB, um plugue de alimentao, um conector ICSP e
um boto de reset. Possui todo o necessrio para suportar o microcontrolador, simplificar a
45
conexo com o computador via cabo USB ou alimentao do circuito com um adaptador AC /
DC. Ver diagrama esquemtico no anexo A.
Figura 40 Arduino Duemilanove.
Foi observado que o Arduino Duemilanove possui algumas particularidades que foram
descobertas durante a fase de testes com o comando de motores isolados conforme segue:
Uma fonte externa no USB pode ser conectada com um plugue de 2,1mm com centro
positivo para utilizar o adaptador direto disponvel na placa ou com uma conexo externa feita
pelos pinos Vin e GND, sendo a segunda aplicada ao projeto.
A interface pode operar com uma fonte externa entre 6 e 20V. Se o fornecimento de energia
for inferior a 7V, entretanto, o pino de 5V pode fornecer menos de cinco volts e o circuito
apresentar instabilidade. Se utilizar mais que 12V, o regulador de tenso pode sobreaquecer e
danificar a placa. O recomendado um range entre 7 e 12V, sendo o aplicado na entrada de
alimentao igual a 12V e nas entradas digitais e analgicas especficas de 5V.
O Arduino Duemilanove possui um polifusvel resetvel que realiza a proteo da porta USB
de sobrecorrentes. Se mais de 500mA for aplicado a porta USB, o fusvel ir automaticamente
romper a comunicao antes que a sobrecarga seja danosa.
Alm destes citados alguns pinos possuem funes especiais como:
0 (RX) e 1 (TX). Utilizados para receber e transmitir dados seriais TTL. Estes pinos so
conectados aos correspondentes pinos FTDI USB para TTL do chip serial, utilizado para
comunicao direta com o mdulo JY-MCU.
3, 5, 6, 9, 10 e 11. Disponibilizam 6 portas com possibilidade de sada PWM.
46
A0, A1, A2, A3, A4 e A5: Entradas analgicas que providenciam 10 bits de resoluo
(1024 valores diferentes). Por default eles medem de 0V a 5V, sendo possvel alterar o
range utilizando o pino de AREF ou a funo analogReference.
Para atender a necessidade de demonstrar o status do rob e o ngulo das juntas o hardware
de impresso de dados utilizado ser o display LCD JHD 162, Figura 41. Baseado no chipset
Hitachi HD 44780 para matriz de pontos. Sendo possvel exibir 240 caracteres alfanumricos
diferentes. O LCD possui escrita composta por duas linhas com mximo de 16 caracteres
cada, alm da funo backlight, que significa a utilizao de um LED para iluminao dos
caracteres de leitura.
A especificao bsica deste display uma alimentao de 5V, clock interno de 2Mhz,
suporte a 4 ou 8 bits, memria RAM para 80 caracteres e reset automtico a cada
inicializao.
Figura 41 Display JHD-162A.
Foi especificada para este projeto, uma fonte de alimentao ATX modelo 500 P42S, Figura
42. Esta possui potncia mxima de 220W, para uma entrada de 115 VCA, 60Hz e consumo
mximo de 6A. Possui sada CC de 5V com capacidade de 18A a potncia de 100W e 12V
com capacidade de 12A a potncia de 104w, sendo capaz de alimentar a plataforma Arduino e
os motores conforme especificaes recomendadas. Veja no apndice B tabela de clculo de
corrente.
47
Figura 42 - Fonte ATX - 220W.
3.3 COMUNICAO
Foram concebidas algumas formas de comunicao entre o operador e o rob, como via USB
e Bluetooth.
USB
O Universal Serial Bus (USB) exatamente o que o nome expressa, ou seja, um barramento
universal serial desenvolvido entre um consrcio de vrias empresas como Microsoft, Apple,
HP, Intel, entre outras com o objetivo de interligar diversos equipamentos em uma porta de
comunicao nica e de simples utilizao pelo usurio mais imaturo em relao a
computadores pessoais. A concepo de desenvolvimento ocorreu aps o surgimento da
topologia plug and play (PnP) e a necessidade de interligar dispositivos perifricos para
usurios de PCs que no possuam familiaridade com a parte interna de um computador,
sendo a partir de ento os perifricos conectados e imediatamente utilizados sem dificuldades.
Atualmente existem trs tipos de conexo USB sendo a 1.1 com velocidade mxima de
transmisso de dados de 12 Mb/s, a USB 2.0 com velocidade de 480 Mb/s e a USB 3.0 com
4,8 Gb/s.
A comunicao USB ser utilizada no projeto para a transferncia de dados do IDE Arduino
para o microcontrolador via interface Arduino.
48
Bluetooh
O Bluetooth um protocolo de transmisso de dados a curta distncia via faixa de frequncia
ISM centrada em 2,45 GHz. Cada dispositivo possui seu endereo de 48 bits no formato
00:00:00:00:00:00 normalmente exibidos com o nome dos dispositivos por default. Para
iniciar uma comunicao necessrio o pareamento entre o mestre que fornece a senha e o
escravo que insere a senha para comprovao de amizade para transferncia de dados, sendo
estes salvos at que os usurios alterem as configuraes, tambm e possvel a alterao entre
mestre e escravo entre o pareamento de mais dispositivos.
Neste projeto a comunicao sem fio entre o celular ou computador e o microcontrolador ser
atravs do modulo Bluetooth JY-MCU.
O mdulo JY-MCU, Figura 43, possui a caracterstica ideal para associao com o Arduino.
Contm um regulador de tenso que permite a alimentao entre 3,3 e 5V, LED de indicao
de pareamento e comunicao, baud rate de 4800 / 9600 / 38400 / 57600 / 115200 / 230400 /
460800 / 921600, suporte em modo mestre e escravo, velocidade sncrona de 1Mbps, alcance
mximo de 10 metros e perfil serial Bluetooth. Veja no apndice E o modo de configurao
prvia do mdulo.
Figura 43 Mdulo Bluetooth JYMCU.
49
4 ROB MANIPULADOR SPI DER
O brao projetado possui quatro juntas rotacionais, sendo a primeira com o giro de 180 graus
da base, a segunda com o movimento de giro de 180 graus do ombro, a terceira com o
movimento de giro de 180 graus do cotovelo e a quarta acoplada garra articulada com
movimento de rotao de 90 graus. A garra possui, tambm, abertura e fechamento.
Consequentemente, o brao robtico possui quatro graus de liberdade e classificao como
rob articulado. Estes dados podem ser observados na Figura 44.
Figura 44 Graus de liberdade brao manipulador Spider.
O rob manipulador Spider possui um volume de trabalho, e sua determinao foi dada por
(Figura 45):
50
Figura 45 - Links manipulador Spider.
A razo entre a rea relativa de robs com articulao vertical 33,51 sendo esta utilizada no
clculo.
Como os motores so limitados a 180 Graus:
Ou seja,
O Espao de trabalho do rob Spider esfrico com volume da area de trabalho aproximado
de (Figura 64).
51
4.1 MODELAGEM CINEMTICA DO BRAO ROBTICO SPIDER
Inicialmente, foi elaborada a modelagem cinemtica do manipulador Spider utilizando o
mtodo Denavit-Hartenberg, resultando nas coordenadas de acordo com Figura 46.
Figura 46 Esquema grfico de coordenandas Denavit-Hatemberg.
Com a tabela elaborada a partir do algoritimo D-H obtm-se as matrizes de transformao
homognea de cada junta,
52
Foi utilizado o vetor de entrada com os ngulos de cada junta conforme abaixo para
verificao e simulao de resultados:
Atravs da multiplicao das matrizes homogneas de cada junta, obteve-se ento a matriz de
posio-orientao final . Na Figura 47 demonstrado como os dados de rotao,
orientao, perspectiva e escala so distribudos na referida matriz.
A matriz relaciona por sua vez o sistema de coordenadas da base com o sistema de
coordenadas do efetuador para a configurao do rob manipulador Spider.
53
Figura 47 - Distribuio dos dados na matriz de posio-orientao final.
Utilizando os parmetros obtidos pelo algoritimo de D-H no Robotic Toolbox (CORKE, 2011)
no Matlab verso 7.12.0 tambm foi obtida a matriz de transformao homognea para o
mesmo vetor de entrada .
Com isso pde-se verificar que a matriz idntica ao mtodo D-H, utilizado anteriormente,
reforando a validade dos dados. Tambm foram testados outros vetores de entrada com
valores aleatrios e os resultados obtidos sempre foram idnticos.
Com o mesmo Toolbox foi construido o modelo computacional do rob manipulador Spider,
que possibilitar variadas anlises e experimentaes, sem que sejam alterados componentes
fsicos no rob, podendo assim manter o baixo custo nos experimentos.
Como entrada, o modelo utiliza os parmetros Denavit-Hatenberg (Tetha, D, A, Alpha), como
pode ser observado no trecho de cdigo:
>> startup_rvc
>> L(1) = Link([0 0.147 0 pi/2 0]);
>> L(2) = Link([0 0 0.122 0 0]);
>> L(3) = Link([0 0 0 pi/2 0]);
>> L(4) = Link([0 0.333 0 0 0]);
>> robo = SerialLink(L, 'name', 'Rob Spider')
54
j theta D A alpha
1 Q1 0.147 0 1.571
2 Q2 0 0.122 0
3 Q3 0 0 1.571
4 Q4 0.333 0 0
O Matlab gera uma nova tabela de dados baseada nos mesmos dados D-H com o comando
SerialLink , com base nessa tabela cria o rob nas configuraes especificadas.
Com a mesma ferramenta foi extrada a matriz Jacobiana que relaciona as velocidades das
juntas com a velocidade espacial do efetuador.
Com isso, foi obtido o modelo computacional, conforme a Figura 48 e Figura 49, que tambm
pode ser perfeitamente controlado atravs de comandos prprios do Matlab. Veja apndice I.
55
Figura 48 - Modelo computacional do rob manipulador Spider.
Figura 49 - Modelo computacional rob manipulador Spider.
56
4.2 METODOS DE PROGRAMAO APLICADOS AO ROB SPIDER
aplicado no brao robtico Spider uma programao principal que a existente no
microcontrolador utilizado na interface Arduino. Esta programao baseada na linguagem
textual especfica da plataforma utilizada e que constitui a idia pincipal do programador de
hardware (Apndice A). Existe tambm uma programaco do programador-operador do brao
robtico. Esta baseada na idia da programao por Teach-Pendant, porm com uma
particularidade aplicada ao rob Spider. Esta programao secundria se baseia no
posicionamento via controle analgico ou digital, registros dos ngulos dos servomotores e
insero posterior conforme seleo de modo de operao.
Ao selecionar a operao por modo contnuo ser solicitado insero dos ngulos de cada
junta, logo aps inserir os dados o rob inicializar a rotina de repetio conforme a
quantidade tambm fornecida. importante lembrar que a sequncia de movimentos se baseia
sempre da base para o elemento final, ou seja, ao realizar a programao o brao robtico ir a
uma posio default e logo aps iniciar o giro, seguindo o acionamento do ombro, cotovelo,
giro do pulso, abertura e fechamento da garra respectivamente.
A elaborao da programao foi feita no Ambiente Integrado de Desenvolvimento (IDE) do
Arduino, que derivado de projetos com linguagem de programao de cdigo aberto para
plataforma de prototipagem eletrnica de hardware livre, composta por um microcontrolador
de placa nica. Possui uma aplicao multiplataforma escrita em Java e esquematizada para
introduzir pessoas no acostumadas com ambientes de programao e desenvolvimentos de
softwares. Para isto, o editor possui caractersticas e ferramentas de apoio ao desenvolvimento
de software, recursos de identificao automtica, parnteses correspondentes, realce de
sintaxe e capacidade de compilao simples que exibe a um click o ponto de defeito caso
exista.
Para realizar um programa funcional so exigidos apenas duas funes chamadas de Setup(),
que inserida no incio do programa e usada para inicializar a configurao, e Loop(), que
utilizada para repetir um bloco de comandos ou esperar at o desligamento do mesmo. Para
programadores mais familiarizados possivel atravs da biblioteca Wiring/Processing
5
a
5
uma linguagem de programao aberta com base na linguagem C/C++, possui recursos como classes e
objetos alm de bibliotecas para simplificao de cdigo.
57
capacidade de programar em C/C++ que a base de programao utilizada na plataforma
Arduino.
Para elaborao dos testes das lgicas dos programas elaborados foi observado que no existia
um software especfico para simulao da plataforma Arduino, sendo assim, foi utilizado o
software Proteus
6
, que exige a instalao de uma biblioteca especfica, alm de uma
particularidade para upload da lgica dentro do microcontrolador utilizado pelo programa,
conforme tutorial presente no apndice D.
4.3 INTERFACES
Com o ideal de ter o manipulador com facilidade de transporte, foram adaptados na base do
brao robtico Spider as conexes fmeas. Para a adaptao com a fonte de alimentao foi
utilizado um conector de 4 pinos conforme Figura 50, fixado prximo ao plug 2,1mm de
alimentao 12VCC alternativa e porta USB acoplada na plataforma Arduino.
Figura 50 Conectores.
No projeto foram adotadas vrias possibilidades de comando do manipulador, tais como
controle analgico, controle via teclado, controle via celular, autnomo e exoesqueleto. Cada
comando possui sua particularidade e sua lgica de programao especfica conforme
detalhadas a seguir.
6
um software que contm uma vasta biblioteca de componentes eletrnicos com uma excelente facilidade de
interligao que pode ser utilizado para simulao de circuitos eletrnicos e elaborao de circuitos impressos.
58
4.3.1 Controle Analgico
O controle analgico, demonstrado na Figura 51, foi elaborado a partir de um Joystick
especfico do videogame Play Station 2. Aproveitando a estrutura do mesmo, foram retirados
todos componentes eletrnicos, vedada as cavidades com massa plstica, aguardado
enrrigecimento e logo aps realizado pintura na cor prata.
Os potencimetros de 5 K responsveis pelos comandos analgicos foram fixados atravs
de dois furos, sendo um responsvel pela adaptao da parte mvel e outro para travamento
da parte fixa.
A conexo com o microcontrolador foi realizada via cabo de par tranado UTP CAT 5E com
um conector modular RJ45 macho, sendo o conector fmea fixado na base fixa do
manipulador (Figura 52) e diretamente ligado s entradas analgicas, alimentao e comum
respectivamente conforme padro seguite:
Verde = VCC; B. Laranja = A2;
B. Verde = GND; Laranja = A3;
B. Azul = A0; Marron = A4;
Azul = A1; B. Marron = No usado.
Figura 51 Controle anlgico.
59
4.3.2 Controle Via Teclado
O controle via teclado diretamente aplicado via comando por comunicao serial, realizada
especificamente pela conexo USB. Os dados trabalhados cumprem a lgica de tratamento
conforme o padro a seguir:
Caracter a = Comando de abre garra;
Caracter q = Comando de fecha garra;
Caracter s = Comando de giro anti horrio do pulso;
Caracter w = Comando de giro horrio do pulso;
Caracter d = Comando de abaixa cotovelo;
Caracter e = Comando de sobe cotovelo;
Caracter f = Comando de abaixa ombro;
Caracter r = Comando de sobe ombro;
Caracter g = Comando de giro anti horrio da base;
Caracter t = Comando de giro horrio da base.
4.3.3 Controle Via Celular
Para o controle via celular utilizado um aplicatido denominado Microcontroller BT. Este
aplicativo permite o pareamento do mdulo Bluetooth JY-MCU com o celular e logo aps a
elaborao de diferentes comandos selecionados e tratados na lgica de qualquer
microcontrolador. Veja no apndice F para configurao do aplicativo.
A comunicao aps o pareamento unidirecional, ou seja, o celular somente envia dados a
serem tratados na lgica que recebe sempre dois bytes, sendo o primeiro para discriminar qual
e a porta utilizada e o segundo para escrever o valor especfico entre 0 e 255, que corresponde
de 0 a 180 graus, no acionamento da base, ombro e contovelo, e de 0 a 90 graus no pulso e
60
garra. possvel o retorno de dados ao celular, porm no aplicado ao projeto. As portas
digitais utilizadas para comando via celular so:
3 = Comando da garra;
5 = Comando do pulso;
6 = Comando do cotovelo;
9 ou 10 = Comando do ombro;
11 = Comando da base.
Para evitar conflitos de transmisso e recebimento de dados foi instalado na base do
manipulador uma chave on/off para ligar e desligar o mdulo Bluetooth, sendo ligado apenas
quando necessrio utilizar o comando via celular, conforme Figura 52. Foi tratado tambm em
lgica, um contexto especfico para os pinos RX e TX, salvaguardando o conflito de dados
entre comunicao USB e Bluetooth.
Figura 52 Conector modular e chave de acionamento para o bluetooth.
4.3.4 Controle Autonmo
O controle autnomo segue o princpio de funcionamento do controle via teclado, porm sua
lgica de tratamento segue a condio de recebimento de valores correspondentes tabela
ASCII. Inicialmente so inseridos os valores de referncia iniciais das juntas, logo aps os
valores de referncia finais das juntas e por fim o nmero de repeties desejadas, iniciando
assim, o ciclo de repeties.
61
4.3.5 Controle Via Exoesqueleto
Para o comando via exoesqueleto demonstrado na Figura 53, foi elaborado uma estrutura em
EVA
7
que acoplada ao corpo, mais precisamente ao brao, reproduz os movimentos
especficos correspondentes ao brao humano. Para os comandos foi elaborado uma base
semelhante a do controle analgico sendo utilizado o conector modular RJ45, cabo UTP e
potencimentros de 5K.
Para que a estrutura montada reproduza os movimentos foram utilizadas chapas de alumnio
para acoplar a parte fixa dos potencimentros ao corpo e arames rgidos fixados na parte
mvel para realizar os movimentos de dobra das juntas do brao humano. A adaptao ao
corpo feita atravs da flexibilidade do EVA com o ajuste travamento via velcro.
A conexo com as entradas analgicas seguem o padro de conexo eltrica do controle
analgico e as seguintes reprodues associadas ao corpo humano:
Movimento do dedo mnimo = Abre e fecha garra;
Movimento do pulso = Giro horrio e anti-horrio do pulso do manipulador;
Movimento do cotovelo = Elevao e abaixamento do cotovelo do manipulador;
Movimento de flexo e extenso do ombro = Elevao e abaixamento do ombro do
manipulador;
Movimento pina digito-digital = Giro horrio e anti-horrio da base do manipulador.
7
uma mistura de alta tecnologia de Etil, Vinil e Acetato. uma borracha no-txica que pode ser aplicada em
diversas atividades.
62
Figura 53 Exoesqueleto.
4.3.6 Modos de exibio e acabamento
possvel acompanhar todos os comandos acima citados via serial monitor do IDE Arduino
ou via software X_CTU
8
na aleta Terminal e/ou via display. Para melhor aplicabilidade do
display conforme a Figura 54, foi instalado na base do manipulador, dois potencimentros
para ajuste de brilho e contraste respectivamente. As conexes dos pinos do display seguem
da seguinte forma:
1 = GND (Comum) 9 = No usado
2 = VCC (Alimentao 5V) 10 = No Usado
3 = Potencimetro 1 11 = Pino digital D8 do Arduino
4 = Pino digital D13 do Arduino 12 = Pino digital D7 do Arduino
5 = GND 13 = Pino digital D4 do Arduino
6 = Pino digital D12 do Arduino 14 = Pino digital D2 do Arduino
7 = No usado 15 = Potencimetro 2
8 = No usado 16 = GND
8
Software inicialmente desenvolvido para o teste de rdios e modems de comunicao. Possui uma plataforma
simples de utilizao para diversas aplicaes que envolvam envio e recebimento de dados via porta de
comunicao virtual COM.
63
Figura 54 Exibio dos parmetros rob Spider.
Para realizar o acabamento do brao robtico Spider foi utilizado um organizador para cabos
flexvel em espiral que permite envolver todos os cabos que saem dos motores e conectores.
Com isto finalizado o contexto prtico do projeto conforme Figura 55.
Figura 55 Manipulador didtico Spider.
64
5 PROBLEMAS ENCONTRADOS
Como todo projeto, a fase inicial de especificaes e de definies geram muitas dvidas
sobre quais as melhores ferramentas e componentes a serem utilizados e sendo assim neste
projeto no foi diferente.
Inicialmente vrios tipos de materiais foram propostos para a estrutura, foi utilizada a tcnica
Brain Storm
9
para seleo do material, posteriormente atravs de pesquisa foi encontrado em
outro estado brasileiro um fornecedor de acrlico que realizava cortes conforme necessidade
do cliente. Com esta informao e os objetivos definidos foram realizados os primeiros
esboos do manipulador.
Para compra dos motores foram encontradas vrias dificuldades, como podemos citar que o
mercado na grande Vitria no disponibiliza um mnimo de variedades de servomotores, o
que levou realizar as aquisies via internet e por mais de uma vez ocorreu de envio de motor
fora do especificado ou com funcionamento irregular.
Para elaborao das conexes do Arduino no foi encontrado no mercado um conector
especfico e sendo assim foi necessrio realizar a adaptao de outros tipos j existentes.
Aps a aquisio da fonte foi observado que o fornecedor realizou o enviou fora do
especificado e com isto fez-se necessrio a adaptao de uma chave on / off para facilitar o
ligamento e desligamento de todo circuito.
Para confeco do controle analgico tambm no foi encontrado no mercado um molde com
adaptao simples, o que levou a confeo conforme descrito anteriormente.
9
uma tcnica gerncial que visa utilizar ao mximo a criatividade dos participantes a fim de gerar diversas
solues e idias.
65
6 TESTES E RESULTADOS
Foram realizados testes de preciso e repetibilidade com o rob Spider. Inicialmente foi
acoplado uma caneta na garra para realizar marcaes em uma folha de papel A4 a fim de
verificar, com uma sequncia de comandos pr-definidos, a capacidade de atingir alvos
selecionados.
No primeiro teste foi demarcada a posio da base do rob Spider em relao a um ponto
definido com as coordenadas X = 0mm , Y = 500mm , Z = 40mm, como demonstrado na
Figura 56. A partir dessas coordenadas utilizando o modo celular de manuseio foi posicionado
o brao onde desejado e em seguida visualizando o display foram colhidos os ngulos das
juntas para alcanar essa posio no espao conforme Tabela 1. Utilizando o modo de
comando autnomo foi realizado o experimento que visava verficar a capacidade do rob
Spider em alcanar essa posio em diversas repeties.
Figura 56 - Coordenadas de teste.
66
Tabela 1 - Coleta de dados dos ngulos no teste 1.
Junta ngulo inicial ngulo Final
Ombro_Giro 126 41
Ombro 126 3
Cotovelo 3 126
Pulso 99 99
Garra 3 3
Fonte: Prpria.
Foram efetuadas dez repeties e colhidos os seguintes dados demonstrados na Tabela 2 e
exibidos na Figura 57 e Figura 58:
Tabela 2 - Coleta de dados do teste 1.
N Repetio Distncia do alvo (mm)
1 2
2 4
3 6
4 10
5 12
6 14
7 8
8 10
9 3
10 1
Mdia 7
Desvio padro 4,24
Fonte: Prpria.
67
Figura 57 - Teste de preciso.
Figura 58 Resultados do teste 1.
68
O segundo teste consistiu em traar um ponto em uma folha de papel A4, utilizando o modo
de comando via exoesqueleto. Com a caneta j posicionada no papel foram realizadas dez
elevaes das juntas do ombro e cotovelo simultaneamente com intuito de verificar a variao
das marcaes a partir da primeira marcao realizada, tendo os resultado conforme a Tabela
3 e exibidos na Figura 59.
Tabela 3 - Coleta de dados do teste 2.
N Repetio Distncia do alvo (mm)
1 6
2 5
3 5
4 5
5 4
6 2
7 3
8 2
9 10
10 2
Mdia 4,4
Desvio padro 2,33
Fonte: Prpria.
69
Figura 59 Resultados do teste 2.
70
O terceiro teste consistiu em traar uma linha em uma folha de papel A4, utilizando o modo
de comando via teclado. Com a caneta j posicionada no papel foram realizados dez
movimentos de giro na base, verificando assim as variaes em relao primeira marcao
realizada. Obtendo os resultados descritos na Tabela 4 e exibidos na Figura 60.
Tabela 4- Coleta de dados do teste 3.
N Repetio Distncia do alvo (mm)
1 5
2 1
3 1
4 1
5 1
6 2
7 3
8 4
9 4
10 4
Mdia 2,6
Desvio padro 1,49
Fonte: Prpria.
71
Figura 60 Resultados do teste 3.
72
O quarto teste consistiu em traar uma linha em uma folha de papel A4 utilizando o comando
via controle analgico. Com a caneta j posicionada no papel foram realizados dez
movimentos de giro na base seguidos por elevao, verificando assim a capacidade de
repetio dessa ao.
Aps dez repeties foram coletados os dados descritos na Tabela 5 e exibidos na Figura 61.
Tabela 5 - Coleta de dados do teste 4.
N Repetio Distncia do alvo (mm)
1 6
2 5
3 7
4 7
5 8
6 2
7 4
8 2
9 1
10 1
Mdia 4,3
Desvio padro 2,53
Fonte: Prpria.
73
Figura 61 - Resultados do teste 4.
Aps a realizao dos testes e levantamentos dos resultados foi observado eficcia dos
movimentos com um desempenho significativo na repetibilidade dos movimentos analisando
a preciso da posio e da trajetria nos diversos modos de comando. Sendo elaborado o
datasheet do rob manipulador Spider conforme apndice K.
74
7 CONCLUSO
O projeto do brao manipulador didtico proporcionou aos autores experincias nas mais
diversas fases de desenvolvimento de um projeto acadmico, desde a concepo at a
resoluo de problemas estruturais e conceituais. Tendo sido alcanado o objetivo principal de
desenvolver o brao manipulador didtico totalmente funcional mantendo o baixo custo e
operando com vrias interfaces de comando, podendo assim ser facilmente utilizado como
plataforma de ensino auxiliando na fixao e experimentao dos diversos conceitos de
robtica. Em especial as formas de comando foram um desafio parte onde a criatividade dos
autores foi posta a prova tendo em vista o desejo de criar dispositivos de controle com
operaes intuitivas com potencial aplicao industrial, onde o comando atravs de celular
demonstrou ser uma soluo com alto potencial de aplicabilidade tendo em vista a
possibilidade de o operador intervir facilmente na operao e o comando atravs de
exoesqueleto e controle analgico pode ser uma soluo para operaes por tempo
prolongado de aspecto dinmico onde os parmetros podem mudar sendo necessrio o
operador humano, operaes com aspecto esttico onde os movimentos so repetitivos o
comando autnomo sem duvidas a melhor opo dentre as apresentadas nesse projeto. O
arduino mostrou ser uma potente ferramenta para os mais diversos tipos de utilizao, com
fcil aplicao didtica o que reafirmou a necessidade da sua utilizao no projeto do brao
manipulador didtico.
As tcnicas de gerenciamento como, por exemplo: PDCA
10
e Brain Storm foram amplamente
utilizadas e se mostraram de grande valia nas tomadas de deciso.
Com este projeto esperamos ter contribudo para o aperfeioamento das prticas de robtica e
incentivar sua aplicao e pesquisa pelos discentes da UCL.
10
uma tcnica gerncial que tem uma proposta cclica para desenvolvimento de projetos, do
ingls: Plan (planejar), Do (fazer), Check (Checar), Act (Agir).
75
7.1 SUGESTES FUTURAS
Como sugestes futuras prope se os seguintes incrementos neste projeto:
Elaborao de comando por viso computacional que incrementaria uma gama de
conhecimentos tericos que podem tornar esta ferramenta tambm til para esta rea do
conhecimento;
Elaborao de comando atravs de um modelo virtual com interface grfica onde os
movimentos em um modelo virtual fossem replicados no manipulador, elevando assim a
quantidade e diversidade de comandos abrangendo ainda mais reas de conhecimento;
Elaborar ferramentas para atividades como soldagem e pintura para serem aplicadas no rob,
podendo assim gerar experimentos que reproduziriam atividades comuns de operao de
robs manipuladores;
Elaborar um projeto operao conjunta com a esteira didtica da UCL refletindo assim uma
operao usual dos robs manipuladores;
Conectar ao MATLAB, permitindo que seja utilizado o poder computacional de um
computador pessoal para a implementao de controladores acoplados, aplicando a
modelagem cinemtica aqui descrita.
Incluir sensores de posio articular (encoders) a fim de permitir um controle mais complexo.
76
BIBLIOGRAFIA
ABB. ABB, 04 Dezembro 2012. Disponivel em:
<www.abb.com/product/us/9AAC100735.aspx>. Acesso em: 04 Dezembro 2012.
ADMINISTRAO RENAULT. Robots. Renault. [S.l.]. 1979.
ALFRANCI SANTOS, M. J. E. H. L., 2005. Disponivel em:
<http://bioserver.cpgei.ct.utfpr.edu.br/publicacoes/2005/sbai2005a.pdf>. Acesso em: 01
Dezembro 2012.
ALL ON ROBOTS. All On Robots. All On Robots, 2012. Disponivel em:
<www.allonrobots.com/leonardo-da-vinci.html>. Acesso em: 10 Dezembro 2012.
ANGELES, J. Fundamentals Of Robotics Mechanical Systems. Montreal, Quebec H3A
2K6, Canada: Springer, 2002.
ASSOCIATION FRANAISE DE ROBOTIQUE (AFRI). ASSOCIATION FRANAISE
DE ROBOTIQUE (AFRI). L'A.F.N.O.R NF.E, 1986. 61-100.
CORKE, P. Robotics, Vision & Control. [S.l.]: SPRINGER, 2012.
CUNHA, F. Notas de aula da Disciplina Princpios de robtica, 2012. Disponivel em:
<ww1.ucl.br/disciplinas/PrincipRob/default.aspx>. Acesso em: 30 Agosto 2012.
FAYAN, B. L. Estudo e especificao de um supervisor de controle para um rob
industrial. Campinas. 1992.
FERREIRA, C. V. Manipulador Semi-Passivo para apoiar atividadesde veiculos
Submarinos. [S.l.]. 2006.
FRANCHIN, M. N. Robotica. [S.l.]. 2013.
GROOVER, M. P. Robtica Tecnologia e Programao. [S.l.]: McGraw-Hill, 1998.
HTTP://WWW.INMETRO.GOV.BR/CONSUMIDOR/UNIDLEGAISMED.ASP.
INMETRO, 10 out. 2012.
INDUZZI, R.; DUTRA, E. D. A. PROJETO DO SISTEMA DE CONTROLE DE
POSIO DE MOTORES DO ROB MANIPULADOR DIDTICO DA UCL. UCL.
Serra. 2009.
INTELLIGENT ROBOTICS AND COMMUNICATION LABORATORIES. Geminoid, 10
Dezembro 2012. Disponivel em: <www.irc.atr.jp/en/research-projects/geminoid/>. Acesso
em: 10 Dezembro 2012.
INTERNATIONAL FEDERATION OF ROBOTICS. IFR, 2012. Disponivel em:
<http://www.ifr.org/>. Acesso em: 13 Dezembro 2013.
77
MARSH, P. Robots. [S.l.]: Crescent, 1985.
MCCOMB, G. The robot Builders Bonanza. New York: McGraw-Hill Companies, 2001.
MOREIRA, A. E. O Uso da GoGo Board no Ensino da Robtica. UCL. Serra. 2005.
MOREIRA, A. L. V.; CUNHA, P. L. R. Plataforma Robtica Mvel Terrestre com seis
pernas Hibridas. UCL. Serra. 2010.
NATIONAL INSTRUMENTS. National Instruments, 2013. Disponivel em:
<http://brasil.ni.com/>. Acesso em: 13 Dezembro 2013.
NITZAN, D. Development of intelligent robots. [S.l.]: IEEE Journal of Robotics and
Automation , 1985.
ORGANIZAO INTERNACIONAL DE NORMATIZAO. http://www.iso.org/. ISO,
1982. Acesso em: Dezembro 2013.
QUARESMA, B. J. C. Projeto Mecnico para a Construo de um Manipulador
Robtico Articulado. [S.l.]. 2005.
RASCAL. RASCAL. www.robix.com, 2013. Disponivel em:
<http://www.robix.com/contents.html>. Acesso em: 28 ABRIL 2013.
REBOUAS, F. Homen vitruviano. http: //www.infoescola.com/desenho/o-homem-
vitruviano/, 09 ago. 2009. Acesso em: 30 ago. 2012.
REVISTA GALILEU. Revista Galileu, 2012. Disponivel em:
<www.revistagalileu.globo.com>. Acesso em: 10 Outubro 2012.
RIBEIRO, H.; NASCIMENTO, J.; QUEIROS-NETO, J. Simulador de cinemtica direta de
um rob didtico , 2010.
ROBOT INSTITUTE OF AMERICA ( RIA). Robots Definitions, 1979.
ROMANO, V. F. Robtica Industrial. Aplicao na Indstria de Manufatura e de
Processos. Sa Paulo: [s.n.], 2002.
ROSRIO, J. M. Principios de mecatrnica. So Paulo: Pearson, 2005.
SANTOS, A. F.; JUNIOR, M. G.; LOPES, H. S. Cinemtica inversa de trajetorias de
manipuladores roboticos redundantes utilizando algoritimo gentico com reduo
progressiva do espao de busca. CEFET- PR. Curitiba. 2005.
SANTOS, V. M. Robtica Industrial. [S.l.]: [s.n.], 2004.
SARAIVA, J. et al. Sistema de Controle Serial e Tapete Sensorial aplicado em manipulador
robtico articulado, Belm, 2009.
78
SEBRAE. Sebrae Mercados. Sebrae, 2013. Disponivel em:
<http://www.sebraemercados.com.br/?p=18891>. Acesso em: 22 Fevereiro 2013.
SILVA, R.; CABRAL, R.; CARVALHO, H. Tcnicas e linguagens de programao de
robs. Viseu: [s.n.], 2001.
SPONG, M. W. &. V. Control, Robot Dynamics and. [S.l.]: [s.n.], 1989.
SPONG, M. W.; HUTCHINSON, S.; VIDYASAGAR, M. Robot Modeling and Control.
[S.l.]: Wiley, 2006.
TESTI, L. B. Controlador Fuzzy com Aprendizado Aplicado em Manipuladores
Hidrulicos. UFRJ. Rio de Janeiro. 2005.
TOWER PRO. Tower Pro. http: //www.towerpro.com.tw/, 2013. Disponivel em:
<http://www.towerpro.com.tw/>. Acesso em: 09 Dezembro 2013.
UFMG, D. Aspectos Construtivos de Robs. ftp:
//ftp.demec.ufmg.br/lrss/Robotica_Graduacao_Pos/Aula2B_tiposderobos.pdf, 2013.
Disponivel em:
<ftp://ftp.demec.ufmg.br/lrss/Robotica_Graduacao_Pos/Aula2B_tiposderobos.pdf>. Acesso
em: 10 Dezembro 2013.
UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL. Desenvolvimento de um
manipulador Robtico Cilindrico acionado pneumticamente. Universidade Federal do Rio
Grande do Sul, 2012. Disponivel em:
<www.lume.ufrgs.br/bitstream/handle/10183/32023/000784785.pdf?sequence=1>. Acesso>.
Acesso em: 28 Agosto 2012.
79
8 APNDICES
APNDICE A CDIGO DO MICROCONTROLADOR
#include <Servo.h> //inclui a biblioteca Servo.h
#include <LiquidCrystal.h> //Define a utilizao da biblioteca para controle de telas LDCs.
#include <SoftwareSerial.h>
SoftwareSerial RoboSpiderSerial(0,1);
char dados;
int key;
int cmd = 0;
int JYMCU = A5;
int JYMCU_AUX = 0;
Servo Garra;
Servo Pulso;
Servo Cotovelo;
Servo Ombro_1;
Servo Ombro_2;
Servo Ombro_Giro;
int val_Garra;
int val_Pulso;
int val_Cotovelo;
int val_Ombro;
int val_Ombro_Giro;
int val_Garra_Aux;
int val_Pulso_Aux;
80
int val_Cotovelo_Aux;
int val_Ombro_Aux;
int val_Ombro_Giro_Aux;
int incremento = 1; // Incremento do servo (Maior valor = maior velocidade, Menor
valor = Mais preciso)
int minPulso_Garra = 90; // Posio (angular) mnima do servo da Garra
int maxPulso_Garra = 180; // Posio (angular) mxima do servo da Garra
int largura_pulso_Garra = 0; // Largura do Pulso do servo (PWM) da Garra
int minPulso_Pulso = 0; // Posio (angular) mnima do servo de Giro do Pulso
int maxPulso_Pulso = 100; // Posio (angular) mxima do servo do Pulso
int largura_pulso_Pulso = 0; // Largura do Pulso do servo (PWM) do Pulso
int minPulso_Cotovelo = 0; // Posio (angular) mnima do servo de Giro do Cotovelo
int maxPulso_Cotovelo = 180; // Posio (angular) mxima do servo do Cotovelo
int largura_pulso_Cotovelo = 0; // Largura do Pulso do servo (PWM) do Cotovelo
int minPulso_Ombro_1 = 0; // Posio (angular) mnima do servo de Giro do Ombro_1
int maxPulso_Ombro_1 = 180; // Posio (angular) mxima do servo do Ombro_1
int largura_pulso_Ombro_1 = 0; // Largura do Pulso do servo (PWM) do Ombro_1
int minPulso_Ombro_2 = 0; // Posio (angular) mnima do servo de Giro do Ombro_2
int maxPulso_Ombro_2 = 180; // Posio (angular) mxima do servo do Ombro_2
int largura_pulso_Ombro_2 = 0; // Largura do Pulso do servo (PWM) do Ombro_2
int minPulso_Ombro_Giro = 0; // Posio (angular) mnima do servo de Giro do
Ombro_2
int maxPulso_Ombro_Giro = 180; // Posio (angular) mxima do servo do Ombro_2
int largura_pulso_Ombro_Giro = 0;
int n_repete;
int n_repete_aux;
int Base_inicial=0;
81
int Ombro_inicial=0;
int Cotovelo_inicial=0;
int Pulso_inicial=0;
int Garra_inicial=0;
int Base_final=0;
int Ombro_final=0;
int Cotovelo_final=0;
int Pulso_final=0;
int Garra_final=0;
int lixo=0;
int x=0;
LiquidCrystal lcd(13, 12, 8, 7, 4, 2); //Criando um objeto da classe LiquidCrystal e
inicializando com os pinos da interface
//---------------------------------------------------------------------------------------------------------------
void setup() {
Serial.begin(9600); // Abre conexo serial e define a taxa de transmisso em 9.600kbps
RoboSpiderSerial.begin(9600);
Serial.println("Inicializando \n"); // Imprime na Serial
Garra.attach(3); //Pino do arduino do Servo da Garra
Pulso.attach(5); //Pino do arduino do Servo da Pulso
Cotovelo.attach(6); //Pino do arduino do Servo da Cotovelo
Ombro_2.attach(9); //Pino do arduino do Servo da Ombro_2
Ombro_1.attach(10); //Pino do arduino do Servo da Ombro_1
Ombro_Giro.attach(11); //Pino do arduino do Servo da Ombro_Giro
pinMode(JYMCU, INPUT); // Selecional pino A5 como entrada digital.
lcd.begin(16, 2); // Caracteriza tamanho display JHD-162A
82
lcd.clear(); //limpa o display do LCD.
lcd.print("Inicializando"); //imprime a string no display do LCD.
lcd.setCursor(0,1); //posiciona o cursor na coluna 0 linha 1 do LCD.
lcd.print("Robo Spider"); //imprime a string no display do LCD.
Garra.write(180);
delay(500);
Pulso.write(100);
delay(500);
Cotovelo.write(0);
delay(500);
Ombro_2.write(180);
Ombro_1.write(180);
delay(500);
Ombro_Giro.write(100);
delay(500);
}
//---------------------------------------------------------------------------------------------------------------
void loop(){
JYMCU_AUX = digitalRead(JYMCU); // Verifica se mdulo bluetooth esta ligado
if (JYMCU_AUX == LOW) { // Seleciona logica via USB
lcd.clear();
lcd.print("Selecione o modo");
lcd.setCursor(0,1);
lcd.print("de funcionamento");
delay(200);
83
Serial.println("Selecione o modo de funcionamento: P(Controle) ou O(Teclado) ou
I(Exoesqueleto) ou U(Autonomo)"); // Imprime na serial
Serial.println("Digite 'L' para sair");
delay (3000);
if (Serial.available() > 0){ // verifica serial
int dados = Serial.read();
if(dados == 'o' || dados == 'O') // Seleciona comando via teclado
{
Teclado();
}
else if (dados == 'p' || dados == 'P') // Seleciona comando via controle analogico
{
ControleAnalogico ();
}
else if (dados == 'i' || dados == 'I') // Seleciona comando via exoesqueleto
{
Exoesqueleto();
}
else if (dados == 'u' || dados == 'U') // Seleciona comando via exoesqueleto
{
x=0;
RoboAutonomo ();
}
} // Fecha Serial
} // Fecha IF inicial
else // se (JYMCU_AUX == HIGH) - Seleciona logica via Celular
84
{
lcd.clear();
lcd.print("Modo Celular");
lcd.setCursor(0,1);
lcd.print("Desligue USB");
delay (100);
Celular ();
} // Fecha elsif
} // Fecha Loop
// LOGICA PARA CONTROLE POR TECLADO ---------------------------------------------------
void Teclado (){
Serial.println("");
Serial.println("Modo Teclado Selecionado");
lcd.clear();
lcd.print("Modo Teclado");
lcd.setCursor(0,1);
lcd.print("selecionado");
delay(200);
do {
int ServoMotor = Serial.read(); // l o byte na serial
switch(ServoMotor) {
case 'a': {
largura_pulso_Garra = largura_pulso_Garra - incremento;
lcd.clear();
lcd.print("Garra movendo");
lcd.setCursor(0,1);
85
lcd.print(largura_pulso_Garra);
lcd.print(" Graus");
if (largura_pulso_Garra < minPulso_Garra) {
largura_pulso_Garra = minPulso_Garra;
}
Garra.write(largura_pulso_Garra); // Envia o "comando" para o ServoMotor
Serial.println(" Servo_Garra: "); // Imprime na serial o angulo do ServoMotor
Serial.println(largura_pulso_Garra);
delay(100);
break;
}
case 'q': {
largura_pulso_Garra = largura_pulso_Garra + incremento;
lcd.clear();
lcd.print("Garra movendo");
lcd.setCursor(0,1);
lcd.print(largura_pulso_Garra);
lcd.print(" Graus");
if (largura_pulso_Garra > largura_pulso_Garra) {
largura_pulso_Garra = maxPulso_Garra;
}
Garra.write(largura_pulso_Garra); // Envia o "comando" para o ServoMotor
Serial.println(" Servo_Garra: "); // Imprime na serial o angulo do ServoMotor
Serial.println(largura_pulso_Garra);
delay(100);
break ;
86
}
case 's': {
largura_pulso_Pulso = largura_pulso_Pulso - incremento;
lcd.clear();
lcd.print("Pulso movendo");
lcd.setCursor(0,1);
lcd.print(largura_pulso_Pulso);
lcd.print(" Graus");
if (largura_pulso_Pulso < minPulso_Pulso) {
largura_pulso_Pulso = minPulso_Pulso;
}
Pulso.write(largura_pulso_Pulso); // Envia o "comando" para o ServoMotor
Serial.println(" Servo_Pulso "); // Imprime na serial o angulo do ServoMotor
Serial.println(largura_pulso_Pulso);
delay(100);
break ;
}
case 'w': {
largura_pulso_Pulso = largura_pulso_Pulso + incremento;
lcd.clear();
lcd.print("Pulso movendo");
lcd.setCursor(0,1);
lcd.print(largura_pulso_Pulso);
lcd.print(" Graus");
if (largura_pulso_Pulso > largura_pulso_Pulso) {
largura_pulso_Pulso = maxPulso_Pulso;
87
}
Pulso.write(largura_pulso_Pulso); // Envia o "comando" para o ServoMotor
Serial.println(" Servo_Pulso "); // Imprime na serial o angulo do ServoMotor
Serial.println(largura_pulso_Pulso);
delay(100);
break ;
}
case 'd': {
largura_pulso_Cotovelo = largura_pulso_Cotovelo - incremento;
lcd.clear();
lcd.print("Cotovelo movendo");
lcd.setCursor(0,1);
lcd.print(largura_pulso_Cotovelo);
lcd.print(" Graus");
if (largura_pulso_Cotovelo < minPulso_Cotovelo) {
largura_pulso_Cotovelo = minPulso_Cotovelo;
}
Cotovelo.write(largura_pulso_Cotovelo); // Envia o "comando" para o ServoMotor
Serial.println(" Servo_Cotovelo: "); // Imprime na serial o angulo do ServoMotor
Serial.println(largura_pulso_Cotovelo);
delay(100);
break ;
}
case 'e': {
largura_pulso_Cotovelo = largura_pulso_Cotovelo + incremento;
lcd.clear();
88
lcd.print("Cotovelo movendo");
lcd.setCursor(0,1);
lcd.print(largura_pulso_Cotovelo);
lcd.print(" Graus");
if (largura_pulso_Cotovelo > largura_pulso_Cotovelo) {
largura_pulso_Cotovelo = maxPulso_Cotovelo;
}
Cotovelo.write(largura_pulso_Cotovelo); // Envia o "comando" para o ServoMotor
Serial.println(" Servo_Cotovelo: "); // Imprime na serial o angulo do ServoMotor
Serial.println(largura_pulso_Cotovelo);
delay(100);
break ;
}
case 'f':
{
largura_pulso_Ombro_1 = largura_pulso_Ombro_1 - incremento;
largura_pulso_Ombro_2 = largura_pulso_Ombro_2 - incremento;
lcd.clear();
lcd.print("Ombro movendo");
lcd.setCursor(0,1);
lcd.print(largura_pulso_Ombro_1);
lcd.print(" Graus");
if (largura_pulso_Ombro_1 < minPulso_Ombro_1) {
largura_pulso_Ombro_1 = minPulso_Ombro_1;
}
if (largura_pulso_Ombro_2 < minPulso_Ombro_2) {
89
largura_pulso_Ombro_2 = minPulso_Ombro_2;
}
Ombro_1.write(largura_pulso_Ombro_1); // Envia o "comando" para o ServoMotor
Serial.println(" Servo_Ombro_1: "); // Imprime na serial o angulo do ServoMotor
Serial.println(largura_pulso_Ombro_1);
Ombro_2.write(largura_pulso_Ombro_2); // Envia o "comando" para o ServoMotor
Serial.println(" Servo_Ombro_2: "); // Imprime na serial o angulo do ServoMotor
Serial.println(largura_pulso_Ombro_2);
delay(100);
break ;
}
case 'r': {
largura_pulso_Ombro_1 = largura_pulso_Ombro_1 + incremento;
largura_pulso_Ombro_2 = largura_pulso_Ombro_2 + incremento;
lcd.clear();
lcd.print("Ombro movendo");
lcd.setCursor(0,1);
lcd.print(largura_pulso_Ombro_1);
lcd.print(" Graus");
//delay(100);
if (largura_pulso_Ombro_1 > largura_pulso_Ombro_1) {
largura_pulso_Ombro_1 = maxPulso_Ombro_1;
}
if (largura_pulso_Ombro_2 > largura_pulso_Ombro_2) {
largura_pulso_Ombro_2 = maxPulso_Ombro_2;
90
}
Ombro_1.write(largura_pulso_Ombro_1); // Envia o "comando" para o ServoMotor
Serial.println(" Servo_Ombro_1: "); // Imprime na serial o angulo do ServoMotor
Serial.println(largura_pulso_Ombro_1);
Ombro_2.write(largura_pulso_Ombro_2); // Envia o "comando" para o ServoMotor
Serial.println(" Servo_Ombro_2: "); // Imprime na serial o angulo do ServoMotor
Serial.println(largura_pulso_Ombro_2);
delay(100);
break ;
}
case 'g': {
largura_pulso_Ombro_Giro = largura_pulso_Ombro_Giro - incremento;
lcd.clear();
lcd.print("Ombro movendo");
lcd.setCursor(0,1);
lcd.print(largura_pulso_Ombro_Giro);
lcd.print(" Graus");
if (largura_pulso_Ombro_Giro < minPulso_Ombro_Giro) {
largura_pulso_Ombro_Giro = minPulso_Ombro_Giro;
}
Ombro_Giro.write(largura_pulso_Ombro_Giro);
Serial.println(" Servo_Ombro_Giro: ");
Serial.println(largura_pulso_Ombro_Giro);
delay(100);
break ;
}
91
case 't': {
largura_pulso_Ombro_Giro = largura_pulso_Ombro_Giro + incremento;
lcd.clear();
lcd.print("Ombro movendo");
lcd.setCursor(0,1);
lcd.print(largura_pulso_Ombro_Giro);
lcd.print(" Graus");
if (largura_pulso_Ombro_Giro > largura_pulso_Ombro_Giro) {
largura_pulso_Ombro_Giro = maxPulso_Ombro_Giro;
}
Ombro_Giro.write(largura_pulso_Ombro_Giro);
Serial.println(" Servo_Ombro_Giro: ");
Serial.println(largura_pulso_Ombro_Giro);
delay(100);
break ;
}
} // Fecha switch
dados = Serial.read();
} while (dados != 'l'); // Fecha do/while
} // Fecha funcao
// LOGICA PARA CONTROLE VIA CONTROLE ANALOGICO --------------------------------
void ControleAnalogico () {
Serial.println("");
Serial.println("Modo Controle analogico Selecionado");
lcd.clear();
lcd.print("Modo Controle");
92
lcd.setCursor(0,1);
lcd.print("selecionado");
delay(200);
do {
val_Garra = analogRead(0); // L o valor do potenciometro(Valores entre 0 and 1023)
delay(100);
val_Garra = map(val_Garra, 10, 1023, 0, 180); // Escala o valor do potenciometro
conforme Servo(Valores entre 0 and 180)
if (val_Garra_Aux != val_Garra) {
Garra.write(val_Garra); // Seta posio do Servo conforme valor de escala
Serial.println(" Servo_Garra: ");
Serial.println(val_Garra);
lcd.clear();
lcd.print("Garra movendo");
lcd.setCursor(0,1);
lcd.print(val_Garra);
lcd.print( " Graus");
delay(100); // Aguarda posicionamento do Servo
val_Garra_Aux = val_Garra;
delay(100);
lcd.clear();
}
val_Pulso = analogRead(1); // L o valor do potenciometro(Valores entre 0 and 1023)
delay(100);
val_Pulso = map(val_Pulso, 10, 1023, 0, 180); // Escala o valor do potenciometro conforme
Servo(Valores entre 0 and 180)
if (val_Pulso_Aux != val_Pulso) {
93
Pulso.write(val_Pulso); // Seta posio do Servo conforme valor de escala
Serial.println(" Servo_Pulso: ");
Serial.println(val_Pulso);
lcd.clear();
lcd.print("Pulso movendo");
lcd.setCursor(0,1);
lcd.print(val_Pulso);
lcd.print( " Graus");
delay(100);
val_Pulso_Aux = val_Pulso;
delay(100);
lcd.clear();
}
val_Cotovelo = analogRead(2); // L o valor do potenciometro(Valores entre 0 and 1023)
delay(100);
val_Cotovelo = map(val_Cotovelo, 10, 1023, 0, 180); // Escala o valor do potenciometro
conforme Servo(Valores entre 0 and 180)
if (val_Cotovelo_Aux != val_Cotovelo) {
Cotovelo.write(val_Cotovelo); // Seta posio do Servo conforme valor de escala
Serial.println(" Servo_Cotovelo: ");
Serial.println(val_Cotovelo);
lcd.clear();
lcd.print("Cotovelo movendo");
lcd.setCursor(0,1);
lcd.print(val_Cotovelo);
lcd.print( " Graus");
94
delay(100);
val_Cotovelo_Aux = val_Cotovelo;
delay(100);
lcd.clear();
}
val_Ombro = analogRead(3); // L o valor do potenciometro(Valores entre 0 and 1023)
delay(100);
val_Ombro = map(val_Ombro, 10, 1023, 0, 180); // Escala o valor do potenciometro
conforme Servo(Valores entre 0 and 180)
if (val_Ombro_Aux != val_Ombro) {
Ombro_1.write(val_Ombro); // Seta posio do Servo conforme valor de escala
Ombro_2.write(val_Ombro);
Serial.println(" Servo_Ombro_1_e_2: ");
Serial.println(val_Ombro);
lcd.clear();
lcd.print("Ombro movendo");
lcd.setCursor(0,1);
lcd.print(val_Ombro);
lcd.print( " Graus");
delay(100);
val_Ombro_Aux = val_Ombro ;
delay(100);
lcd.clear();
}
val_Ombro_Giro = analogRead(4); // L o valor do potenciometro(Valores entre 0 and 1023)
delay(100);
95
val_Ombro_Giro = map(val_Ombro_Giro, 10, 1023, 0, 180); // Escala o valor do
potenciometro conforme Servo(Valores entre 0 and 180)
if (val_Ombro_Giro_Aux != val_Ombro_Giro) {
Ombro_Giro.write(val_Ombro_Giro); // Seta posio do Servo conforme valor de escala
Serial.println(" Servo_Ombro_Giro: ");
Serial.println(val_Ombro_Giro);
lcd.clear();
lcd.print("Ombro Girando");
lcd.setCursor(0,1);
lcd.print(val_Ombro_Giro);
lcd.print( " Graus");
delay(100);
val_Ombro_Giro_Aux = val_Ombro_Giro ;
delay(100);
lcd.clear();
}
dados = Serial.read();
} while (dados != 'l'); // Fecha do/while
} // Fecha funcao
// LGICA PARA CONTROLE VIA EXOESQUELETO ------------------------------------------
void Exoesqueleto () {
Serial.println("");
Serial.println("Modo Exoesqueleto Selecionado");
lcd.clear();
lcd.print("Exoesqueleto");
lcd.setCursor(0,1);
96
lcd.print("selecionado");
delay(200);
do {
val_Garra = analogRead(0); // L o valor do potencimetro (Valores entre 0 and 1023)
delay(100);
val_Garra = map(val_Garra, 60, 115, 0, 180); // Escala o valor do potnciometro conforme
Servo(Valores entre 0 and 180)
if (val_Garra_Aux != val_Garra) {
Garra.write(val_Garra); // Seta posio do servo conforme valor de escala
Serial.println(" Servo_Garra: ");
Serial.println(val_Garra);
lcd.clear();
lcd.print("Garra movendo");
lcd.setCursor(0,1);
lcd.print(val_Garra);
lcd.print( " Graus");
delay(100); // Aguarda posicionamento do servo
val_Garra_Aux = val_Garra;
delay(100);
lcd.clear();
}
val_Pulso = analogRead(1); // L o valor do potencimetro (Valores entre 0 and 1023)
delay(100);
val_Pulso = map(val_Pulso, 7, 120, 0, 180); // Escala o valor do potenciometro conforme
Servo(Valores entre 0 and 180)
if (val_Pulso_Aux != val_Pulso) {
Pulso.write(val_Pulso); // Seta posio do Servo conforme valor de escala
97
Serial.println(" Servo_Pulso: ");
Serial.println(val_Pulso);
lcd.clear();
lcd.print("Pulso movendo");
lcd.setCursor(0,1);
lcd.print(val_Pulso);
lcd.print( " Graus");
delay(100);
val_Pulso_Aux = val_Pulso;
delay(100);
lcd.clear();
}
val_Cotovelo = analogRead(2); // L o valor do potenciometro(Valores entre 0 and 1023)
delay(100);
val_Cotovelo = map(val_Cotovelo, 7, 130, 0, 180); // Escala o valor do potenciometro
conforme Servo(Valores entre 0 and 180)
if (val_Cotovelo_Aux != val_Cotovelo) {
Cotovelo.write(val_Cotovelo); // Seta posio do Servo conforme valor de escala
Serial.println(" Servo_Cotovelo: ");
Serial.println(val_Cotovelo);
lcd.clear();
lcd.print("Cotovelo movendo");
lcd.setCursor(0,1);
lcd.print(val_Cotovelo);
lcd.print( " Graus");
delay(100);
98
val_Cotovelo_Aux = val_Cotovelo;
delay(100);
lcd.clear();
}
val_Ombro = analogRead(3); // L o valor do potenciometro(Valores entre 0 and 1023)
delay(100);
val_Ombro = map(val_Ombro, 1023, 300, 0, 180); // Escala o valor do potenciometro
conforme Servo(Valores entre 0 and 180)
if (val_Ombro_Aux != val_Ombro) {
Ombro_1.write(val_Ombro); // Seta posio do Servo conforme valor de escala
Ombro_2.write(val_Ombro);
Serial.println(" Servo_Ombro_1_e_2: ");
Serial.println(val_Ombro);
lcd.clear();
lcd.print("Ombro movendo");
lcd.setCursor(0,1);
lcd.print(val_Ombro);
lcd.print( " Graus");
delay(100);
val_Ombro_Aux = val_Ombro ;
delay(100);
lcd.clear();
}
val_Ombro_Giro = analogRead(4); // L o valor do potenciometro(Valores entre 0 and 1023)
delay(100);
val_Ombro_Giro = map(val_Ombro_Giro, 8, 1023, 0, 180); // Escala o valor do
potenciometro conforme Servo(Valores entre 0 and 180)
99
if (val_Ombro_Giro_Aux != val_Ombro_Giro) {
Ombro_Giro.write(val_Ombro_Giro); // Seta posio do Servo conforme valor de escala
Serial.println(" Servo_Ombro_Giro: ");
Serial.println(val_Ombro_Giro);
lcd.clear();
lcd.print("Ombro Girando");
lcd.setCursor(0,1);
lcd.print(val_Ombro_Giro);
lcd.print( " Graus");
delay(100);
val_Ombro_Giro_Aux = val_Ombro_Giro ;
delay(100);
lcd.clear();
}
dados = Serial.read();
} while (dados != 'l'); // Fecha do/while
} // Fecha funcao
// LOGICA PARA CONTROLE AUTONOMO ------------------------------------------------------
void RoboAutonomo () {
Serial.println("");
Serial.println("Modo Autonomo Selecionado");
lcd.clear();
lcd.print("Autonomo");
lcd.setCursor(0,1);
lcd.print("selecionado");
delay(200);
100
do {
if (Serial.available() > 0) // verifica serial {
if ( x == 0) {
lixo = Serial.read();
Serial.println("Inicio de Insercao da dados");
Serial.println("");
Serial.println("Digite angulo inicial da Base"); // Imprime na serial
delay (100);
x = 1;
}
else if ( x == 1) {
Base_inicial = Serial.read();
Serial.println("");
Serial.println("Digite angulo inicial do Ombro"); // Imprime na serial
delay (100);
x = 2;
}
else if (x == 2) {
Ombro_inicial = Serial.read();
Serial.println("");
Serial.println("Digite angulo inicial do Cotovelo"); // Imprime na serial
delay (100);
x = 3;
}
else if (x == 3) {
Cotovelo_inicial = Serial.read();
101
Serial.println("");
Serial.println("Digite angulo inicial do Pulso"); // Imprime na serial
delay (100);
x = 4;
}
else if (x == 4) {
Pulso_inicial = Serial.read();
Serial.println("");
Serial.println("Digite angulo inicial da Garra"); // Imprime na serial
delay (100);
x = 5;
}
else if (x == 5) {
Garra_inicial = Serial.read();
Serial.println("");
Serial.println("---------------------------------------------------------------");
Serial.println("");
Serial.println("Digite angulo final da Base"); // Imprime na serial
delay (100);
x = 6;
}
else if (x == 6) {
Base_final = Serial.read();
Serial.println("");
Serial.println("Digite angulo final do Ombro"); // Imprime na serial
delay (100);
102
x = 7;
}
else if (x == 7) {
Ombro_final = Serial.read();
Serial.println("");
Serial.println("Digite angulo final do Cotovelo"); // Imprime na serial
delay (100);
x = 8;
}
else if (x == 8) {
Cotovelo_final = Serial.read();
Serial.println("");
Serial.println("Digite angulo final do Pulso"); // Imprime na serial
delay (100);
x = 9;
}
else if (x == 9) {
Pulso_final = Serial.read();
Serial.println("");
Serial.println("Digite angulo final da Garra"); // Imprime na serial
delay (100);
x = 10;
}
else if (x == 10) {
Garra_final = Serial.read();
Serial.println("");
103
Serial.println("---------------------------------------------------------------");
Serial.println("");
Serial.println("Digite o numero de repeticoes"); // Imprime na serial
delay (100);
x = 11;
}
else if (x == 11) {
n_repete = Serial.read();
Serial.println("");
Serial.println("---------------------------------------------------------------");
Serial.println("Ok. Dados recebidos"); // Imprime na serial
Serial.println("");
Serial.println("Angulo inicial da base");
Serial.println(Base_inicial,DEC);
Serial.println("Angulo inicial do ombro");
Serial.println(Ombro_inicial,DEC);
Serial.println("Angulo inicial do cotovelo");
Serial.println(Cotovelo_inicial,DEC);
Serial.println("Angulo inicial do pulso");
Serial.println(Pulso_inicial,DEC);
Serial.println("Angulo inicial da Garra");
Serial.println(Garra_inicial,DEC);
Serial.println("------------------------");
Serial.println("Angulo final da base");
Serial.println(Base_final,DEC);
Serial.println("Angulo final do ombro");
104
Serial.println(Ombro_final,DEC);
Serial.println("Angulo final do cotovelo");
Serial.println(Cotovelo_final,DEC);
Serial.println("Angulo final do pulso");
Serial.println(Pulso_final,DEC);
Serial.println("Angulo final da Garra");
Serial.println(Garra_final,DEC);
Serial.println("------------------------");
Serial.println("Numero de repeticoes");
Serial.println(n_repete,DEC);
Serial.println("---------------------------------------------------------------");
delay (100);
x = 12;
}
else if ( x == 12); {
for (n_repete_aux=0; n_repete_aux < n_repete; n_repete_aux++) {
lcd.clear(); //limpa o display do LCD.
lcd.print("Repeticao atual"); //imprime a string no display do LCD.
lcd.setCursor(0,1); //posiciona o cursor na coluna 0 linha 1 do LCD.
lcd.print(n_repete_aux); //imprime a string no display do LCD.
Serial.println("Repeticao atual");
Serial.println(n_repete_aux,DEC);
delay(100);
Ombro_Giro.write(Base_inicial);
delay(500);
Ombro_2.write(Ombro_inicial);
105
Ombro_1.write(Ombro_inicial);
delay(500);
Cotovelo.write(Cotovelo_inicial);
delay(500);
Pulso.write(Pulso_inicial);
delay(500);
Garra.write(Garra_inicial);
delay(500);
//------------------------------------------------
Ombro_2.write(Ombro_final);
Ombro_1.write(Ombro_final);
delay(1000);
Cotovelo.write(Cotovelo_final);
delay(500);
Ombro_Giro.write(Base_final);
delay(500);
Pulso.write(Pulso_final);
delay(500);
Garra.write(Garra_final);
delay(500);
} // Fecha for
} //Fecha elsif
} // Fecha Serial
dados = Serial.read();
} while (dados != 'l');
} // fecha funcao
106
// LOGICA PARA CONTROLE VIA CELULAR ----------------------------------------------------
void Celular () {
while (RoboSpiderSerial.available() >= 2) { // Verifica serial para JY-MCU
key = Serial.read();
cmd = Serial.read();
cmd = map(cmd, 0, 100, 0, 180);
if (key == 3) {
if (cmd >= 0 && cmd <= 180) {
Garra.write(cmd);
lcd.clear();
lcd.print("Garra movendo");
lcd.setCursor(0,1);
lcd.print(cmd);
lcd.print( " Graus");
delay(100);
}
}
else if (key == 5) {
if (cmd >= 0 && cmd <= 180) {
Pulso.write(cmd);
lcd.clear();
lcd.print("Pulso movendo");
lcd.setCursor(0,1);
lcd.print(cmd);
lcd.print( " Graus");
delay(100);
107
}
}
else if (key == 6) {
if (cmd >= 0 && cmd <= 180) {
Cotovelo.write(cmd);
lcd.clear();
lcd.print("Cotovelo movendo");
lcd.setCursor(0,1);
lcd.print(cmd);
lcd.print( " Graus");
delay(100);
}
}
else if (key == 9 || key == 10) {
if (cmd >= 0 && cmd <= 180) {
Ombro_1.write(cmd);
Ombro_2.write(cmd);
lcd.clear();
lcd.print("Ombro movendo");
lcd.setCursor(0,1);
lcd.print(cmd);
lcd.print( " Graus");
delay(100);
}
}
else if (key == 11) {
108
if (cmd >= 0 && cmd <= 180){
Ombro_Giro.write(cmd);
lcd.clear();
lcd.print("Ombro girando");
lcd.setCursor(0,1);
lcd.print(cmd);
lcd.print( " Graus");
delay(100);
}
}
} // Fecha serial
} // Fecha funcao
109
APNDICE B LAYOUT DE SIMULAO DO BRAO MANIPULADOR SPIDER
Layout da simulao software Proteus.
110
APNDICE C TUTORIAL PARA SIMULAR ARDUINO NO PROTEUS
Para simulao dos circuitos propostos neste trabalho foi utilizado o programa Proteus com
uma biblioteca especfica do Arduino para criao e testes dos modelos propostos.
Como esta biblioteca no existe por padro necessrio realizar uma seqncia de instalao
conforme segue:
Com o programa Proteus fechado fazer download da biblioteca Arduino.ZIP para o
PC.
Extrair os arquivos Arduino.idx e Arduino.lib para o seguinte caminho: [unidade de
disco] \ program files \ labcenter electronics \ proteus 7 professional \ library
Abra o programa Proteus e no pick device wizard j apresentara os modelos para
insero.
Assim como feito nas simulaes utilizando PIC associado as lgicas criadas no MPLAB
necessrio tambm aps elaborao e compilao da lgica no Software do Arduino a
associao com o microprocessador Atmega. Porm existe uma peculiaridade nestes modelos
para fazer o download das lgicas elaboradas para o Arduino dentro do Proteus conforme
segue:
Aps compilar a lgica no software do Arduino criado um arquivo
[nome_Arquivo.cpp.elf] temporrio salvo em uma caminho especfico do computador
semelhante ao seguir conforme verso do sistema operacional.
Duplo click no componente do Arduino inserido na rea de trabalho do Proteus \
Program file \ Users \ AppData \ Local \ Temp \ build4239.tmp.
importante sempre que necessrio refazer o caminho pois a cada compilao realizada um
novo arquivo temporrio criado conforme a data inserida no sistema operacional.
111
APNDICE D TUTORIAL PARA CONFIGURAR O MDULO JY-MCU
Para personalizar o projeto exite uma maneira de configurar o modo de comunicao do
hardware Arduino com o mdulo Bluetooth, conforme segue:
Faa o Download da lgica presente no apndice E para o Arduino
Com o modulo JYMCU sem qualquer configurao previa de comunicao, faa as
ligaes da seguinte forma:
o VCC - Ligar no pino 5V do Arduino;
o GND - Ligar no pino GND do Arduino;
o TXD - Ligar no pino 10 do Arduino;
o RXD - Ligar no pino 11 do Arduino;
o CABO USB Ligar no Computador.
Com a logica aberta click no Serial Monitor e altere a configurao de velocidade para
115200 e assim ir aparecer mensagem Digite Comandos AT!;
Digite os commandos AT que forem necessrios para configurao conforme segue:
o AT = Retorna OK informado que a comunicao est certa;
o AT+NAMExxxxxxxxxx = Altera o nome do Dispositivo;
o AT+PINxxxx = Altera a senha;
o AT+BAUDx = Altera a velocidade de transmisso de dados 1 (bps)
x = 1 = 1200
x = 2 = 2400
x = 3 = 4800
x = 4 = 9600
x = 5 = 19200
x = 6 = 38400
x = 7 = 57600
x = 8 = 115200
x = 9 = 230400
o AT+VERSION = Retorna a verso de firmware da placa.
99
Aps inserir as configuraes, basta desconectar o cabo USB do computador e com
uma fonte externa alimentar os componentes e realizar o teste de comunicao, com
computador ou celular, conforme projetado.
100
APNDICE E LGICA PARA CONFIGURAR MDULO JY-MCU
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
String command = ""; // Guarda respostas do dispositivo Bluetooth que permite simplificacao
void setup()
{
// Abre comunicao Serial e aguarda abertura de Porta:
Serial.begin(115200);
Serial.println("Digite Comandos AT!");
mySerial.begin(9600);
}
void loop()
{
// Le saidas dos dispositivos se disponivel.
if (mySerial.available()) {
while(mySerial.available()) { // Enquanto existe dados para leitura, continue lendo.
command += (char)mySerial.read();
}
Serial.println(command);
command = ""; // Sem repetio.
}
// Le entrada do usuario se disponivel.
if (Serial.available()){
delay(10);
mySerial.write(Serial.read());
}
}
101
APNDICE F TUTORIAL PARA CONFIGURAR MICROCONTROLLER BT
Para instalar o aplicativo preciso ir ao Googleplay, pesquisar e baixar normalmente o
software;
Abrindo o aplicativo ele ir para uma tela com o seguinte ttulo Creat New Layout, clique no
menu do celular e insira um novo layout;
Escreva o nome para seu layout e clique novamente no boto menu do celular e entre no
modo de edio;
Dentro do modo de edio ir aparecer uma aleta na parte inferior da tela, puxe a mesma para
a parte superior e assim ir aparecer os cones a serem inseridos para envio ou recebimento de
dados;
Clique no cone desejado e segure por um segundo que o mesmo ir possibilitar o
posicionamento dentro do seu layout criado;
Posicionando o cone faa um duplo clique no mesmo para abrir a configurao do mesmo, na
parte superior so exibidos quais as entradas e sadas a serem tratadas na lgica do
microcontrolador a ser utilizado;
Repita os itens anteriores para quantos cones forem necessrios e logo aps, quando finalizar
a insero e configurao faa um clique simples no boto de retorno de seu celular o que
levar a tela de trabalho do layout criado;
Dentro da tela de trabalho faa um novo clique no menu do celular o que possibilitar acessar
o cone de conectar;
No menu de conectar ir sugerir ligar o modo Bluetotooth do celular, caso esteja desligado,
seguindo do cone de localizar dispositivos;
Aps identificar o dispositivo a ser pareado, basta iniciar a comunicao e controle do
dispositivo.
102
Figura 62 - Layout Microcontroller BT.
103
APNDICE G TABELA DE CONSUMO DE CORRENTE
Quantidade Componente Corrente (Mx) Tenso alimentao
2 Servomotor SG90 0,5A 5V
4 Servomotor MG995 3A 5V
1 JY-MCU 0,5A 5V
1 Display JHD-162A 0,4A 5V
1 Arduino 1A 12V
Consumo mximo 15A
104
APNDICE H ESBOO DOS DESENHOS
Vista lateral da base.
Superior da base.
105
Vista lateral ombro.
Vista lateral antebrao.
106
Vista lateral brao.
Vista superior do efetuador.
107
APNDICE I CLCULO DO TORQUE NOS MOTORES
Definio das massas dos links
Densidade do acrilico = 1,19 g/
MDE - Massa do link DE LDC Comprimento do link DC
MCD Massa do link CD LCD Comprimento do link CD
MBC - Massa do link BC LBC Comprimento do link BC
Mgarra = d * V
Mgarra = 1,19 * (14 * 5 * 0,5)
Mgarra = 42g = Aproximadamente 50g
MDE = 50(Mgarra) + 9(Motor) + 150(Carga til do brao) + 20(Parafusos)
MDE = Aproximadamente 230g
MC D= d * V
MCD = (1,19 * (2 * (23 * 10 * 0,5))) + 9(Motor) + 20(Parafusos) + 65(Motor)
MCD = Aproximadamente 380g
MBC = d * V
MBC = (1,19 * (2 * (22 * 10 * 0,5))) + 130(Dois Motores) + 20(Parafusos)
MBC = Aproximadamente 420g
108
Definio dos Torques dos motores principais
TB MDE * (LBC + LCD + Garra) MCD * (LBC + LCD) MBC * (LBC) = 0
TB = (0,23 * (12,2 + 18,3 + 15,2) + (0,38 * (12,2 * 18,3)) + (0,42 * 12,2)
TB = 10,51 + 11,59 + 5,12
TB = 27,22 Kg*cm
TC (MDE * (LCD + Garra)) (MCD * LCD) = 0
TC = (0,23 * (18,3 + 15,2)) + (0,38 * 18,3) = 0
TC = 7,71 + 6,95
TC = 14,66 Kg*cm
Figura 63 - Parmetros de clculo.
109
APNDICE J CDIGO MATLAB DO MODELO COMPUTACIONAL ROB SPIDER
necessrio a instalao do Robot Toolbox.
Os dados dos links foram coletados da tabela que foi gerada a partir do algoritimo de Denavit-
Hartemberg.
>> startup_rvc % Inicializa o TollBox
>> L(1) = Link([0 0.147 0 pi/2 0]); % parmentros link 0
>> L(2) = Link([0 0 0.122 0 0]); % parmentros link 1
>> L(3) = Link([0 0 0 pi/2 0]); % parmentros link 2
>> L(4) = Link([0 0.333 0 0 0]); % parmentros link 3
>> robo = SerialLink(L, 'name', 'Rob Spider') % Une os links criando o rob
robo = Rob Spider (4 axis, RRRR, stdDH) % parmentros do rob
+---+-----------+-----------+-----------+-----------+
| j | theta | d | a | alpha |
+---+-----------+-----------+-----------+-----------+
| 1| q1| 0.147| 0| 1.571|
| 2| q2| 0| 0.122| 0| % tabela de dados gerados pelo Matlab
| 3| q3| 0| 0| 1.571|
| 4| q4| 0.333| 0| 0|
+---+-----------+-----------+-----------+-----------+
grav = 0 base = 1 0 0 0 tool = 1 0 0 0
0 0 1 0 0 0 1 0 0
9.81 0 0 1 0 0 0 1 0
0 0 0 1 0 0 0 1
110
>> disp('Variveis de juntas:');
Variveis de juntas:
>> q = [1, pi/3, 1, pi/4] % parmentros algulares das juntas
q = 1.0000 1.0472 1.0000 0.7854
>> disp('Cinematica Direta:');
Cinematica Direta:
>> T = robo.fkine(q) % comando para obteno da cinemtica direta
T =
0.4198 0.7702 0.4801 0.1928
-0.6549 -0.1092 0.7478 0.3003 % Matriz de coordenadas homognea
0.6284 -0.6284 0.4586 0.4054
0 0 0 1.0000
>> disp('Jacobiano:');
Jacobiano:
>> J = robo.jacob0(q) % comando para gerao da matriz Jacobiana
J =
-0.3003 -0.1396 -0.0825 0
0.1928 -0.2174 -0.1285 0
-0.0000 0.3569 0.2959 0 % Matriz Jacobiana gerada pelo Matlab
-0.0000 0.8415 0.8415 0.4801
0.0000 -0.5403 -0.5403 0.7478
1.0000 0.0000 0.0000 0.4586
111
APNDICE K DATASHEET DO ROB SPIDER
Fsico
Garra
Peso 50g
Peso do acoplamento do pulso com a garra 30g
Dimenso da garra fechada 152mm
Abertura mxima 72mm
Giro mximo do pulso 180
Torque do motor de abertura e fechamento 1,6 kg / cm
Velocidade mxima abertura ou fechamento 60 a cada 0,12 segundos
Velocidade mxima de giro 60 a cada 0,12 segundos
Manipulador
Capacidade de manuseio 150g + - (23g)
Peso do cotovelo 230g
Peso do ombro 420g
Peso da base 500g
Peso total do brao manipulador 1300g
Alcance mximo na horizontal 435mm
Alcance mximo na horizontal ao solo 380mm
Alcance mximo na vertical 604mm
Nmero de eixos 4
Torque do motor de giro, ombro e cotovelo 15 kg / cm
Velocidade mxima do giro, ombro e cotovelo 60 a cada 0,16 segundos
Volume de trabalho 0,1
112
Figura 64 - Volume de trabalho do rob Spider
Desempenho
Repetibilidade da posio Erro mdio de +- 7,0 mm
Repetibilidade do percurso Erro mdio de +- 3,8 mm
Eletrnica
Manipulador Spider
Fonte de alimentao ATX-500 de 220W
Microcontrolador Arduino Duemilanove
Display JHD-162A
Mdulo Bluetooth JY-MCU
Conector para controles analgicos RJ-45
Aplicativo para controle via celular Microcontroller BT
Senha de acesso Bluetooh 1302
113
Requisitos
Sequncia para energizar rob Spider:
o 1 Conectar e ligar fonte de alimentao;
o 2 Conectar cabo USB;
o Para desenergizar seguir a sequencia contrria.
Sequncia para utilizar comunicao via mdulo Bluetooth:
o 1 Ligar chave na base do rob Spider;
o 2 Conectar e ligar fonte de alimentao.
Sequncia caso ocorra desacoplamento do giro do brao:
o Posicionar Rob Spider na posio 180
o Abaixar aba da base onde se encontra o display
o Realizar reaperto do parafuso central
Valores da tabela ASCII para controle autnomo
o Via Arduino Monitor
Alt + 7 = 149
Alt + 21 = 167
Alt + 32 a 126 = (X=X)
Alt + 169 = 174
o Via software X-CTU
FN + Delete = 3
Enter = 13
Alt + 21 = 167
Alt + 32 a 126 = (X=X)
Alt + 169 = 174
114
9 ANEXOS
ANEXO A INTERFACE DE CONFIGURAO DO DISPLAY JHD-162A
Entradas display JHD-162A.
115
ANEXO B ESQUEMTICO DA PLATAFORMA ARDUINO DUEMILANOVE
Esquemtico Arduino.
116
ANEXO C MICROCONTROLADOR ATMEGA 328 - ENTRADAS E SADAS
Microntrolador Atmega 328.
117
ANEXO D - MICROCONTROLADOR ATMEGA 328 DIAGRAMA DE BLOCOS
Diagrama Microcontrolador ATMEGA.