projeto e implementaÇÃo de um robÔ do...

49
UNIVERSIDADE SÃO FRANCISCO Engenharia de Computação FÁBIO A. A. COELHO PROJETO E IMPLEMENTAÇÃO DE UM ROBÔ DO TIPO PÊNDULO INVERTIDO MÓVEL Itatiba 2012

Upload: tranmien

Post on 07-Oct-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

UNIVERSIDADE SÃO FRANCISCOEngenharia de Computação

FÁBIO A. A. COELHO

PROJETO E IMPLEMENTAÇÃO DE UM ROBÔ DO TIPO PÊNDULO INVERTIDO MÓVEL

Itatiba2012

UNIVERSIDADE SÃO FRANCISCOEngenharia de Computação

FÁBIO A. A. COELHO

PROJETO E IMPLEMENTAÇÃO DE UM ROBÔ DO TIPO PÊNDULO INVERTIDO MÓVEL

Itatiba2012

Monografia apresentada ao Curso de Engenharia de Computação da Universidade São Francisco, como requisito parcial para obtenção do título de Bacharel em Engenharia de Computação.

Orientador: Prof. Dr. Claudio K. Umezu

Agradecimentos

Inicialmente agradeço ao meu orientador, Claudio K. Umezu, pela plena disponibilidade

em me ajudar e pelo apoio para a conclusão de mais esta fase.

Agradeço, também, a minha namorada Juliana pelo apoio e pela companhia carinhosa

durante estes longos anos. Ao meu irmão Reginaldo por me mostrar, mesmo que de formas

confusas, a diferença entre o caminho fácil e o caminho que deve traçado.

E de maneira imensurável agradeço meus pais; “Seu Détinho” por me oferecer toda

solidez e segurança e me mostrar o que é ser um “grande” homem, e a “Dona Dêga” (in

Memoriam) que fez valer cada significado possível da palavra “mãe” e, através da incerteza

do amanhã, me ajudou a perceber o valor de cada hoje.

“O pior naufrágio é não partir.”

Amyr Klink

Resumo

O modelo apresentado sob a forma de um pêndulo invertido oferece, devido à sua

natureza essencialmente instável, um desafio interessante para o projeto de um sistema de

controle. E fugindo de sua aplicação conhecidamente acadêmica pode-se encontrar o mesmo

modelo em diversos usos práticos e sofisticados atualmente. como por exemplo, em sistemas

de controle de lançamento de foguetes e em sistemas de estabilidade de guindastes de grande

porte. Este projeto vislumbra, utilizando-se da plataforma Arduino, projetar e implementar um

modelo de pêndulo invertido, representado por um robô de duas rodas capaz de se manter

equilibrado através de um sistema de controle implementado com a técnica PID.

Palavras-chave: Pêndulo, invertido, Arduino, Robô, Controle, PID.

Abstract

The model presented in the form of an inverted pendulum offers due to its unstable

nature essentially, an interesting challenge for the design of a control system. And running

your application knowingly academic can find the same model in various practical uses and

sophisticated nowadays. for example, in control systems for rockets and stability systems of

large cranes. This project envisions, using the Arduino platform, design and implement a

model of inverted pendulum, represented by a two-wheeled robot able to remain balanced

through a control system implemented with the technical PID.

Keywords: Pendulum, inverted, Arduino, Robot Control, PID.

LISTA DE ILUSTRAÇÕES

Ilustração 1: Exemplo de sensores............................................................................................16Ilustração 2: Exemplo de atuadores..........................................................................................17Ilustração 3: Sistema em malha aberta......................................................................................19Ilustração 4: Sistema em malha fechada...................................................................................20Ilustração 5: Funcionamento PID.............................................................................................20Ilustração 6: Atuação da parte proporcional na saída................................................................21Ilustração 7: Atuação da parte integral na saída........................................................................22Ilustração 8: Atuação da parte derivativa na saída....................................................................23Ilustração 9: Modelos de pêndulo invertido..............................................................................24Ilustração 10: Circuito Ponte H.................................................................................................25Ilustração 11: Funcionamento PWM 1......................................................................................26Ilustração 12: Funcionamento do PWM 50%...........................................................................26Ilustração 13: Funcionamento do PWM 30%...........................................................................27Ilustração 14: Microcontrolador................................................................................................28Ilustração 15: Arduino UNO.....................................................................................................29Ilustração 16: Servos.................................................................................................................30Ilustração 17: Desenho inicial do robô.....................................................................................32Ilustração 18: Desenho final do chassi......................................................................................32Ilustração 19: Montagem servos no chassi...............................................................................33Ilustração 20: Montagem dos circuitos.....................................................................................33Ilustração 21: Esquema de ligação da ponte H.........................................................................34Ilustração 22: Esquema de ligação do sensor de aceleração.....................................................34Ilustração 23: Fluxo do programa.............................................................................................35

LISTA DE SIGLAS

CAD

CC

CI

CPU

EPROM

GPL

GPS

ICSP

PID

PWM

RAM

RIA

USB

Computer-aided Design - Desenho auxiliado por computador

Corrente continua

