Ir ao conteúdo
  • Cadastre-se

Sensor Ultrassonico + Pic


cesarlg

Posts recomendados

Ola galera, Gostaria de trabalhar com dois sensores ultrassonicos como dos modelos hc-sr04 em um mesmo microcontrolador 16f877a.. Ë possível?

Sei o principio de funcionamento do modulo, de que maneira, resumidamente falando q tenho q tratar cada um dos módulos?

Outra questão é se consigo modulo parecido, mas protegido contra umidade e poeira?

Obrigado

Ola fiz um rascunho aqui, gostaria de saber se o caminho é esse?

Gostaria q corrigisse td inclusive os delays.. de maneira q fique o mais preciso possível..

continua a questão de sensor diferenciado..

#include <16F877a.h>

#FUSES NOWDT //No Watch Dog Timer
//#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
//#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection

#use delay(clock=4000000)
#define use_portb_lcd TRUE
#include <lcd.c>
int16 time;
float distancia, distancia1;

#define trig pin_c0
#define echo pin_c1
#define trig1 pin_c2
#define echo1 pin_c3
void main()
{
lcd_init();
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);

while(true)
{ printf(lcd_putc,"\fdisntancia:%f \ndistancia1:%f "distancia, distancia1);
delay_ms(20);
// inicia leitura modulo 1//**************************
output_high(trig);
delay_us(10);
output_low(trig);

while(!input(ECHO))
{}
set_timer1(0);
while(input(ECHO))
{}
time=get_timer1();
distancia=time*0.017;
delay_ms(50);
// inicia leitura modulo2 //************************************
output_high(trig1);
delay_us(10);
output_low(trig1);

while(!input(ECHO1))
{}
set_timer1(0);
while(input(ECHO1))
{}
time=get_timer1();
distancia1=time*0.017;
delay_ms(50);
}
}

Link para o comentário
Compartilhar em outros sites

1. e o q me diz dos delays? o tempo ta certo?

outras questões me veem a cabeça e não posso testar pois ainda não comprei o sensor, mas de repente alguém saiba:

2. posso interconectar pic e sensor com um cabo de qts metros? originalmente p meu ideal necessitaria de 10mts , é possível, com que condições?

3. sensor direcionado ao solo, plantas podem interferir em leitura?

valeu amigos!

Link para o comentário
Compartilhar em outros sites

Cesarlg, li o manual do sensor...e verifiquei que o dado (distancia) esta contido em um pulso que tem um tempo de alto proporcional a essa.

A tempos atras fazia algo com um sinal parecido mas ele me entregava o dado de rotação do distribuidor de um motor de combustão de carro então creio que a ideia va funcionar:

Use dois pinos do PIC (RB0 e RB1) do 877.

Configure RB0 para interrupcao interna com borda de subida.

Configure RB1 para borda de descida;

envie o pulso de trigger e ative a contagem de um timer(prefira o timer1)

quando houver interrupcao de borda de sudida (começo do echo) leia o timer1(nao pare a contagem) e guarde em uma variavel;

retorne ao programa normalmente...

Na interrupcao da borda de descida (fim do echo), leia novamente otimer 1 (nao pare a contagem)

guarde essa leitura e outra variavel;

subtraia o valor da leitura corrente do valor daquela primeira que voce fez;

o valor da diferença contem o valor da distancia proporcional ao tempo de pulso, dai é so escalar e imprimir a medida.

aguardo seus comentarios.

Abs

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!