Você está na página 1de 99

GreenT

Manual de Formao

Escolher Robtica, Escolher Cincia!


Workshop de Robtica Mvel
Ana Lopes * Carlos Ferreira * Gabriel Pires * Paulo Coelho * Pedro Correia * Pedro Neves

Fevereiro de 2015
Instituto Politcnico de Tomar
www.ipt.pt
V3.1

Colaboraram nas atividades do workshop e na realizao deste manual:


Ana Lopes
Carlos Ferreira
Gabriel Pires
Manuel Barros
Paulo Coelho
Pedro Correia
Pedro Neves

V3.1

ndice
Captulo 1 - Introduo ......................................................................................................................... 7

O que um rob?..................................................................................................................... 7
O que a robtica? .................................................................................................................. 8
Fatores a considerar na construo de um Rob........................................................................ 8
Construo da Plataforma ............................................................................................................................. 9
Escolha dos Motores ................................................................................................................................... 10

Captulo 2 - Montagem da estrutura mecnica e motorizao ......................................... 11

Configurao de locomoo .................................................................................................... 12


Fonte de energia .................................................................................................................... 14
Motores e caixa de reduo .................................................................................................... 15
Conversor de potncia (placa do L298) .................................................................................... 16
Modulao por largura de impulso - Pulse Width Modulation (PWM) ...................................... 17
Montagem do Rob................................................................................................................ 20
Instrues de Carregamento das Baterias ............................................................................... 25
Captulo 3 - Programao .................................................................................................................. 28

Arduino para Windows Instalao ........................................................................................ 28


Placa Arduino MEGA 2560 e cabo USB ........................................................................................................ 28
Download do ambiente de desenvolvimento Arduino ............................................................................... 28
Ligao da Placa ........................................................................................................................................... 29
Instalao dos drivers .................................................................................................................................. 29
Abrir o ambiente Arduino ............................................................................................................................ 30
Abrir um exemplo simples ........................................................................................................................... 30
Selecione a placa ......................................................................................................................................... 30
Selecionar a porta srie ............................................................................................................................... 31
Carregar um programa ................................................................................................................................ 31
Gravar um programa ................................................................................................................................... 32

Aspetos da linguagem de programao ................................................................................... 32

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

-3-

Estruturas .................................................................................................................................................... 32
Constantes e variveis ................................................................................................................................. 33
Funes de entrada/sada ........................................................................................................................... 34
Funes de Temporizao ........................................................................................................................... 36
Comunicao Srie ...................................................................................................................................... 37
Funes de entrada/sada - exemplos ......................................................................................................... 38
Fluxogramas ................................................................................................................................................ 40
Controlo de fluxo ......................................................................................................................................... 41
Instrues condicionais ............................................................................................................................... 42
Instrues de ciclo ....................................................................................................................................... 44

Captulo 4 - Sensores ........................................................................................................................... 47


Sensores de Infravermelhos: medio de distncia .................................................................................. 47
Interligao do GP2D120 ao Arduino .......................................................................................................... 49
Leitura do valor analgico do GP2D120 ...................................................................................................... 49
Fotodeteo de linha branca/preta ........................................................................................................... 50
Ligao e leitura do sensor QRD1113 .......................................................................................................... 51
Sensores ultrassons: medio de distncia ................................................................................................ 52
Ligao e leitura do sornar SRF05 ............................................................................................................... 54
Codificador acoplado ao motor .................................................................................................................. 55
Ligao e leitura dos codificadores de odometria ....................................................................................... 56
Servo ............................................................................................................................................................ 58
Programa modelo ciclo de operao ........................................................................................................ 59
Lista resumo dos pinos usados .................................................................................................................... 63
Referncias .................................................................................................................................................. 64

Captulo 5 Estratgia de navegao para micro-robs ..................................................... 65

Introduo O que a navegao de robs? .......................................................................... 65


Principais tcnicas navegao de robs ................................................................................... 66
Tcnicas de seguimento de linha ................................................................................................................ 66
Tcnicas para desvios de obstculos ........................................................................................................... 68
GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao
IPT - 2015 V3.2

-4-

Tcnica dos comportamentos de Brooks (subsumption architecture) ....................................................... 71

Programa Arduino para seguimento de linha .......................................................................... 72


Algoritmo de seguimento de linha .............................................................................................................. 72
Cdigo do programa .................................................................................................................................... 73

Programa Arduino para desvio de obstculos .......................................................................... 76


Algoritmo de desvio de obstculos ............................................................................................................. 76
Cdigo do programa .................................................................................................................................... 76

Referncias ............................................................................................................................ 79
Captulo 6 Competio: Regras e Especificaes Tcnicas .......................................... 80

Introduo ............................................................................................................................. 80
Definies .............................................................................................................................. 80
Os Robs ................................................................................................................................ 80
Dimenses ................................................................................................................................................... 80

A pista ................................................................................................................................... 81
O Sistema de Localizao............................................................................................................................. 81
Piso da Pista ................................................................................................................................................. 81
Linhas ........................................................................................................................................................... 81
Extras do Percurso ....................................................................................................................................... 81
Iluminao ................................................................................................................................................... 82
Campo eletromagntico, vento e outras influncias .................................................................................. 82

Competio ............................................................................................................................ 82
Resoluo de problemas com o rob durante a prova ............................................................................... 83
Vistoria tcnica ............................................................................................................................................ 83
Parque fechado ........................................................................................................................................... 83
Classificao final ......................................................................................................................................... 83

Jri, rbitros e Relgio de contagem do tempo ....................................................................... 84


Jri ............................................................................................................................................................... 84
rbitro ......................................................................................................................................................... 84
Relgio de contagem do tempo .................................................................................................................. 84

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

-5-

Reunio de abertura .................................................................................................................................... 84


Conduta e Segurana ................................................................................................................................... 84

Regulamento da Prova de Seguimento de Linha ...................................................................... 85


Descrio da prova ...................................................................................................................................... 85
Regras da prova ........................................................................................................................................... 85

Regulamento da Prova de Desvio de Obstculos ..................................................................... 87


Descrio da prova ...................................................................................................................................... 87
Regras da prova ........................................................................................................................................... 87

Anexos ....................................................................................................................................................... 91
Esquema de ligao da alimentao ........................................................................................................... 93
Esquema de ligao da alimentao ao Drive Potncia .............................................................................. 94
O shield de sensores do GreenT .................................................................................................................. 95

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

-6-

Captulo 1 - Introduo
Paulo Coelho
No mundo da engenharia a palavra rob tem-se tornado cada vez mais comum. H muitos anos, j
se idealizava a criao de robs. Em 1445, Leonardo da Vinci foi responsvel pelo primeiro esboo de
um rob humanoide, com braos e pernas capazes de se moverem. Mas s em 1921 que a palavra
rob foi popularizada. O termo rob surgiu na pea Checa Rossums Universal Robot, de Karel
Capek, onde existem pessoas artificias que pensam por si prprios e podem at ser confundidos com
humanos. A palavra tcheca robota significa servido ou trabalhador forado e, quando traduzida para
ingls, transformou-se em robot.

O que um rob?
No h uma definio precisa de Rob. Convencionou-se que um rob uma mquina programvel
que imita as aes ou aparncias de uma criatura inteligente, geralmente um humano.
Para que uma mquina seja definida como rob, ela deve ser capaz de:
1) Obter informao acerca do ambiente que a rodeia, por meio de sensores.
2) Realizar diferentes tarefas: Locomoo ou manipulao de objetos
3) Ser reprogramvel para realizar tarefas diferentes.
4) Funcionar de modo autnomo e/ou interagir com seres humanos.
A estrutura funcional de um Rob pretende dar resposta aos trs problemas fundamentais que lhe
so postos:
- Onde Estou?
- Para onde vou?
- Como vou?
Quando um Rob se desloca num determinado ambiente, faz uso dos seus sensores para se localizar
e para identificar os seus objetivos. Atravs dos atuadores poder deslocar-se ou manipular algum
objeto.
Finalmente, estas aes de perceo e de atuao so coordenadas pelo controlador de bordo. A
figura seguinte resume este funcionamento.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

-7-

Figura 1 - Ciclo de funcionamento de um Rob

Os Robs tm sido objeto da imaginao e das fantasias dos seres humanos ao longo dos tempos.
At h bem pouco tempo, a imagem que se tinha deste tipo de dispositivos era a de que se tratavam
de sistemas com uma grande complexidade, de elevado custo, compostos por imensas ligaes
eltricas e controlados por complicados sistemas computorizados.
No entanto, nos ltimos anos, os avanos que se tm verificado na tecnologia dos
microcontroladores, com a diminuio da dimenso e do custo, a contrastar com o aumento de
potencialidades, vem permitir a realizao, de uma forma simples, de um conjunto de sistemas
robticos capazes de desenvolver autonomamente tarefas de alguma complexidade.
de referir que a construo de um Rob no se resume sua programao. Na sua conceo esto
envolvidos um conjunto de conhecimentos inerentes s reas da mecnica, eletrnica, controlo e
programao, que torna este processo um desafio extremamente envolvente.

O que a robtica?
Especificamente, robtica uma rea multidisciplinar altamente ativa, que busca o desenvolvimento
e a integrao de tcnicas e algoritmos para a criao de robs, e envolve matrias como engenharia
mecnica, engenharia eletrotcnica, engenharia de controlo, inteligncia artificial, microeletrnica,
entre outras. A robtica, no sentido lato, tem como objetivo a automatizao de tarefas que podem
ser executadas pelo homem. Por seu lado, a Robtica Mvel uma rea de investigao, que se pode
considerar recente, que trata do controlo de veculos autnomos e semiautnomos.

Fatores a considerar na construo de um Rob


Neste Guio o nosso objetivo ser ajudar a construir um pequeno rob que possui duas rodas
motrizes e um roda castor (livre), tendo como base um Kit, e que pode ser controlado atravs de
um programa que ser inserido num microprocessador. Atravs da construo de um rob com
rodas, o utilizador adquirir ao longo do processo de construo conhecimentos de Eletrnica,
Mecnica, Controlo e Programao e, consequentemente, aprimorar as tcnicas necessrias para a
construo de robs. Ser detalhadamente descrito o funcionamento e a construo do rob, de
modo que, alm de possibilitar a sua construo, seja fornecida uma base para a construo de robs
que utilizem um princpio de funcionamento semelhante.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

-8-

Um fator importante que no pode ser negligenciado durante a montagem a segurana.


indispensvel, quando necessrio, o uso de equipamentos de proteo individual tais como luvas,
culos de proteo, etc. Tambm essencial tomar cuidados bsicos para a preveno de acidentes,
especialmente durante a manipulao de instrumentos eltricos e ferramentas. Por pura falta de
ateno ou excesso de confiana, podem ser causados acidentes graves. No difcil se
consciencializar e realizar pequenas aes que possam prevenir muitos acidentes.
O rob com rodas possui duas rodas motrizes e pode ser controlado pelo utilizador atravs de um
programa que corre num microprocessador. O nosso projeto constitudo por duas etapas
principais: a construo do rob e a programao necessria para seu funcionamento. A construo
do rob a elaborao da estrutura mecnica e eletrnica. A dedicao nesta etapa indispensvel,
uma vez que peas ou circuitos mal concebidos podem comprometer o funcionamento de todo o
sistema. Mas no basta apenas, a estrutura estar perfeita, pois ela deve ser controlada
adequadamente. A programao ser responsvel, por proporcionar a ligao entre o
microprocessador (Arduno) e o rob e, pelo controlo preciso da atuao dos servomotores, de modo
que o rob se possa movimentar corretamente, pois cada um desses componentes deve ser
acionado num exato momento.

Construo da Plataforma
A plataforma poder assumir diferentes formas e ser construda a partir de diferentes materiais
(Acrlicos, alumnio, PVC, inox, contraplacados). No entanto na sua conceo deve-se ter em conta
que a plataforma deve ser:
1)
2)
3)

Simples minimizar a complexidade do Rob, e o nmero de partes mveis;


Robusta- resistncia a impactos e toro;
Modular - o Rob deve ser constitudo por um conjunto de mdulos que se possam
interligar e substituir facilmente, sem necessidade de remoo dos restantes.

A figura seguinte apresenta uma estrutura comum a muitos Robs, com dois motores independentes
(trao diferencial) e uma roda livre para manter o equilbrio.

Motores

Roda livre castor

a) Vista lateral

b) Vista de cima

Figura 2 - Rob com trao diferencial

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

-9-

Escolha dos Motores


A escolha dos motores deve ser sempre adequada aplicao robtica que se pretende. Deve-se ter
em considerao os seguintes fatores:
1) Tamanho e forma;
2) Peso ou massa;
3) Binrio disponvel;
4) Velocidade mxima disponvel;
5) Relao corrente/binrio com mximo desempenho.
Dos vrios motores disponveis no mercado corrente contnua, passo-a-passo ou corrente
alternada os motores de corrente contnua, tambm conhecidos por motores DC (Direct Current),
so os mais utilizados por apresentarem no s a melhor relao potncia/volume, como tambm
devido grande variedade disponvel no mercado.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 10 -

Captulo 2 - Montagem da estrutura


mecnica e motorizao
Carlos Ferreira e Pedro Neves
Um rob pode ser representado, do ponto de vista funcional por um diagrama de blocos de acordo
com a Figura 3.
Este necessita de uma fonte de energia para alimentar todo o sistema, os sensores permitem obter
informao acerca do ambiente externo para que este possa tomar decises e movimentar-se
adequadamente. Este pode necessitar de comunicar com um sistema central ou com outros robs.
Para isso necessita de um mdulo de comunicaes. O sistema de processamento recebe a
informao disponvel e envia comandos para os atuadores. Os atuadores permitem ao rob
interagir com o exterior. Estes podem ser de diversos tipos, um exemplo so os atuadores
responsveis pela movimentao do rob, neste caso os motores de trao.

Comunicaes

Fonte de
energia

Processamento

Sensores

Atuadores

Figura 3 - Diagrama de blocos funcional de um rob.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 11 -

Configurao de locomoo
A observao dos sistemas de locomoo dos seres vivos permite-nos ter ideias para a
movimentao de robs. Desde o rastejar ao andar ou saltar. Estes so no entanto de difcil
implementao mecnica e de controlo complexo.
O modo mais simples de efetuar a locomoo atravs da utilizao de rodas. Uma roda move-se
atravs do contacto com a superfcie e desloca-se 2r por volta, onde r o raio da roda. Estas so
uma boa opo desde que as irregularidades do terreno de navegao no sejam significativas face
ao raio das rodas.
A estabilidade do rob garantida com trs rodas (trs pontos definem um plano). Para manter a
estabilidade necessrio que o centro de gravidade esteja dentro de um tringulo formado pelos
pontos de contacto no cho. A estabilidade melhora com quatro ou mais rodas mas este sistema
necessita de um sistema de suspenso flexvel para evitar que algumas delas fiquem no ar.
A utilizao de rodas de maior dimetro possibilita ultrapassar obstculos maiores mas estas
necessitam de um maior binrio que as mais pequenas.

Figura 4 - A relao entre a dimenso da roda e a do obstculo a tranpr deve ser tida em conta.

As rodas devem ainda ter um perfil convexo de modo a evitar escorregamentos de partes da roda,
permitindo ao rob possuir uma boa odometria (i.e. saber o seu posicionamento com base na
rotao das rodas).De modo a permitir uma movimentao com a direo desejada (trajetrias
curvas, etc.) existem vrias configuraes.
Direo

Direo

Direo

a) Diferencial

b) Triciclo

Rodas omnidirecionais

Direo

c) Sncrona

d) Omnidirecional

Figura 5 - Tipos de direo em veculos de trs rodas.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 12 -

Direo diferencial: Utiliza mecanismos de direo simples uma vez que no existe um
mecanismo de direo propriamente dito. Este sistema consiste em duas rodas num eixo
comum, em que cada roda controlada independentemente. Para obter estabilidade utilizase uma ou vrias rodas livres adicionais (castor). A direo controlada com base na
modificao da velocidade relativa das duas rodas de trao (a diferena de velocidade entre
estas permite diferentes trajetrias). A sua estrutura impede que sejam feitos movimentos
de translao segundo o eixo que passa pelos veios dos motores, no entanto ao permitir
rodar sobre si prpria pode reposicionar-se de modo a efetuar qualquer trajetria.

