AGV Carro Guiado em linha

25
INSTITUTO NACIONAL DE TELECOMUNICAÇÕES - INATEL” RELATÓRIO SOBRE TRABALHO FINAL DE EAT205 AGV – Veículos Guiados Automaticamente Equipe: 1. Jorge Luiz da Silva Júnior n° 48 Período: 5º 2. Patrick Diório Carvalho n° 49 3. Vander Silvestre Braga n° 67

description

AGV Carro Guiado em linha

Transcript of AGV Carro Guiado em linha

Page 1: AGV Carro Guiado em linha

INSTITUTO NACIONAL DE TELECOMUNICAÇÕES - INATEL”

RELATÓRIO SOBRE TRABALHO FINAL DE EAT205

AGV – Veículos Guiados Automaticamente

Equipe:

1. Jorge Luiz da Silva Júnior n° 48 Período: 5º

2. Patrick Diório Carvalho n° 49

3. Vander Silvestre Braga n° 67

Professora: Ana Letícia

07 / 2013

Page 2: AGV Carro Guiado em linha

SUMÁRIO

1. Introdução.............................................................................................................................1

1.1.Justificativa....................................................................................................................1

1.2.Motivadores...................................................................................................................1

1.3.Objetivos.......................................................................................................................2

2. Descrição Geral....................................................................................................................3

3. Descrição do Funcionamento...............................................................................................4

3.1.Chave Liga/Desliga.......................................................................................................4

3.2.Sensor Óptico................................................................................................................4

3.3.Display 16 x 2................................................................................................................4

3.4.Motor de tração.............................................................................................................4

3.5.Servo Motor...................................................................................................................5

3.6.Micro controlador MSP 430..........................................................................................5

3.7.Lógica de funcionamento do AGV...............................................................................6

4. Conclusão.............................................................................................................................7

5. Referências...........................................................................................................................8

6. Anexos..................................................................................................................................9

6.1.Esquema Elétrico...........................................................................................................9

6.2.Fluxograma..................................................................................................................10

6.3.Listagem do Programa.................................................................................................11

6.4.Foto do Protótipo.........................................................................................................15

Page 3: AGV Carro Guiado em linha

1

1. Introdução

Com o desenvolvimento de tecnologias de navegação para veículos autônomos e o

aumento da capacidade de processamento dos computadores, apareceram os primeiros robôs

móveis industriais. Embora o seu âmbito de aplicação seja muito mais amplo, um robô móvel

procura conjugar num só dispositivo de automação a mobilidade de um veículo autônomo e a

capacidade de manuseio e manipulação dos robôs. Neste domínio, o AGV (Automatic Guided

Vehicle) é um dispositivo com maior aplicação em empresas, indústrias ou de distribuição.

1.1.Justificativa

Existem inúmeros trabalhos arriscados espalhados pelo mundo, com isso teve a

necessidade de criar um Robô que fizesse o serviço humano em determinadas situações sem

ter o risco de vida do funcionário, além de aumentar a flexibilidade, diminuir custos com mão

de obra, automatizar a logística de movimentação de cargas no interior das empresas

diminuindo a dependência da produção pelo funcionário.

1.2.Motivadores

Nos últimos anos houve muito interesse no desenvolvimento de tecnologias aplicadas em

veículos guiados automaticamente. Desde a automatização de tarefas que envolvem traslado e

carga de materiais ou simples tarefas de inspeção, onde implique o movimento desde um

ponto inicial a um ponto final do veículo, tem havido uma grande melhoria na redução de

riscos, tempos de traslado e consumo de energia.

A movimentação dos veículos guiados automaticamente (AGV) é baseada no estudo das

diferentes técnicas de navegação existentes, as quais utilizam diferentes tipos de sensores

(infravermelho, ultra-som, táctil, visão, etc.) como parte do equipamento do robô móvel para

realizar tarefas de movimentação do robô desde uma posição inicial até uma posição final. Os

veículos guiados automaticamente são usados para transporte interno e externo de materiais.

1.3.Objetivos

Tradicionalmente os AGV’s foram os mais usados em sistemas de manufatura.

