CARRINHO SENSORIZADO
Projeto de conclusão do Programa de Aprendizagem de
Microprocessadores e Arquitetura de Computadores
Curso de Engenharia Elétrica – Telecomunicações
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ
ALUNO:
Edney
Fernandes Schinzel – [email protected]
ORIENTADOR:
Prof. Altair
Olivo Santin
1. INTRODUÇÃO
A proposta do projeto é de criar um
carrinho movido a pilhas com sensores frontais e traseiros que evitam que ele
bata. O carrinho deve movimentar-se para frente constantemente e em linha reta
até que um obstáculo apareça. Ao aproximar-se do obstáculo, o carrinho aciona
marcha ré por um determinado tempo virando-se para a esquerda, a fim de desviar
do obstáculo.
Caso, no período em que o carrinho esteja
em marcha ré e virando-se, encontre um novo obstáculo, os sensores traseiros
serão ativados, interrompendo a ré e fazendo que siga para frente novamente.
Para que o carrinho funcione como
desejado, é utilizado um microcontrolador, que funciona como o cérebro do
carrinho, responsável pela tomada de todas as decisões.
2. DESENVOLVIMENTO
2.1
FUNCIONAMENTO DOS SENSORES
2.1.1
Sensores Frontais
Na parte frontal do carrinho, existem
dois pares de sensores, um par na parte frontal esquerda e outro par na parte
frontal direita, conforme mostrado na foto 4. Cada par é constituído de um
sensor infravermelho transmissor e um receptor, onde cada tipo de sensor possui
um hardware individual e cada sensor funciona de forma independente.
O sensor transmissor emite luz
infravermelha com uma freqüência aproximada de 1 kHz. Essa freqüência é gerada
para que a sua luz não seja confundida e atrapalhada pelas luzes das lâmpadas,
por exemplo.
O receptor possui um hardware que aumenta
a sua sensibilidade de percepção, que pode ser alterada através de um resistor,
e nele existe um circuito integrado que consegue captar a luz do transmissor na
determinada freqüência, freqüência essa que é ajustada através de um trimpot.
2.1.2
Sensores Traseiros
Para o funcionamento dos sensores
traseiros, um pino do microcontrolador fica em pull-up possuindo uma tensão
constante de 5 volts. A esse pino estão ligados 2 botões do tipo tecla tact os quais são fixados no pára-choque traseiro. Quando o
carrinho encontra um obstáculo em sua parte traseira os botões são acionados gerando
uma queda de tensão no pino do microcontrolador para 0 volt. O obstáculo não
chega a tocar no carrinho devido a suportes utilizados junto aos botões, os
quais podem ser vistos na foto 6.
2.2
FUNCIONAMENTO GERAL
O carrinho movimenta-se para frente até
que um obstáculo seja percebido, isso é feito pelo fato de que a luz do
transmissor é refletida pelo obstáculo voltando-se para o receptor, o qual gera
um sinal ao microcontrolador que faz a tomada de decisão.
Após emitido o sinal ao microcontrolador
pelos sensores frontais, o carrinho inverte o sentido do giro do motor dando
marcha ré, acende a luzes traseiras e gera um sinal sonoro, indicando assim,
que o carrinho esta no sentido de marcha ré. Este período de marcha ré é de
dois segundos e nesse período há um giro do eixo frontal para esquerda fazendo
com que o carrinho vire e o obstáculo seja desviado. Encerrando esse tempo de
dois segundos, o sentido do giro do motor se desinverte, as luzes traseiras são
apagadas e o sinal sonoro é interrompido, retomando o seu movimento para frente
até que um próximo obstáculo seja encontrado e assim os mesmo comando
realizados.
Caso, no tempo em que o carrinho esteja realizando
marcha ré e virando-se, encontre um novo obstáculo, agora em sua parte
traseira, os sensores traseiros entram em ação avisando o microcontrolador,
que imediatamente toma a decisão de interromper a marcha ré e movimentar-se
para frente novamente, realizando assim um pequeno giro do carro podendo ser
suficiente para que o obstáculo frontal seja desviado, caso ainda não tenha
sido, ira voltar para trás com mais um pequeno giro até que o obstáculo seja
desviado.
3. DIAGRAMA
DE BLOCOS
4. LISTA DE
COMPONENTES
5.
ESQUEMÁTICOS
5.1 PLACA
PRINCIPAL
5.2 SENSOR
TRANSMISSOR
5.3 SENSOR
RECEPTOR
6. CÓDIGO
FONTE (COMPILADOR MIKROC)
#define SensoresTraseiros PORTA.F2
#define SensoresFrontais PORTA.F3
#define MotorReh PORTB.F0
#define LedReh1 PORTB.F1
#define LedReh2 PORTB.F2
#define Buzzer PORTB.F7
/* variáveis de 8
bits */
unsigned char
AtivaSensores;
unsigned char
DesativaReh;
unsigned char
tmp_Reh;
unsigned char
tmp_Buzzer;
unsigned char
t10ms;
void
interrupt(void)
{
if (t10ms > 0) t10ms--;
if
(t10ms == 0)
{
t10ms = 100;
asm CLRWDT; //zera o WatchDog
if (tmp_Buzzer > 0) tmp_Buzzer--;
if (AtivaSensores == 1)
{
if (SensoresFrontais == 0)
{
tmp_Reh--;
if (tmp_Reh == 0)
{
tmp_Reh = 200;
//tempo de 2 segundos
AtivaSensores = 0;
tmp_Buzzer = 25;
MotorReh = 1;
}
}
else
tmp_Reh = 1;
}
if (MotorReh == 1)
{
if (tmp_Reh == 0)
{
AtivaSensores = 1;
DesativaReh = 1;
LedReh1 = 0;
LedReh2 = 0;
Buzzer = 0;
MotorReh = 0;
tmp_Reh = 1;
}
else
if (tmp_Reh > 0)
{
tmp_Reh--;
if
(SensoresTraseiros == 0)
DesativaReh--;
if
(DesativaReh == 0)
//se sensor traseiro disparado...
tmp_Reh = 0;
//entao pára de dar ré
LedReh1 = 1;
LedReh2 = 1;
if (tmp_Buzzer == 0)
{
Buzzer =~Buzzer;
tmp_Buzzer = 25;
}
}
}
}
TMR0 = 155;
INTCON =
0x20;
}
void Configura(void)
{
_WDT_ON; //ativa o WatchDog
_XT_OSC; //seta o oscilador de crystal
TRISA = 255;
TRISB =
0; //seta port
B como saída (output)
MotorReh = 0;
LedReh1 = 0;
LedReh2 = 0;
Buzzer = 0;
AtivaSensores = 1;
DesativaReh = 1; //20ms
tmp_Reh = 1;
t10ms = 100;
TMR0 = 155;
OPTION_REG =
0x89; //configurado Prescaler
para utilizar WatchDog / 2;
INTCON = 0xA0;
}
void main(void)
{
Configura();
while(1)
{
}
}
7. FOTOS
Foto 1 – Placa principal
Foto 2 – Placa dos Sensores Receptores Fontais
Foto 3 – Placa dos Sensores Transmissores Frontais
Foto 4 – Sensores Frontais
Foto 5 – Sensores Traseiros
Foto 6 – Perfil do Carrinho