Circuito Integrado

Central Processing Unit - Unidade central de processamento

Erasable Programmable Read-Only Memory - Memória programável

apagável somente de leitura

General Public License - Licença Pública Geral

Global Positioning System - Sistema de Posicionamento Global

In-Circuit Serial Programming - Programação Serial No Circuito

Proporcional Integral Derivativo

Pulse Width Modulation - Modulação por Largura de Pulso

Random Access Memory - Memória de acesso aleatório

Robotics Industries Association - Associação das indústrias da robótica

Universal Serial Bus

LISTA DE TABELAS

Tabela 1: Características do Arduino UNO...............................................................................30

SUMÁRIO

1 INTRODUÇÃO.....................................................................................................................111.1 Objetivo..........................................................................................................................111.2 Metodologia....................................................................................................................11

2 ROBÓTICA...........................................................................................................................132.1 História...........................................................................................................................132.2 Definição – O que é um robô.........................................................................................142.3 Tipos e classificação dos robôs......................................................................................142.4 Sensores..........................................................................................................................162.5 Atuadores........................................................................................................................16

3 CONTROLE DE SISTEMAS................................................................................................183.1 Introdução.......................................................................................................................183.2 História...........................................................................................................................183.3 Objetivos .......................................................................................................................193.4 Sistemas em malha aberta..............................................................................................193.5 Sistemas em malha fechada............................................................................................203.6 Controladores PID..........................................................................................................20

4 O PÊNDULO INVERTIDO...................................................................................................245 PROJETO...............................................................................................................................25

5.1 Ponte H...........................................................................................................................255.2 PWM..............................................................................................................................265.3 Microcontrolador............................................................................................................275.4 Arduino...........................................................................................................................28

5.4.1 Arduino UNO.........................................................................................................295.4.2 Características ........................................................................................................30

5.5 Servomotor.....................................................................................................................306 IMPLEMENTAÇÃO.............................................................................................................317 REFERÊNCIAS BIBLIOGRÁFICAS...................................................................................378 APÊNDICES..........................................................................................................................39

1 INTRODUÇÃO

A cada ano surgem diversas inovações tecnológicas nas mais diversas áreas de pesquisa.

Estas inovações aplicadas ao estudo e desenvolvimento de novos robôs permitem que o

homem consiga construir dispositivos eletromecânicos capazes de imitar, e muitas vezes

superar, movimentos e habilidades motoras de animais e até mesmo do próprio homem.

Porém, mesmo com o contínuo avanço da tecnologia, existem ainda certas áreas da

robótica pouco evoluídas quando comparadas às capacidades intrínsecas de grande parte dos

seres vivos. Pode-se citar, por exemplo: visão, sensibilidade tátil, estabilidade e equilíbrio,

entre outras...

Buscando um maior aprofundamento na questão levantada sobre a lenta evolução dos

robôs dotados de equilíbrio e estabilidade, este trabalho apresenta a pesquisa e o estudo

envolvidos nos processos de projeto e implementação de um robô móvel de 2 rodas, do tipo

pêndulo invertido, com um sistema de controle de equilíbrio dinâmico.

1.1 Objetivo

O objetivo deste projeto foi desenvolver um estudo em diversas áreas das ciências

exatas e tecnológicas, tais como: física, mecânica, eletrônica, afim de coletar informações

suficientes para o projeto e para a implementação de um robô móvel do tipo pêndulo

invertido, capaz de se manter equilibrado sobre 2 rodas, utilizando como base eletrônica o

hardware livre Arduino e um sensor do tipo acelerômetro.

1.2 Metodologia

Com o intuito de alcançar o conhecimento necessário para a implementação final do

robô, inicialmente, foi realizada uma intensa pesquisa bibliográfica. Deve-se ressaltar ainda

que durante todo o decorrer do projeto houveram conhecimentos absorvidos, através de novas

leituras, visando o constante aprimoramento da ideia inicial.

11

Após a consolidação de um bom embasamento teórico, seguiu-se a etapa do projeto

mecânico e eletrônico. Nesta etapa foram realizadas algumas pesquisas de mercado para se

obter mais informações sobre os produtos e materiais que seriam de fato empregados no

modelo final.

Foram adquiridas as peças que ofereceram o melhor equilíbrio entre valor e qualidade.

As principais foram o sensor de aceleração(acelerômetro), 2 motores de corrente continua,

uma bateria para suprir o sistema, circuitos integrados de ponte H entre outras minorias como

rodas, chapas de acrílico(para o chassi), conexões e etc.

Com a aproximação entre teoria e prática, partiu-se para o desenho do robô. Aqui,

baseando no materiais adquiridos e com o auxilio de softwares de CAD, pretendeu-se

desenvolver um modelo tridimensional já dotado das proporções desejadas para o protótipo

final.

Utilizando o modelo tridimensional como um guia, partimos para o próximo passo

então, iniciar a etapa da implementação prática, montando, assim, toda a estrutura mecânica e

eletrônica do projeto.

Com o “corpo” já devidamente montado e testado foi possível iniciar a modelagem