Atualmente os AGV’s são utilizados para tarefas de transporte repetitivas e em outras áreas

tais como armazenagem, sistemas de transporte externo (subsolo), etc.

AGV – Veículos Guiados Automaticamente

Page 4: AGV Carro Guiado em linha

2

O uso dos AGV’s tem crescido enormemente desde sua introdução. O número de áreas de

aplicação e variação nos tipos tem aumentado significativamente. Armazéns e centros com

muitas intersecções são exemplos de áreas distribuídas.

AGV – Veículos Guiados Automaticamente

Page 5: AGV Carro Guiado em linha

3

2. Descrição Geral

O controlador para AGV é um dispositivo capaz de executar o controle de um AGV. O

nosso AGV é guiado por uma faixa escura instalada no chão: através de 2 sensores. O

circuito de controle detecta qual caminho seguir: esquerda (sensor1 acionado e sensor2 não

acionado) ou direita (sensor1 não acionado e sensor2 acionado). O AGV se desloca para

frente quando ligado e para quando recebe um pulso gerado por um sensor instalado na sua

lateral esquerda. Um detector de proximidade está instalado na parte frontal do AGV para

evitar que o mesmo colida com outro AGV ou até mesmo uma pessoa. Esse evento é

chamado de parada de emergência. A movimentação do AGV é feita por 2 motores DC

individuais, com velocidade fixa (ou variável dependendo da necessidade). Como o AGV é

alimentado por um banco de baterias, o mesmo deve ser capaz de medir o nível de carga

dessa bateria. Para controle da operação do AGV, se o mesmo não detectar uma alteração

na leitura do sensor lateral por mais de 10 segundos, o mesmo deve paralisar a sua

movimentação (parada forçada) e informar o problema no seu visor. Ele somente sai desse

estado de parada forçada com um novo pulso de acionamento. Um display LCD apresenta

as informações de operação do AGV: mensagens de deslocamento (“em movimento”,

“parado”, “parada de emergência”, “parada forçada”) e nível de bateria.

3

AGV – Veículos Guiados Automaticamente

Page 6: AGV Carro Guiado em linha

4

3. Descrição do Funcionamento

Faz-se importante saber que a estrutura mecânica de um AGV é projetada para cada

aplicação específica, e por isso pode ser aplicado em praticamente qualquer ambiente

industrial, onde haja a necessidade de transportar componentes entre etapas de produção.

Podemos citar alguns exemplos onde encontram-se AGVs com maior freqüência:

Indústria Automobilística: Transporte de Carrocerias e Peças.

Indústria Papeleira: Transporte de Bobinas de Papel.

Indústria Alimentícia e Farmacêutica: Transporte em Ambientes Limpos e

Armazenagem.

Indústria Metal-Mecânica: Transporte de Peças, Armazenagem e Expedição.

Indústria de Manufatura: Transporte de Peças, Armazenagem e Expedição.

3.1.Chave Liga/Desliga

A chave liga/desliga é uma chave push botton que é responsável pela habilitação do

motor das rodas e do sistema em geral.

3.2.Sensor Óptico

O sensor óptico serve para guiar o AGV, foram instalados estrategicamente na parte

lateral esquerda, frontal e embaixo justamente para monitorar seu percurso.

3.3.Display 16 x 2

O display modelo 16 x 2 trabalha com 4 bits e irá mostrar todas as informações do

AGV como nível de bateria, emergência, abastecimento de linha entre outras informações,

será instalado na parte traseira para melhor monitoramento.

3.4.Motor de tração

O motor de tração é responsável pela movimentação do AGV, assim que acionado

traciona as rodas.

4

AGV – Veículos Guiados Automaticamente

Page 7: AGV Carro Guiado em linha

5

3.5.Servo Motor

O servo motor é responsável pelo alinhamento e conversões do AGV mantendo-o no

caminho correto, os sensores detectores de linha reconhecem os limites da faixa escura

pintada no chão, envia as informações para o MSP430 que por sua vez envia os comandos

necessários ao servo motor alinhando o AGV ou fazer as conversões (direita / esquerda).

3.6.Micro controlador MSP 430