Triciclo: Esta soluo passa por ter duas rodas fixas e uma de direo que comandada de
modo similar direo de um automvel. Apresentam no entanto dificuldades de
posicionamento e movimentao (e.g. estacionamento de um automvel).

Sncrona: baseada na movimentao (rotao) das trs rodas de acordo com a direo em
que o rob se pretende movimentar. Esta soluo boa do ponto de vista do movimento
mas complicada mecanicamente, pois necessita de um sistema de movimentao em todas
as trs rodas.

Omnidirecional: Utilizando rodas suas ou omnidirecionais (rodas compostas por roletes


na faixa de rodagem desta) consegue-se que o rob se movimente para onde se deseje
controlando unicamente a rotao de cada uma delas. Esta configurao necessita no
entanto de trs rodas motrizes tendo estas que ser omnidirecionais.

Figura 6 - Base diferencial usada e respectivas rodas motrizes e roda livre.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 13 -

Fonte de energia
Para alimentar um rob mvel temos de modo simplista trs alternativas: baterias, pequenos
motores de combusto interna e ainda painis solares. Dado o facto de se pretender operar
tipicamente em ambientes fechados, as duas ltimas alternativas apresentam grandes desvantagens:
os motores de combusto so poluentes e a energia produzida por um painel solar ser insuficiente.
Assim, a escolha da fonte de energia para o rob recai sobre a utilizao de uma bateria eltrica.
Embora a relao de energia por unidade de peso seja relativamente baixa em relao, por exemplo,
energia contida na gasolina (cerca de 15kWh/kg para esta ultima), a utilizao de baterias tem
inmeras vantagens: so baratas, pequenas, relativamente seguras e a converso para energia
mecnica d-se com boa eficincia. Adicionalmente, pode alimentar-se tambm o sistema de
controlo e os sensores que tipicamente funcionam com energia eltrica.
Um acumulador composto por um conjunto de clulas ligadas em srie que transforma energia
qumica em energia eltrica. Existem vrias caractersticas eltricas que definem os elementos de
uma bateria. As mais importantes so: a fora eletromotriz (medida em Volt) e a capacidade (medida
em Ampere-hora - A.h).
Convm a um sistema mvel ter a autonomia mnima que lhe permita realizar a sua funo com
alguma margem de segurana. O excesso de peso, no caso de existir, iria prejudicar o seu
desempenho ou o consumo do sistema. A autonomia depender da energia armazenada nas
baterias, e do gasto realizado. Para manter um bom nvel de autonomia importante utilizar
sistemas com um bom rendimento para que as perdas sejam reduzidas.
No presente rob utilizaram-se acumuladores de tecnologia NiMh (hidreto metlico de nquel) de
2000 Ah. Utiliza-se uma bateria com sete acumuladores em srie, de modo a permitir obter uma
tenso de cerca de 8.4V. Estas possuem uma taxa de auto-descarga baixa de modo a permitir a
manuteno prolongada de energia, mesmo quando esta no utilizada durante longos perodos de
tempo. De qualquer forma estas devem ser sempre mantidas carregadas e ser recarregadas antes de
um tempo prolongado sem uso. Para isso deve-se utilizar o carregador fornecido.

Figura 7 - Figura dos acumuladores ENELOOP utilizados e respetivo carregador.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 14 -

Motores e caixa de reduo


Dado tratar-se de uma aplicao mvel, tal como foi dito anteriormente, a alimentao efetuada
com acumuladores que fornecem uma tenso contnua. Assim, esta seco supe a utilizao de
motores DC.
As foras eletromagnticas em que se baseia o princpio de funcionamento dos motores DC so
geradas quando um condutor percorrido por uma determinada corrente sujeito ao de um
campo magntico. Esse campo magntico pode ser gerado por manes permanentes. Neste caso o
motor chama-se DC de manes permanentes.
Uma possibilidade de motorizao consiste na utilizao de motores de passo, os quais so
constitudos por vrias bobinas que tm de ser alimentadas sequencialmente para fazer o motor
rodar num ou noutro sentido. Neste caso a velocidade do motor diretamente proporcional
velocidade de comutao das bobinas. Como inconveniente estes apresentam o facto de rodarem
um determinado passo de cada vez que se verifica a mudana de energizao de duas bobines
contguas, assim proporciona-se apenas um nmero finito de posies o que representa uma
resoluo de deslocamento limitada.
Teoricamente, um motor de passo seria a soluo indicada pois haveria a facilidade em controlar a
posio pelo nmero de passos, mas na prtica os servomotores (conjunto composto pelo motor e
um sensor de posio) so preferveis por poderem ser controlados em malha fechada o que permite
um comportamento corretivo no caso de ocorrerem erros. Como o controlo dos motores de passo
efetuado em malha aberta, no existe a certeza de que os motores sigam as instrues de controlo.
Apresentam-se a seguir de forma condensada as razes atrs expostas e que explicam o porqu da
preferncia na utilizao dos motores DC face aos de passo:

No se perde a posio do motor Dado que esta medida por um sensor, pode-se executar
instrues de comando complexas e repetitivas sem perda de preciso;

Binrio total a altas velocidades O binrio de um motor de passo cai acentuadamente


medida que a velocidade deste aumenta devido a constantes de tempo de carcter eltrico;

Funcionamento suave e silencioso Os servo-sistemas so mais suaves devido alta


resoluo dos sensores (encoders), que apresentam, tipicamente, valores 10 vezes
superiores de um motor de passo. Quanto ao rudo sonoro, os servo sistemas tambm so
silenciosos;

Manuteno da posio sem corrente de excitao exceo dos com rotor de man
permanente que apresentam a manuteno da posio mesmo sem corrente de excitao,
os motores de passo exigem correntes relativamente altas mesmo quando parados (de
forma a manter a posio). Isto mesmo que a carga mecnica seja reduzida ou nula. Num
servo o sistema gere a corrente de acordo com as necessidades.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 15 -

Os motores eltricos so sistemas que normalmente possuem uma velocidade de rotao elevada e
um binrio reduzido, caractersticas que no permitem ligar o seu veio de sada diretamente roda.
Para reduzir a velocidade de rotao e aumentar o seu binrio so utilizadas caixas de reduo,
constituda por um acoplamento mecnico de rodas dentadas dispostas de um determinado modo.
Os carretos utilizados, devido s suas diferentes dimenses permitem obter a velocidade e fora
desejada sua sada, podendo esta ser ligada diretamente roda. A transformao de movimento
rotacional-translacional d-se pelo contacto da roda com a superfcie.
Com as caixas de reduo consegue-se assim aproveitar a faixa de potncia til dos motores. Os
motores utilizados so de 6V450mA e so acoplados a uma caixa de reduo com uma relao de
47:1.

Figura 8 - Conjunto motor/caixa utilizados.

Conversor de potncia (placa do L298)


De modo a permitir a variao da velocidade do rob os motores no so ligados diretamente
tenso das baterias mas sim atravs de conversores de potncia ou drivers. No presente caso
utilizado o circuito integrado L298 que permite o controlo e drive simultneo de dois motores com
consumo de corrente total at 4A.

Figura 9. - Componentes do drive de potncia

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 16 -

A placa constituda por sete terminais de parafuso onde so ligados os motores e as alimentaes
necessrias, os motores propriamente ditos so ligados nos terminais duplos laterais. O terminal
triplo inferior contm a entrada VD que corresponde alimentao da parte lgica da placa e
permite tenses entre 6 e 12V. A entrada VS corresponde entrada de alimentao do motor e
admite tenses entre 4,8 e 46V. Caso ambas as tenses se encontrem dentro dos dois limites, poder
se utilizar uma alimentao comum, sendo assim necessrio colocar um jumper a ligar os pinos
indicados com VD=VS.
Os pinos E (E1 e E2) controlam o funcionamento das sadas para os motores, sendo estas que
definem a velocidade de rotao pela aplicao do PWM. Os pinos M (M1 e M2) definem a direo
de rotao dos dois motores, respetivamente.

Modulao por largura de impulso - Pulse Width Modulation (PWM)


Um veculo em geral deve poder deslocar-se a diferentes velocidades. Esta variao poder ser
efetuada atravs de uma caixa de velocidades, da quantidade de combustvel inserida no
sistema/veculo ou, no caso dos motores eltricos de corrente contnua, atravs do valor de tenso
aplicada ao motor.
A maneira mais intuitiva de diminuir a tenso no motor seria pela insero de uma resistncia
varivel em srie com o motor. Esta soluo permite variar a tenso no motor mas existe uma parte
da energia que se dissipa na referida resistncia. Na prtica para um comando no manual (efetuado
pelo microprocessador) a resistncia varivel seria um transstor (que funciona como resistncia
comandada).
Em vez de a reduo da tenso ser efetuada por meios dissipativos (o que reduziria o rendimento e
consequentemente a autonomia) possvel faz-lo atravs da utilizao de um interruptor colocado
em srie com o motor que ir ligar e desligar de forma muito rpida. O interruptor no dissipa
potncia (idealmente) pois quando se encontra ligado possui corrente mas no possui queda de
tenso e quando se encontra desligado possui tenso aos seus terminais mas no existe corrente a
percorr-lo. O objetivo obter o valor mdio desejado para a tenso no motor, por alternncia entre
interruptor ligado e desligado (tudo ou nada). Se se pretender obter metade da tenso de
alimentao mantm-se o interruptor tanto tempo ligado como o tempo em que este est desligado
ou seja ou fator de ciclo de trabalho (duty-cycle) de 50%. Variando o fator de ciclo entre 0 e 100%
consegue-se obter uma tenso de sada entre 0 e a tenso da bateria utilizada.
Devido prpria inrcia do rotor do motor, sua componente indutiva e eventualmente recorrendo
a filtros eltricos consegue-se obter a tenso mdia desejada com baixas perdas de potncia, graas
aos dois estados predominantes de funcionamento dos transstores (saturao e corte). Com este
mtodo consegue-se uma variao do valor de tenso aplicada com perdas mnimas, o que
corresponde a um rendimento elevado. Para os interruptores so utilizados transstores, sendo a
frequncia de operao na ordem das dezenas de kHz (dezenas de milhares de ciclos por segundo). A
utilizao do mtodo PWM portanto, uma boa forma de tornar a tenso de operao varivel sem
a alterar na fonte.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 17 -

Em termos de escolha da frequncia de operao, quanto mais alta a frequncia, maiores as perdas
de comutao e o rudo eletromagntico gerado. Quanto menor a frequncia, maior a dificuldade de
apresentar uma velocidade linear no veio do motor, pelo que dever haver um compromisso na
escolha da frequncia de operao. Na realidade devido a questes prticas e para se permitir a
reversibilidade de rotao do motor (obter tenso positiva e negativa) existem drivers bidirecionais
que possuem uma configurao em H, baseados em quatro interruptores, tal como o representado
na Figura 10. Esta configurao denominada em ponte. A obteno das tenses negativas e
positivas aos terminais do motor faz-se pela ativao dos transstores adequados a cada situao (C1,
C4, C2, C3), sendo que por exemplo a paragem do motor poder ser efetuada pela ativao da linha
superior ou inferior de interruptores (C1,C3 ou C2,C4) pois impe uma tenso nula aos seus
terminais.
O driver L298 utilizado possui internamente dois conversores em ponte que permitem atuar os dois
motores existentes, com base nos sinais de comando PWM provenientes do microprocessador.

+Vs

C3

C1

C2

C4

Figura 10 - Drive de potncia em "H" e placa do drive de potncia utilizado.

A placa possui conectores para ligar alimentao (Vd ou Vs), conectores para os dois motores e
conectores para os sinais provenientes do microprocessador (E1,M1 e E2,M2). De modo a comandar
a placa, o microprocessador necessita de enviar dois sinais: um indicativo da direo de rotao
desejada para o motor (pinos M) e outro com o sinal PWM com o fator de ciclo desejado (pinos E),
sendo este ltimo o que define a velocidade do motor. A Figura 11 d-nos uma ideia dos sinais
envolvidos num caso concreto.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 18 -

Figura 11 - Exemplo de sinais de comando e respectivo resultado do ponto de vista das tenses no motor.

Em termos de rob, este deslocar-se- de acordo com as velocidades dos dois motores. Estas
dependem dos fatores de ciclo (que comandam o valor da tenso no motor e consequentemente a
sua velocidade) e tambm do sinal de direo para cada um, enviados para o driver, tal como
exemplificado na Figura 11.

Figura 12 - Exemplos de trajetrias em funo das velocidades das rodas.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 19 -

Montagem do Rob
Apresentam-se agora os diversos passos a efetuar para a montagem do rob do projeto
assim como a lista de material necessrio.

Lista de Material:
4x parafuso M3x8 (cabea de embeber)
6x parafuso M3x6
18x parafuso M3x10
5x parafuso M3x12
12x parafuso M4x12
19x porca M3
8x espaador M3x14 M/F
4x espaador M4x40 F/F
4x espaador M4x20 F/F
4x espaador M4x20 M/F
2x roda de trao
1x roda castor
2x conector de alimentao (conector de pilha de 9V)
1x tomada de carregamento 2,1mm
1x ficha alimentao Arduino 2,1mm
1x interruptor ON/OFF
2x base em acrlico (base superior e base inferior)
2x suporte de motor
1x Arduino MEGA 2560
1x Cabo USB A-B
1x carregador baterias
8x acumulador AA Eneloop 1,2V-2000 mAh
2x suporte de quatro acumuladores AA
2x motor - Pololu 6V / 210rpm 47:1
1x drive potncia L298 DFRobot
1x servo motor
1x sonar SRF05
1x sensor distncia IR Sharp GP2D120
3x sensor de linha IR QRD1113
Cabo flexvel vermelho
Cabo flexvel preto
Manga termo retrtil 1,6mm
Manga termo retrtil 3,2mm
Manga arruma cabos

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 20 -

Instrues de Montagem:
Base Inferior:

1. Fixao dos suportes dos motores base inferior.

2. Colocao dos suportes dos drives de potncia e fixao do drive de potncia.

3. Colocao dos suportes da base superior.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 21 -

4. Fixao dos motores aos suportes e ligao ao drive de potncia.

5. Fixao dos sensores de embate (bumpers) e dos trs sensores de linha na parte inferior
da frente da plataforma.

6. Ligar ao drive de potncia o interruptor ON/OFF e a tomada de carregamento, a ficha de


alimentao do Arduino e os cabos dos sinais de controlo M/E.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 22 -

7. Fixar os suportes dos acumuladores base com as fitas de velcro.

8. Montagem das rodas de trao.

9. Fixao base superior dos suportes para o Arduino e a roda livre (roda castor).

10. Fixar os suportes das baterias na base inferior do robot.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 23 -

Base Superior

11. Fixar suportes para Arduino/shield.

12. Instalar suporte e respetivo sensor de distncia IR.

13. Instalar mdulo do servo motor/sonar.

14. Fixar roda livre (roda castor).

15. Fixar a base superior do robot base inferior e ligar conectores de alimentao aos suportes
das baterias e fazer passagem de cabos da base inferior.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 24 -

16. Fixar o Arduino/shield aos suportes na base superior e fazer ligaes dos vrios sensores ao
shield.

17. Robot finalizado e pronto para os primeiros testes ao seu funcionamento.

Instrues de Carregamento das Baterias


O correto carregamento das baterias do rob permite para alm de uma maior autonomia,
um aumento da vida til das mesmas. Deste modo as baterias devem ser carregadas apenas
com o carregador fornecido e de acordo com as seguintes configuraes:

Nmero de elementos na posio 7;


Corrente de carregamento de 500mA, de modo a se evitar o indesejado aquecimento
das baterias;
O terminal de carregamento dever estar em posio tal que o pino central
corresponda ao terminal positivo (+).

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 25 -

Figura 13 - Pormenor dos botes de ajuste do carregador.

Figura 14 - Pormenor da ficha de carregamento.

O carregador possui um sistema automtico de controlo de carregamento que


protege as baterias de sobrecarga. O sistema de controlo indica o estado do
carregamento atravs do LED do carregador que de acordo com a cor do indica o seu
estado:

Vermelho: baterias em carga;


Verde: baterias carregadas;
Amarelo: a descarregar baterias.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 26 -

Figura 15 - Modos de carregamento. Vermelho: a carregar; Verde: carregado; Amarelo: a descarregar.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 27 -

Captulo 3 - Programao
Pedro Correia
Este captulo pretende abordar os aspetos bsicos de programao baseada nos microcontroladores
Arduino. O captulo descreve sumariamente o circuito baseado no microcontrolador Arduino a
utilizar, assim como a instalao do ambiente de desenvolvimento. Posteriormente sero
introduzidas as funes bsicas de entrada e sada de dados do microcontrolador, assim como as
instrues de deciso e de ciclo, necessrias para elaborao de programas que permitam controlar
o funcionamento autnomo do rob.

Arduino para Windows Instalao


Esta seco explica como ligar a placa Arduino ao computador e o modo como se realiza o upload
de um programa simples.

Placa Arduino MEGA 2560 e cabo USB


Este tutorial considera o uso da placa Arduino MEGA 2560. necessrio um cabo USB padro (tipo
que voc se conectar a uma impressora USB (usada na ligao de impressoras, p.e.)

Figura 16 - Arduino Mega 2560.

Download do ambiente de desenvolvimento Arduino


Obtenha a ltima verso da pgina de download (http://arduino.cc/en/Main/Software).

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 28 -

Figura 17- Aspeto da pgina de download do ambiente de desenvolvimento.

Quando o download terminar, descompacte o arquivo baixado. Certifique-se de preservar a


estrutura de pastas. D um duplo clique na pasta para abri-lo. Deve haver alguns arquivos e
subpastas dentro.

Ligao da Placa
O Arduino MEGA 2560 extrai automaticamente energia do computador atravs da ligao USB ou
atravs de uma fonte de alimentao externa. Ligue a placa Arduino ao seu computador usando o
cabo USB. O verde LED de alimentao (PWR) deve ficar aceso.

Instalao dos drivers


Instalao dos drivers Arduino Mega com Windows7, Vista, ou XP:
Ligue a placa e espere que o Windows comece o processo de instalao do driver. Depois de alguns
momentos, o processo indicar que necessita de instalar o controlador respetivo.
Clique no menu Iniciar e abra o Painel de Controlo.
No Painel de Controlo, selecione Sistema e Segurana. De seguida, clique em Sistema e selecione
Gerenciador de Dispositivos.
Procure em Portas (COM & LPT) uma porta aberta com o nome "Arduino MEGA 2560 (COMxx)"
Coloque o rato sobre "Arduino MEGA (COMxx)" e escolha a opo "Atualizar driver de software".
Em seguida, escolha a opo "Procurar o meu computador para o software controlador".
Finalmente, selecione da pasta MEGA, o ficheiro chamado "ArduinoUNO.inf", localizado na pasta
"Drivers" do software Arduino (no as sub-directorias "Drivers FTDI USB").

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 29 -

O Windows ir terminar a instalao do driver de l.


Pode verificar a instalao dos drivers abrindo o gestor de dispositivos do Windows. Procure a placa
Arduino na seco Portas, "USB Serial Port".

Abrir o ambiente Arduino


D um duplo clique no aplicativo Arduino. (Nota:. Se o pacote Arduino estiver noutra lngua, esta
pode mudada na janela de preferncias. (Veja a seco the environment page para mais detalhes).

Abrir um exemplo simples


Abra o exemplo do LED a piscar : Ficheiro> Exemplos> 1.Basics > Blink.

Figura 18 - Exemplo "Blink".

Selecione a placa
Deve selecionar a placa que est a utilizar no projeto, ou seja, Ferramentas -> Placa.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 30 -

Figura 19 - Escolha da placa de desenvolvimento.

Selecionar a porta srie


Selecione o dispositivo de srie da placa Arduino do menu Ferramentas| Porta Serie. provvel que
seja COM3 ou superior (COM1 e COM2 so normalmente reservados para portas serie de hardware).
Para descobrir, pode desligar a placa Arduino e reabrir o menu. A entrada que desaparece deve ser a
da placa Arduino. Volte a ligar a paca e selecione a porta srie correspondente.

Carregar um programa
Agora, basta clicar no boto "Carregar" no ambiente. Aguarde alguns segundos - voc deve ver os
leds RX e TX no piscar bordo. Se o upload for bem sucedido, aparece a mensagem "A carregar" na
barra de status.

Figura 20 - Carregamento de um programa para o microcontrolador.

Alguns segundos aps a concluso do carregamento, o pino 13 (L) correspondente ao dodo emissor
de luz da placa comear a piscar (em laranja). Se isso acontecer, parabns! O seu primeiro programa
est a funcionar!

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 31 -

Gravar um programa
Agora, basta clicar no boto "Ficheiro-> Guardar Como" e dar o nome, por exemplo, MyBlink.
Poder abrir e carregar a placa com o programa sempre que desejar.

Figura 21 - Gravar um programa.

Aspetos da linguagem de programao


Um programa Arduino pode ser dividido em trs seces principais: estruturas, variveis e
constantes, e funes. O guia de referencia da linguagem pode ser encontrado em
http://arduino.cc/en/Reference/HomePage. Esta seco realiza um resumo e explicao dos aspetos
principais.

Estruturas
setup() : A funo setup() chamada no incio do programa. usada para inicializar
variveis, modos dos pinos, livrarias, etc. A funo setup executada apenas uma vez, aps a ligao
da placa ou quando realizado o reset placa Arduino.

Tabela 1 Exemplo da funo setup


#define buttonPin = 3;
void setup()
{
Serial.begin(9600);
pinMode(buttonPin, INPUT);
GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao
IPT - 2015 V3.2

- 32 -

}
void loop()
{
// ...
}

loop(): Depois de criar a funo setup(), a funo loop() vai realizar o que o seu nome sugere,
ou seja, executa em ciclo as instrues includas na mesma. nesta funo que esto contidas todas
as instrues para controlar a placa Arduino.
Tabela 2 - Exemplo da funo loop
#define buttonPin = 3;
// setup inicializa a porta srie e o pino 3
void setup()
{
Serial.begin(9600);
pinMode(buttonPin, INPUT);
}
// verifica o pino e envia o seu estado para a porta srie
void loop()
{
if (digitalRead(buttonPin) == HIGH)
Serial.write('H');
else
Serial.write('L');
delay(1000);
}

Constantes e variveis
As variveis permitem que um determinado valor possa ser guardado em memria para poder ser
utilizado posteriormente. Existem alguns tipos bsicos de dados, como por exemplo:
int : permite que um nmero inteiro ou seja 1,2,3,5 possa ser guardado. Usa uma
representao de 16-bit (2-bytes). A gama de valores est compreendida entre -32768 a
32767.
unsigned int: Usa uma representao de 16-bit (2-bytes) com gamas de valores entre 0 a
65535 (216-1).
byte: guarda valores inteiros entre 0 e 255, isto , usa apenas um byte de memria.
float : guarda valores reais 3.4028235E+38 e -3.4028235E+38. Usa 32 bits (4 bytes) de
memria para guardar um valor.
constantes:
LOW | HIGH indica nvel baixo (0V) e alto (5V) nos pinos

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 33 -

INPUT| OUTPUT define se um pino vai ser pino de entrada ou de sada


Tabela 3 - Exemplos de definio de variveis
unsigned int ledPin = 13;
int ledPin = 13;
byte b = B10010; // "B" o formatador de binario (B10010=18 decimal)
float sensorCalbrate = 1.117;

Funes de entrada/sada
As funes de entrada e sada permitem que o microprocessador possa interagir com o exterior.
Estas funes permitem leituras de dados do exterior ligado a um pino configurado como entrada,
assim como o envio de sinais a outros dispositivos atravs de pinos configurados como sada. As
funes de leitura e de escrita podem ser realizadas para sinais expressos na forma digital ou
analgica.
As funes de entrada/sadas digitais so as seguintes:
pinMode() : configura um pino para um modo especfico, ou seja, como entrada (INPUT) ou
sada (OUTPUT) - pinMode( PIN, MODE );
Ex: pinMode (13, OUTPUT);
digitalRead(): L o valor/estado (HIGH, LOW) de um pino - digitalRead( PIN );
Ex: valor = digitalRead(13);

digitalWrite() : Escreve o valor/estado (HIGH, LOW) de um pino.


digitalWrite( PIN, VALOR );
Ex: digitalWrite(13, HIGH);

As funes de entrada/sadas analgicas so as seguintes:

analogReference() : configura a tenso de referncia para entrada analgica.


analogReference( TYPE );
Ex: analogReference( DEFAULT );
analogRead(): L o valor (0-1023 =.0049V resoluo) de um pino analgico. Os valores lidos
0-1023 correspondem a valores de tenso entre 0 e 5V. analogRead( PIN );

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 34 -

Ex: valor = analogRead(3);


analogWrite(): Atribui um valor (0-255) analgico (PWM) no pino
analogWrite( PIN, VALOR );
Coloca um valor analgico atravs duma onda PWM num pino definido.
Podemos usar um LED para variar o seu brilho ou para acionar um motor a
diferentes velocidades.
Depois de chamar a funo analogWrite(), o pino correspondente sada
vai gerar uma onda quadrada com um factor de ciclo especificado at
prxima chamada de funo analogWrite() (ou uma chamada das
funes digitalRead() ou digitalWrite() do mesmo pino). A frequncia do
sinal PWM de aproximadamente 490 Hz. Na placa Arduino MEGA (com
microcontrolador ATmega2560), esta funo trabalha com os pinos 2 a 13.
Ex: analogWrite(3, 10);

Figura 22 - Exemplo de sinal PWM.

Vamos considerar um exemplo onde se liga um potencimetro a uma entrada do Arduino e se liga
um LED a uma das sadas.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 35 -

Figura 23 - Montagem bsica com um potencimetro como entrada e LED como sada.

O cdigo seguinte configura a sada do LED proporcional ao valor lido no potencimetro.


Tabela 4 - Exemplo de configurao de entrada e sada.
#define ledPin = 2;
// LED ligado ao pino 2
#define analogPin = A0;
// potencimetro ligado ao pino analgico A0
int val = 0;// varivel para guardar o valor lido
void setup()
{
pinMode(ledPin, OUTPUT);
//
}
void loop()
{
val=analogRead(analogPin); //
analogWrite(ledPin, val / 4);
vo de 0 a 1023
// A funo analogWrite utiliza
}

sets the pin as output

l o valor da entrada analgica


// valores de sada da //funo analogRead
valores de 0 to 255.

Funes de Temporizao
A funo delay() permite que o a execuo do programa possa esperar um determinado tempo
expresso em milissegundos.

delay(milisegundos);
Ex: delay(1000); // atraso de 1 segundo

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 36 -

Tabela 5 - Exemplo da utilizao da funo delay.


#define ledPin = 2;

// LED ligado ao pino digital 2

void setup()
{
pinMode(ledPin, OUTPUT); // Define pino como sada digital
}
void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}

//
//
//
//

Coloca
espera
coloca
espera

LED on
um segundo
LED off
um segundo

Comunicao Srie
Usada para comunicao entre a placa Arduino e o computador ou outros dispositivos. Existem pelos
menos uma porta srie (tambm conhecida como UART ou USART): Serial. Comunica nos pinos
digitais 0 (RX) e 1 (TX) assim como com o computador via USB. Assim, usando estas funes, no
possvel usar os pinos 0 e 1 para entradas e sadas digitais. O monitor srie do ambiente Arduino
pode ser usado para comunicar com a placa.
O Arduino Mega possui trs portas srie adicionais: Serial1 nos pinos 19 (RX) e 18 (TX), Serial2 nos
pinos 17 (RX) e 16 (TX),Serial3 nos pinos 15 (RX) e 14 (TX). Para usar estes pinos para comunicar com
o computador necessrio um adaptador USB srie adicional, uma vez que no esto ligadas ao
adaptador Mega USB-serie. Para os usar com um dispositivo srie externo TTL ligue o pino TX pin ao
Rx desse dispositivo, e o pino RX ao pino TX do dispositivo. O ground da placa Mega ligado ao
ground do dispositivo. (No pode ligar diretamente os pinos a uma porta srie RS232 uma vez que
esta opera a +/- 12V e pode danificar a placa Arduino.)

Figura 24 - Monitor de porta srie.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 37 -

Tabela 6 Exemplo de cdigo para utilizao do monitor de porta srie.


void setup()
{
Serial.begin(9600);
Serial.println("O meu primeiro programa Arduino");
}
void loop()
{
Serial.println("Estamos na estrutura loop...");
}

Funes de entrada/sada - exemplos


1- Coloque um potencimetro na entrada analgica A0 e mostrar o valor de tenso colocada
em cada instante na entrada analgica. Mostre o seu valor no monitor da porta srie.

Figura 25 - Montagem com potencimetro

Tabela 7 - Exemplo de leitura de valor analgico.


#define analogPin = A0;
// potencimetro ligado entrada analgica A0
int val = 0;
// Varivel para guardar o valor lido
float volts=0;// varivel para guardar o valor de tenso correspondente
void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
// sets the pin as output
}
void loop()
{
val = analogRead(analogPin);// l o valor da entrada analgica
Serial.println(val);
volts=val*0.0009765625*5; //constante corresponde a 1/1024
Serial.println(volts);
delay(1000);
}

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 38 -

2- Coloque um potencimetro na entrada analgica e um LED na sada analgica


correspondente ao pino 2. Faa variar a intensidade do LED em funo do valor de tenso
imposta pelo potencimetro.

Figura 26 - Montagem com potencimetro e LED.

Tabela 8 - Exemplo de leitura e escrita de sinal analgico.


#define ledPin = 2;
#define analogPin = A0;

// LED ligado ao pino 2


// potencimetro ligado entrada analgica A0

int val = 0;
// Varivel para guardar o valor lido
float volts=0;// varivel para guardar o valor de tenso correspondente
void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
// sets the pin as output
}
void loop()
{
val = analogRead(analogPin);// l o valor da entrada analgica
Serial.println(val);
volts=val*0.0009765625*5; //constante corresponde a 1/1024
Serial.println(volts);
analogWrite(ledPin, val/4); // valores de sada da
para o LED
(valores entre 0 e 255)
delay(1000);
}

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 39 -

Fluxogramas
Um fluxograma, ou diagrama de fluxo, representa de uma forma grfica as estruturas de controlo de
fluxo, instrues e despectivas operaes includas num algoritmo. Os fluxogramas so por isso, uma
forma alternativa linguagem natural (pseudo-cdigo) para expressar algoritmos e tem como
principal objetivo facilitar a compreenso e o desenvolvimento de algoritmos. Os fluxogramas so
constitudos custa da composio de smbolos que representam operaes e que definem o fluxo
do algoritmo. No mbito desta cadeira sero usados os que constam na tabela seguinte.

Figura 27- Smbolos utilizados num fluxograma.

Exemplo 1: Construir um programa que verifique se o aluno est aprovado ou reprovado, tendo
como entrada a classificao na disciplina.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 40 -

Exemplo 2: Construa um fluxograma que verifique se um nmero introduzido pelo utilizador


positivo, negativo ou nulo.

Controlo de fluxo
As instrues de controlo de fluxo so aquelas que permitem que um programa realize uma deciso
em funo de uma condio verdadeira ou falsa. Estas condies podem depender de valores de
sinais de entrada ou ento de valores de variveis de controlo. As instrues de controlo de fluxo

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 41 -

esto em dois grandes grupos: i) as instrues condicionais ( if else ; switch case) ; ii) instrues
de ciclo, que permitem a repetio controlada de uma instruo ou bloco de instrues ( for; while).

Instrues condicionais
As instrues condicionais so:
If : Realiza um conjunto de instrues se uma condio for verdadeira. As expresses de
condio podem ser:
a == b a igual a b
a != b a diferente b
a > b a maior do que b
a < b a menor do que b
a =< b a menor ou igual do que b
a >= b a maior ou igual que b
A sintaxe da instruo condicional if definida do seguinte modo:
if(condicao)
{
instrucao;
instruo;
}