matemática do sistema. Baseando-se no modelo matemático obtido, deu-se início à etapa de

programação do software que é responsável por fazer todo o interfaceamento entre o sensor de

aceleração e os motores do robô.

Ou seja, nesta etapa foi desenvolvido o código a ser executado no microcontrolador do

Arduino, recebendo, processando e emitindo os sinais responsáveis pelo “equilíbrio” do

corpo.

12

2 ROBÓTICA

2.1 História

A humanidade sempre mostrou certo fascínio, desde tempos pré-históricos, por seres

extraordinários, homens mecânicos, e outras criaturas que, em geral, nunca passaram de

fantasias. Antigos sacerdotes egípcios construíram os primeiros braços mecânicos, os quais

eram colocados em estatuas de deuses que pretendiam estar atuando sobre a direta inspiração

do deus representado, sem dúvida, para impressionar o povo com o poder desse deus.[1]

Durante toda sua história o homem utilizou-se de ferramentas e utensílios para

conseguir realizar diversas tarefas de maneira mais rápida, mais segura, menos trabalhosa, etc.

Para a civilização ocidental, o conceito de evolução humana está associado diretamente

ao grau de desenvolvimento tecnológico adquirido ao longo do tempo, através do

aperfeiçoamento desses objetos. Portanto a motivação de se criarem máquinas que possam

substituir o homem na realização de tarefas é uma característica da própria cultura ocidental.

A primeira referência explícita a esse conceito foi escrita por Aristóteles(século IV AC):”Se os

instrumentos pudessem realizar suas próprias tarefas, obedecendo ou antecipando o desejo de

pessoas...”[2]

Entretanto a idéia de se construir robôs só começou a tomar força no início do século

XX com a necessidade de aumentar a produtividade e melhorar a qualidade dos produtos. É

nesta época que o robô industrial encontrou suas primeiras aplicações, o pai da robótica

industrial foi George Devol. Atualmente devido aos inúmeros recursos que os sistemas de

microcomputadores nos oferece, a robótica atravessa uma época de contínuo crescimento que

permitirá, em um curto espaço de tempo, o desenvolvimento de robôs inteligentes fazendo

assim a ficção do homem antigo se tornar à realidade do homem atual. [2]

13

2.2 Definição – O que é um robô

A palavra “robot” surgiu no ano de 1921 durante uma peça de teatro de Karel Capek,

durante a peça, seres artificiais de aparência humana chamados de “Robota” obedeciam

ordens de seu professor e realizavam os trabalhos mais pesados. A palavra “robot” deriva,

então, da original “robota”, que no idioma eslavo pode ser traduzido como um trabalho

exercido de forma compulsória.

Existem diversas e muito variadas definições sobre o que é um robô. Uma definição

supostamente “oficial” do termo robô foi estabelecida pela Associação das Indústrias da

Robótica(RIA): Um robô industrial é um manipulador reprogramável, multi-funcional,

projetado para mover materiais, peças, ferramentas ou dispositivos especiais em movimentos

variáveis programados para a realização de uma variedade de tarefas.

Será analisado posteriormente que, do ponto de vista de um conceito amplo do termo

robô, essa definição corresponderia apenas à uma classe especifica de robôs, precisamente os

robôs manipuladores. [1]

2.3 Tipos e classificação dos robôs

Segundo GOMIDE [14], pode-se enquadrar os robôs em 4 categorias:

Robôs Inteligentes: são manipulados por sistemas multifuncionais controlados por

computador, são capazes de interagir com seu ambiente através de sensores e de tomar

decisões em tempo real. Atualmente grandes esforços são dedicados ao desenvolvimento

desse tipo de robô.

Robôs com controle por computador: embora sejam semelhantes aos robôs

inteligentes, não possuem a capacidade de interagir com o ambiente.

14

Robôs de aprendizagem: Se limitam a repetir uma seqüência de movimento

memorizados ou realizados com a intervenção de um operador

Manipuladores: são constituídos de sistemas mecânicos multifuncionais que possuem

um sistema de controle sensível, o qual permite governar o movimento de seus

membros das seguintes formas:

a) manual: que ocorre quando o operador controla diretamente os movimentos;

b) de seqüência variável, quando algumas características do ciclo de trabalho são

possíveis de alterar.

GOMIDE [14], afirma ainda que a realização da classificação dos robô do ponto de

vista do controle de seus movimentos, pode ser extremamente interessante se admitida as

seguintes configurações:

1. Sem controle-servo: é o programa que controla o movimento dos diferentes

componentes do robô e se realiza em um posicionamento conhecido como "ponto-a-

ponto" no espaço.

2. Com controle-servo: este tipo de controle permite duas formas de trabalho, sendo:

a) controle dos movimentos dos membros do robô em função de seus eixos,

neste caso os movimentos podem ser realizados com trajetória contínua ou

ponto-a-ponto.

b) os movimentos se estabelecem da respectiva posição de seus eixos de

coordenada e da orientação da mão ferramenta do robô.

15

2.4 Sensores

De acordo com Filho [11], o uso de sensores permite que um robô possa obter

informação sobre ele mesmo e sobre seu ambiente com a finalidade de realizar a operação

