Buscar

TRABALHO PRONTO INTRODUÇÃO A ENGENHARIA

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

�PAGE �
UNIVERSIDADE DE UBERABA
5131660 Gustavo santana de aquino
5131354 jhuliany paula soares silva
5131372 kaleu figueiredo pereira de souza
desenvolvimento de robô seguidor de linha
UBERLÂNDIA – MG
 2014�
5131660 Gustavo santana de aquino
5131354 jhuliany paula soares silva
5131372 kaleu figueiredo pereira de souza
desenvolvimento de robô seguidor de linha
Trabalho apresentado à Universidade de Uberaba, como parte das exigências à conclusão das disciplinasde Introdução à Engenharia e Leitura e Produção de TextosAcadêmicos,do 1° período do curso de Engenhariaelétrica
Orientadores: Vanessa R. Pereira Fidelis
		 Claudia Costa Alves
UBERLÂNDIA – MG
 2014�
�
SUMÁRIO
1	INTRODUÇÃO	4
1.1	OBJETIVOS	4
1.1.1	Objetivo Geral	4
1.1.2	Objetivos Específicos	4
1.2	JUSTIFICATIVA	4
2	FUNDAMENTAÇÃO TEÓRICA 	6
2.1 MICROCONTROLADOR...................................................................................6
2.2 MOTOR DE CORRENTE CONTINUA..............................................................8
2.3 PONTE H............................................................................................................9
2.4 SENSOR...........................................................................................................12
2.5 PWM.................................................................................................................13
3	METODOLOGIA	15
3.1 ESTRUTURA...................................................................................................15
3.2 SOFTWARE......................................................................................................16
3.3 TESTES............................................................................................................16
3.4 COMPETIÇÃO...................................................................................................17
4	CONCLUSÃO	18
	REFERÊNCIAS................................................................................................19
 LINGUAGEM DE PROGRAMAÇÃO................................................................20