O MSP430 é o cérebro do AGV, sendo responsável por toda programação e lógica de

percurso, os sensores detectam que está chegando perto de algum obstáculo ou se está

saindo do percurso e envia para o MSP430, ele analisa e toma as devidas providências para

continuar no caminho certo e ao mesmo tempo envia todas as informações para o display,

sendo assim facilita a qualquer um saber o que está acontecendo em determinados

momentos.

A linguagem de programação usada para esse projeto é a linguagem C.

Foram usados os pinos abaixo dos portais para o funcionamento do veículo:

Pino 1.0 - Nível de bateria;

Pino 1.1 - (VAZIO)

Pino 1.2 - Motor de tração;

Pino 1.3 - Chave Liga/Desliga;

Pino 1.4 - Sensor óptico detector de faixa lado direito;

Pino 1.5 - Sensor óptico detector de faixa lado esquerdo;

Pino 1.6 - Sensor óptico lateral esquerdo (abastecimento de linha);

Pino 1.7 - Sensor óptico frontal (emergência);

Pino 2.0 - Pino de dados D4 (display);

Pino 2.1 - Pino de dados D5 (display);

Pino 2.2 - Pino de dados D6 (display);

Pino 2.3 - Pino de dados D7 (display);

Pino 2.4 - Servo Motor;

Pino 2.5 - Enable (display);

Pino 2.6 – Reset (display);

Pino 2.7 - (VAZIO).

5

AGV – Veículos Guiados Automaticamente

Page 8: AGV Carro Guiado em linha

6

3.7. Lógica de funcionamento do AGV

Pressionando o botão Liga, o AGV entra em funcionamento, o display passa a exibir

tudo o que está ocorrendo e ele começa a andar seguindo a faixa escura no chão.

Girando o potenciômetro, o display indica o NÍVEL DE BATERIA (simulando uma

bateria descarregando).

Seus sensores funcionam da seguinte maneira:

Sensor lateral (abastecimento): Assim que acionado, o display mostra a mensagem

ABASTECER LINHA, o AGV para de andar aguardando o botão Liga ser novamente

pressionado. Caso o veículo entre em funcionamento, e após 10 segundos o sensor lateral

não for acionado o mesmo para, exibe no display a informação AGUARDANDO e

aguarda o botão Liga ser pressionado mais uma vez.

Sensor frontal (emergência): Assim que acionado, o display mostra a mensagem

EMERGÊNCIA, o AGV para de andar aguardando o obstáculo ser retirado, assim que

retirado ele volta a seguir seu percurso reiniciando a contagem de tempo dos 10 segundos.

Sensores de detecção de pista: Assim que acionado, o AGV corrige seu percurso de

acordo com a faixa escura pintada no chão. Caso o sensor da direita seja detectado, o AGV

vira à esquerda, caso o sensor da esquerda seja detectado, o AGV vira à direita, sendo

assim, corrige seu percurso.

6

AGV – Veículos Guiados Automaticamente

Page 9: AGV Carro Guiado em linha

7

4. Conclusão

O resultado final foi satisfatório, o AGV se mostrou bem estável capaz de executar

todas as tarefas pré-determinadas e de se locomover sem interação humana, respeitando as

restrições que lhe foram impostas (emergência, parada para abastecimento, interrupção por

tempo pré-determinado).

Os AGVs podem fazer um trabalho físico pesado, sem desgaste ou exaustão,

eliminando o trabalho humano que seria mais caro e potencialmente perigoso, também

ajudam a dar às empresas uma vantagem competitiva, pois aumentam a eficiência da

produtividade e otimizam o tempo, são flexíveis e podem ser adaptados a diferentes

necessidades, reduzem também os danos aos produtos, criando um ambiente de trabalho

mais ergonômico.

Sua aquisição muitas vezes envolve grandes investimentos monetários iniciais, pois a

maioria dos veículos tele guiados são fabricados com materiais caros e sistemas de

orientação, embora as empresas e os fabricantes que os utilizam possam observar, muitas

vezes, um rápido retorno sobre o investimento, aumentando a produção, o tempo e a

eficiência do trabalho