para a qual foi destinado, além de poder modificá-la de acordo com tal informação. Os

sensores podem ser agrupados em duas categorias principais: sensores internos ou

propioceptivos, que fornecem informação sobre as variáveis do próprio robô, e sensores

externos ou extereoceptivos, cujo objetivo é obter informação do ambiente ao redor do robô.

Exemplos: Sensores ultrasônicos de distância, sensor de luz, sensor de temperatura, sensor

óptico de posição e etc.

2.5 Atuadores

Um atuador é um mecanismo, ou um conjunto de mecanismos, que converte algum tipo

de energia em movimento mecânico. Os três tipos de energia mais comuns para acionar os

atuadores de um robô são:

Pneumática

Elétrica

Hidráulica

16

Ilustração 1: Exemplo de sensores

Os atuadores hidráulicos possuem alto torque e velocidade de resposta, sendo

adequados para atuar sobre cargas pesadas. Entretanto requerem equipamentos periféricos,

como bombas, o que implica na necessidade de manutenção frequente, além de gerar grande

ruído. Os atuadores pneumáticos são mais baratos e simples, entretanto, não podem ser

controlados com precisão. Atualmente os motores elétricos, CA ou CC, são os mais atrativos

para serem empregados em robótica, devido a que são mais baratos e silenciosos. [11]

17

Ilustração 2: Exemplo de atuadores

3 CONTROLE DE SISTEMAS

3.1 Introdução

Um sistema de controle, é um dispositivo ou um grupo de dispositivos que gerenciam o

comportamento de outros dispositivos. [8]

3.2 História

O primeiro trabalho significativo envolvendo um sistema de controle foi o regulador

centrífugo construído por James Watt para o controle de velocidade de uma máquina a vapor,

no século XVIII. [7]

A teoria de sistemas de controle começou a ser formalizada na segunda metade do

século XIX. Até então os sistemas de controle automático eram desenvolvidos através da

intuição e invenção.

1868 - Maxwell - Publicou um artigo analisando o comportamento dinâmico dos

sistemas de controle.

1877 - Routh e Hurwitz - Análise da estabilidade sem a necessidade da solução de

equações.

1922 - Minorsky - construiu controladores automáticos para pilotagem de

embarcações e demonstrou como a estabilidade poderia ser determinada a partir de

equações diferenciais que descrevem o sistema. [7]

1932 - Nyquist - desenvolveu um procedimento relativamente simples para a

determinação da estabilidade de sistemas de malha fechada com base na resposta de

malha aberta a excitações senoidais estacionárias.

18

1934 - Hazrn - introduziu o termo servomecanismos para sistemas de controle de

posição.

3.3 Objetivos

O objetivo buscado ao se utilizar um sistema de controle é o de fazer com que uma

variável do sistema assuma um valor desejado(referência, comando) por meio de uma ação no

sistema. [7]

No caso em estudo, o robô de pêndulo invertido, a função do sistema de controle é

manter o ângulo, formado entre o chassi do robô e o chão, o mais próximo possível de 90º.

Resistindo às interferências externas ao sistema, utilizando, para isso, o torque aplicados às

rodas através dos motores.

3.4 Sistemas em malha aberta

Os sistemas de controle de malha aberta são aqueles em que o sinal de saída não exerce

nenhuma ação de controle no sistema. Isso quer dizer que em um sistema de controle de

malha aberta o sinal de saída não é medido nem realimentado para comparação com a entrada.

[7]

19

Ilustração 3: Sistema em malha aberta

3.5 Sistemas em malha fechada

Os sistemas de controle com realimentação são, com frequência, denominados também

sistemas de controle de malha fechada.

Em um sistema de controle de malha fechada, o sinal de erro atuante, que é a diferença

entre o sinal de entrada e o sinal de realimentação, realimenta o controlador, de modo que

minimize o erro e acerte a saída do sistema ao valor desejado. [7]

3.6 Controladores PID

Controladores do tipo Proporcional, Integral e Derivativo, comumente denominados de

PID, são largamente utilizados no cenário industrial. Segundo Aströn [9], entre 90 e 95% dos

problemas de controle são solucionados empregando tais controladores, podendo considerá-

los como “o pão e a manteiga” da engenharia de controle. Tal utilização deve-se ao fato deste

controlador ser facilmente implementável, de baixo custo e versátil com capacidade de alterar

os comportamentos transitório e de regime permanente dos processos sob controle.

20Ilustração 5: Funcionamento PID

Ilustração 4: Sistema em malha fechada

A fórmula do PID é dada por:

Onde:

u(t) é a saída em relação ao tempo

e(t) é a entrada menos o erro em relação ao tempo

Kp é a constante proporcional

Ki é a constante integral

Kd é a constante derivativa

Proporcional

Função:

Essa função do controlador PID produz um valor na saída proporcional ao erro obtido

na Realimentação. A resposta proporcional pode ser ajustada a partir da constante de ganho

Kp. Quanto maior a constante Kp, maior será o ganho do erro e mais instável será o sistema.