�
�
INTRODUÇÃO
Este trabalho tem como propósito, abordar em todas as suas características, o planejamento, montagem e finalização de um robô seguidor de linha.
Este projeto tem como objetivo principal construir um robô que consiga seguir a trajetória de uma linha de cor branca com três centímetros de largura em fundo preto. O sistema para que a linha seja detectada contará com sensores infravermelhos que constatarão o sinal refletido a partir de um diodo emissor apropriado.
O projeto tem como finalidade o desenvolvimento de um sistema que possa guiar veículos de forma autônoma. Para controlar tudo será utilizado o microcontrolador Arduino.
OBJETIVOS
Objetivo Geral
Desenvolver um robô que se movimente em superfície plana de cor preta seguindo uma faixa branca, ou vise e versa, guiado por sensores à base de fotodiodos que recebem a reflexão de um sinal emitido por um diodo emissor infravermelho.
Objetivos Específicos
Entender na prática a teoria sobre fotodiodos, capacitores e transistores.
Aprender a usar o micro controlador Arduino e a linguagem de programação nele utilizada.
Estudar sobre PWM e como gerar este pulso utilizando o Arduino. Isso será utilizado para controlar a velocidade dos motores e assim conseguir realizar curvas.
Aprender a montar e utilizar sensores infravermelhos.
Aprender a teoria, a montar e ultilizar uma ponte H
JUSTIFICATIVA
Acredita-se que a realização dessa pesquisa é importante, pois trará inúmeras vantagens, já que o veículo se locomove sem a interferência do usuário, assim, minimizando todos os tipos de imprevistos ou tragédias causadas por falhas humanas.
É importante também para a durabilidade dos mesmos, pois já que o sistema é automatizado, ele pode ser gerenciado para evitar ao máximo desgaste por utilização inapropriada.
Outro benefício seria a redução de emissão de gases por queima de combustíveis fósseis, pois todo o sistema do carro será movido à eletricidade, assim auxiliando o meio ambiente e promovendo meios limpos de locomoção.
�
2 FUNDAMENTAÇÃO TEÓRICA 
Foi utilizado o site da Arduino como referência para programação, incluindo estrutura, variáveis e funções do código no �IDE(Integrated Development Environment ou Ambiente Integrado de Desenvolvimento).
2.1 MICROCONTROLADOR
Optou-se por escolher o Arduino, figura 1, como microcontrolador para o projeto, este dispositivo será responsável pela ligação entre o sensor e o motor. As informações geradas pelos sensores são analisadas pelo microcontrolador e então são passados comandos(através da ponte H) para o motor executar o movimento apropriado para se manter sobre a linha, o diagrama de blocos dos componentes é a figura 2.
Figura 1: Arduino MEGA 2560
Fonte: Autoria própria
O arduino é uma plataforma de prototipagem eletrônica open-source, baseado em um microcontrolador que se conecta ao computador pessoal através de um porta serial ou USB, dependendo do modelo utilizado. Ele possui uma linguagem de programação própria, baseada em Wiring, que é implementada em um ambiente de desenvolvimento (IDE), também próprio, baseado em Processing, e que pode se utilizada em vários sitemas operacionais. Através desta
Figura 2: diagrama de blocos
plataforma pode-se montar uma variedade de circuitos de forma fácil e ágil, como, por exemplo, um sistema de sensores cujos dados podem se interpretados e utilizados pelo próprio arduíno, ou repassados para um computados pessoal. A sua alimentação se dá pelo porta USB conectada ao computados ou por uma fonte externa de até 25V (INTERFACING..., 2009).
A linguagem de programação do Arduino é simples e sua sintaxe se assemelha muito ao C++
O modelo do Arduino escolhido para ser utilizado neste projeto foi o MEGA 2560 com microcontrolador ATMega 2560 com interface USB.
Existe muitas vantagens em na escolha do Arduino neste projeto, umas delas estão seu preço atrativo, programação descomplicada e fácil manuseio. Os comandos simples simplificam diversos passos do projeto, dando espaço para equipe focar a atenção em outras partes, como na montagem dos sensores e no funcionamento dos motores.
�
2.2 MOTOR DE CORRENTE CONTÍNUA
Motores elétricos convertem energia em mecânica. Existem motores de corrente continua (CC) e de corrente alternada (CA), cada um com diversas variações. Motores de corrente alternada geralmente usados para máquinas grandes e recebem energia diretamente da rede de distribuição de energia. Segundo (JONES; FLYNN; SEIGER, 1999), robôs moveis usam tipicamente corrente continua, pois sua fonte de energia é uma bateria.
Para as necessidades de locomoção de um robô, o motor fira em uma velocidade muito alta e com um torque muito baixo. Para inverter essa relação, o motor deve se ligado a uma caixa de redução que produz nova saída que gira mais devagar, porem com um torque maior. Muitos motores CC são vendidos com a caixa de redução já instalada, como é o caso do adquirido para este projeto.
Os motores de corrente continua tem pelo menos dois terminais que ao se aplicar uma tensão nos terminais o motor gira em um sentido e invertendo a polaridade da entrada o motor gira no sentido contrário.
	Figura 3: Estrutura de um motor de corrente continua
			Fonte: (ANTUNES, 2009) 
A figura 3 mostra uma simplificação de um motor CC com imã permanente. Quando um fio mergulhado em um campo magnético é atravessado por uma corrente, surge uma força.
Os motores usados no robô, faz uma rotação de 120 rpm, com um consumo de 100 mA – 3v/120 mA – 6v, relação de redução 1:120 e com voltagem de 3v a 6v. Roda: diâmetro dos pneus 70 mm, largura dos pneus 25 mm
Figura 4: Motor e roda utilizados para o robô
 	Fonte: autoria própria