7

AGV – Veículos Guiados Automaticamente

Page 10: AGV Carro Guiado em linha

8

Referências

http://pt.scribd.com/doc/22615830/Apresentacao-AGV

http://pt.scribd.com/doc/134576799/Robotica-AGV-em-sistemas-de-manufatura-pdf

http://www.xbot.com.br/downloads/apostila_Robotica_1-0.pdf

http://www.adororobotica.com/RBSENAI.pdf

8

AGV – Veículos Guiados Automaticamente

Page 11: AGV Carro Guiado em linha

9

5. Anexos

5.1.Esquema Elétrico

9

AGV – Veículos Guiados Automaticamente

Page 12: AGV Carro Guiado em linha

10

5.2.Fluxograma

Figura 1 – Fluxograma do AGV.

10

AGV – Veículos Guiados Automaticamente

Page 13: AGV Carro Guiado em linha

11

5.3.Listagem do Programa

/*****************************************************************************************//* INATEL - INSTITUTO NACIONAL DE TELECOMUNICAÇÕES - EAT205 *//* *//* PROJETO: AGV *//* AUTOR : VANDER BRAGA, PATRICK DIÓRIO, JORGE LUIZ *//* DEVICE: MSP430G2553 ( TEXAS INSTRUMENTS - LAUCHPAD) *//* DESCRIÇÃO DO SOFTWARE: ESTE PROGRAMA CONSISTE EM UM VEÍCULO ALTO GUIADO */ /* USANDO DOIS SENSORES ÓPTICOS, CONVERSOR AD DA LAUCHPAD PARA INDICAR NÍVEL *//* DE BATERIA, SENSORES ÓPTICO FRONTAL PARA SEGURANÇA DE PESSOAS E OBJETOS AO *//* LONGO DO TRAJETO E SENSOR ÓPTICO LATERAL QUE PROGRAMA PARADA PARA *//* ABASTECIMENTO DA LINHA DE PRODUÇÃO *//* *//*****************************************************************************************//******************************BIBLIOTECAS**********************************************/#include <msp430g2553.h> //biblioteca /*****************************************************************************************//*****************************************************************************************//******************************CONSTANTES**********************************************///Funcoes externas para o LCD (LCD16x24B.c)extern void InitLCD4B(void);extern void PutStrLCD(const unsigned char *dado);extern void PutCharLCD(unsigned char dado);extern void PutStrXYLCD(unsigned char x, unsigned char y, const unsigned char *dado);extern void CmdLCD(unsigned char cmd);extern void PutIntLCD(unsigned char dado);#define SAIDA_ON P1OUT|=SAIDA#define SAIDA_OFF P1OUT&=~SAIDA#define IN_AD 0x01 //Entrada AD no pino P1.0 (A0)

//Funcoes externas para o PWM MOTOR (velocidade do motor)

#define PERIODO 20000 //20ms#define SERVO 0x04 //SERVO LIGADO NO PINO P1.2#define PINO_BOTAO 0x08 //botao = P1.3

//Funcoes externas para o PWM DIREÇÃO (direção do carro)

#define PERIODO_1 20000 //20ms#define MINIMO 900 //Ton minimo#define MAXIMO 1980 //Ton maximo#define SERVO_1 0x10 //SERVO LIGADO NO PINO P2.4#define SENSOR_DIR 0x10 //sensor direito = P1.4#define SENSOR_ESQ 0x20 //sensor esquerdo = P1.5

//Sensores de segurança e abastecimento #define EMERGENCIA 0x80 //saída em P1.7#define ABASTECIMENTO 0x40 //saída em P1.6

/****************************************************************************************//****************************************************************************************//*************************** VARIÁVEIS GLOBAIS LCD ***********************************/

unsigned char bat; //variável que recebe o nivel da bateria já convertida

/***************************************************************************************//***************************************************************************************//***********************VARIÁVEIS GLOBAIS PWM MOTOR*******************************/

unsigned char botao,ligado=0, liga=0;unsigned int pwm=8000;

/**************************************************************************************//**************************************************************************************//*********************VARIÁVEIS GLOBAIS PWM DIREÇÃO******************************/