Mas se a constante Kp for muito pequeno, menor será o seu tempo de resposta. A ilustração

abaixo mostra um gráfico com uma entrada (linha azul) e as saídas com Kp de vários valores:

[10]

21

Ilustração 6: Atuação da parte proporcional na saída

Integral

Função:

A função integral soma todos os erros instantâneos e a somatória é multiplicada pela

constante Ki. A função integral do controlador PID acelera o movimento do processo até o

ponto desejado e elimina o erro que ocorre na função anterior. Como a função soma dados

instantâneos, o resultado do processo pode ultrapassar o ponto desejado. Essa consequência se

chama "overshoot". A ilustração abaixo mostra um gráfico com uma entrada (linha azul) e as

saídas com Ki de vários valores: [10]

Derivativa

Função:

A função derivativa retarda a taxa de variação de saída do controlador. Essa função

diminui o "overshoot" da função anterior e melhora a estabilidade do controlador. Por outro

22

Ilustração 7: Atuação da parte integral na saída

lado, a função derivativa causa um retardo na resposta e é muito suscetível à ruídos. Isto

acontece porque essa função amplifica o ruído e caso o ruído e o ganho Kd forem muito

grandes, podem causar instabilidade no controlador. A ilustração abaixo mostra um gráfico

com uma entrada (linha azul) e as saída geradas pela função: [10]

23

Ilustração 8: Atuação da parte derivativa na saída

4 O PÊNDULO INVERTIDO

O pêndulo invertido é um mecanismo com característica dinâmica intrinsecamente

instável e representa uma plataforma útil para o estudo de muitos outros mecanismos

complexos. Uma analogia simples é a brincadeira de equilibrar um lápis ou um cabo de

vassoura na ponta dos dedos. Para conseguir uma condição relativamente estável é necessário

ficar constantemente movendo a mão de forma a manter o eixo do cabo de vassoura nas

proximidades da sua posição vertical. [4]

A razão pela qual esse sistema é de interesse para estudos do ponto de vista da

tecnologia de controle, é que ele ilustra as dificuldades práticas associadas com aplicações de

sistemas de controle no mundo real. Por exemplo, o modelo resultante é muito similar aos

usados para estabilização de foguetes em vôo, no posicionamento de guindastes especiais, etc.

[4]

No caso específico deste trabalho, o pêndulo invertido apresenta-se na forma de um

robô de duas rodas e estrutura ligeiramente alta. O sistema de controle executado pelo

microcontrolador do Arduino se encarregará de, através da movimentação das rodas, manter o

chassi do robô sempre na posição vertical. Representando, assim, o conceito de equilíbrio.

24

Ilustração 9: Modelos de pêndulo invertido

5 PROJETO

5.1 Ponte H

Ponte H é um circuito eletrônico que serve como auxiliar quando pretende-se controlar

um motor CC através de um microcontrolador. Este circuito faz-se necessário uma vez que o

microcontrolador, em geral, não consegue fornecer a quantidade de corrente adequada para o

funcionamento do motor.

Em sua montagem mais básica, ou seja, sem componentes extras para fornecer uma

maior segurança tanto ao microcontrolador quanto ao motor, o circuito é montado utilizando-

se quatro “chaves”. Estas chaves podem ser qualquer componente eletrônico que simule um

circuito liga-desliga (transistores, relés e etc).

Supondo que as chaves sejam S1, S2, S3 e S4 como apresentado na imagem abaixo. O

acionamento de duas delas, alternadamente(S1 e S3 ou S2 e S4), pelo microcontrolador

determina para qual sentido o motor deve girar.

25

Ilustração 10: Circuito Ponte H

5.2 PWM

A sigla PWM é uma abreviação de Pulse Width Modulation que é traduzido como

Modulação por Largura de Pulso. Através desta técnica de modulação será possível controlar

a velocidade dos motores do robô.

O PWM funciona baseado na razão cíclica(duty cycle) do sinal em uma transmissão

com frequência constante, ou seja, o quanto de tempo de sinal 1 (ligado) foi aplicado por

ciclo. [5]

Nas ilustrações acima vê-se os sinais ligado e desligado sendo aplicados na mesma

proporção de tempo, t1 e t2. Ou seja, durante metade do ciclo o sinal ligado, que equivale a

6v, é aplicado e na outra metade do ciclo o sinal de 0v é aplicado. Com isso, obtêm-se no final

do ciclo o sinal equivalente a média dos sinais aplicados, 3V.

26

Ilustração 11: Funcionamento PWM 1

Ilustração 12: Funcionamento do PWM 50%

Neste caso a proporção temporal, ou razão cíclica, é de 30% ligado e 70% desligado.

Gerando, desta forma, o equivalente a 1,8V como saída. Que é obtido através da

multiplicação simples entre o tempo de sinal ligado e seu valor: 6V * 0,3 = 1,8V

5.3 Microcontrolador

Um microcontrolador é um CI (Circuito Integrado) que possui internamente um

microprocessador e todos os componentes periféricos essenciais ao seu funcionamento, como:

Memória de programa – geralmente uma memória do tipo EPROM (memória

apagável de somente leitura), onde serão armazenadas as informações de programa, ou

