Académique Documents
Professionnel Documents
Culture Documents
RELATRIO DE DESENVOLVIMENTO
SEGUIDOR DE LINHA - ROBERTA
CORNLIO PROCPIO
2016
SUMRIO
1. A COMPETIO ......................................................................................... 3
1.2.
1.3.
1.4.
O PERCURSO ......................................................................................... 3
2. PROJETO .................................................................................................... 5
2.1.
ELETRNICA........................................................................................... 5
2.1.1.
ARDUINO .............................................................................................. 5
2.1.2.
2.1.3.
BATERIAS ............................................................................................ 9
2.1.4.
SENSORES ........................................................................................ 10
2.2.
MECNICA............................................................................................. 13
2.2.1.
LOCOMOO .................................................................................... 14
2.2.2.
RODAS ............................................................................................... 15
2.2.3.
MOTOR ............................................................................................... 15
2.2.3.1.
2.2.3.2.
2.2.4.
ESTRUTURA ...................................................................................... 24
2.2.4.1.
MATERIAL ....................................................................................... 24
3. PROGRAMAO ...................................................................................... 27
3.2.
PROGRAMA........................................................................................... 29
1. A COMPETIO
A winter challenge desenvolvida pela robocore a maior competio de
robtica da Amrica latina. A 12 edio acontecer no Instituto Mau de
Tecnologia na cidade de So Caetano do Sul, entre os dias 7 e 10 de julho.
1.2. CATEGORIA SEGUIDOR DE LINHA PRO
Nesta categoria o rob deve percorrer um trajeto definido por uma linha
branca com no mximo 60 m de extenso. Neste percurso tero cruzamentos e
curvas. Os robs sero classificados pelo menor tempo para concluir o
percurso.
1.3. ESPECIFICAES DO ROB
5V
Tenso de Entrada
(recomendado
7-12V
6-20V
16
20 mA
50 mA
Flash Memory
SRAM
8 KB
EEPROM
4 KB
Clock Speed
16 MHz
Comprimento
101.52 mm
Largura
53.3 mm
Peso
37 g
2.1.3. BATERIAS
Escolhemos utilizar duas baterias em detrimento de uma pois, desta forma,
no precisaria utilizar nenhum regulador de tenso, visto que os dispositivos
usados tm tenses diferentes. Alm disso, a utilizao de duas baterias
facilitar as ligaes entre os componentes.
Optamos pela bateria recarregvel, por conta da escassez dos recursos
financeiros e por estas atenderem as tenses exigidas por cada equipamento.
Por ter escolhido baterias recarregveis, foi necessrio incluir no oramento
um carregador apropriado para a recarga das baterias, facilitando e dando
segurana ao processo de recarga das fontes de alimentao.
Voltagem
9v
Capacidade
450 mAh
Material
NI-Mh
Peso
No h especificaes
Dimenses
No h especificaes
Na Figura 4 podemos notar que a luz infra vermelha emitida pelo Led reflete
na superfcie, assim uma parte do feixe luminoso incide no fototransistor,
acionando sua base e gerando uma corrente entre seu coletor e emissor.
Ajustando-se o ngulo de incidncia da Luz IR na superfcie, podemos
aumentar ou diminuir a quantidade de luz que atinge o fototransistor. A razo
pela qual estamos utilizando luz IR que desejamos minimizar a influncia que
a luminosidade do ambiente ter sobre o sensor.
1 Arduino;
1 Protoboard;
1 Fototransistor TIL78;
1 LED IR;
1 Resistor de 5KOhms.
2.2.1. LOCOMOO
Escolhemos o sistema de locomoo baseado na mobilidade. No
sistema escolhido o movimento baseado em duas rodas motrizes
posicionadas em cada lado do motor. Elas mudam a direo do rob variando
a velocidade relativa entre os motores.
2.2.2. RODAS
Tomando como base o desenvolvimento mnimo necessrio para que o
rob seguidor de linha possa competir, foi estipulado que ele deveria alcanar a
velocidade de 1 metro por segundo (m/s). Desse modo, ao pesquisar as
opes disponveis no mercado, a que apresentou melhor custo benefcio foi
uma roda com pneu de borracha, com dimetro de 42 mm:
(1)
2.2.3. MOTOR
Como a pista em que o rob ir percorrer plana a fora necessria para
exercer o movimento calculada pelas seguintes equaes:
(5)
(6)
Stall
Stall
Razo da
Voltagem
Sem carga Com carga Nominal Nominal torque current Reduo
V
rpm
rpm
kg.cm
mA
kg.cm
mA
01:00
150
100
0.1
80
0.8
100
50
300
240
0.2
160
1.6
200
50
12
600
480
0.4
200
3.2
300
50
2.2.3.1.
TIPOS DE MOTORES
2.2.3.2.
CARACTERISTICAS DO MOTOR
Tenso de Operao
A tenso de operao indica o nvel de tenso necessrio para que o
motor funcione, tambm pode indicar uma faixa de valores com o minimo de
tenso necessria e o mximo de tenso possvel que garante o tempo de vida
razovel e condies de operao seguras. A maioria dos motores de corrente
continua so projetados para operar entre 3 a 6 volts ou 1,5 volts. Motores de
maior porte necessitam de 12V ou 24V, em certos casos at 90V CC podem
ser necessrios. Normalmente quanto maior a tenso mais rpido e mais forte
o motor deve ser.
A tenso de operao aplicada pode ser maior ou menor em relao a
tenso nominal (a recomendada). Uma tenso menor reduz o torque e a
velocidade. Aplicar uma tenso maior que a nominal aumenta o torque e a
velocidade mas pode destruir o motor. Pois a resistncia interna do motor fixa
e aplicar uma tenso maior faz aumentar a corrente que circula nas bobinas
gerando mais calor e deteriorao do motor.
Motores de passo no muda sua velocidade quando a tenso alterada.
O que muda a velocidade de um motor de passo a frequncia de sinais
enviadas para o motor.
Tenso Nominal
tenso
utilizada
calcular as outras
Corrente
Indica a quantidade de corrente consumida pelo motor em determinado
torque. Quanto maior o torque maior a corrente. Existem alguns estados do
motor que afetam a variao de corrente.
Sem carga: O motor gira livremente, sem nada conectado ao seu eixo.
Partida: Corrente necessria para iniciar o movimento do motor.
Com carga: Quanto maior a carga maior dever ser o torque aplicado e por fim
maior ser a corrente.
Estagnado: Acontece quando o torque gerado pelo motor no suficiente para
mover a carga elevando muito a corrente que acaba danificando o motor.
Pode ser calculado usando o torque constante (k), utilizando a seguinte
frmula:
(2)
Potncia
A potncia indica o trabalho feito pelo motor sobre o tempo. Pode ser o
multiplo da corrente e tenso.
=
(3)
(4)
Torque
O torque a fora exercida pelo motor. No caso dos motores de corrente
continua o torque depende da corrente.
Torque Constante
coeficiente que representa a quantidade de torque exercida pelo motor
a cada ampere de corrente.
2.2.4. ESTRUTURA
O desenho da estrutura do rob est em anexo a este relatrio.
2.2.4.1.
MATERIAL
O Medium-Density
mais
conhecido
pela
3. PROGRAMAO
mdia entregue a carga, por exemplo: a chave fica ligada 50% ligada e 50%
desligada, isso quer dizer que em mdia temos 50% do tempo com corrente e
50% sem. Portanto a potncia mdia aplicada na carga a prpria tenso
mdia, ou seja, 50%, portanto quanto maior o tempo que o pulso se manter em
nvel lgico alto, ou seja, ligado maior a potencia entregue a carga, quanto
menor o tempo em nvel lgico alto menor a entrega de potencia.
A grande diferena entre um controle PWM e um controle FM (Freqncia
modulada), que no PWM a freqncia permanece fixa, normalmente em um
valor alto suficiente para no afetar o funcionamento do equipamento a ser
controlado e que a forma de onda resultante seja a mais suave possvel,
normalmente para controle de velocidade de motores por exemplo utilizado
dezenas de KHz, j pra controladores de luminosidade como "dimmer" de uma
lmpada podemos utilizar centenas de Hz, ou para aplicaes de udio ou
fontes como as de computadores podemos utilizar centenas de KHz.
Considerando uma onda quadrada, para o funcionamento correto do PWM
devemos variar a largura de pulso da onda, para efeito de calculo dois
parmetros so necessrios o perodo e a largura do pulso propriamente dita,
chamada de duty-cycle, definida em porcentagem segundo a formula:
= 100
Onde:
Duty-Cycle: Valor em (%)
Largura do pulso: Tempo em que o sinal esta ligado.
(6)
3.2. PROGRAMA
Os cdigos a seguir o programa utilizado no arduino. Todo o programa foi
desenvolvido utilizando a linguagem C:
const int MotorVD = 7;
const int MotorVE = 5;
const int MotorRD = 6;
const int MotorRE = 4;
int controlepwm=0;
float valorLE1=0;
float valorLE2=0;
float valorLE3=0;
float valorLE4=0;
float valorLE5=0;
float valorLE6=0;
float valorLE7=0;
int start = 0;
class PID{
public:
double error;
double sample;
double lastSample;
double kP, kI, kD, _kP, _kI, _kD;
double P, I, D;
double pid;
double setPoint;
long lastProcess;
double erro (float valorLE1, float valorLE2, float valorLE3, float valorLE4, float valorLE5, float
ValorCorte, float ValorCorteS4){
if((valorLE1 < ValorCorte)&&(valorLE2 < ValorCorte)&&(valorLE3 < ValorCorte)&&(valorLE4 <
ValorCorteS4)&&(valorLE5 < ValorCorte))
{
return 0;
}
else if((valorLE1 < ValorCorte)&&(valorLE2 < ValorCorte)&&(valorLE3 >
ValorCorte)&&(valorLE4 < ValorCorteS4)&&(valorLE5 < ValorCorte))//Seguir em frente
{
return 0;
}
}
else if((valorLE1 < ValorCorte)&&(valorLE2 < ValorCorte)&&(valorLE3 >
ValorCorte)&&(valorLE4 > ValorCorteS4)&&(valorLE5 < ValorCorte)) //Correo pra esquerda
{
return 1;
}
else if((valorLE1 < ValorCorte)&&(valorLE2 < ValorCorte)&&(valorLE3 <
ValorCorte)&&(valorLE4 > ValorCorteS4)&&(valorLE5 < ValorCorte)) //Correo pra esquerda
{
return 2;
}
else if((valorLE1 < ValorCorte)&&(valorLE2 < ValorCorte)&&(valorLE3 <
ValorCorte)&&(valorLE4 > ValorCorteS4)&&(valorLE5 > ValorCorte)) //Correo pra esquerda
{
return 3;
}
else if((valorLE1 < ValorCorte)&&(valorLE2 < ValorCorte)&&(valorLE3 <
ValorCorte)&&(valorLE4 < ValorCorteS4)&&(valorLE5 > ValorCorte)) //Correo pra esquerda
{
return 4;
}
}
void addNewSample( int erro(float valorLE1, float valorLE2, float valorLE3, float valorLE4, float
valorLE5, float ValorCorte, float ValorCorteS4), int Velocidade)
{
sample = abs (erro(valorLE1, valorLE2, valorLE3, valorLE4, valorLE5, ValorCorte,
ValorCorteS4)); // sample a amostra, ou seja o erro em relao ao sensor
}
void setSetPoint()
{
setPoint = 0; //valor do erro que queremos atingir
}
double process()
{
float deltaTime = (millis() - lastProcess) / 1000.0; // serve para agilizar o processo de analise
do erro, ele recebe o tempo atual do loop menos o tempo do ultimo loop e divide por mil pra
termos o tempo em segundos
lastProcess = millis();
P = error * kP;
lastSample = sample;
pid = P + I + D;
return pid;
}
};
void setup()
{
pinMode(MotorVD, OUTPUT);
pinMode(MotorVE, OUTPUT);
pinMode(MotorRD, OUTPUT);
pinMode(MotorRE, OUTPUT);
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
pinMode(LED3,OUTPUT);
pinMode(LED4,OUTPUT);
pinMode(LED5,OUTPUT);
pinMode(LED6,OUTPUT);
pinMode(LED7,OUTPUT);
pinMode(Sensor1,INPUT);
pinMode(Sensor2,INPUT);
pinMode(Sensor3,INPUT);
pinMode(Sensor4,INPUT);
pinMode(Sensor5,INPUT);
pinMode(Sensor6,INPUT);
pinMode(Sensor7,INPUT);
Serial.begin(9600);
}
void loop(){
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED6, HIGH);
digitalWrite(LED7, HIGH);
valorLE1 = analogRead(Sensor1);
valorLE2 = analogRead(Sensor2);
valorLE3 = analogRead(Sensor3);
valorLE4 = analogRead(Sensor4);
valorLE5 = analogRead(Sensor5);
valorLE6 = analogRead(Sensor6);
valorLE7 = analogRead(Sensor7);
/*Serial.print(analogRead(Sensor1));
Serial.print(',');
Serial.print(analogRead(Sensor2));
Serial.print(',');
Serial.print(analogRead(Sensor3));
Serial.print(',');
Serial.print(analogRead(Sensor4));
Serial.print(',');
Serial.print(analogRead(Sensor5));
Serial.print(',');
Serial.print(analogRead(Sensor6));
Serial.print(',');
Serial.println(analogRead(Sensor7));
delay(1000);*/
if(erro_f > 0)
{
analogWrite(MotorVD, controlepwm);
digitalWrite(MotorRD, HIGH);
analogWrite(MotorVE, Velocidade);
digitalWrite(MotorRE, HIGH);
}
else if(erro_f < 0)
{
analogWrite(MotorVE, controlepwm);
digitalWrite(MotorRD, HIGH);
analogWrite(MotorVD, Velocidade);
digitalWrite(MotorRE, HIGH);
}
else if (erro_f ==0)
{
analogWrite(MotorVD, Velocidade);
digitalWrite(MotorRD, HIGH);
analogWrite(MotorVE, Velocidade);
digitalWrite(MotorRE, HIGH);
}
}
Item
2x Motores 600rpm + Rodas 42x19mm + Suporte
Esfera deslizaznte 3/8
Policarbonato compacto 50x50
Driver L298n
Adaptador para bateria
Bateria recarregvel 9v 450 mAh Knup
Carregador mltiplo para pilhas AA e 9v bivolt
Fita de Aluminio(cm)
Led Infravermelho
Sensor TIL78
Parafuso M3 x 50
Valor
R$ 145,00
R$ 13,00
R$ 53,00
R$ 25,00
R$ 17,92
R$ 37,34
R$ 23,41
R$ 3,00
R$ 12,00
R$ 12,00
R$ 3,00
16
Porca M3
TOTAL
R$ 3,00
R$ 347,67
5. VIAGEM
6. PLANEJAMENTO
7. ANEXOS
Incio
10/08/2015
10/08/2015
10/08/2015
17/08/2015
17/08/2015
17/08/2015
17/08/2015
17/08/2015
17/08/2015
17/08/2015
24/08/2015
24/08/2015
07/09/2015
07/09/2015
07/09/2015
07/09/2015
07/09/2015
07/09/2015
07/09/2015
11/03/2016
11/02/2015
11/02/2015
18/03/2016
23/03/2016
15/04/2016
10/03/2016
11/04/2016
11/04/2016
11/04/2016
11/04/2016
17/06/2016
17/06/2016
17/06/2016
Fim
12/01/2016
07/09/2015
13/08/2015
31/08/2015
24/08/2015
07/09/2015
31/08/2015
31/08/2015
07/09/2015
07/09/2015
17/03/2016
24/11/2015
24/11/2015
14/09/2015
14/09/2015
14/09/2015
14/09/2015
14/09/2015
14/09/2015
17/03/2016
06/07/2016
10/03/2015
14/04/2016
14/04/2016
22/04/2016
10/04/2016
06/07/2016
16/06/2016
16/06/2016
17/06/2016
06/07/2016
06/07/2016
06/07/2016
B
Esfera deslizante
Roda
Motor
Suporte motor
Arduino
Driver L298n
Atmega2560
Baterias
A
Projeto
ROBERTA
Placa sensores
Folha
1/1
Data
ROBERTA
2
Edi o
20/04/2016