unsigned char SD, SE;

11

AGV – Veículos Guiados Automaticamente

Page 14: AGV Carro Guiado em linha

12

unsigned int pwm_d=1380; /***************************************************************************************//*****************************************************************************************************//*********************VARIÁVEIS GLOBAIS TIMER*****************************************************/

unsigned char milisegundo=0, segundo=0;

/****************************************************************************************************//****************************************************************************************************//*****************VARIÁVEIS ABASTECIMENTO E EMERGÊNCIA***************************************/

unsigned char EME, ABA;

/***************************************************************************************************//*********************************FUNÇÕES*********************************************************/void ConfigAD (void);unsigned char LeAD (void);/***************************************************************************************************//****************************FUNÇÃO PRINCIPAIS***************************************************/void main (void){ WDTCTL = WDTPW + WDTHOLD; //Desabilita o watchdog //LCD InitLCD4B(); //Inicializa o display PutStrXYLCD(1,1,"BATERIA\0"); //Mensagem inicial na 1a linha PutStrXYLCD(2,1," "); //Limpa 2a linha CmdLCD(0x0C); //Desliga o cursor ConfigAD(); //Configura o conversor AD //PWM MOTOR P1REN |= PINO_BOTAO+SENSOR_DIR+SENSOR_ESQ; //pull-up no botao e sensores P1DIR |= SERVO; //configura só o p1.2(TA1) como saída (servo) P1SEL |= SERVO; //Faz com que o P1.2 seja uma saida especial(PWM) TA0CCR0 = PERIODO-1; //Valor que terá que contar para gerar o periodo TA0CCTL1 = OUTMOD_7; //Inicial=1, contagem=CCR1=>0, contagem=CCR0=>0 TA0CTL=TASSEL_2+MC_1+ID_0; //Clock=SMCLK, liga o timer, clock/1 //PWM DIREÇÃO P2DIR |= SERVO_1; //configura só o P2.4(TA1) como saída (servo) P2SEL |= SERVO_1; //Faz com que o P2.4 seja uma saida especial(PWM) TA1CCR0 = PERIODO_1-1; //Valor que terá que contar para gerar o periodo TA1CCTL2 = OUTMOD_7; //Inicial=1, contagem=CCR1=>0, contagem=CCR0=>0 TA1CCR2 = pwm; //Ton desejado (em escala de 1us) TA1CTL=TASSEL_2+MC_1+ID_0; //Clock=SMCLK, liga o timer, clock/1

for(;;) //início do loop infinito { //LCD bat = LeAD(); //Var. bateria recebe o valor lido pelo AD CmdLCD(0x8D); //0x80 PutIntLCD(bat); //Imprime valor da carga da bateria no LCD PutCharLCD(0x25); //Imprime símbolo % no LCD //PWM MOTOR TA0CTL=TA0CTL&~(TAIFG); while ((TA0CTL&TAIFG)==0); //espera fim da contagem atual (sincronizar) botao=P1IN&PINO_BOTAO; //le o estado do botao S2 ( P1.3) if(ligado==0 && botao==0) //Se botao pressionado, movimenta o servo { liga = 1; //Compara botão após ligar } if(liga!=0) //inicia movimento do eixo { TA0CCR1=pwm; //configura novo Ton if(botao!=0) { ligado = 1; //variável que controla liga/desliga no mesmo botão } }

12

AGV – Veículos Guiados Automaticamente

Page 15: AGV Carro Guiado em linha

13

if(ligado!=0 && botao==0) //Se botao pressionado, para o servo { liga = 0; //Reinicia variável auxiliar } if(liga==0) //Compara variável (motor desligado) { TA0CCR1=0; //configura novo Ton milisegundo = 0; //Limpa contagem de tempo (milisegundo) segundo = 0; //Limpa contagem de tempo (segundo) if(botao!=0) //Compara botão após desligar { ligado = 0; //Reinicia variável } } //PWM DIREÇÃO SD=P1IN&SENSOR_DIR; //le o estado do sensor direito ( P1.4) SE=P1IN&SENSOR_ESQ; //le o estado do sensor esquerdo ( P1.5) if(SD!=0) //move carro para a direita { pwm_d=MINIMO; //limita no mínimo } if(SE!=0) //move carro para a esquerda { pwm_d=MAXIMO; //limita no maximo }

if((SD==0 && SE==0) || (SD!=0 && SE!=0)) //Se SD e SE forem iguais a 0 ou a 1 simultaneamente, servo vai para posição inicial { pwm_d=1440; //posição central } TA1CCR2=pwm_d; //configura novo Ton if(liga!=0) //Compara se variável auxiliar está ligada { if(PERIODO==20000) //Compara periodo do temporizador { milisegundo=milisegundo++; //Carrega valor do temporizador na variável milisegundo } if(milisegundo==55) //Converte milisegundo para segundo { milisegundo = 0; //Zera variável milisegundo segundo = segundo++; } //EMERGENCIA E ABASTECIMENTO EME=P1IN&EMERGENCIA; //le o estado do sensor direito ( P1.7) ABA=P1IN&ABASTECIMENTO; //le o estado do sensor esquerdo ( P1.6) if(liga!=0) { //EMERGÊNCIA if(EME!=0) { TA0CCR1=0; //configura novo Ton PutStrXYLCD(2,1,"!!!EMERGENCIA!!!"); //Imprime no LCD milisegundo = 0; //Limpa variável milisegundo segundo = 0; //Limpa variável segundo

} if(EME==0 && ABA==0) { PutStrXYLCD(2,1," "); //Limpa LCD } //ABASTECIMENTO if(ABA==0 && PERIODO==20000) //Compara periodo do temporizador { milisegundo=milisegundo++; //Carrega valor do temporizador na variável milisegundo

13

AGV – Veículos Guiados Automaticamente

Page 16: AGV Carro Guiado em linha

14

} if(milisegundo==50) //Converte milisegundo para segundo { milisegundo = 0; //Zera variável milisegundo segundo = segundo++; CmdLCD(0xCE); //0x80 PutIntLCD(segundo); //Imprime contagem de tempo no LCD } if(ABA==0 && segundo==10) { PutStrXYLCD(2,1," AGUARDANDO "); //Limpa 2a linha milisegundo = 0; //Limpa variável milisegundo segundo = 0; //Limpa variável segundo ligado = 0; //Reinicia variável liga = 0; //Reinicia variável auxiliar } if(ABA!=0) { PutStrXYLCD(2,1,"ABASTECER LINHA"); //Limpa LCD milisegundo = 0; //Limpa variável milisegundo segundo = 0; //Limpa variável segundo ligado = 0; //Reinicia variável liga = 0; //Reinicia variável auxiliar } } } }}