seja, o que o microprocessador deve executar; [3]

Memória de dados – geralmente uma memória do tipo RAM (memória de acesso

randômico), onde ficarão armazenadas as informações de dados que o programa ira

utilizar, geralmente é utilizada para guardar um valor ou um flag; [3]

Dispositivo de seleção de entrada e saída – faz a comunicação das posições de

memória com os pinos externos do microcontrolador; [3]

Temporizadores e Contadores – utilizados para contar tempo ou contar eventos; [3]

27

Ilustração 13: Funcionamento do PWM 30%

Clock – em alguns microcontroladores o gerador de sinal de clock é também acoplado

ao microprocessador dentro do CI, ele tem a função de sincronizar todos os eventos de

um circuito digital; [3]

Dispositivo controlador de interrupção – como o nome já diz, é este componente que

controla os pedidos de interrupção para a CPU. [3]

5.4 Arduino

Arduino é uma plataforma de prototipagem eletrônica de hardware livre, projetada com

um microcontrolador Atmel AVR de placa única, com suporte de entrada/saída embutido e

uma linguagem de programação padrão, a qual é essencialmente C/C++. [13]

O objetivo do projeto é criar ferramentas que são acessíveis, com baixo custo, flexíveis

e fáceis de se usar por artistas e amadores. [13]

De modo geral essa plataforma oferece muitas vantagens para os desenvolvedores que a

escolhem, contudo sua principal vantagem é que utiliza linguagem de programação de alto

nível.

28

Ilustração 14: Microcontrolador

Além do desenvolvimento contínuo da plataforma, alguns fabricantes montam, e

disponibilizam para compra, módulos para Arduino que realizam operações específicas, tais

como adaptador wireless, adaptador de rádio frequência, módulo de Global Positioning

System (GPS) entre outros.

Logo, optou-se pela utilização do Arduino como controlador no projeto. Ele será

responsável por toda a captação dos sinais fornecidos pelo sensor, seus devidos

processamentos e, também, pela emissão de sinais de comando aos atuadores, neste caso os

motores CC presentes nos servos.

5.4.1 Arduino UNO

Devido a ser a última versão comercial lançada no momento será ela, então, empregada

no projeto. O Arduino UNO (“um” em italiano) é uma placa de microcontrolador baseado no

microcontrolador ATmega328 da Atmel Corporation. Ele possui 14 pinos de entrada/saída

digital, dos quais 6 podem ser usados como saídas PWM. Além de 6 entradas analógicas, um

cristal oscilador de 16MHz, uma conexão Universal Serial Bus (USB), uma entrada de

alimentação uma conexão In-Circuit Serial Programming (ICSP) e um botão de reset. Ele

contém todos os componentes necessários para suportar o microcontrolador, necessitando

apenas de uma fonte de alimentação externa ou através da conexão USB. [14]

29

Ilustração 15: Arduino UNO

5.4.2 Características

Microcontrolador ATmega328

Tensão Operacional 5V

Tensão de entrada (recomendada) 7-12V

Tensão de entrada (limites) 6-20V

Pinos E/S digitais 14 (dos quais 6 podem ser saídas PWM)

Pinos de entrada analógica 6

Corrente CC por pino E/S 40 mA

Corrente CC para o pino 3,3V 50 mA

Flash Memory 32 kB (ATmega328) dos quais 0,5KB são utilizados pelo bootloader

SRAM 2 kB (ATmega328)

EEPROM 1 kB (ATmega328)

Velocidade de Clock 16 MHz

Tabela 1: Características do Arduino UNO

5.5 Servomotor

Servomotor é uma máquina, mecânica ou eletromecânica, que apresenta movimento

proporcional a um comando, em vez de girar ou se mover livremente sem um controle mais

efetivo de posição como a maioria dos motores; servomotores são dispositivos de malha

fechada, ou seja: recebem um sinal de controle; verificam a posição atual; atuam no sistema

indo para a posição desejada.[6]

30

Ilustração 16: Servos

Os servomotores foram escolhidos para substituir os motores DC comuns, propostos

inicialmente, por já possuírem uma caixa de redução integrada, oferendo um maior torque e

uma menor velocidade, ideal para o projeto. Eles foram modificados para que funcionassem

independentes do seu sistema de controle de posição interno. Para isso, foram feitos ajustes

nas ligações eletrônicas e também nas peças plásticas. Dessa forma conseguiu-se controlá-los

pelo Arduino como se fossem motores comuns, e também , que seus eixos façam giros livres e

contínuos de 360º.

6 IMPLEMENTAÇÃO

Buscando a melhor implementação possível do projeto apresentado, optou-se por

comprar todas a peças inicialmente, com isso, o desenho do chassi seria feito levando em

consideração o perfeito encaixe entre as partes.

Foram adquiridos os seguintes componentes:

1 - Placa Arduino UNO.

1 – Shield de sensor de aceleração

1 – Ponte H L298n

1 – Bateria 9v

1 – Placa de contatos

Além de materiais diversos, como cabos e parafusos que se fizeram necessários no

