Escolar Documentos
Profissional Documentos
Cultura Documentos
Manual de Formao
Fevereiro de 2015
Instituto Politcnico de Tomar
www.ipt.pt
V3.1
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
-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
-4-
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
-5-
Anexos ....................................................................................................................................................... 91
Esquema de ligao da alimentao ........................................................................................................... 93
Esquema de ligao da alimentao ao Drive Potncia .............................................................................. 94
O shield de sensores do GreenT .................................................................................................................. 95
-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.
-7-
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.
-8-
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)
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
a) Vista lateral
b) Vista de cima
-9-
- 10 -
Comunicaes
Fonte de
energia
Processamento
Sensores
Atuadores
- 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
- 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.
- 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.
- 14 -
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;
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.
- 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.
- 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.
- 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
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.
- 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.
- 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
- 20 -
Instrues de Montagem:
Base Inferior:
- 21 -
5. Fixao dos sensores de embate (bumpers) e dos trs sensores de linha na parte inferior
da frente da plataforma.
- 22 -
9. Fixao base superior dos suportes para o Arduino e a roda livre (roda castor).
- 23 -
Base Superior
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.
- 24 -
16. Fixar o Arduino/shield aos suportes na base superior e fazer ligaes dos vrios sensores ao
shield.
- 25 -
- 26 -
- 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.
- 28 -
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.
- 29 -
Selecione a placa
Deve selecionar a placa que est a utilizar no projeto, ou seja, Ferramentas -> Placa.
- 30 -
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.
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!
- 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.
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.
- 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
- 33 -
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);
- 34 -
Vamos considerar um exemplo onde se liga um potencimetro a uma entrada do Arduino e se liga
um LED a uma das sadas.
- 35 -
Figura 23 - Montagem bsica com um potencimetro como entrada e LED como sada.
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
- 36 -
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.)
- 37 -
- 38 -
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);
}
- 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.
Exemplo 1: Construir um programa que verifique se o aluno est aprovado ou reprovado, tendo
como entrada a classificao na disciplina.
- 40 -
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
- 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 (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).
- 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,
}
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:
- 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
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);
}
}
- 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);
}
}
- 46 -
Captulo 4 - Sensores
Gabriel Pires
- 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)
(A)
(B)
Figura 31 Sensor GP2D120. (A) Princpio de funcionamento; (B) Relao entre tenso e distncia
(retirado de [1]).
- 48 -
A
Tabela 12 apresenta um cdigo exemplo que faz a leitura do sensor, ao mesmo tempo que
- 49 -
#define Pinled1 12
#define Pinled2 13
#define PinIR
A0
usado qq porto analogico)
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);
}
- 50 -
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;
A1
22
- 51 -
#define PinL1_A
#define PinL1_D
A2
23
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);
}
- 52 -
(A)
(B)
Figura 35 Sensor SRF05. (A) Vista do emissor/recetor. (B) Pinagem (modo de funcionamento 2).
Retirado de [3].
- 53 -
Por exemplo, se o tempo decorrido for de 10 ms, ento o obstculo encontra-se a 1.7 m.
Pinsonar 7
int tempo;
int distancia;
void setup()
{
Serial.begin(9600);
}
- 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);
}
(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.
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 -
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
// 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);
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)
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);
}
}
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)
- 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
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);
- 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);
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
}
/* -------------------------------*/
/* -------------------------------*/
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);
}
/* -------------------------------*/
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
PinL0_D
26
PinL1_A
A2
PinL1_D
28
Pinsonar
Sonar SRF05
PinE1
32
PinM1
10
PinE2
30
PinM2
- 63 -
PinAencoder0 2
PinBencoder0
PinAencoder1 3
PinBencoder1
PinServo
11
Servo
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
- 64 -
- 65 -
- 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
- 67 -
- 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.
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.
- 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
- 70 -
Escapar
Sonar
Desviar de
obstculo
Sensor
refletivo
Seguir Linha
Vaguear
Motores
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.
- 71 -
Leitura de
dados dos
sensores
Sensor direito
deteta linha?
sim
sim
no
Sensor esquerdo
deteta linha?
sim
Movimento em
linha reta
no
sim
Curva
acentuada para
a direita
no
sim
Curva
acentuada para
a esquerda
no
no
Movimento em
marcha-atrs
Figura 49: Algoritmo possvel para seguimento de linha com trs sensores de fotodeteo.
- 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);
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;
- 73 -
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);
- 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;
}
}
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
- 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 -
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: ");
- 78 -
Serial.println(distancia);
return round(distancia);
}
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.
- 79 -
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.
- 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.).
- 81 -
Sentido
Marcao
Chegada
400 mm
Marcao
Partida
1m
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.
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.
- 82 -
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:
- 83 -
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).
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.
- 84 -
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.
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 -
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.
_________________
_________________
- 86 -
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.
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
- 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.
_________________
_________________
_________________
_________________
- 88 -
ANEXOS:
1) PISTA
3500,00
7000,00
5000,00
2500,00
Figura 54 Pista.
- 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
- 90 -
Anexos
- 91 -
Esquema de Alimentao
Pedro Neves
- 92 -
- 93 -
- 94 -
Pinos Digitais
Encoders
Pinos Digitais
Sonar
Conector LCD
Bumpers
Controlo Motor
Servo
Motor
Pinos Digitais
Sensor IR
Sensores
Linha
Pinos Analgicos
Servo Motor
Tipo
Pinos
Conector
1
2
3
Ligao
Condutor
VCC
GND
Input (Digital)
Vermelho
Preto
Laranja
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.
- 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
necessrio colocar o divisor resistivo, para o contraste (V0), adequado ao LCD em utilizao.
- 97 -
- 98 -
GreenT
Manual de Formao
Ana Lopes * Carlos Ferreira * Gabriel Pires * Paulo Coelho * Pedro Correia * Pedro Neves
Fevereiro de 2015
Instituto Politcnico de Tomar
www.ipt.pt
- 99 -