2.3 PONTEH
Os motores CC precisam se acionados nos dois sentidos, portanto há necessidade de controlar os sentindo da corrente fornecida para que o motor inverta o sentido de rotação. Esse controle é feito pela ponte H, que controla o sentido da corrente para o motor através da disposição de quatro chaves eletrônicas em que o motor é posicionado entre elas, de modo que forme uma letra “h”, por isso o nome.
Figura 5: Esquema de ponte H
Fonte: (MELO, 2012)
O fornecimento de corrente ocorre pelo fechamento das chaves duas a duas, de tal forma que a fonte e o terra estejam em posição alternadas dos pólos do motor.
Figura 6: Funcionamento da ponte H.
	Fonte: (MARTINS, 2013)
Um caso especial que se deve tomar cuidado é o de não fechar as quatro chaves ao mesmo tempo ou duas chaves de um mesmo lado, isso faz com que “o fluxo da corrente vá direto do pólo positivo para o negativo, causando um curto-circuito fatal para a fonte de alimentação e para os componentes eletrônicos envolvidos no circuito” (PATSKO, 2006).
Na ponte H com componentes discretos, os resistores são adicionados para evitar que haja sobrecarga da corrente e os diodos para evitar que uma possível corrente reversa gerada ao acionar o freio dos motores possa danificar o circuito.
Figura 7: Ponte H feita a partir de componentes discretos.
 	Fonte: Autoria própria.
	No L298N, figura 8, são implementadas duas pontes H. A sua utilização é diferente da ponte H anterior e possui algumas peculiaridades. Dentre as diferenças estão: a existência de “sense” que deve se conectada a um resistor para o terra com o intuito de controlar a corrente de carga de cada ponte; a existência de quatro pinos
Figura 8: ponte H L298N
Fonte: Autoria própria
“out”, duas para cada ponte, que é por onde sai a corrente controlada; a existência de um pino “Vs” para a entrada da tensão das duas pontes; “VSS” para a alimentação dos blocos lógicos; “GND” para o terra; dois “Enable”, um para cada ponte, que funciona justamente para ativar as pontes; e quatro pinos “Input”, dois para cada ponte, que determinam por qual “out” sairá a tensão fornecida em “Vs”. No datasheet consta ainda quatro estados para a ponte H: no caso do Input1 estar recebendo sinal e do Input2 não, o motor funciona para “frente”, no caso contrário o motor funciona para “trás”. Caso o dois Input esteja iguais, ou seja, ambos recebendo sinal ou ambos não recebendo sinal, temos o freio do motor, e caso enable seja desligado o motor roda apenas com a inércia.
Figura 9: Pinos de conexão (L298N)
Fonte: (MICROELECTRONICS, 2000)
2.4 SENSOR
Os sensores utilizados no projeto são fototransistores e fotodiodos, funcionando como receptores e emissores respectivamente. Basicamente eles verificam se o protótipo está ou não em cima do seu trajeto e se ele precisa fazer alguma correção na rota.
Todo o funcionamento desses sensores está baseado numa propriedade fundamental dos fotodiodos, cujo símbolo está representado na figura 10. Esses componentes eletrônicos quando instalados em polaridade reversa possuem uma resistência elétrica praticamente infinita assim como qualquer diodo em polaridade reversa. No entanto quando um feixe de luz infravermelha é direcionado para o fotodiodo, sua resistência elétrica cai drasticamente e é através dessa propriedade que é possível verificar se o robô móvel está ou não sobre a faixa de cor escura utilizada para orientar o percurso que deverá ser percorrido. O funcionamento do fototransistor E basicamente o mesmo do fotodiodo, entretanto ele é mais sensível ao sinal luminoso pois basta uma pequena corrente na base para que ele altere seu estado verificando então a presença da luz.
Figura 10: Símbolo do fotodiodo
Fonte: (Thomazini, 2011)
O diodo emissor (LED) emite um feixe luminoso que reflete sobre uma superfície de cor escura e incide no fototransistor, ”receptor”, diminuindo sua resistência e permitindo a passagem de corrente que é verificada pelo Arduíno. Como a faixa é de cor clara, o feixe luminoso emitido pelo LED é absorvido fazendo com que haja passagem de corrente pelo fotodiodo. Com isso é verificado se o “carro” está ou não sobre o percurso indicado. Como escolhemos criar um percurso de cor clara o Arduíno interpreta a “presença de luz” como caminho e a não presença, no caso a reflexão da luz não emitida, como sendo o fundo fora do caminho.
Figura 11: Circuito de sensores
Fonte: Autoria Própria. 
O sensor mais recuado verifica sempre se o carrinho está ou não no percurso, funcionando como uma espécie de “estado presente” enquanto os dois mais a frente verificarão em qual direção o carro deverá seguir caso haja uma mudança de trajetória (uma curva), funcionando como verificador de “estado futuro” do protótipo.
 2.5 PWM