decorrer da montagem.

Com os componentes já em mãos, o chassi foi desenhado de forma a oferecer um base

de fixação, um centro de gravidade levemente elevado em relação ao eixo e um formato

simples, uma vez que, seria moldado em acrílico.

31

Após uma analise mais lógica o chassi recebeu pequenas modificações que manteriam

seus seus principais objetivos mas que iriam ajudar reduzindo seu peso e ,consequêntemente,

o torque exigido dos motores para ajustar seu ângulo de inclinação.

Com isso, chegou-se a versão final do desenho, que, por sua vez, foi enviado a uma

oficina especializada em polímeros para a produção.

32

Ilustração 17: Desenho inicial do robô

Ilustração 18: Desenho final do chassi

Os servos, já modificados para giro livre, foram instalados inicialmente para que

pudessem ser calibrados e ajustados visando o máximo alinhamento.

Com o alinhamento realizado, partiu-se para a montagem dos demais componentes e a

ligação dos circuitos empregados.

33

Ilustração 19: Montagem servos no chassi

Ilustração 20: Montagem dos circuitos

O shield do acelerômetro e o circuito de ponte h foram ligados obedecendo os seguintes

esquemas:

34

Ilustração 21: Esquema de ligação da ponte H

Ilustração 22: Esquema de ligação do sensor de aceleração

Com tudo montado e testado passou-se a escrever o código que seria executado pelo

Arduino e iria reger o funcionamento de todo o sistema.

Para o cálculo PID foi utilizada a biblioteca BR3TTB Arduino PID Library, na versão

1.1.0. Está biblioteca é distribuída sob a licença GNU GPLv3 (General Public License) e é a

mais conhecida e recomendada atualmente para este objetivo com o Arduino.

O código foi escrito seguindo o seguinte fluxograma:

35

Ilustração 23: Fluxo do programa

7 CONCLUSÃO

Quando se fala de sistema de controle é inegável as suas diversas aplicações e a

importância de sua existência e do seu correto funcionamento nos tempos atuais.

O objetivo deste trabalho foi projetar e implementar um robô capaz de representar e

controlar um sistema de pêndulo invertido, explorando os recursos oferecidos pela plataforma

Arduino e utilizando a técnica de controle PID. Este objetivo foi alcançado.

Durante sua implementação, encontrou-se maior dificuldade para o perfeito

funcionamento na etapa de sintonia dos parâmetros PID.

Como extensão para o trabalho, pode-se sugerir a melhoria na sintonia do controle PID

buscando parâmetros mais justos ao modelo. Além da integração de um módulo bluetooth,

dos vários oferecidos em formato shield Arduino, para controle remoto da direção do robô.

36

7 REFERÊNCIAS BIBLIOGRÁFICAS

[1] PAZOS, Fernando.; Automação de sistemas e robótica. Rio de Janeiro: Axcel Books,

2002.

[2] ROMANO, Vitor Ferreira. Robótica industrial: aplicação na indústria de manufatura

e de processos. São Paulo: E. Blücher, 2002.

[3] REIS, Wagner dos. O Microcontrolador e suas características. Disponível em:

<http://www.angelfire.com/sc/wagner/Microcontroladores.html>. Acesso em: 26 de maio de

2012.

[4] RIBEIRO, R. Implementação de um sistema de controle de um pêndulo invertido.

2007. 86 f. Dissertação (Mestrado em Engenharia Elétrica) – Universidade Federal de Itajubá,

Itajubá. 2007.

[5] Entenda o PWM - PNCA Robótica e Eletrônica. Disponível em

<http://www.pnca.com.br>. Acesso em: 02 de agosto de 2012.

[6] Servomotor. Disponível em <http://pt.wikipedia.org/wiki/Servomotor>. Acesso em: 01

de agosto de 2012.

[7] OGATA, Katsuhiko; Engenharia de Controle Moderno. São Paulo: Pearson Education

do Brasil, 2011;

[8] Sistema de controle. Disponível em <http://pt.wikipedia.org/wiki/Sistema_de_controle>.

Acesso em: 01 de agosto de 2012.

[9] ASTRON, K. J. , HAGGLUND, T. PID Control IN PEREIRA, Luis F. A. , HAFFNER,

José, F. Controladores do tipo Proporcional, Integral e Derivativo - Pontifícia

Universidade Católica do Rio Grande do Sul. Disponível em:

<http://www.feng.pucrs.br/~gacs/new/disciplinas/psc_CN/apostilas/Aula6_2007II.pdf>.

37

Acesso em: 02 de setembro de 2012.

[10] Controlador PID (Proporcional-Integral-Derivativo) - Laboratório de Garagem.

Disponível em: <http://labdegaragem.com/profiles/blogs/artigo-controlador-pid-proporcional-

integral-derivativo-parte-1>. Acesso em: 08 de setembro de 2012.

[11] FILHO, Teodiano, F. B. Aplicação de Robôs nas Indústrias - Departamento de

Engenharia Elétrica Universidade Federal do Espírito Santo. Disponível em:

