top of page

ULTRASONIC PIC

Introdução.
 

As ondas de ultrassom não estão apenas presentes em aparelhos médicos como imaginamos. Hoje estas ondas são aplicadas a projetos tão frequentemente a ponto de podermos usá-las facilmente. Os sensores de ultrassom utilizados em projetos como esse que vamos abordar são os responsáveis por fazerem leituras de distâncias de um objeto a sua frente. Nesta aula você vai conhecer um pouco sobre esse componente tão importante como também conhecer como ele atua e aprender a programar dentro do PIC para aplicação em seus projetos. Para amostra dos dados vamos estar utilizando um LCD 16x02. Vamos começar!
 

O sensor ultrassônico.
 

O sensor ultrassonico é um tipo de sensor que utiliza as ondas de ultrassom para detectar a distância de um objeto a sua frente por meio de cálculos. O módulo que estamos utilizando para essa aula é o sensor HC-SR04 da figura abaixo.

















































Segundo alguns sites de compra destes produtos, este sensor possui um alcance de leitura de até 4 metros considerando também a precisão dos cálculos feitos. Neste sensor temos o pino VCC que é o pino de alimentação, o pino Trig que é um pino de entrada de pulsos, o pino Echo que é o pino de saída de pulsos e o pino GND que é o terra do nosso sensor.



Como utilizar o módulo.
 

A utilização do módulo não é tão simples assim, pois temos que a passagem dos dados não é nada pronta como temos na transferência serial RS-232 pelos pinos Rx e Tx. Portanto alguns procedimentos devem ser feitos para que possamos adquirir os dados.
 

1. Fornecer um sinal alto (bit 1) no pino Trig
2. Manter o sinal alto por pelo menos 10us
3. Fornecer um sinal baixo (bit 0) no pino Trig (Neste momento o módulo automaticamente irá enviar um sinal de 40Khz)
4. Aguarde uma borda de subida (0 para 1) no pino Echo
5. Comece a contar o tempo
6. Aguarde até ocorrer uma borda de descida (1 para 0) no pino Echo
7. Pare a contagem do tempo
8. Pronto! A contagem que você fez é o tempo que o ultrassom levou para ecoar no objeto e voltar, agora basta calcular a distância!

 

O cálculo da distância pode ser obtido de duas formas, em centímetro ou em polegadas. Para obter o valor em centímetro utilizamos o seguinte cálculo:
 

        (Tempo)/29/2
 

Para adquirir o valor em polegadas utilizamos o seguinte cálculo:
 

       (Tempo)/74/2
 

Tempo é o valor que é obtido após a contagem do intervalo de trabalho do sensor.
 

Considerações para o PIC.
 

Como vimos anteriormente, há de se contar o tempo de trabalho do sensor, então como podemos fazer isto? A solução mais viável é utilizar o Timer 1 trabalhando com alguns comandos. São eles:
 

       Set_timer1(): Indicamos em que valor começará a contagem.
       get_timer1(): Obtemos o valor do registro do Timer 1.

 

Com essas duas funções podemos obter o tempo de trabalho do sensor e calcular a nossa distância com base nos valores obtidos.
 

Por isso faz-se necessário que se habilite o Timer 1 para o PIC.
 

Interface e programação para o PIC.
 

Vamos usar os pinos A0 e A1 para gerenciar os pinos do sensor. Nossas ligações ficarão assim:















































Para a programação vamos ter que configurar o PIC e habilitar o Timer 1. Perceba que é somente para habilitar o Timer 1 e NÃO PARA ACIONAR INTERRUPÇÕES. Portanto vá na aba Timers e habilite o Timer1.



Nossa programação fica assim:


//Configurações do LCD.
#define LCD_DATA_PORT getenv("SFR:PORTB")
#define LCD_ENABLE_PIN  PIN_B2
#define LCD_RS_PIN      PIN_B0
#define LCD_RW_PIN      PIN_B1
#define LCD_DATA0       PIN_B4
#define LCD_DATA1       PIN_B5
#define LCD_DATA2       PIN_B6
#define LCD_DATA3       PIN_B7
#define LCD_TYPE 2
#include <lcd.c>

 

//Atribuições de números a palavras para serem usadas no código:
 

#define CM 1
#define POL 0

 

//Atribuições de pinos a palavras para serem usadas no código:
 

#define TRIG PIN_A0
#define ECHO PIN_A1

 

float get_distance(int8); //Declaração do protótipo da função.
 

//Definições de variáveis:

Int16 Time;
float Distance;

 

//Inicio do Programa:
void main()
{
   float distancia; //Definição de variável local

 

   // Aqui fica as configurações do PIC feitas no PIC Wizard do CCS.

   lcd_init(); //Inicialização do LCD
   lcd_putc("\f"); //Limpa o buffer do display

 

   While(TRUE)
   {
      distancia = get_distance(CM); //Chama a função get_distance()
      lcd_putc("\f"); //Limpa o buffer do display
      printf(lcd_putc, "%f", distancia); //Mostra os dados no LCD.
      Delay_ms(300); //Espera 300ms
   }  
}

 

//Função get_distance()
 

float get_distance(int8 unit)
{

   Output_high(TRIG); //Envia nivel alto para o pino TRIG
   Delay_us(10); //Espera 10us
   Output_low(TRIG); //Envia nível baixo para o pino TRIG

 

   While(!input(ECHO)){ } //Aguarda uma borda de subida (0 para 1) no
                                   //pino ECHO

 

   set_timer1(0); //Começa a contar o tempo.



   While(input(ECHO)) { } //Aguarda uma borda de descida (1 para 0) no
                                    //pino ECHO

 

   Time = get_timer1(); //Simula a parada do tempo do Timer 1
 

   if(unit) //Se for selecionado CM
   {
      Distance = Time/29/2; //Calcula distancia
      return Distance; //Retorna o valor em centimetros.
   }  

 

   if(!unit) //Se for selecionado POL
   {
      Distance = Time/74/2; //Calcula distancia
      return Distance; //Retorna o valor em polegadas.
   }
}

 

Pronto galera, é simples assim! Compile e grave o código no PIC e execute na real o seu programa. Bons estudos.



































































bottom of page