Um dos objetivos da equipe é poder controlar a velocidade com que os motores do robô giram para melhorar a sua resposta em uma curva. Para isso é necessário que a tensão fornecida para o motor seja variável, entretanto isso não seria possível, à primeira vista, utilizando puramente sinais digitais, que funcionam somente com zero ou tensão máxima. A pulse width modulation (PWM), ou modulação por largura de pulso, serve justamente como técnica para obter um sinal analógico a partir de um digital.
O PWM consiste em um padrão de rápida alternância entre liga e desliga de um período T, na qual, parte do tempo ela estará em estado ativo e parte do tempo em estado desativado. Vemos assim que a potência média aplicada à carga pode ser diferente dos valores digitais e que a tensão sobre a carga varia.
Figura 12: PWM variando a tensão media 
Fonte: (GHIRARDELLO, 2008)
A relação (t1÷t)×100 % é chamada de ciclo ativo do PWM, sendo o tempo em que ele fica ativo igual a t1 e o período igual a t. Caso o ciclo ativo seja igual a 0% o circuito está desligado e caso o ciclo ativo seja 100% o circuito estará sempre ligado.
Figura 13: Definição do ciclo ativo
Fonte: (GHIRARDELLO, 2008)
Utilizando o microcontrolador Arduíno é possível fornecer este tipo de sinal utilizando as portas adequadas e o comando em código “analogWrite(valor)”, em que valor varia de 0 a 255, sendo 255 a tensão máxima.
METODOLOGIA
ESTRUTURA
 O chassi do robô foi feito utilizando uma placa de acrílico de dimensões 150x200x3mm que é um material rígido e leve ao mesmo tempo, características ideais para um protótipo. 
Os motores com redução e os demais itens para a montagem dos circuitos foram adquiridos em um kit completo, faltando apenas as baterias comprado pelo curso robótica oferecido pela UNIUBE. E uma das baterias usadas comprou na loja virtual do professor do curso citado, demais bateria comprou no mercado. 
Os sensores ficam sob a parte da frente do robô presos usando duas dobradiças e mais uma pequena placa de acrílico. Sobre o chassi estão o Arduino e as baterias, na parte inferior do “carrinho” ficaram os quatro motores e a ponte H. Usamos quatro motores, consequentemente quatro rodas.
A alimentação dos sensores e a ponte H é feita pelo próprio Arduíno, que é por sua vez alimentado por uma bateria alcalina de 9 v. Os motores foram alimentados por uma bateria de 12 v.
Para desligar o carrinho foi adicionado 2 chaves, uma para o Arduino e outra para os motores que pode desconectar a bateria do circuito. Sob o comando do Arduíno a ponte H pode controlar a velocidade e o sentido da rotação dos motores. O controle da velocidade é permitida através do comando de PWM do Arduíno que varia a tensão de entrada na ponte H.
�
Tabela de preços dos componentes utilizados no protótipo
	Nome
	Quantidade
	Preço por unidade
	Kit quase completo
	 X1
	255,00
	Motores acompanhados por rodas
	X2
	30,00
	Bateria 12 v
	X1
	69,90
	Bateria 9 v
	X3
	15,00
	Total
	X1
	429,90