if / else: Permite um controlo de fluxo mais apurado do que a instruo if. Para alm das instrues a
executar se a condio for verdadeira, realiza tambm outro conjunto de instrues se a condio for
falsa. Por exemplo:
if (pinFiveInput < 500)
{
// accao A
}
else
{
// accao B
}

switch/case: A instruo switch...case controla o fluxo do programa, permitindo que seja


especificado cdigo que deve ser executado de acordo com diferentes condies. Em particular a
instruo switch compara o valor de uma varivel com o valor especificado em cada valor associado
ao case. Quando o valor da varivel coincide com o valor enumerado em cada case, ento procede-se
execuo das instrues correspondentes. Cada bloco de instrues deve terminar com a instruo
break, que termina todo o fluxo. Caso nenhuma das condies se verificar so executadas as
condies correspondentes ao default. A sintaxe a seguinte:

switch (var) {
case label1:
// instrues
break;
GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao
IPT - 2015 V3.2

- 42 -

case label2:
// instrues
break;
default:
// instrues
}
Por exemplo,

switch (var) {
case 1:
//faz alguma coisa quando var for 1
break;
case 2:
//faz alguma coisa quando var for 2
break;
default:
// Caso contrrio faz o que estiver na opo
default
// a opo default opcional
}
Com base nos exemplos anteriores faa um programa que tenha:

Um potencimetro de entrada;
Trs LEDS de sada, LED1, LED2, LED3;
Pretende-se que:
o O LED1 acenda se o valor da entrada analgica for menor do que 400;
o O LED2 acenda se o valor da entrada analgica estiver entre 400 e 600.
o O LED3 acenda se o valor da entrada analgica for maior do que 600 (o mximo
1023).

Tabela 9 - Exemplo de utilizao de instrues condicionais


#define ledPin1 = 2;
// LED ligado ao pino 9
#define ledPin2 = 3;
// LED ligado ao pino 9
#define ledPin3 = 4;
// LED ligado ao pino 9
#define analogPin = A0;
// potencimetro ligado ao pino analgico A0
int val = 0; // varivel para guardar o valor lido
float volts=0;
void setup()
{
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
Serial.begin(9600);
}
void loop()

// sets the pin as output


// sets the pin as output
// sets the pin as output

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 43 -

{
val = analogRead(analogPin);
Serial.println(val);
if (val<400)
{
digitalWrite(ledPin1,
digitalWrite(ledPin2,
digitalWrite(ledPin3,
} else
if (val<600)
{
digitalWrite(ledPin1,
digitalWrite(ledPin2,
}
else
{
digitalWrite(ledPin1,
digitalWrite(ledPin2,
digitalWrite(ledPin3,
}

// l o valor da entrada analgica

HIGH);
LOW);
LOW);

LOW);
HIGH);

LOW);
LOW);
HIGH);

Instrues de ciclo
As instrues de ciclo permitem executar vrias vezes um conjunto de instrues. Por cada iterao
do ciclo testada a condio de paragem do ciclo. O ciclo continua sempre que a condio
verdadeira e termina quando a condio for falsa. Existem duas instrues que podem ser utilizadas:
ciclo for e ciclo while. Por exemplo,
Construa um fluxograma que imprima os nmeros entre 1 e 10 na consola. O fluxograma ser:

Figura 28 - Fluxograma da execuo de um ciclo.


GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao
IPT - 2015 V3.2

- 44 -

Ciclo for: O ciclo controlado por uma varivel que deve ser inicializada e incrementada ao longo da
execuo do ciclo. Por exemplo, considere-se um programa que apresente os nmeros inteiros de 0 a
100 no monitor srie usando o ciclo for como mostra a Figura 29. A varivel x, inicialmente
colocada a zero. No fim da execuo das instrues, a varivel incrementada 1 unidade. O ciclo
termina quando o x=100.

parntesis
Teste
Inicializao

Incremento

Figura 29 - Sintaxe do ciclo for.

Tabela 10- Exemplo onde a intensidade de um LED varia usando um pino PWM (for).
// aumenta a intensidade de um LED usando um pino PWM
#define PWMpin = 2; // LED em serie com Resistncia de 470 ohm no pino 10
int i; //varivel de teste do ciclo;
void setup()
{
Serial.begin(9600);
}
void loop()
{
for (i=0;i<=255;i++)
{
Serial.println(i);
analogWrite(PWMpin, i);
delay(10);
}
}

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 45 -

Ciclo while: A declarao while vai executar continuamente at condio colocada entre parntesis
for falsa. necessrio fazer variar a varivel testada seno o ciclo nunca acaba. Esta varivel
necessita de ser inicializada antes de o ciclo iniciar. A sintaxe a seguinte:
while(expression){
// statement(s)
}

Por exemplo,
var = 0;
while(var < 200)
{
// repete alguma coisa 200 vezes
var++;
}

Tabela 11- Exemplo onde a intensidade de um LED varia usando um pino PWM (while).
// aumenta a intensidade de um LED usando um pino PWM
#define PWMpin = 2; // LED em serie com Resistencia de 470 ohm no pino 10
int i; //varivel de teste do ciclo;
void setup()
{
Serial.begin(9600);
}
void loop()
{
i=0;
while (i<=255)
{
Serial.println(i);
analogWrite(PWMpin, i);
i++;
delay(10);
}
}

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 46 -

Captulo 4 - Sensores
Gabriel Pires

Os sensores de um rob do-lhe a capacidade de perceber e interagir com o seu meio


envolvente. Essa capacidade permite ao rob efetuar algumas tarefas de forma autnoma,
ou seja, sem interveno permanente do ser humano. Existe uma grande variedade de
sensores, tais como foto-sensores, interruptores de pra-choques, sonares, giroscpios,
acelermetros, bssolas, microfones, sensores de infra-vermelho, sensores de fora,
cmaras, etc. O tipo de informao devolvido pelos sensores, bem como a sua forma de
funcionamento e complexidade variam muito de sensor para sensor. Uns baseiam-se na
propagao de ondas sonoras, outros na reflexo de feixes de luz, outros na captao de luz,
outras na alterao de caractersticas dos materiais, etc. Iremos neste captulo descrever o
funcionamento de vrios tipos de sensores, nomeadamente, sensores de odometria para
localizao (e.g., codificadores), sensores de medio de distncias para deteo de
obstculos (e.g., sensores de infravermelhos e de ultrassons) e sensores de deteo de cor
branca/preta para seguimento de linha (foto-detetores). Todos eles tm um funcionamento
relativamente simples o que permite a sua interligao ao microcontrolador do Arduino
usado no rob GreenT. Sensores mais complexos como os laser range finders e cmaras de
viso precisam de ser ligados a computadores porque exigem uma maior capacidade
computacional para processar a informao por eles devolvida.
importante perceber que os sensores so meros transdutores. Traduzem um determinado
fenmeno fsico em sinais eltricos que o microcontrolador consegue ler. Para que um rob
realize uma determinada tarefa de forma autnoma necessrio que o ser humano
programe o microprocessador. A programao do rob consiste em realizar algoritmos que
interpretem a informao fornecida pelos vrios sensores e atuem o rob de acordo com a
tarefa desejada. Os algoritmos de programao de tarefas de navegao do rob sero
discutidos no captulo seguinte. Neste captulo iremos apenas explicar o funcionamento dos
sensores para perceber como que os podemos interligar ao microcontrolador e l-los.

Sensores de Infravermelhos: medio de distncia


Um dos sensores que iremos usar para detetar a presena de obstculos o sensor
GP2D120 [1]. um sensor de infravermelhos que devolve um valor analgico de tenso
inversamente proporcional distncia a que se encontra um obstculo. Com base no valor
de tenso, podemos saber mais ou menos a que distncia se encontra esse obstculo. A
GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao
IPT - 2015 V3.2

- 47 -

Figura 30 mostra uma imagem do sensor GP2D120. constitudo por um LED (Light Emitter
Diode) e por um CCD (charge coupled device) para deteo da luz. O LED emite tipicamente
um feixe de luz infravermelha com comprimento de onda de 880 nm. O detetor CCD,
sensvel luz dos 880 nm, permite identificar o ngulo de incidncia do feixe refletido. O
princpio de funcionamento encontra-se ilustrado na Figura 31(A). A tenso de sada varia
entre 0.2 3V que tem uma correspondncia a distncias entre 4-40 cm, de acordo com a
curva caracterstica da Figura 31 (B).

LED Light
Emitter Diode

Light detector
(CCD)

Figura 30 Sensor GP2D120. (A) Imagem; (B) Pinagem (retirado de [1]).

(A)

(B)

Figura 31 Sensor GP2D120. (A) Princpio de funcionamento; (B) Relao entre tenso e distncia
(retirado de [1]).

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 48 -

Interligao do GP2D120 ao Arduino


O sensor GP2D120 devolve no pino 1 um nvel de tenso analgico, por isso ter de ser
ligado a uma entrada analgica do Arduno (qualquer uma que esteja disponvel). Os pinos
VCC e GND so ligados aos respetivos pinos do Arduno. A Figura 32 ilustra a interligao do
sensor, usando a porta analgica 0.

Figura 32 Ligao do sensor GP2D120 ao Arduino (porta A0 (Analog 0))

Leitura do valor analgico do GP2D120


Sendo um valor analgico, a entrada ter de ser convertida para um valor numrico digital que o
microprocessador entenda. Para esse efeito, o microcontrolador tem um conversor analgico-digital
de 10 bits. Dessa forma os valores na gama de 0-5 Volts so convertidos para uma gama numrica de
0-1023(ou seja, 1024 valores, em que 1024 = 210).

A
Tabela 12 apresenta um cdigo exemplo que faz a leitura do sensor, ao mesmo tempo que

liga/desliga 2 LEDs de acordo com o valor devolvido pelo sensor.

Tabela 12: Programa exemplo do Arduino para leitura do sensor GP2D120


//Cincia Viva - "Escolher Robtica - Escolher Cincia!" - PEC88
//Exemplo de leitura do sensor IR GP2D12
//Arduino Mega - 2560
//Robot GreenT - IPT - 2013-2014

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 49 -

#define Pinled1 12
#define Pinled2 13
#define PinIR
A0
usado qq porto analogico)

//pino de ligao sada digital


//pino de ligao sada digital
//pino do porto entrada analgica (pode ser

void setup() {
Serial.begin(9600);
pinMode(Pinled1, OUTPUT);
pinMode(Pinled2, OUTPUT);
}
void loop() {
int sensor = 0;
// l o valor do sensor
sensor=analogRead(PinIR);
// mapeamento do valor para uma gama mais pequena
sensor = map(sensor, 0, 1024, 0 , 200);
// acende led2 quando est entre 50 e 100
if ( sensor > 50 && sensor <100){
digitalWrite(Pinled1, LOW);
digitalWrite(Pinled2, HIGH);
}
// acende led1 quando valor se encontra acima de 100
else if (sensor >= 100){
digitalWrite(Pinled1, HIGH);
digitalWrite(Pinled2, LOW);
}
else {
// desliga os dois leds
digitalWrite(Pinled2, LOW);
digitalWrite(Pinled1, LOW);
}
Serial.println(sensor);
delay(100);
}

Fotodeteo de linha branca/preta


Uma das tarefas que o rob GreenT ter de realizar consiste no seguimento de uma linha preta em
fundo branco ou de uma linha branca em fundo preto. A deteo de linha ser realizada atravs de
sensores refletivos QRD1113 [2]. O objetivo ser discriminar uma superfcie branca (elevada
seletividade) de uma superfcie preta (baixa refletividade). O sensor e respetiva pinagem encontramse ilustrados na Figura 33. O sensor constitudo por um LED emissor de infravermelhos e um foto
transstor que deteta a luz refletida. A quantidade de luz refletida depende da superfcie refletora.
Superfcies de cor branca refletem mais luz que as superfcies pretas, sendo desta forma possvel
discriminar estas duas cores. No entanto, isto s ser possvel para superfcies que se encontrem a
uma distncia at aproximadamente 5 mm.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 50 -

Ligao e leitura do sensor QRD1113


A Figura 33 mostra o circuito para interligar o sensor QRD1113 ao Arduno. O sinal OUT corresponde
tenso no coletor do foto transstor que poder ser ligada tanto a uma entrada analgica como a
uma entrada digital. No caso de ser ligado a uma entrada digital, o valor lgico 1 corresponde ao
preto e o valor lgico 0 ao branco (poder ter de se ajustar as resistncias para calibrar). A Tabela 13
apresenta um cdigo exemplo que faz a leitura do sensor QRD1113 atravs de uma entrada
analgica ou de uma entrada digital.

Figura 33 Sensor refletivo QRD1113 e respetiva pinagem (o pino 1 encontra-se identificado com um
ponto). Retirado de [2].

Entrada digital
VCC

2
GND

Entrada analgica
Figura 34 Interligao do sensor QRD1113. Opo de leitura analgica;

Tabela 13 : Programa exemplo do Arduno para leitura do sensor QRD1113


//Cincia Viva - "Escolher Robtica - Escolher Cincia!" - PEC88
//Exemplo de leitura do sensor QRD1113
//Arduino Mega - 2560
//Robot GreenT IPT 2013-2014
#define PinL0_A
#define PinL0_D

A1
22

// entrada analogica QRD1113 - sensor 0


// entrada digital QRD1113 - sensor 0

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 51 -

#define PinL1_A
#define PinL1_D

A2
23

// entrada analogica QRD1113 - sensor 1


// entrada digital QRD1113 - sensor 1

void setup() {
Serial.begin(9600);
pinMode(PinL0_D, INPUT); //pino digital definido como entrada
}
void loop() {
int Linha0, Linha1;
int Linha0_D =0, Linha1_D =0;
// se for lido como entrada analgica
Linha0 = analogRead(PinL0_A);
// mapeamento do valor para uma gama mais pequena
Linha0 = map(Linha0, 0, 1024, 0 , 200);
//Serial.println(Linha0_map);
// se for lido como entrada digital devolve apenas 1 ou 0
Linha0_D = digitalRead(PinL0_D);
Linha1_D = digitalRead(PinL1_D);
Serial.print("Linha0: ");Serial.print(Linha0_D);
Serial.print(" --- ");
Serial.print("Linha1: ");Serial.println(Linha1_D);
Serial.print("Linha0Analog: ");Serial.println(Linha0);
delay(100);
}

Sensores ultrassons: medio de distncia


Para medio de distncias podemos tambm usar um sensor de ultrassons, o qual pode ser usado
em substituio do GP2D120 ou em combinao com este. Iremos usar o sensor de ultrassons SRF05
[3] que permite medir distncias entre 1 cm e 4 m. O princpio de funcionamento deste sensor
muito diferente do funcionamento do GP2D120, uma vez que consiste na emisso de uma onda
sonora em vez de um feixe de luz. A Figura 35 mostra o sensor e respetiva pinagem. A medio da
distncia baseada no clculo do tempo de vo (tempo de ida e volta) de uma onda sonora de 40
KHz (acima do espectro audvel). O diagrama temporal da Figura 36 ilustra o princpio de
funcionamento. Para enviar a onda sonora tem de ser despoletado um Trigger input pelo
microcontrolador, um pulso com pelo menos 10 s. O sinal de Echo output passa do estado 0 para
o estado 1 e permanece nesse estado at receber o eco. Quando o sinal de Echo output passa do
estado 0 para 1, tem de ser acionado no microcontrolador um contador de tempo. Quando o sinal
passa novamente para o estado 0, o contador de tempo terminado e calcula-se o tempo decorrido
entre a emisso da onda e a receo do seu eco. Desta forma, sabendo a velocidade de propagao
do som, conseguimos calcular a distncia a que se encontra o obstculo.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 52 -

(A)

(B)
Figura 35 Sensor SRF05. (A) Vista do emissor/recetor. (B) Pinagem (modo de funcionamento 2).
Retirado de [3].

Figura 36 Diagrama temporal do sensor SRF05 a funcionar no modo 2. Retirado de [3].

Se o tempo decorrido for tp, ento o percurso total ser


=
Em que vp a velocidade de propagao do som ( volta de 340 m/s). Como o percurso total de ida
e volta, a distncia a que se encontra o obstculo ser

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 53 -

Por exemplo, se o tempo decorrido for de 10 ms, ento o obstculo encontra-se a 1.7 m.

