Localizador de distância baseado em AT89S52 e sensores ultrassônicos HC-SR04

Localizador de distância baseado em HC-SR04 dá a distância de um obstáculo em centímetros. Tem um alcance de 2 cm a 400 cm. O projeto é construído em torno do AT89S52, que é um microcontrolador da família 8051. A distância é exibida em displays de sete segmentos.

Componentes:

AT89S52

Três 7 segundos. Desp. (Tipo de ânodo comum)

HC-SR04 (módulo sensor ultrassônico)

Conectores, PCBs etc.

O código é escrito em Assembly e é facilmente compreensível. O projeto pode ser usado em robôs para evitar obstáculos, etc.

Trabalhando:

O funcionamento dos sensores ultrassônicos é bastante simples e de fácil interface com o microcontrolador. O módulo do sensor possui 4 pinos, dos quais o Pin-1 e o Pin-4 são + Vcc e Gnd respectivamente. O Pin-2 é Trigger e o Pin-3 é o pino Echo.

Quando um pulso alto de 10us é aplicado no pino TRIG, o transmissor ultrassônico envia 8 pulsos consecutivos de frequência de 40kHz. À medida que o oitavo pulso é enviado, o pino ECHO do sensor torna-se HIGH. Agora, quando as ondas ultrassônicas são refletidas em qualquer superfície e são recebidas pelo receptor, o pino ECHO fica BAIXO. O tempo que leva para sair e retornar ao sensor é usado para encontrar a distância da superfície refletora.

Distância em centímetros = (Tempo/58) cms

Em polegadas = (tempo/148)

A distância também pode ser calculada levando em consideração a velocidade do som (=340m/s)

HC-SRO4

Explicação do CÓDIGO:

· As linhas de dados dos displays de sete segmentos têm interface na porta-0

· Porta-1, Pin-0,1 e 2 são linhas selecionadas para SSDs

· P3.0 está conectado ao Trig

· P3.1 está conectado ao pino Echo do módulo sensor

· Na parte principal do Programa, primeiro o Timer-1 é inicializado no modo 2 (recarga automática de 8 bits)

Quando P3.0 está definido como alto, a sub-rotina DELAY1 é chamada. Após 10us P3.0 é redefinido para 0

· Agora P3.1 é verificado quanto a um sinal alto. À medida que P3.1 fica alto, o Timer 1 inicia e toda vez que ele transborda, o Registrador A é incrementado.

· O valor de contagem carregado deve ser 58 (mencionado na folha de dados). Para que após 58 ciclos A seja incrementado uma vez. Mas como o atraso causado pelas instruções precisa ser compensado, o valor de contagem que usei foi 45 (=> 255D-210D).

· O valor armazenado em A é utilizado para extrair a Distância medida. Isso é feito pela instrução da Divisão.

· O valor dos dados de 8 bits é enviado sequencialmente para o respectivo display de 7 segmentos sendo selecionado através das linhas de seleção.

Localizador de distância baseado em AT89S52 e sensores ultrassônicos HC-SR04

Localizador de distância baseado em AT89S52 e sensores ultrassônicos HC-SR04

Código fonte do projeto

###


ORG 00H 
MOV DPTR,#SSDisplay // move o endereço do LUT para DPTR
MOV P1,#00000000B // define P1 como porta de saída MOV P0,#00000000B // define P0 como porta de saída CLR P3.0 // define P3.0 como saída para envio do trigger CONJUNTO P3.1 // define P3.1 como entrada para receber eco MOV TMOD,#00100000B // define timer1 como timer de recarga automática modo 2 PRINCIPAL: MOV TL1,#210D // carrega o valor inicial para começar a contar MOV TH1,#210D // carrega o valor de recarga MOV A,#00000000B //limpa o acumulador CONJUNTO P3.0 //inicia o pulso de disparo ATRASO DE CHAMADA1 // fornece largura de 10uS para o pulso de disparo CLR P3.0 //termina o pulso de disparo AQUI: JNB P3.1,AQUI // faz um loop aqui até que o eco seja recebido VOLTAR: SETB TR1 //inicia o timer1 AQUI1: JNB TF1,AQUI1 // faz um loop aqui até o cronômetro estourar (ou seja; 48 contagens) CLR TR1 //para o cronômetro CLR TF1 // limpa o sinalizador do temporizador 1 INCA // incrementa A para cada overflow do timer1 JB P3.1,VOLTAR // salta para BACK se o eco ainda estiver disponível MOV R4,A // salva o valor de A em R4 ACALL DLOOP //chama o loop de exibição SJMP PRINCIPAL // salta para o loop MAIN ATRASO1: MOV R6,#2D // atraso de 10uS LOOP1: DJNZ R6,LOOP1 RET DLOOP: MOV R5,#50D // carrega R5 com 100D VOLTAR1: MOV A, R4 //carrega o valor em R4 para A MOV B,#100D // carrega B com 100D DIVAB // isola o primeiro dígito CONJUNTO P1.0 // ativa a unidade de display LED D1 EXIBIÇÃO DE CHAMADA //chama a sub-rotina DISPLAY MOV P0,A // move o padrão de unidade de dígito do primeiro dígito para P0 ATRASO DE CHAMADA // atraso de 1mS ATRASO DE CHAMADA MOV A, B // move o resto da 1ª divisão para A MOV B,#10D // carrega B com 10D DIVAB // isola o segundo dígito CLR P1.0 //desativa a unidade de display LED D1 CONJUNTO P1.1 // ativa a unidade de display LED D2 EXIBIÇÃO DE CHAMADA MOV P0,A // move o padrão de unidade de dígito do 2º dígito para P0 ATRASO DE CHAMADA ATRASO DE CHAMADA MOV A, B // move o resto da 2ª divisão para A CLR P1.1 //desativa a unidade de display LED D2 CONJUNTO P1.2 // ativa a unidade de display LED D3 EXIBIÇÃO DE CHAMADA MOV P0,A // move o padrão de unidade de dígito do 3º dígito para P0 ATRASO DE CHAMADA ATRASO DE CHAMADA CLR P1.2 //desativa a unidade de display LED D3 DJNZ R5,BACK1 //repete o loop de exibição 100 vezes RET ATRASO: MOV R7,#250D // atraso de 1mS ETIQUETA2: DJNZ R7, ETIQUETA2 RET EXIBIÇÃO: MOVC A,@A+DPTR // obtém o padrão de unidade de dígitos para o conteúdo em A RET Exibição SSD: DB 0C0H // Código hexadecimal para exibir DISPLAY 0 DB 0F9H // EXIBIÇÃO 1 DB 0A2H // VISOR 2

3

Vídeo do projeto

https://www.youtube.com/watch?v=He7SEEitFP4

Perguntas relacionadas a este artigo?
👉Pergunte e discuta nos fóruns EDAboard.com e Electro-Tech-Online.com.

Nos diga o que você acha!! Cancelar resposta

Related Content

Back to blog

Leave a comment

Please note, comments need to be approved before they are published.