3.2	SOFTWARE
O software para controlar o robô foi implementado na linguagem própria do Arduíno. O programa possui duas funções básicas, o setup() e o loop() ambas não possuem retorno. A função setup()é chamada pelo Arduino uma única vez logo no começo do programa, ou seja, ocorrendo a cada vez que o Arduino é ligado ou resetado. O propósito da função é a de encapsular todas as linhas de código que são utilizadas para inicialização, como a definição dos pinos ou as bibliotecas a serem utilizadas. A função loop(), por sua vez, encapsula as linhas.
Para a programação foi usada a linguagem de “se” que na programação temos q usar em inglês ou seja usar “if” para verificações verdadeiras e “else” para verificações falsas.
Pode estar sendo verificado a programação que foi utilizada logo após as referencias desse trabalho.
3.3 TESTES.
Durante essa fase fizemos vários testes. Os primeiros foram para verificar se os sensores estavam funcionando e também para verificar a altura ideal, para que a “leitura” seja a mais precisa possível.
Logo após montamos os motores e a ponte H, testamos para verificar se estava correta a rotação dos motores, para testar a possibilidade de estar utilizando apenas uma bateria e foi constatado que não era viável, pois tivemos muita perda no rendimento dos motores. Portando foi optado por estar utilizando baterias separadas uma para o Arduino e outra para os motores, assim aumentando o rendimento de ambas as partes. Para esse teste foi utilizado o Arduino uno, pois ate o momento não aviamos adquirido o Arduino Mega, o Arduino uno já vinha com o kit que compramos inicialmente.
Após o termino da montagem, foi feito teste na pista e verificamos que o tempo de resposta dos sensores estava muito lento, e com isso não estávamos conseguindo fazer as curvas. Vendo isso foram acrescentados duas dobradiças, uma chapa de acrílico de 100mm e dois parafusos. Os parafusos foram usados para ajustar a altura da chapa, ficar nivelada e assim ter mais eficiência.
3.4	COMPETIÇÃO
A competição foi dividida em 2 dias (sexta-feira e sábado). O primeiro dia começou com a pista livre para testes de desempenho. Todos os participantes nesse dia fizemos vários testes e modificações na parte de programação para melhor eficiência. 
Na primeira bateria conseguimos completar a pista no tempo de 41 segundos e alguns milésimos.
No segundo dia estávamos conseguindo melhorar nosso tempo nos testes, ajustando a programação. Mas após vários testes o “carrinho” começou a apresentar alguns problemas com os sensores na parte se solda, com alguns fios que acabaram se rompendo na primeira bateria. Nesse dia não conseguimos completar a pista, devido a um dos fios dos sensores estava com mal contato com o Arduino. Foi sanado o problema, e durante os testes antes da segunda e ultima bateria antes ainda da final foi verificado que o problema avia sido resolvido com êxito. Porem ao ir para a ultima bateria eliminatória ouve outro problema com os sensores, acabamos sendo eliminados e ficando em 9º colocado.
CONCLUSÃO
O projeto desenvolveu um robô seguidor de linhas personalizado ao utilizar uma ponte H e propor uma disposição diferente dos sensores. Os robôs mais simples podem usar um transistor no lugar da ponte H e apenas dois sensores. Essas personalizações no projeto permitiram desenvolver um algoritmo para voltar em busca da linha quando nenhum sensor está a detectando.
O software desenvolvido conseguiu completar a pista completa em um torneio 
de robótica com um tempo de 41 segundos e alguns milésimos. Em testes ele conseguiu completar em apenas 34 segundos, mas no momento da bateria o carinho saiu da pista e fomos desclassificados.
	Houve um problema nos sensores, e faltou um software mais elaborado para que o carrinho cumprisse o objetivo de fazer toda a pista em menos tempo possível e seguir a linha branca com o fundo preto. No entanto, os objetivos da disciplina que eram utilização do Arduino para montar um robô seguidor de linha foram plenamente atingidos pelo grupo.
	