Ligao e leitura do sornar SRF05


A ligao do sensor SRF05 ao Arduino, a funcionar no modo 2, encontra-se ilustrada na Figura 37. No
modo 2, o sinal de Trigger input e Echo output partilham o mesmo pino que ser ligado ao pino
digital 7 do Arduino. O cdigo para leitura do sonar encontra-se na Tabela 14. A funo PulseIn
devolve em microsegundos o tempo em que o sinal se encontra a HIGH. Para converter para cm
divide-se esse valor por 58. A uma velocidade de 340 m/s, 1 cm corresponde 29 s. Como temos de
ter em conta a ida e a volta, o tempo devolvido tem de ser dividido por 2x29=58.

Figura 37 Ligao do SRF05 ao Arduino.

Tabela 14 Cdigo exemplo para leitura do sensor SRF05


//Cincia Viva - "Escolher Robtica - Escolher Cincia!" - PEC88
//Exemplo ligao sensor de ultrassons SRF05
//Arduino Mega - 2560
//Robot GreenT IPT 2013-2014
#define

Pinsonar 7

int tempo;
int distancia;

// Pino de ligao do sensor SRF05


//tempo devolvido por pulsein
//distancia

void setup()
{
Serial.begin(9600);
}

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 54 -

void loop()
{
pinMode(Pinsonar, OUTPUT);
digitalWrite(Pinsonar, LOW); // colocar a zero antes do trigger
delayMicroseconds(2);
digitalWrite(Pinsonar, HIGH); // Envia um burst de 10 us
delayMicroseconds(10);
digitalWrite(Pinsonar, LOW); // Coloca pino antes do pulso de eco chegar
pinMode(Pinsonar, INPUT);
tempo = pulseIn(Pinsonar, HIGH); // L o tempo do pulso de eco do SRF05
em microsegundos
distancia = tempo/58; // divide este tempo por 58 gives para dar a
distncia em cm - ver texto
Serial.println(distancia); //
delay(100);
}

Codificador acoplado ao motor


Para que o rob consiga localizar-se, cada um dos motores tem acoplado a si um codificador
(usualmente tico ou magntico) que permite calcular o nmero de rotaes que o veio do motor
realiza (ver Metal Gearmotor na Figura 38). O codificador acoplado ao motor fornece 48 pulsos por
cada rotao. Como o codificador no se encontra acoplado caixa redutora (46.851:1) mas sim ao
veio do motor, ento o codificador ir fornecer 46.851 x 58 pulsos, ou seja sensivelmente 2249
pulsos por cada volta do veio sada da engrenagem. Um exemplo ilustrativo de um codificador
rotativo incremental apresentado na Figura 39. Por cada risca do codificador (Figura 39(A))
fornecido um pulso. Dada a disposio das riscas, so obtidas duas sadas que se encontram em
quadratura (Figura 39(B)). Desta forma possvel inferir a direo de rotao do motor. Estes pulsos
so fornecidos por sensores que podem ser ticos ou magnticos. No caso do Metal Gearmotor
25Dx52L, o codificador magntico, consistindo num disco com seces magnetizadas, as quais so
detetadas por um sensor de efeito de hall de dois canais [4]. Contando os pulsos e sabendo o raio da
roda do rob possvel calcular o deslocamento angular e linear da roda, e a velocidade angular e
linear.

(A)

(B)

Figura 38 - (A) Vista do motor, caixa redutora e codificador acoplado ao veio (47:1 Metal Gearmotor
25Dx52L); (B) Pinagem
GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao
IPT - 2015 V3.2

- 55 -

(A)

(B)

Figura 39 (A) Codificador rotativo incremental acoplado ao veio; (B) Pulsos devolvidos pelo canal A e
canal B.

Ligao e leitura dos codificadores de odometria


A ligao dos encoders placa Arduino realizada de acordo com a Ligao da Figura 40 (ver
tambm pinagem da Figura 38). A ligao do segundo motor ser realizada da mesma forma, usando
os pinos indicados na
Tabela 17.

Canal B pino 4

Canal A pino 2

Figura 40 Ligao de um encoder placa Arduino. Proceder da mesma forma para o outro motor (ver pinagem
e Tabela 17)

A leitura dos pulsos fornecidos pelos codificadores pode ser computacionalmente exigente para o
Arduino, principalmente se o nmero de pulsos por rotao for elevado. A medio de pulsos por
polling, em que se a faz a monitorizao constante (por software) das portas a que se encontram
ligados o canal A e o canal B do codificador, extremamente ineficaz, porque, por um lado, ocupa
integralmente o processador esgotando os seus recursos, e por outro lado pode levar no deteo
de alguns pulsos. Uma outra abordagem consiste em configurar interrupes externas nesses pinos
GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao
IPT - 2015 V3.2

- 56 -

de entrada do microcontrolador, o que permite detetar por hardware as transies do bordo


ascendente/descendente dos pulsos, quando estes ocorrem. Neste caso, o microprocessador s
solicitado quando ocorrem transies (ver exemplo de cdigo na Tabela 15). Apesar desta
abordagem ser melhor do que a utilizao de polling, na verdade tambm no a melhor soluo,
porque o microprocessador interrompido sempre que h uma transio. Ou seja, a contagem de
pulsos feita por software incrementando uma varivel de contagem (count no programa da Tabela
15). No caso do nmero de pulsos por segundo ser alto, o microprocessador ser constantemente
interrompido. A soluo ideal consiste na configurao dos Timers com funo de contagem de
pulsos externos. Neste caso, a contagem de pulsos feita por hardware, e o seu valor s ser lido por
software quando desejado. Infelizmente, apesar do Amega2560 suportar vrios Timers com essa
configurao, a placa Arduino Mega s d acesso a um dos pinos associados aos Timers. Como so
necessrios dois Timers, esta soluo no poder ser usada.

Para alm da leitura dos pulsos necessrio tambm detetar o sentido de rotao do motor. Iremos
para j mostrar como podem ser contados o nmero de pulsos, passando de seguida deteo da
direo. O cdigo retirado de um tutorial do Arduino mostra exemplo de leitura dos canais dos
codificadores dos dois motores.

Tabela 15 Leitura dos pulsos dos codificador (canal A e B) usando interrupes externas.
//Cincia Viva - "Escolher Robtica - Escolher Cincia!" - PEC88
//Exemplo Leitura dos encoders
//Arduino Mega - 2560
//Robot GreenT IPT 2013-2014
//Exemplo com 1 interupo por transio apenas do canal A
//ou seja, perde metade da resoluo
//no caso de se detetar apenas o bordo ascendente/descendente a resoluo p
assa a 1/4
//o sentido de rotao detetado, verificando o estado do canal B
#define
#define
#define
#define

PinAencoder0
PinBencoder0
PinAencoder1
PinBencoder1

2
4
3
5

//pino de
//Digital
//pino de
//Digital

interrupo - encoder Esq


- encoder Esq
interrupo - encoder Dir
- encoder Dir

volatile signed int encoder0Pos = 0, encoder1Pos = 0, encoder=0;


void setup() {
setup_encoder();
Serial.begin (9600);
Serial.println("start");

// a personal quirk

}
void loop(){
// fazer o que for necessrio
}
void setup_encoder(){
//Mega possui interrupes nos pinos 2, 3, 21, 20, 19, 18
GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao
IPT - 2015 V3.2

- 57 -

pinMode(PinAencoder0, INPUT);
//digitalWrite(PinAencoder0, HIGH);
pinMode(PinBencoder0, INPUT);
//digitalWrite(PinBencoder0, HIGH);

// ativa resistncia pullup


// ativa resistncia pullup

pinMode(PinAencoder1, INPUT);
pinMode(PinBencoder1, INPUT);
attachInterrupt(0, processaEncoder0, RISING);
interrupt 0 - pin 2
attachInterrupt(1, processaEncoder1, RISING);
interrupt 0 - pin 3
//opoes: CHANGE, RISING, FALLING, LOW
}

// encoder pin on
// encoder pin on

void processaEncoder0() {
/* Se o pino A e B estiverem ambos a HIGH a rotao para a frente
Se forem diferentes a rotao para trs
*/
//encoder++;
if (digitalRead(PinAencoder0) == digitalRead(PinBencoder0)) {
encoder0Pos++;
} else {
encoder0Pos--;
}
//Serial.println (encoder0Pos, DEC);
if ((encoder0Pos >100) || (encoder0Pos < -100) ){
Serial.print("encoder0: ");Serial.println (encoder0Pos);
encoder0Pos=0;
}
}
void processaEncoder1() {
/* Se o pino A e B estiverem ambos a HIGH a rotao para a frente
Se forem diferentes a rotao para trs
*/
//encoder++;
if (digitalRead(PinAencoder1) == digitalRead(PinBencoder1)) {
encoder1Pos--;
} else {
encoder1Pos++;
}
//Serial.println (encoder0Pos, DEC);
if ((encoder1Pos >100) || (encoder1Pos < -100) ){
Serial.print("encoder1: "); Serial.println (encoder1Pos);
encoder1Pos=0;
}
}

Servo
Ser usado um servomecanismo para rodar o sonar ou o sensor de IR. Desta forma, ser possvel
detetar a posio aproximada dos obstculos. O servo tem uma gama de rotao de 180. Para ser
usado usa-se a livraria Arduino Servo.h [6]. Segue-se em baixo um exemplo disponibilizado no site
do Arduino que faz um varrimento de 180 nos dois sentidos.
GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao
IPT - 2015 V3.2

- 58 -

#include <Servo.h>
Servo myservo; // cria um objeto servo
int pos = 0;
// varivel que armazena a posio do servo
void setup()
{
myservo.attach(11); // liga servo ao pino 11
}
void loop() {
for(pos = 0; pos < 180; pos += 1)

// vai da posicao 0 a 180 de 1 em

1
{
myservo.write(pos);
delay(15); //espera que o servo tenha tempo de chegar posio
}
//percorre o sentido contrrio
for(pos = 180; pos>=1; pos-=1)
{
myservo.write(pos);
delay(15);
}
}

Programa modelo ciclo de operao


Aps terem sido testados cada um dos sensores isoladamente, agora necessrio criar um programa
que permita juntar todas as partes. Apresenta-se de seguida um programa simples que poder servir
de modelo. A leitura dos sensores e a atuao dos motores devem ser feitas de forma cclica com um
perodo fixo. Esse perodo normalmente designado de LOOPTIME. No exemplo da
Tabela 16 apresenta-se uma forma simples de criar esse ciclo. A cada ciclo de 200 ms a velocidade

dos motores ajustada de acordo com a distncia medida pelo sensor GP2D12. Ir ser fornecida uma
livraria para clculo da velocidade e controlo PID, de forma a melhorar o comportamento dos
motores.
Tabela 16 Programa modelo com funcionamento em ciclo
//Cincia Viva - "Escolher Robtica - Escolher Cincia!" - PEC88
//Exemplo completo de leitura e atuao com controlo PID dos motoress
//Arduino Mega - 2560
//Robot GreenT IPT 2013-2014
#include <math.h>
//IR GP2D12
#define PinIR A0
porto analogico)

//pino do porto entrada analgica (pode ser usado qq

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 59 -

//Fototransistor
#define PinL0_A
#define PinL0_D
#define PinL1_A
#define PinL1_D
//MOTOR
#define
#define
#define
#define

PinE1
PinE2
PinM1
PinM2

QRD1113
A1
//
26
//
A2
//
28
//

32
30
10
9

//ENCODER
#define PinAencoder0
#define PinBencoder0
#define PinAencoder1
#define PinBencoder1

entrada
entrada
entrada
entrada

analogica QRD1113
digital QRD1113 analogica QRD1113
digital QRD1113 -

- sensor 0
sensor 0
- sensor 1
sensor 1

//Motor Dir - direo (Digital)


//Motor Esq - direo (Digital)
//Motor Dir - velocidade (PWM)
//Motor Esq - velocidade (PWM)
2
4
3
5

//pino de interrupo - econder esq


//Digital
//pino de interrupo
//Digital

// periodo de amostragem em milisegundos LOOP controlo


const int LOOPTIME = 200;
unsigned long int lastMilli=0;
//variveis
int ValIR=0;
volatile signed int encoder0Pos = 0, encoder1Pos = 0, encoder=0;
void setup()
{
Serial.begin(9600);
motor_setup();
setup_encoder();
}
/* -----------------------------------------------------------*/
//FUNO MAIN
/* -----------------------------------------------------------*/
void loop() {
int speedref0=0, speed0=0, mapIR=0;
if(abs(millis()-lastMilli) >= LOOPTIME)
// enter tmed loop
lastMilli = millis();

ValIR=le_IR();mapIR=map(ValIR, 0, 615, 0 , 255);


//refspeed0=250;
speedref0=mapIR;
if (mapIR>200) motorSTOP();
else {
motorEsq(speedref0);
motorDir(speedref0);
}
//
//
//
//

Serial.print("IR: ");Serial.println(ValIR);
Serial.print("encoder0: ");Serial.print(encoder0Pos);
Serial.print(" ::: ");
Serial.print("encoder1: ");Serial.println(encoder1Pos);
//Serial.print("lastmilli: ");Serial.println(lastMilli);

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 60 -

}
} // loop()
/* -----------------------------------------------------------*/
//FIM FUNO MAIN
/* -----------------------------------------------------------*/
/* -------------------------------*/
/* FUNCOES SENSORES
/* -------------------------------*/
/* -------------------------------*/
int le_IR(void){
int val=0;
val= analogRead(PinIR);
return val;
}
/* -------------------------------*/
/* -------------------------------*/
/* FUNCOES MOTORES e ENCODERS
/* -------------------------------*/
/* -------------------------------*/
void setup_encoder(){
//Mega possui interrupes nos pinos 2, 3, 21, 20, 19, 18
pinMode(PinAencoder0, INPUT);
//digitalWrite(PinAencoder0, HIGH);
pinMode(PinBencoder0, INPUT);
//digitalWrite(PinBencoder0, HIGH);

// ativa resistncia pullup


// ativa resistncia pullup

pinMode(PinAencoder1, INPUT);
pinMode(PinBencoder1, INPUT);
attachInterrupt(0, processaEncoder0, RISING);
interrupt 0 - pin 2
attachInterrupt(1, processaEncoder1, RISING);
interrupt 0 - pin 3
//opoes: CHANGE, RISING, FALLING, LOW
}
/* -------------------------------*/

// encoder pin on
// encoder pin on

/* -------------------------------*/
void processaEncoder0() {
/* Se o pino A e B estiverem ambos a HIGH a rotao para a frente
Se forem diferentes a rotao para trs
*/
//encoder++;
if (digitalRead(PinAencoder0) == digitalRead(PinBencoder0)) {
encoder0Pos++;
} else {
encoder0Pos--;
}
}
/* -------------------------------*/
/* -------------------------------*/
void processaEncoder1() {
/* Se o pino A e B estiverem ambos a HIGH a rotao para a frente
Se forem diferentes a rotao para trs
*/
GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao
IPT - 2015 V3.2

- 61 -

//encoder++;
if (digitalRead(PinAencoder1) == digitalRead(PinBencoder1)) {
encoder1Pos--;
} else {
encoder1Pos++;
}
}
/* -------------------------------*/
void motor_setup(){
//esquema de montagem em que:
// 0-127: roda no sentido direto
// 127-255: roda no sentido inverso
pinMode(PinE1, OUTPUT);
pinMode(PinE2, OUTPUT);
digitalWrite(PinE1,LOW); //desliga motor - se estiver a 1 roda
velocidade do PWM
digitalWrite(PinE2,LOW);
//alteracao da frequencia PWM Timer1: 4kHz
TCCR2B = TCCR2B & 0b11111000 | 0x02;
//DEFAULT
//timer 0
//timer 1
//timer 2
//timer 3
//timer 4

(controls
(controls
(controls
(controls
(controls

pin
pin
pin
pin
pin

13, 4); //default 1000 Hz


12, 11); //default 500 Hz
10, 9); //default 500 Hz
5, 3, 2); //default 500 Hz
8, 7, 6); //default 500 Hz

}
/* -------------------------------*/
/* -------------------------------*/
void motorDir (int speed) {
digitalWrite(PinE1,HIGH);
if (speed>=0)
{
//Serial.print(speed); Serial.print(" .-. ");
speed=map(speed,0,255,127,0);
analogWrite(PinM1, speed);
Serial.println(speed);
}
else {
speed=map(speed,0,-255,127,255);
analogWrite(PinM1, speed);
}
}
/* -------------------------------*/
/* -------------------------------*/
void motorEsq (int speed) {
digitalWrite(PinE2,HIGH);
if (speed>=0)
{
//Serial.print(speed); Serial.print(" .-. ");
speed=map(speed,0,255,127,0);
analogWrite(PinM2, speed);
Serial.println(speed);
}
else {
speed=map(speed,0,-255,127,255);
analogWrite(PinM2, speed);
}
GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao
IPT - 2015 V3.2

- 62 -

}
/* -------------------------------*/
/* -------------------------------*/
void motorSTOP () {
digitalWrite(PinE1,LOW);
digitalWrite(PinE2,LOW);
}
/* -------------------------------*/