<www2.ele.ufes.br/~tfbastos/RobMov/robosindustriais.pdf>. Acesso em: 15 de setembro de

2012.

[12] GOMIDE, Fernando Antônio Campos; GUDWIN, Ricardo Ribeiro. Modelagem,

Controle, Sistemas e Lógica Fuzzy. Artigo publicado na SBA Controle & Automação, Vol. 4

no 3. São Paulo. 1994.

[13] ARDUINO. Disponível em: <http://arduino.cc/>. Acesso em: 21 de setembro de 2012.

[14] ARDUINO UNO – Multilógica Opens Source Hardware. Disponível em:

<http://multilogica-shop.com/Arduino-Uno>. Acesso em: 21 de setembro de 2012.

38

8 APÊNDICES

Código fonte do programa

#include <PID_v1.h>

//Pinos START

int pinoMotorEsquerdoA = 3;

int pinoMotorEsquerdoB = 5;

int pinoMotorDireitoA = 9;

int pinoMotorDireitoB = 10;

int pinoY = A0;

//Pinos END

//Parâmetros START

int quantidadeLeiturasMedia = 3;

int intervaloEntreLeituras = 0;

int tolerancia = 0;

//Parâmetros END

39

//Variáveis globais START

int zeroConsiderado = 0;

int sentidoVariacao = 1;

double valorY = 0;

double valorYKILL = 130;

int pwmAplicarMotores = 0;

int pwmAnterior = 0;

int sentidoVariacaoAnterior = 1;

//Variáveis globais END

//PID

double Setpoint = 0;

double Input = 0;

double Output;

double kp = 3.15;

40

double ki = 0.1;

double kd = 0.7;

PID myPID(&Input, &Output, &Setpoint, kp, ki, kd, DIRECT);

///

int leituraMedia(int zeroConsiderado = 0) {

int valorMedio = 0;

int valorLeiturasAcumulado = 0;

int con;

for(con =0; con < quantidadeLeiturasMedia; con++) {

valorLeiturasAcumulado = valorLeiturasAcumulado + analogRead(pinoY);

delay(intervaloEntreLeituras);

}

41

valorMedio = (valorLeiturasAcumulado / quantidadeLeiturasMedia);

if (valorMedio >= zeroConsiderado) {

valorMedio = valorMedio - zeroConsiderado;

sentidoVariacao = 1;

} else {

valorMedio = zeroConsiderado - valorMedio;

sentidoVariacao = -1;

}

valorMedio = abs(valorMedio);

if (valorMedio < tolerancia) {

valorMedio = 0;

}

42

return valorMedio;

}

void acionaMotorEsquerdo(int sentido = 0, int valor = 255) {

digitalWrite(pinoMotorEsquerdoA, LOW);

digitalWrite(pinoMotorEsquerdoB, LOW);

if (sentido == 1){

analogWrite(pinoMotorEsquerdoB, valor);

} else {

analogWrite(pinoMotorEsquerdoA, valor);

}

}

void acionaMotorDireito(int sentido = 0, int valor = 255) {

43

digitalWrite(pinoMotorDireitoA, LOW);

digitalWrite(pinoMotorDireitoB, LOW);

if (sentido == 1){

analogWrite(pinoMotorDireitoB, valor);

} else {

analogWrite(pinoMotorDireitoA, valor);

}

}

void acionaMotores(int sentido = 0, int valor = 255) {

acionaMotorDireito(sentido, valor);

acionaMotorEsquerdo(sentido, valor);

}

44

void pararMotores(int sentidoVariacaoAnterior, int pwmAnterior){

int con = 0;

for ( con = pwmAnterior; con > 0; con--) {

acionaMotores(sentidoVariacaoAnterior, con);

}

}

//Funções default START

void setup() {

Serial.begin(9600);

pinMode(pinoMotorEsquerdoA,OUTPUT);

pinMode(pinoMotorEsquerdoB,OUTPUT);

pinMode(pinoMotorDireitoA,OUTPUT);

pinMode(pinoMotorDireitoB,OUTPUT);

45

pinMode(pinoY,INPUT);

//zeroConsiderado = leituraMedia(0);

zeroConsiderado = 347;

//config PID

Setpoint = 0;

myPID.SetMode(AUTOMATIC);

/////////

}

void loop() {

int con = 0;

46

//antes de serem atualizados pela nova leitura

sentidoVariacaoAnterior = sentidoVariacao;

pwmAnterior = pwmAplicarMotores;

valorY = leituraMedia(zeroConsiderado);

if (valorY >= valorYKILL) {

pararMotores(sentidoVariacaoAnterior, pwmAnterior);

} else {

Input = valorY * -1;

myPID.Compute();

pwmAplicarMotores = Output;

47

if (pwmAplicarMotores < 0) {

pwmAplicarMotores = 0;

}

if (pwmAplicarMotores > 255) {

pwmAplicarMotores = 255;

}

acionaMotores(sentidoVariacao, pwmAplicarMotores);

}

Serial.print(" --- Y - ");

Serial.print(valorY);

48

Serial.print(" === saida: ");

Serial.print(Output);

Serial.print("\n");

}

//Funções default END

49