REFERÊNCIAS
ANTUNES, F. L. M. Motores de Corrente ContÍnua. 2009. http://www.dee.ufc.br/ fantunes/Maquinas EletricasI/Aulas/MotoresCorrenteContinua-Impressao.pdf. Acesso em: 20 nov.2009.
ARDUINO et al. Language Reference: Structure, Variables and Functions. 2014. Disponível em: <http://arduino.cc/en/Reference/HomePage>. Acesso em: 20 ago. 2014.
BANZI, M. et al. ARDUÍNO. 2006. http://www.arduino.cc.
GHIRARDELLO, A. Apostila sobre Modulação PWM. 2008.http://www.eletronica.org/arq apostilas/apostila pwm.pdf. Acesso em: 20 nov. 2009.
JONES, J. L.; FLYNN, A. M.; SEIGER, A. B. Mobile Robots: Inspiration to Implementation. 2. ed. [S.l.]: Natick, Massachusetts: A K Peters, 1999.
MICROELECTRONICS, S. T. L298 datasheet. 2000. http://www.datasheetcatalog.org/datasheet/SGSThomsonMicroelectronics/mXqqxz.pdf.
PATSKO, L. F. Tutorial Montagem da Ponte H. 2006. http://www.maxwellbohr.com.br/downloads/Tutorial Eletronica - Montagem de uma Ponte H.pdf.
�
LINGUAGEM DE PROGRAMAÇÃO
#include <QTRSensors.h>
#define NUM_SENSORS 7 // Número de sensores usados
#define TIMEOUT 2500 // Aguarda 2500ms para a saida dos sensores ficarem LOW
#define EMITTER_PIN 2 // Emissor é controlado pelo pino digital 2
// Configurações dos sensores
QTRSensorsRC qtrrc((unsigned char[]) {
 40, 41, 42, 43, 44, 45, 46
},
NUM_SENSORS, TIMEOUT, EMITTER_PIN);
unsigned int sensors[6];
unsigned int integral = 0;
unsigned int last_proportional = 0;
unsigned int counter = 0;
int j = 0, SENSOR = 49;
//Define variáveis para a Ponte H L298
int ENA = 8, ENB = 9, IN1 = 4, IN2 = 5, IN3 = 6, IN4 = 7;
void setup()
{
 pinMode(ENA, OUTPUT); //PWM ENA
 pinMode(ENB, OUTPUT); //PWM ENB
 pinMode(IN1, OUTPUT);
 pinMode(IN2, OUTPUT);
 pinMode(IN3, OUTPUT);
 pinMode(IN4, OUTPUT);
 pinMode(SENSOR, INPUT); //SENSOR TÚNEL
 int i;
 for (counter = 0; counter < 80; counter++)
 {
 if (counter < 20 || counter >= 40) {
 Serial.begin(9600);
 for (i = 0; i < 5; i++)
 {
 Serial.print(qtrrc.calibratedMinimumOn[i]);
 Serial.print(' ');
 }
 Serial.println();
 // Imprime os valores máximos obtidos da calibração quando os emissores estiverem ligados
 for (i = 0; i < 5; i++)
 {
 Serial.print(qtrrc.calibratedMaximumOn[i]);
 Serial.print(' ');
 }
 Serial.println();
 Serial.println();
 }
 else {
 Serial.begin(9600);
 for (i = 0; i < 5; i++)
 {
 Serial.print(qtrrc.calibratedMinimumOn[i]);
 Serial.print(' ');
 }
 Serial.println();
 // Imprime os valores finais obtidos da calibração quando os emissores estiverem ligados
 for (i = 0; i < 5; i++)
 {
 Serial.print(qtrrc.calibratedMaximumOn[i]);
 Serial.print(' ');
 }
 Serial.println();
 Serial.println();
 }
 /*
 Essa função registra um conjunto de leituras do sensor e mantém
 faixa de valores mínimos e máximos encontrados.
 O argumento IR_EMITTERS_ON significa que o sensor será
 ativado durante a leitura.
 */
 qtrrc.readCalibrated(sensors, QTR_EMITTERS_ON);
 //Desde que nosso contador corre a 80, o atraso total será 80 * 20 = 1600 ms.
 delay(20);
 }
 //Define rotação dos motores. LEMBRE SE QUE AQUI PODE SER AJUSTADO O SENTIDO DO CARRINHO.
 digitalWrite(IN1, HIGH); //A
 digitalWrite(IN2, LOW); //B
 digitalWrite(IN3, LOW); //C
 digitalWrite(IN4, HIGH); //D
 analogWrite(ENA, 0);
 analogWrite(ENB, 0);
 delay(500);
}
void loop() {
 unsigned int sensors[6];
 qtrrc.read(sensors, QTR_EMITTERS_ON);
 unsigned int position = qtrrc.readLine(sensors, QTR_EMITTERS_ON, 1);
 int c = 0;
 if (digitalRead(45) == LOW && c == 1)
 {
 digitalWrite(ENA, LOW);
 digitalWrite(ENB, LOW);
 digitalWrite(SENSOR, HIGH);
 delay(4800);
 digitalWrite(SENSOR, LOW);
 c = 1;
 }
 
 //Mostrano monitor serial os valores obtidos dos sensores, desativado para não interferir na execução
 /*
 unsigned char i;
 for (i = 0; i < NUM_SENSORS; i++)
 {
 Serial.print(sensors[i] * 10 / 1001);
 Serial.print(' ');
 }
 Serial.print(" ");
 Serial.println(position);
 */
 //qtrrc.read(sensorValues);
 // Imprime os valores dos sensores de 0 a 9, onde 0 indica reflexo máximo e 9 indica reflexo mínimo, logo, a posição da linha
 // O termo "proportional" deve ser 0, quando o rôbo está centrado na linha.
 int proportional = (int) position - 3000;
 //Calcula o proportional (chage) e integral (sum) da posição.
 int derivative = proportional - last_proportional;
 integral += proportional;
 //Lembrar da última posição
 last_proportional = proportional;
 /*
 Calcular a diferença entre as duas configurações de potência do motor, M1 - M2.
 Se este é um número positivo, o robô vai virar para a direita.
 Se for um número negativo, o robô irá virar para a esquerda,
 e determina a magnitude do número do ângulo da curva.
 Abaixo ajustamos as constantes, que multiplicam-se os termos proporcionais, integrais e derivados para melhorar o desempenho.
 */ 
 // int power_difference = proportional / 20 + integral / 10000 + derivative * 3 / 2;
 int power_difference = proportional / 1 + integral / 3000 + derivative * 16;
 // Calcula as atuais configurações do motor. Nunca terá um valor negativo.
 /*
 if(sensors[0] < 5||sensors[1] < 5||sensors[2] < 5||sensors[3] < 5||sensors[4] < 5||sensors[5] < 5)//Curva de 90º
 {
 digitalWrite(5,0);
 digitalWrite(6,100);
 delay(1500);
 digitalWrite(13,HIGH);
 }
 */
 
//Ajuste da constante de velocidade máxima
 const int maximum = 190; //Define constante máxima de pwm enviada para Ponte H
 if (power_difference > maximum)
 power_difference = maximum;
 if (power_difference < -maximum)
 power_difference = -maximum;
 if (power_difference < 0) {
 int v = maximum + power_difference;
 analogWrite(ENA, maximum); //Acionar analogWrite(8,maximum)
 analogWrite(ENB, v);
 //Código padrão para acionamento da curva
 //OrangutanMotors::setSpeeds(maximum + power_difference, maximum);
 }
 else {
 int v1 = maximum - power_difference;
 analogWrite(ENA, v1);
 analogWrite(ENB, maximum); //Acionar analogWrite(9,maximum)
 //Código padrão para acionamento da curva
 // OrangutanMotors::setSpeeds(maximum, maximum - power_difference);
 }
}
� É um programa de computador que reúne características e ferramentas de apoio ao desenvolvimento de software com o objetivo de agilizar este processo.
�PAGE �10�

Outros materiais

Outros materiais