/*************************************************************************************************//*************************************************************************************************/void ConfigAD (void) //Função que configura o conversor AD{ P1SEL |= IN_AD; //Configura P1.0 como entrada do AD ADC10CTL0 = ADC10SR; //Configura o AD para 50kbps de taxa //de amostragem ADC10CTL1 = INCH_0 + ADC10SSEL_3; //Configura o AD para o canal 0 }/*************************************************************************************************/unsigned long int var;/*************************************************************************************************/ unsigned char LeAD (void) //Função que le o conversor AD e converte { //para temperatura unsigned int valorad; unsigned char bateria; ADC10CTL0 |= ADC10ON; //Habilita o conversor AD ADC10CTL0 &= ~ADC10IFG; //Desliga flag que indica fim de conversao ADC10CTL0 |= (ENC + ADC10SC); //Habilita a conversão AD while ((ADC10CTL0&ADC10IFG)==0); //Espera converter (ADC10IFG=1) valorad = ADC10MEM; //Var. bat recebe o valor lido var = valorad; var = var * 100; var = var / 1023; bateria = (unsigned char)var; //Passa o valor lido para % return (bateria); }/*************************************************************************************************/

14

AGV – Veículos Guiados Automaticamente

Page 17: AGV Carro Guiado em linha

15

5.4.Fotos do Protótipo

Foto do Protótipo montado e testado em laboratório.

15

AGV – Veículos Guiados Automaticamente