Lista resumo dos pinos usados


medida que for ligando os sensores e motores dever criar uma tabela que identifique quais os
pinos usados bem como a sua descrio, de forma a facilitar a evoluo do seu rob. A
Tabela 17 resume todas as ligaes realizadas ao longo deste captulo. Com um nmero elevado de

sensores torna-se tambm necessrio ter uma rgua de extenso dos pinos de alimentao (GND e
VCC). A realizao de um shield para fazer essa extenso uma soluo adequada para resolver o
problema.
No anexo I encontra-se a descrio do shield que foi implementado e que servir para expanso da
alimentao e para ligao dos sensores e motores. O shield permite interligar outros sensores para
alm dos que foram descritos neste captulo (consulte a pinagem completa no anexo I).

Tabela 17 Resumo das ligaes dos sensores e motores descritos neste captulo com identificao dos pinos.

Varivel

Pino

Descrio

PinIR

A0

Sensor GP2D12

PinL0_A

A1

Sensor QRD1113 nmero 0 (Esquerda) - Entrada analgica

PinL0_D

26

Sensor QRD1113 nmero 0 (Esquerda) - Entrada digital

PinL1_A

A2

Sensor QRD1113 nmero 2 (Direita) - Entrada analgica

PinL1_D

28

Sensor QRD1113 nmero 2 (Direita) - Entrada digital

Pinsonar

Sonar SRF05

PinE1

32

Motor direito Enable

PinM1

10

Motor direito - velocidade (PWM)

PinE2

30

Motor esquerdo - Enable

PinM2

Motor esquerdo - velocidade (PWM)

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 63 -

PinAencoder0 2

Encoder Esq canal A pino de interrupo (2)

PinBencoder0

Encoder Esq canal B (Digital)

PinAencoder1 3

Encoder Dir canal A pino de interrupo (3)

PinBencoder1

Encoder Dir canal B (Digital)

PinServo

11

Servo

Lista de funes especficas usadas: consultar http://arduino.cc/en/Reference para descrio


detalhada e exemplos.

Referncias
[1] Datasheet GP2D120 Optoelectronic Device, Sharp.
[2] Datasheet QRD1113 / QRD1114 Reflective Object Sensor, Fairchild semiconductor.
[3] Datasheet SRF05 - Ultra-Sonic Ranger
[4] Metal gear Mootr e Encoder, http://ptrobotics.com/produtos/1815-47-1-metal-gearmotor25dx52l-mm-hp-with-48-cpr-encoder.html
[5] Reading Rotary Encoder, Arduino http://playground.arduino.cc/Main/RotaryEncoders
[6] Servo Motor Example, Arduino http://arduino.cc/en/Tutorial/Sweep

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 64 -

Captulo 5 Estratgia de navegao


para micro-robs
Ana Lopes
Introduo O que a navegao de robs?
Aos robs so atribudas misses dependentes das aplicaes para que esto vocacionados, que os
tornam teis na sua operao em sociedade. Por exemplo, dirigir-se para a cratera Endurance, em
Marte, e recolher uma amostra do solo pode ser uma misso para um dos robs Spirit ou
Opportunity que pousaram em Marte no incio de 2004. A um rob de companhia (companion
robot em designao anglo-saxnica) pode pedir-se vai cozinha buscar uma lata de Coca-Cola e
deixa-a em cima da mesa da casa de jantar. Um rob areo autnomo pode ter alocado a misso de
fazer a vigilncia de uma zona costeira, percorrendo-a ao longo de trajetrias paralelas e um rob
futebolista pode detetar a bola, aproximar-se dela e chutar para a baliza do adversrio [1].
Embora estas misses apresentem uma grande diversidade, todas so executadas, genericamente,
atravs de um ciclo composto por:
Perceo Navegao Atuao.
O rob, com o sistema de locomoo, motores e energia move-se num ambiente total ou
parcialmente conhecido ou mesmo desconhecido e que pode ser dinmico (pode haver pessoas ou
outros objetos, p.e., robs em movimento). Para o fazer de modo seguro, por exemplo, para detetar
obstculos sua frente, tem que adquirir, analisar e interpretar informao do ambiente
circundante. a fase da Perceo que lhe d conhecimento do mundo que o rodeia. A fase seguinte
a Navegao. O robot localiza-se e, sabendo onde est e para onde deve ir, calcula como l pode
chegar, ou seja define o caminho que deve seguir.
Para o seguir de modo correto e seguro, contornando obstculos inesperados detetados na fase de
Perceo, preciso controlar devidamente os motores. a fase da Atuao. medida que o robot se
desloca, o ambiente circundante vai sendo diferente pelo que, para o correto funcionamento do
robot, o ciclo Perceo Navegao Atuao est sempre em execuo, tal como se indica no
diagrama de blocos da Figura 41[1].

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 65 -

Figura 41: Arquitetura funcional bsica de um rob [1]

Principais tcnicas navegao de robs


Na robtica mvel existem dois tipos de navegao principais: a reativa e a deliberativa [2]. A
navegao reativa tenta imitar o comportamento dos animais e seres humanos, na forma como estes
reagem imediatamente aos estmulos do meio-ambiente. Por outro lado, a navegao deliberativa
intercala o processo da tomada de deciso, desde a perceo at ao, com etapas de
planeamento. Geralmente, a fase de planeamento exige grande capacidade de processamento e
memria (requer por exemplo a existncia de mapas e outros modelos do ambiente), dificultando a
atuao do rob em tempo real, quando essa capacidade de processamento e memria no existe. O
rob em desenvolvimento apresenta uma capacidade de processamento e memria limitados
(microcontrolador Arduno uno 16MHz), sendo essa uma das principais razes por se optar por uma
estratgia de navegao reativa. Uma outra razo fundamental est associada simplicidade dos
algoritmos de navegao, tornado a opo da navegao reativa claramente vantajosa para
principiantes da robtica. As tcnicas de navegao que se apresentam de seguida enquadram-se
nas tcnicas de navegao reativas.

Tcnicas de seguimento de linha


Os algoritmos para seguimento de linha so bastante simples e consistem num conjunto de regras
bsicas s quais o rob ter de obedecer para manter o seguimento da linha com sucesso. Tal como
explicado anteriormente, estas tcnicas obedecem ao ciclo Perceo Navegao Atuao. A
perceo consiste na leitura de sensores de refletivos QRD1113 que, tal como explicado no captulo
4, detetam linha branca sobre um fundo preto, ou uma linha preta sobre um fundo branco. A
navegao consiste em determinar, com base na leitura dos sensores, se o rob se est a desviar
para a esquerda ou para a direita da linha e, com base nesta informao, determinar novos
comandos de velocidade para os motores. A atuao consiste em executar os novos comandos de
velocidade determinados pela navegao. Em teoria possvel desenvolver um sistema de
GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao
IPT - 2015 V3.2

- 66 -

seguimento de linha com apenas um sensor de deteo de linha, tal como ilustrado na Figura 42.
Porm, sugere-se que no mnimo sejam utilizados dois sensores de deteo de linha, de modo a
determinar mais facilmente se o rob se est a desviar para a esquerda ou para a direita da linha. A
existncia de um maior nmero de sensores de deteo de linha poder ajudar a obter uma
navegao mais robusta e eficaz.

Emissor
Recetor

Figura 42: Seguimento de linha dependente dos sensores disponveis

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 67 -

Tcnicas para desvios de obstculos


possvel encontrar descritas na literatura vrias tcnicas para desvios de obstculos. Entre as
tcnicas reativas de desvio de obstculos mais conhecidas destacam-se: o algoritmo bug [3,4], o
algoritmo dos campos de potenciais [5] e o algoritmo VFH (Vector field Histogram) [6].

Algoritmo bug [3,4]


Esta tcnica uma das tcnicas mais simples de desvio de obstculos. Consiste em contornar
completamente o obstculo at encontrar o ponto com a menor distncia ao obstculo. Este
algoritmo bastante ineficiente, tendo surgido na literatura vrias propostas de melhoria. Uma delas
o algoritmo bug2. Para este caso o rob tambm contorna o obstculo, mas termina o contorno
assim que intersetar o segmento de reta que une o ponto de partida e o ponto objetivo. A Figura 43
ilustra estas duas verses deste algoritmo.

Figura 43: Ilustrao do algoritmo bug.

Campo de potenciais [5]


O algoritmo campo de potenciais assume que existem foras virtuais que atraem o rob para o ponto
objetivo e o afastam dos obstculos. O caminho que o rob ir seguir resultante da aplicao de
todas as foras virtuais. A Figura 44 ilustra este algoritmo.

Figura 44: Ilustrao do algoritmo campo de potencial.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 68 -

VFH [6]
O algoritmo VFH constri, numa primeira fase, um histograma idntico ao da Figura 45. Este
histograma determinado com base na informao providenciada por sensores instalados no rob,
tais como um anel de sonares, um sensor laser, ou qualquer outro sistema que providencie um
varrimento das distncias mnimas ao rob.

Figura 45: Ilustrao do algoritmo VFH.

Com base no histograma possvel determinar as direes livres. O passo seguinte consiste em
escolher uma direo livre e comandar o rob nessa direo. A escolha da melhor direo depende
de vrios fatores, tais como: direo mais prxima de um ponto objetivo, direo que causa menos
esforo de rotao ao rob, etc.

Tcnica de desvio de obstculos baseada num sonar acoplado a um servo


Tendo em conta as limitaes de processamento e sensores que o rob possui, torna-se necessrio
encontrar um algoritmo simples e com um grau de robustez adequado. Uma vez que no praticvel
instalar um anel com vrios sonares volta do rob, graas s limitaes do microcontrolador e
muito menos instalar um laser range finder, o qual requer uma capacidade de processamento muito
elevada, torna-se necessrio investigar qual o sistema de perceo mais adequado a este rob. Neste
sentido prope-se a utilizao de um sonar acoplado a um servo. Esta soluo permite realizar
varrimentos entre [0 ], por exemplo, com apenas um sensor. Basta para tal comandar o servo de
modo a realizar sucessivamente esses varrimentos. A Figura 46 ilustra esta soluo.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 69 -

Figura 46: Exemplo de um rob com um sistema servo + sonar para deteo de obstculos.

Um algoritmo muito simples consiste em definir trs estados diferentes para o rob,
designadamente: parado, andar em frente e virar. O estado parado indica que o rob no se
encontra em movimento, andar em frente consiste no estado em que o rob segue o seu caminho
sem obstculos frente e o estado virar, consiste em virar o rob sempre que ele encontra um
obstculo. O fluxograma seguinte ilustra este algoritmo simples:

Parado?

sim

No faz nada

sim

Para

no

Terminou o
programa?

no

A andar em
frente?

sim

Obstculo em
frente?

sim

Vira

sim

Anda em
frente

no

no

A virar?

No faz nada

sim

Terminou a
rotao?

no

No faz nada

Figura 47: Exemplo de algoritmo para desvio de obstculos.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 70 -

Tcnica dos comportamentos de Brooks (subsumption architecture)


A tcnica dos comportamentos (designada na literatura anglo-saxnica por subsumption
architecture) foi proposta pelo professor Rodney Brooks do MIT [7], como uma alternativa vlida ao
paradigma modelao/planeamento, o qual exige capacidade de processamento e memria. Esta
tcnica providencia uma forma de combinar em tempo-real camadas de controlo distribudas,
atravs da utilizao de comportamentos espeloteados por determinados estados dos sensores. Ou
seja, para esta estratgia, os sensores so responsveis por iniciar comportamentos pr-definidos
[8].
Os comportamentos no so mais do que camadas de controlo que funcionam em paralelo, sempre
que ativados pelos sensores que lhes esto associados. O problema central desta estratgia consiste
na fuso de comportamentos, ou seja, se dois comportamentos forem despoletados ao mesmo
tempo, o que que o rob dever fazer? A resposta a esta questo reside na realizao de um
sistema de fuso comportamental que ser responsvel por resolver este tipo de conflitos. A ttulo
de exemplo, suponha-se a existncia de dois comportamentos: seguir linha branca sobre fundo preto
e desvio de obstculos. Na eventualidade de surgir um obstculo enquanto o rob segue a linha,
como que este dever proceder? Uma possibilidade ser: contornar obstculo at que este seja
ultrapassado e depois seguir novamente a linha. Este esquema de arbitragem com prioridades uma
tcnica de fuso comportamental que determina o comportamento dominante para um dado
cenrio. A Figura 48 ilustra um exemplo de aplicao da estratgia de comportamentos.
Bumper

Escapar

Sonar

Desviar de
obstculo

Sensor
refletivo

Seguir Linha

Vaguear

Motores

Figura 48: Estratgia de comportamentos proposta Brooks [7].

Note-se que de acordo com esta estratgia, no existem comportamentos a chamar outros
comportamentos (como se fossem subrotinas). Pelo contrrio, todos os comportamentos correm em
paralelo. Porm, os comportamentos de nvel mais alto (na Figura 48 esse comportamento ser o
Escapar quando um bumper ativado) tm o poder de suprimir temporariamente os
comportamentos de nvel mais baixo. Quando os comportamentos de nvel mais elevado deixarem
de ser lanados pelos sensores associados, os de nvel mais baixo entram em funcionamento.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 71 -

Programa Arduino para seguimento de linha


O prximo passo consiste em fazer um programa para o microcontrolador Arduino que permita fazer
o seguimento de linha. Numa primeira fase, prope-se fazer o seguimento de linha assumido que
no existiro obstculos a impedir o percurso do rob. Assume-se ainda que o rob possui trs
sensores de infra-vermelhos que permitem a deteo da linha branca sobre um fundo preto. Nesta
fase, caso existam dvidas, deve consultar a seco de fotodeteo do Captulo 4. Na seco seguinte
aborda-se um algoritmo de navegao possvel.

Algoritmo de seguimento de linha


O algoritmo de seguimento de linha que se prope de seguida tem por pressuposto a existncia de
trs sensores de fotodeteo de linha branca sobre fundo preto. Tal como sugerido anteriormente,
ir usar-se o fotodetor com referncia QRD1113. O fluxograma apresentado na Figura 49 ilustra o
algoritmo proposto:
Inicio

Leitura de
dados dos
sensores

Sensor direito
deteta linha?

sim

Curva suave para


a direita

sim

Curva suave para


a esquerda

no

Sensor esquerdo
deteta linha?

sim

Movimento em
linha reta

no

Apenas sensor centro


deteta linha?

sim

Curva
acentuada para
a direita

no

Nenhum sensor deteta


linha e ltimo estado
curva para direita

sim

Curva
acentuada para
a esquerda

no

Nenhum sensor deteta


linha e ltimo estado
curva para esquerda

no

Movimento em
marcha-atrs

Figura 49: Algoritmo possvel para seguimento de linha com trs sensores de fotodeteo.

Este algoritmo prev seis situaes distintas, designadamente:


1. Se apenas o sensor do meio deteta a linha branca, tal significa que o rob deve andar em
frente;

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 72 -

