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