2. Quando o sensor da direita deteta a linha branca, significa que o rob se est a desviar para a
esquerda da linha e como tal deve compensar o movimento realizando uma curva suave para
a direita;
3. Quando o sensor da esquerda que deteta a linha branca, est-se em presena da situao
oposta, ou seja, o rob est desviar-se para a direita da linha e como tal deve compensar o
movimento realizando uma curva suave para a esquerda;
4. Quando nenhum sensor deteta linha, avalia-se em primeiro lugar qual o ltimo estado de
deteo de linha do rob. Se foi curva suave para a direita, significa que o rob
provavelmente no conseguiu compensar o movimento de forma adequada e por esse
motivo realiza-se agora uma curva acentuada para a direita;
5. Se nenhum sensor deteta linha e o ltimo estado foi curva suave para a esquerda, realiza-se
uma curva acentuada para a esquerda, por razes anlogas s do ponto 4.
6. Finalmente, se no se deteta linha e o rob estava a andar em frente, significa que ele saiu
de pista em frente e por isso necessrio faz-lo recuar em marcha atrs para apanhar
novamente a linha.

Cdigo do programa
Para realizar o programa em C para o Arduino necessrio relembrar em, primeiro lugar, algumas
funes essenciais.
//Funo para ler um valor de um sensor digital
int Value = digitalRead(s1);
//Funo para ler um valor de um sensor analgico
int Value = analogRead(A0);
//Funo para escrever a velocidade dos motores
analogWrite(int motor, int vel);
//Funo para escrever a direo dos motores
digitalWrite(int motor, int dir);

O primeiro passo da realizao do programa proposto consiste em definir as entradas e sadas do


sistema, definindo tambm os pinos de entrada e sada do Arduno. Uma possvel declarao de
variveis
para
este
programa

como
se
segue.
//Declarao das variveis associadas aos fotodetetores
int s1 = 2;
int s2 = 3;
int s3 = 4;
//Declarao das variveis associadas ao motor A esquerdo
int mA1 = 10;
int mA2 = 11;
//Declarao das variveis associadas ao motor B direito
int mB1 = 10;
int mB2 = 11;

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 73 -

//Declarao das variveis das velocidades normais dos


//motores
int normalA = 255;
int normalB = 255;
//Declarao das variveis das velocidades de correo dos //motores
int correcaoA = 220;
int correcaoB = 220;
int parado = 0;
//Declarao das variveis auxiliares
int LINHA = LOW;
int FUNDO = HIGH;
//Variveis que informam sobre o ltimo estado da navegao
int RETA = 1;
int DIREITA = 2;
int ESQUERDA = 3;
int ultimoEstado = RETA; //inicializao da varvel ltimo //estado

De seguida procede-se configurao das variveis do programa como entradas ou sadas do


microcontrolador. Tal realizado na funo de configurao setup().
void setup() {
//Serial.begin(9600);
pinMode(s1, INPUT);
pinMode(s2, INPUT);
pinMode(s3, INPUT);
pinMode(mA1, OUTPUT);
pinMode(mA2, OUTPUT);
pinMode(mB1, OUTPUT);
pinMode(mB2, OUTPUT);
}

Na funo loop(), que como o nome indica corre permanentemente em ciclo, ir programar-se o
algoritmo proposto.
void loop()
{
if(digitalRead(s2)==Linha)
{
//primeiro caso: CURVA DIREITA
filtroCurvaD++;
if(filtroCurvaD >= filtroN)
{
analogWrite(mA1,normalA);
digitalWrite(mA2,LOW);

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 74 -

analogWrite(mB1,correcaoB);
digitalWrite(mB2,LOW);
filtroCurvaD = 0;
ultimoEstado = DIREITA;
}
}
else if(digitalRead(s1)==Linha)
{
//segundo caso: CURVA ESQUERDA
filtroCurvaE++;
if(filtroCurvaE >= filtroN)
{
analogWrite(mA1,correcaoA);
digitalWrite(mA2,LOW);
analogWrite(mB1,normalB);
digitalWrite(mB2,LOW);
filtroCurvaD = 0;
ultimoEstado = ESQUERDA;
}
}
else if(digitalRead(s3)==Linha && digitalRead(s2)==Fundo
digitalRead(s1)==Fundo)
{
//terceiro caso: LINHA RETA
filtroReta++;
if(filtroReta >= filtroN)
{
analogWrite(mA1,normalA);
digitalWrite(mA2,LOW);

&&

analogWrite(mB1,normalB);
digitalWrite(mB2,LOW);
filtroReta = 0;
ultimoEstado = RETA;
}
}
else if(digitalRead(s3)==Fundo && digitalRead(s2)==Fundo &&
digitalRead(s1)==Fundo)
{
// caso: LINHA DESAPARECEU
filtroNADA++;
if(filtroNADA >= filtroN)
{
if(ultimoEstado == DIREITA)
{
analogWrite(mA1,correcaoA);
digitalWrite(mA2,LOW);
analogWrite(mB1,LOW);
digitalWrite(mB2,LOW);
}
else if(ultimoEstado == ESQUERDA)
{
analogWrite(mA1,LOW);
digitalWrite(mA2,LOW);
analogWrite(mB1,correcaoB);
GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao
IPT - 2015 V3.2

- 75 -

digitalWrite(mB2,LOW);
}
else if(ultimoEstado == RETA)
{
analogWrite(mA1,correcaoA);
digitalWrite(mA2,LOW);
analogWrite(mB1,correcaoB);
digitalWrite(mB2,LOW);
}
filtroNada = 0;
}
}

Note-se a utilizao de variveis filtro no algoritmo anterior, designadamente: filtroCurvaD,


filtroCurvaE, filtroReta, filtroNada e filtroN. Estas varives servem para dar mais suavidade ao
movimento, uma vez que estes s permitem uma determinada ao se a condio dos sensores se
mantiver em cinco leituras seguidas (valor de filtroN).

Programa Arduino para desvio de obstculos


O prximo passo consiste em fazer um programa para o microcontrolador Arduno que permita fazer
o desvio de obstculos. Assume-se que o rob possui um sistema de deteo de obstculos que
consiste num servo com um sonar. Nesta fase, caso existam dvidas, deve consultar a seco de
medio de distncias com um sonar ou com um IR do Captulo 5. Na seco seguinte aborda-se um
algoritmo possvel de desvios de obstculos.

Algoritmo de desvio de obstculos


O algoritmo de desvio de obstculos proposto baseia-se na ideia de que o rob deve-se desviar dos
obstculos mantendo-se em movimento, devendo apenas parar em situaes de coliso eminente. O
fluxograma apresentado na Figura 47 ilustra o algoritmo proposto. So executados varrimentos do
espao em frente ao rob, utilizando o sensor associado ao sistema servo, enquanto o rob se move.
Desta forma pretende-se que o rob seja capaz de evitar os obstculos com pequenas correes do
movimento.

Cdigo do programa
O primeiro passo da realizao do programa proposto consiste em definir as entradas e sadas do
sistema, definindo tambm os pinos de entrada e sada do Arduino. Uma possvel declarao de
variveis para este programa como se segue.
#include <Servo.h>
//a biblioteca Servo.h encontrase descrita em http://arduino.cc/en/reference/servo

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 76 -

//declarar Servos
//Notar que estas declaraes so apenas exemplos
Servo servoEsquerda; //motor roda esquerda
Servo servoDireita; //motor roda direita
Servo servoVarrimento;// sensor servo
const int pinoDist = 7; //Pino associado ao sensor do servo.
const int pinoEsquerda = 9; //pino para o servo da esquerda
const int pinoDireita = 10; // pino para o servo da direita
const int pinoVarrimento = 6; // pino para o servo de //varrimento
const int limiteDistancia = 20; //se o obstculo se encontrar a esta
//distncia ou inferior, o rob faz qualquer coisa //para evitar obstculo
int tempoVarrimento = 0;
int ultimoTempoVarrimento = 0;
char sensorPosicao = 'L';
long tempoAnterior = 0;
long tempodesdeviragemEsquerda = 0;
long tempodesdeviragemDireita = 0;

De seguida apresenta-se a funo de configurao setup() que apenas corrida uma vez sempre que
o cdigo executado.
void setup()
{
servoEsquerda.attach(pinoEsquerda); //Associa o servo //esquerdo ao pino.
servoDireita.attach(pinoDireita); // Associa o servo direito //ao pino.
servoVarrimento.attach(pinoVarrimento); // Associa o servo //varrimento ao
pino.
Serial.begin(9600);
delay(2000); // espera dois segundos
}
void loop()
{
int distanciaEsquerda = 90;
int distanciaDireita = 90;
linefollowing();// Se tudo estiver bem segue a linha
if(millis()>tempoAnterior+300)
{
if(sensorPosicao == 'L')
{
distanciaEsquerda = distancia();
Sensorposicao = 'R';//Para saber o ltimo lado do servo
}
else
{
distanciaDireita = distancia();
Sensorposicao = 'L';//Para saber o ltimo lado do servo
}
tempoAnterior = millis();//mills()funo que devolve o
// tempo decorrido desde que o rob foi ligado
}
switch (sensorPosicao)
{
case 'L': // se o servo estiver na esquerda
GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao
IPT - 2015 V3.2

- 77 -

servoVarrimento.write(70); // move-se para a direita


break;
case 'R': // se o servo estiver na direita
servoVarrimento.write(110); // move-se para a esquerda
break;
}
if(distanciaEsquerda < limiteDistancia)//se obstculo //esquerda
{
if (millis() < tempodesdeviragemEsquerda + 500)//se no //houver tempo
de //virar de imediato, recua primeiro
{
recua(500);
virarDireita(120);
}
else//seno vira logo
{
virarDireita(25);
}
tempodesdeviragemdireita = millis();
}
if(distanciaDireita < limiteDistancia)
{
if(millis() < tempodesdeviragemdireita + 500)
{
recua(500);
virarEsquerda(120);
}
else{
virarEsquerda(25);
}
tempodesdeviragemEsquerda = millis();
}
}

De seguida apresenta-se a funo de leitura do sensor de distncia int ping(), neste exemplo
considerou-se um sonar. Esta funo devolve a distncia aos obstculos em cm.
//Funo definida para sensor sonar associado a um servo
int distancia()
{
long duracao, distancia;
//enviar Pulso
pinMode(pinoDist, OUTPUT);
digitalWrite(pinoDist, LOW);
delayMicroseconds(2);
digitalWrite(pinoDist, HIGH);
delayMicroseconds(5);
digitalWrite(pinoDist, LOW);
//Ler eco
pinMode(pinoDist, INPUT);
duracao = pulseIn(pinoDist, HIGH);
// converter tempo para distancia
distancia = microsegundosparacms(duracao);
Serial.print("Distancia: ");

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 78 -

Serial.println(distancia);
return round(distancia);
}

De seguida apresenta-se um exemplo de uma funo de movimento, designadamente da funo


virarDireita(float t) e a funo que converte tempo em microssegundos para distncia em cms, long
microsegundosparacms(long microseconds).
//Funo para virar direita
void virarDireita(float t)
{
servoEsquerda.write(30);
servoDireita.write(30);
t=(t/120)*1000;
Serial.print("viragem direita durante: ");
Serial.println(t);
delay(t);
}
//Funo para converter miscrosegundos para centmetros
long microsegundosparacms(long microseconds)
{
return microseconds / 29 / 2;
}

Referncias
[1] Maria Isabel Ribeiro. Uma viagem ao mundo dos robs. Relatrio Tcnico IST, Junho, 2006.
[2] R. Murphy. Introduction to AI Robotics. The Massachusetts Institute of Technology Press,
2000.
[3] V. Lumelsky, A. Stepanov. Path-Planning Strategies for a Point Mobile Automaton Moving
Amidst Unknown Obstacles of Arbitrary Shape. in Autonomous Robot Vehicles. New York, SpingerVerlag, 1990.
[4] I. Kamon, E. Rivlin, E. Rimon. A New Range-Sensor Based Globally Convergent Navigation
Algorithm for Mobile Robots, in Proceedings of the IEEE International Conference on Robotics and
Automation, Minneapolis, April 1996.
[5] O. Khatib. "Real-Time Obstacle Avoidance for Manipulators and Mobile Robots."
1985 IEEE International Conference on Robotics and Automation, March 25-28, St. Louis, pp: 500505.
[6] - J. Borenstein, Y. Koren. The Vector Field Histogram Fast Obstacle Avoidance for Mobile
Robots. IEEE Journal of Robotics and Automation, 7, pp: 278288, 1991.
[7] - R. A Brooks (1991). "Intelligence Without Representation", Artificial Intelligence 47 (1991) 139159.
[8] - Joseph L. Jones, Anita M. Flynn. Mobile robots: inspiration to implementation Cambridge
Publication. A. K. Peters, Ltd. Natick, MA, USA 1993 ISBN:1-56881-011-3.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 79 -

Captulo 6 Competio: Regras e


Especificaes Tcnicas
Paulo Coelho, Ana Lopes e Gabriel Pires
Introduo
Nesta competio procura-se recriar problemas inspirados nos desafios que um rob autnomo ter
de enfrentar durante a sua utilizao em diversos ambientes, como por exemplo numa fbrica. Os
robs devero apresentar um mnimo de capacidades que incluem localizarse e navegar no
ambiente fornecido, assim como evitar choques com paredes, obstculos e outros robs.
Toda as dimenses indicadas neste documento, salvo indicao em contrrio, assumem uma
tolerncia de +/- 5%.

Definies
Dependendo do nmero de participantes, uma prova poder ser uma nica corrida ou um conjunto
de eliminatrias.
Uma corrida tambm denominada de eliminatria.
Uma pista um circuito fechado demarcado por uma linha.

Os Robs
Os robs devero ser autnomos e no devero ter fios eltricos a lig-los a nenhum elemento
externo, logo no podendo estabelecer nenhum tipo de comunicao com um sistema externo que
no seja o explicitamente fornecido ou autorizado pela organizao. Os robs podero ser ativados
por humanos, manualmente ou atravs de um controlo remoto.
- Cada rob participante deve ter um nome, fornecido aquando da inscrio;

Dimenses
Cada rob deve caber num retngulo com 35 x 30 cm no existindo restries relativamente altura.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 80 -

A pista
O Sistema de Localizao
No cho estaro presentes linhas brancas que permitiro um seguimento das mesmas por parte dos
robs. No entanto a sua configurao ser de modo a que as equipas que utilizem sistemas de
localizao/programao prprios possam retirar vantagens dos mesmos.

Piso da Pista
A superfcie da pista ser preta, feita com diversos materiais possveis, portanto eventuais emendas
de placas sero necessrias para compor toda a rea do percurso, para tal possveis desnveis
podero ocorrer, a organizao tentar minimiz-los da melhor maneira possvel adicionando fita
preta em todas as emendas. De qualquer forma os robs devem ser capazes de superar tais desnveis
( 1mm) sem perder a linha guia.
Nota: As cores da linha e da pista esto sujeitas a possveis variaes, dependendo do fornecedor e
dos materiais utilizados no fabrico dos mesmos, porm existe um grande contraste entre o branco da
linha e o preto da pista.

Linhas
A linha ser demarcada com fita branca de 50 mm (ou inferior) de largura. O comprimento total da
linha ser no mximo 60m. A linha a indicao do caminho que o rob deve seguir (PISTA). A linha
consistir em combinaes de retas e arcos. O raio de curvatura mnimo ser R=100mm. Cada arco
ter tambm um comprimento mnimo de 100mm.
A linha poder cruzar sobre ela mesmo. Quando houver um cruzamento, o ngulo de interseco
das linhas ser de 905. As partes das linhas 250mm antes e 250mm depois do cruzamento sero
retas.

Extras do Percurso
Poder haver na pista os seguintes itens: rampa, ponte, tnel e guarda rail. A inclinao mxima da
rampa ser de 50%, a altura mnima do tnel ser 220mm. Os robs devem ser capazes de transpor
esses obstculos. Obs.: o clculo da inclinao de uma rampa feito com a seguinte equao:

inclinao %

Altura do desnvel
100
Comprimento horizontal

A rea que se estende entre o ponto de partida e o ponto de chegada, considerando 200mm direita
da linha limite e 200mm esquerda da linha limite denominada "rea de partida chegada" (ver
Figura 50 - A rea que se estende entre o ponto de partida e o ponto de chegada.).

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 81 -

rea Partida - Chegada

Sentido
Marcao
Chegada

400 mm

Marcao
Partida

1m

Figura 50 - A rea que se estende entre o ponto de partida e o ponto de chegada.

A linha de partida e a linha de chegada sero localizadas numa reta do percurso (pista). A linha de
chegada ser localizada a um metro para trs da linha de partida. Haver marcaes no lado direito
da linha (em relao ao sentido do percurso), indicando o ponto de partida e o ponto de chegada
(ver figura anterior). A linha, 250mm antes e 250mm depois da "rea de partida-chegada", ser reta.

Iluminao
O ambiente da competio ter iluminao artificial, no ser garantido, no entanto, nvel de luz
constante nem ausncia de sombra, portanto os robs devem ser capazes de se adaptar s condies
de luz.

Campo eletromagntico, vento e outras influncias


A organizao no garante a ausncia de campo eletromagntico, de poeira nem de qualquer outra
pequena influncia externa pista. Recomenda-se que os robs sejam imunes a essas influncias.

Competio
A competio est dividida em duas provas, realizadas num nico dia.
As provas so:
- Seguimento de Linha;
- Desvio de Obstculos;
Cada uma das provas ter regras especficas, que sero apresentadas ao longo deste regulamento.
No entanto, convm desde j advertir que, durante a competio em cada tentativa de prova a
classificao ser o tempo da prova mais as penalizaes adicionais.
Tempos de penalizao: Cada choque do rob contra qualquer obstculo, parede, etc., ser
penalizado com 4 segundos.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 82 -

Resoluo de problemas com o rob durante a prova


Se em qualquer momento o responsvel pela equipa considerar que o rob se encontra numa
situao da qual no espera ser capaz de recuperar, poder pedir para interromper a prova e aceder
ao rob. Esta ao pode ser efetuada at quatro vezes durante uma manga/prova. Durante a
interveno sobre o rob o tempo no pra.

Vistoria tcnica
Antes do incio da competio todos os robs sero vistoriados, isso tambm poder ocorrer a
qualquer momento durante a competio, se a organizao considerar necessrio. Se o rob no
estiver de acordo com qualquer dos itens constantes deste regulamento, o rob ser desclassificado
da manga/prova.
Os robs sero verificados quanto presena de equipamentos de comunicao tais como
Bluetooth, RF e Wi-Fi, tambm quanto presena de partes mveis que prejudiquem a contagem
de tempo e de peas soltas que possam vir a prejudicar o bom andamento da prova. No ser
permitida a participao de robs no conformes, mas a equipa ter sempre tempo de fazer os
ajustes para a prxima manga.

Parque fechado
Uma hora antes do incio de cada manga os robs devero ser colocados no parque fechado,
deixando as equipas de ter acesso ao rob at cerca de 10 minutos antes do incio da respetiva
prova. Nessa altura, que ser sinalizada pelos rbitros/Jri, a equipa poder preparar o rob para
iniciar a sua prova.

Classificao final
A classificao final ser obtida somando as classificaes nas duas provas. A pontuao para efeito
de classificao final das equipas ser calculada com a seguinte equao:

pontuao final 0.5 SG 0.5 DO


SG pontuao seguimento linha
DO pontuao desvio de obstaclos

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 83 -

Jri, rbitros e Relgio de contagem do tempo

Jri
O jri a autoridade mxima na interpretao e aplicao das regras, e em qualquer deliberao
relacionada com situaes no previstas nas regras. A sua misso ser verificar se os robs esto de
acordo com as regras, durante a verificao tcnica e apoiar o rbitro durante a competio.
Atravs da sua autoridade o jri assegurar justia na aplicao das regras e regulamentos.
As decises do jri so finais e sem recurso. O jri nomeado pela organizao.
(Cada prova ter 1 ou 2 juzes que iro coordenar e avaliar a prova executada pelo rob de cada equipa).

rbitro
O rbitro assegura a correta aplicao das regras da competio e autoriza, se necessrio, os
membros das equipas a entrarem dentro da rea de competio para eventuais testes no incio da
prova. O rbitro pode interromper os testes sempre que necessrio para consultar e dialogar com o
jri.
Em relao a situaes no previstas pelas regras o rbitro deve, em todos os casos, consultar o jri.
O rbitro nomeado pela organizao.
(Cada prova ter 1 ou 2 rbitros que iro acompanhar e avaliar a prova executada pelo rob de cada equipa).

Relgio de contagem do tempo


O relgio de contagem do tempo integrado no sistema de controlo da prova. Este sistema inclui
dois relgios independentes: um totalizador de tempo que conta o tempo total gasto durante a
prova toda (testes e tentativas) e outro que conta o tempo de cada tentativa.

Reunio de abertura
Ser obrigatrio o comparecimento de pelo menos um representante de cada equipa na Reunio de
Abertura da Competio. O local e horrio desta reunio ser divulgado com antecedncia pela
organizao. A ausncia do representante ir acarretar em penalizao para a equipa.

Conduta e Segurana
Durante o evento no ser permitido o consumo de bebidas alcolicas nem por parte dos
competidores nem dos espectadores. Evidncias de consumo ou posse de bebidas alcolicas ou de
substncias ilegais ou controladas, em qualquer momento da competio, implicaro a
desclassificao imediata, sem direito a reclamaes.
Para evitar situaes perigosas so proibidas todas as substncias que possam por em risco as
pessoas ou o material, tais como exploses, fumo, chamas, alta tenso, uso de gua ou outras.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 84 -

Regras Especficas das Vrias Provas


Regulamento da Prova de Seguimento de Linha

Descrio da prova
A prova ter incio aps o sinal dado por um elemento da organizao que ir ordenar a chamada e a
apresentao de cada uma das equipas.
Todas as equipas devero estar prontas para participar 10 min antes do incio da prova. As equipas
sero chamadas pela ordem de inscrio. A no comparncia de uma equipa aquando da chamada
implica a sua imediata desqualificao. Duas equipas podem trocar de lugar na prova, desde que
cheguem a acordo e informem antecipadamente o jri (at 15min antes do incio previsto da prova).
S permitida a presena de um elemento de cada equipa por cada prova.
O objetivo da prova fazer com que o rob siga um trajeto determinado por uma linha. Vence o
rob que finalizar o trajeto em menor tempo. O rob mais veloz e que no cometer erros dever
vencer esta prova.

Regras da prova
O rob dever percorrer o circuito tomando como referncia a linha branca. O corpo do rob dever
sempre ficar sobre a linha. Caso o rob saia completamente de cima da linha branca, ser
considerado que o rob saiu do percurso e ser desclassificado da manga. Considera-se perder a
linha quando o rob sair completamente da sua linha.
Um rob perde a linha quando esta no se encontra por baixo da estrutura do mesmo. Se a linha sair
do alcance do sensor de linha, um rob pode sempre tentar encontr-la novamente desde que a
linha esteja debaixo da sua estrutura.
As duas imagens da Figura 51 exemplificam situaes em que o rob no perdeu a linha e ainda
contnua em prova.

Figura 51 - O rob ainda continua em prova.

As duas imagens da Figura 52 exemplificam situaes em que o rob perdeu a linha est
desclassificado.
GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao
IPT - 2015 V3.2

- 85 -

Figura 52 - O rob est desclassificado.

Para cada rob sero concedidas 2 tentativas de 4 minutos para percorrer a pista. Assim, Cada rob
ter tempo limite de 4 minutos para percorrer a pista, excedido esse tempo o rob ser retirado para
dar oportunidade ao prximo.
O rob dever iniciar a prova na marcao de partida e percorrer o circuito na direo correta.
Entretanto poder percorrer o circuito inmeras vezes sem interrupo enquanto ainda estiver
dentro prazo estipulado dos 4 minutos.
Ser considerado o menor tempo entre todas as tentativas.
Aps terminar uma volta, o operador (programador) no poder "fornecer" informaes ao rob
sobre o trajeto e no poder incluir, rever ou alterar informaes deste tipo durante a competio.
Aps iniciada a partida, no ser permitido tocar no rob sem a autorizao do juiz.
O juiz poder solicitar informaes sobre o rob as quais jugar necessrias. O Juiz tem o poder de
desclassificar um rob e/ou tomar qualquer deciso que ache pertinente durante a competio.
A organizao pode se assim o entender acrescentar as seguintes regras a esta prova, de modo a
aumentar a dificuldade da mesma:
O rob dever parar, automaticamente, dentro da "rea de partida-chegada" e permanecer parado
pelo menos 2 segundos aps completar uma volta.
O tempo da volta ser medido entre a hora que o sensor na linha de partida do circuito detetar o
rob, e a hora em que o sensor da linha de chegada do circuito detetar o mesmo rob. Entretanto o
tempo no ser considerado enquanto o rob no passar completamente pela linha de chegada.
Uma volta ser considerada vlida quando o rob terminar o percurso e permanecer pelo menos 2
segundos parado na "rea de partida-chegada", e ser cancelada quando o rob sair do percurso.

_________________

_________________

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 86 -

Regulamento da Prova de Desvio de Obstculos

Descrio da prova
A prova ter incio aps o sinal dado por um elemento da organizao que ir ordenar a chamada e a
apresentao de cada uma das equipas.
Todas as equipas devero estar prontas para participar 10 min antes do incio da prova. As equipas
sero chamadas pela ordem de inscrio. A no comparncia de uma equipa aquando da chamada
implica a sua imediata desqualificao. Duas equipas podem trocar de lugar na prova, desde que
cheguem a acordo e informem antecipadamente o jri (at 15min antes do incio previsto da prova).
S permitida a presena de um elemento de cada equipa por cada prova.
O objetivo da prova fazer com que o rob percorra o caminho da pista o mais rapidamente possvel
e sem colidir com os obstculos (paredes, etc.), desviando-se dos mesmos. Cada coliso tem uma
penalizao de 4s.
A Figura 53 ilustra um exemplo de uma configurao possvel.

Figura 53 - Configurao possvel para prova de desvios de obstculos.

A pontuao dada pelo menor tempo de percurso completo ou maior percurso percorrido at ao
limite de tempo da prova.
Cada prova ter um tempo limite de 5 min. Cada equipa dispe de 2 tentativas. Ser registado o
melhor resultado das duas tentativas.
No final da prova de obstculos, e em caso de igualdade pontual entre duas ou mais equipas nos
primeiros lugares, o jri poder requerer a repetio da prova pelas equipas envolvidas.
As regras seguintes devem ser lidas e respeitadas, para que a prova decorra em conformidade com o
estabelecido e de acordo com as normas de segurana.

Regras da prova
A pista poder ter um formato varivel com um mximo de 60 metros de longitude. A pista de cor
preta, tem 5 m de largura e poder estar limitada por paredes de cor branca com 20cm a 30cm de

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 87 -

altura. No piso da pista existe uma linha branca com 5 cm de espessura mxima, que poder servir
de guia para quem tiver sensor de linha (note-se que poder existir partes do percurso sem linha).
Nenhum elemento da equipa pode tocar no rob durante a prova, a menos que devidamente
autorizado pelos juzes.

Durao da prova
Cada prova ter um tempo limite de 5 min. Cada equipa dispe de 2 tentativas. Ser registado o
melhor resultado das duas tentativas.
Cada coliso tem uma penalizao de 4s.
O jri pode interromper a prova a qualquer altura, se a situao o justificar.
_________________

_________________

Um sorteio ditar ordem de participao nas provas dos grupos/robs participantes.


A equipa vencedora ser aquela que obtiver maior pontuao nas duas provas.

_________________

_________________

NOTA: Qualquer situao omissa neste regulamento ser avaliada e decidida


soberanamente pelo jri e sem direito a recurso.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 88 -

ANEXOS:
1) PISTA

3500,00

7000,00

5000,00

2500,00

Figura 54 Pista.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 89 -

2) MEDIDAS DA PISTA
5000,00
R 350,00
1900,00
R 275,00

R 350,00
2223,33

2300,00

900,00

R 650,00

608,28

R 500,00

7000,00

5583,91

R 320,00

R 350,00
500,00

3500,00

R 160,00

257,00

R 700,00
R 440,00
1120,00
R 290,00
2500,00

Figura 55 - Medidas da Pista.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 90 -

Anexos

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 91 -

Esquema de Alimentao
Pedro Neves

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 92 -

Esquema de ligao da alimentao

Figura 56 - Esquema de ligao da alimentao

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 93 -

Esquema de ligao da alimentao ao Drive Potncia

Figura 57 - Esquema de ligao da alimentao ao Drive Potncia

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 94 -

Shield de sensores do GreenT


Pedro Neves

O shield de sensores do GreenT


O rob GreenT para navegar no meio envolvente necessita de diversos sensores que lhe transmitam
informaes sobre este. Para tal o GreenT foi equipado com um shield que faz a interligao entre
todos os seus sensores e a placa controladora Arduino Mega.
A Figura 58 mostra o shield com a legendagem dos seus conectores.

Pinos Digitais
Encoders
Pinos Digitais
Sonar
Conector LCD
Bumpers

Controlo Motor

Servo
Motor

Pinos Digitais

Sensor IR
Sensores
Linha

Pinos Analgicos

Figura 58- Shield de sensores do GreenT

Descrio do pinout dos conectores dos sensores e sua cablagem:


Conector

Servo Motor

Tipo

Pinos
Conector
1
2
3

Ligao

Condutor

VCC
GND
Input (Digital)

Vermelho
Preto
Laranja

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

Pino
Arduno
11
- 95 -

Sensor IR

1
2
3

VCC
GND
Output (Analgica)

Vermelho
Preto
Amarelo/Branco

Coletor (5V-1k)

Amarelo

2
3

nodo (5V-220R)
GND

Azul
Branco

Esquerda - A1/26
Direta - A2/28
Centro - A3/42
-

1
2
3
4
5

Vcc
GND
GND
N/C
Output (Digital)

Vermelho
Azul
Preto
Amarelo

1
2
3

Vcc
GND
N/C

Azul
Verde
-

Output A (Digital)

Branco

Output B (Digital)

Amarelo

Esquerda 2
Direita - 3
Esquerda 4
Direita - 5

Pino M (PWM)

Amarelo

Pino E (Digital)

Branco

5V

Vermelho

Input (Digital)

Amarelo

Sensores Linha

Sonar

Encoders

Controlo Motores

Bumpers

A0

Esquerda 9
Direita - 10
Esquerda 30
Direita - 32
Esquerda 40
Direita - 38

O shield, para alm dos conectores dedicados para a ligao de sensores, possui ainda pinos para
conexo de dispositivos adicionais. Esto disponveis pinos digitais e pinos analgicos.
Os pinos de conexo adicional so compostos pela ligao ao microcontrolador e a cada um destes
est associada um pino de 5V e outro de GND, de acordo com o inscrito no shield. Existe ainda
disponvel um conector dedicado para ligao de um LCD, para o qual necessrio colocar o divisor
resistivo, para o contraste (Vo), adequado ao LCD em utilizao.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 96 -

Conector
Pinos de
conexo
adicional

LCD

Tipo

Pinos
Conector
1
2

Ligao

Descrio

GND
5V

Pino Analgico ou
Digital

Pino Micro

1
2
3
4
5
6
7
8
9
10

5V
GND
Vo
RS
R/W
E
D4
D5
D6
D7

Contraste LCD
Register Select
Read/Write
Enable
Pino dados
Pino dados
Pino dados
Pino dados

Pino
Arduno
-

33
GND
35
37
39
41
43

Figura 59 - Shield de sendores do GreenT - PCB

necessrio colocar o divisor resistivo, para o contraste (V0), adequado ao LCD em utilizao.

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 97 -

Figura 60 - Shield de sensores do GreenT PCB: vista superior (TOP).

Figura 61 - Shield de sensores do GreenT PCB: vista inferior (BOTTOM).

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 98 -

GreenT
Manual de Formao

Escolher Robtica, Escolher Cincia!


Workshop de Robtica Mvel

Ana Lopes * Carlos Ferreira * Gabriel Pires * Paulo Coelho * Pedro Correia * Pedro Neves

Fevereiro de 2015
Instituto Politcnico de Tomar
www.ipt.pt

GreenT - ESCOLHER ROBTICA, ESCOLHER CINCIA! Manual de Formao


IPT - 2015 V3.2

- 99 -

Você também pode gostar