INICIANDO EXPERIMENTOS COM ULTRASSOM – LENDO DISTÂNCIAS COM MODULO ULTRASSÔNICO HC-SR04 E PIC16F628A

1

Gostaria de medir distâncias com o uso do módulo ultrassônico HC-SR04? Veja mais…

Veja o esquema abaixo:

Atualmente, está relativamente fácil obter componentes prontos para montagens experimentais. Um deles é o emissor/receptor de ultrassom HC-SR04, que contém em uma única plaquinha de circuito impresso de 20×45 mm, um emissor e um receptor ultrassônico, junto com circuitos integrados SMD para a lógica de funcionamento. Apenas 4 terminais são necessários para sua ligação, denominados de : ‘Vcc, Gnd, Trigger e Echo’. Em princípio, basta disparar com um breve pulso de 10 microsegundos em nível ‘1’, no terminal ‘Trigger’ e aguardar em ‘Echo’ até que ele vá para nível ‘1’. Deveremos então, medir o tempo que este terminal permanecer em nível ‘1’. Usamos o Timer 1 para esta medição. Como obter a distância? Basta usar um pouco de matemática para calcular a distância que se encontra o objeto posicionado a frente do módulo HC-SR04. Lembre-se que o som viaja no ar a aproximadamente 340 metros por segundo. É digno de nota que o tempo a ser medido, será o dobro, pois o som terá de viajar até o objeto e retornar pelo mesmo caminho, após ser refletido por ele.
Como fazer estes cálculos no PIC? Com a boa e eficiente ‘Biblioteca de Ponto Flutuante’. Ela já foi acrescentada ao ASM, para facilitar a compreensão do funcionamento. Geralmente, ela seria chamada, via ‘includes’, no início do programa.
Para usa-la temos que primeiro transformar os dados em ‘ponto flutuante’.
Como fazemos isto? Carregamos os registradores AARGB0..B3 com o valor a transformar e depois chamamos a rotina ‘CALL FLO2424’. Ela retornará em ‘AEXP, AARGB0, AARGB1’, o valor em ‘ponto flutuante’ de 24 bits.
A cada operação feita com a rotina de ponto flutuante, devemos tomar o cuidado de salvar os resultados nos bancos de registradores. Para facilitar a manipulação, temos 3 bancos diferentes (A,B e C), além de rotinas para trocar entre sí, o conteúdo dos bancos ( swapA_B) e para copiar (copiarA_C, copiarA_B, copiarC_A). Apenas, temos de estudar como fazer a rotina para torna-la mais eficiente, ordenando os passos de forma correta e mais lógica possível.
Qual foi o cálculo realizado para obtermos a medida da distância?
Para melhorar os cálculos, o valor de 340 metros/segundo foi convertido em 3.400.000 décimos de milímetros/ 1.000.000 de microsegundos. Como no final da conta, temos de dividir por 2, fazemos então a divisão por 2.000.000 de microsegundos, eliminando, assim, uma etapa de multiplicação. Basta, agora, multiplicar este resultado pelo tempo medido, ou seja, o valor que temos no Timer 1, usado para medir a duração do pino ‘Echo’ em nível ‘1’. Voltamos a converter para ‘inteiros’ com a rotina ‘CALL INT2424’. Convertemos de hexa para decimal com a rotina ‘CALL CONV_DEC’, e finalmente, apresentamos no LCD o valor obtido.

Fórmula: Distância (cm)= 3400000 /2000000 * Timer 1

Como estamos usando um cristal de 4 mhz, cada incremento no Timer 1 corresponde a 1 microsegundo.
O uso de ultra-som para medições de distâncias tem suas restrições. Superfícies rugosas e macias, como tecido, algodão,etc, tendem a absorver a emissão ultrassônica, impossibilitando o retorno do eco. Formatos irregulares, orifícios, tamanhos reduzidos, etc, tendem a causar instabilidade nas medidas. Isto deve ser levado em conta ao iniciar um projeto com esta tecnologia. Entre os possíveis usos: pequenos robôs (como ‘olhos ultrassônicos’, que se desvie de objetos), uma alarme de passagem, sensor de proximidade para carros, alarmes por proximidade, etc. Mais detalhes do componente, consulte o datasheet do componente para saber mais sobre seu funcionamento e suas limitações.
Obs. Este material é de uso didático apenas, sendo montado em protoboard, sujeito a bugs ainda não identificados. Esta sendo fornecido o arquivo ASM, que poderá ser alterado conforme as necessidades do hobista.

Segue o arquivo ASM:

le_distancia_asm

Segue o arquivo HEX:

le_distancia_hex

Manuais:
Pic16f628a
HC-SR04

Curiosidades:
Como uma música se torna um sucesso?
Proteja sua audição!
O segredo de um ouvido em miniatura
“A máquina de aprender mais potente do Universo”
Como lidar com problemas da próstata
Mapeamento do céu: no passado e no presente
Alimentos nutritivos ao seu alcance
Tomar chá à moda chinesa
Como é viver acima das nuvens
Gota — causas e fatores de risco
O projeto maravilhoso da molécula de hemoglobina
O que fazer para dormir melhor
Pressão alta: prevenção e controle
Quem criou as leis que governam o Universo?
Como o árabe tornou-se a lingua dos instruidos

Outros assuntos:
Como disciplinar seu filho adolescente
Por que eu me corto?
Desempenhem bem o papel de pais
Como fazer seu segundo casamento dar certo
O que acontece quando morremos?
Como criar filhos responsáveis
Como administrar o seu dinheiro
Ensine valores morais a seus filhos
Ensine seus filhos bons principios com atividades de colorir
Como posso ter ânimo para exercitar
Como posso controlar meu peso?
Entrevista com um bioquímico
Adolescentes- O que fazer se estou sofrendo bullying?
Como evitar ferir com palavras?
Como tratar seu cônjuge com respeito?

Até o próximo artigo!!!

Clique aqui para comentarios/sugestões fora deste tópico

1

16 comments

  1. 0

    Bom dia Larios, venho acompanhando os seua post a tempos até fiz o ckt so sensor de presença por rx/tx. mas não ficou tão bom, mas gostaria de saber se voce poderia me ajudar num ckt que usaria o HC-sr04 e um pic para automatizar dispositivos, ate acheu um post de um amigo nosso que é +/- que tenho em mente, só que ele usou um arduino e eu gostaria de usar um PIC, segue link: http://arduinolivre.wordpress.com/2012/08/01/desligando-tv-utilizando-sensor-ultrasonico-hc-sr04/, só que usar um relay no lugar do led IR

    1. 0

      Olá Cleber!
      Você pensa em usar para ‘automatizar’ dispositivos? Leve em conta, que para cada processo existe sensores diferentes que serão mais eficientes em uma ‘automação’. O sensor ultrasônico pode não ser a melhor escolha. Existe os indutivos, capacitivos, ópticos, piroelétricos, etc. Poderia compartilhar a sua ideia de ‘automatismo?
      Cláudio

      1. 0

        Olá Claudio, o que tenho em mente seria para automatizar residencia, Imagina voce na sala vendo TV e ela fica ligada o tempo que vc estiver no ambiente, e quando passar um tempo (5 min) que vc sai da sala a tv desliga o receptor de tv tambem desliga, seria +/- oque a sony tem hj nas tvs. ajudatia até na economia de eletricidade.

  2. 0

    Boa noite Claudio.
    Tentei fazer o circuito LENDO DISTÂNCIAS COM MODULO ULTRASSÔNICO HC-SR04 E PIC16F628A e meu display não exibe nada, o que pode haver de errado com o projeto?

    1. 0

      Olá Luckstrikerhlm!
      Primeiramente, certifique de ter gravado o pic antes de usar no circuito. Certifique de estar usando o hex correto, fornecido no artigo. Também, verifique todas as ligações. Inversões dos pinos são fáceis de acontecer. Verifique pino a pino se cada ligação está certa. Alguns displays tem posições diferentes nas pinagens. Veja o datasheet do display para se certificar. Também, alguns displays não funcionam bem com o resistor de 1k ao gnd no pino ‘VO”. Substitua por um trimpot de 10k, com um extremo ao vcc e o outro extremo ao gnd, ligando o cursor no pino ‘VO’. Você irá ajustar o ‘contraste’ para a melhor apresentação.
      Cláudio

  3. 0

    Claudio, bom dia! Os projetos postados por voce sao de extrema simplicidade e alta aplicabilidade em varios outros projetos. Gostei muito. A 3 anos fui fazer um curso de assembly. O professor me mostrou o CCS C e eu desisti do assembly. Me formei em algo parecido com a mecatronica de hoje. Oficial de Maquinas da Marinha Mercante. Estudei aletrica, pneumatica, mecanica, hidraulica, “eletronica em 1979 (imagina!)”e outras. Na apresentação do curso, fui o unico que nao tinha jamais visto um pic. Claro! Teve um sacaninha (meu professor) que me apresentou o 877A. De la para ca, fiz o software e hardware de um dosador eletronico para minha empresa. Nao existe no mercado nada parecido. Este dosador nao e vendido, e utilizado com nossos produtos. Apos todo este bla, bla, bla… Pergunto: Voce nao posta esses projetos em C? Ou seja, em portugues? rsrsrs…..
    Nao pego projetos na internet, porque os comentarios sao sem fim, porque o projeto nao esta certo ou vem em .hex que nao posso mexer. De qualquer forma, os comentarios dos outros usuarios mostram a qualidade dos seus projetos em assembly(linguagem do além)rsrsrs….. Obrigado.

    1. 0

      Olá Mauro!
      Obrigado por seus comentários apreciativos pelo site. Infelizmente, programar em “C” não é ‘minha praia’. Mas aindo persisto em ‘tentar’ programar nesta linguagem, em vista de muitas vantagens advindas. Mas o ‘assembly’ ainda me é ‘muito agradável’, como um gosto adquirido. Se dispuser de projetos seus mesmo em “C”. que desejar disponibilizar para postar, fique a vontade. Serão bem recebidos.
      Claudio

  4. 1

    Gostaria de agradecer muito a vc amigo Claudio,
    por seus projetos, Já montei varios projetos seus,
    gostaria de perguntar a vc amigo Claudio ou a todos que compartilham ideias nesse Blog Maravilhoso,,
    gostaria que alguém já viu ou já montou um controle de velocidade com potenciometro para motores Brulhess
    de 3 fios, fico no aguardo de todos que poder me dar uma força,,,,

    1. 0

      Olá Neto! Qual seria o uso deste controle? Qual a tensão do motor? Qual a rotação máxima e minima? Tem necessidade de reversão?
      Claudio

  5. 0

    Porque a verdade é que já está ficando mais fácil encontrar o PIC do que o LM567, hehehe, e a questão é que se for possível, já temos essa segunda opção na falta do LM567. Outra possibilidade que poderia ser analisada, e de fazer um programa que ao invés do trimpot, colocamos dois botões para incrementar e decrementar a frequencia, indo de 0 a 500khz, como se fosse ajuntando com o trimpot, e daí teríamos um pino, no qual, colocamos um multimetro para medir a frequencia que ele está sendo ajustado, ou seja a frequencia que o pic vai decodificar né. Lembrando que esse ajuste vai ter que no final ficar salvo na eeprom, para quando desligar e o pic o valor do ultimo ajuste fique armazenado.

  6. 0

    Boa tarde Claudio. Gostaria de saber se é possível fazer um programa para o PIC 12F675 que simule o LM567? Você já fez um programa que decodificava uma determinada frequencia, mas o LM567 decodifica de 0 a 500khz ajustando um trimpot. Seria possível já que o pic 12f675 possui um conversor ad, colocar um trimpot, que conforme o ajuste o pic decodifique a frequencia ajustada de 0 a 500khz?

    1. 0

      Olá Deivid! Porque não usar o próprio LM567? Haverá alguma vantagem para uso, e em que aplicações que você tem em mente?
      Claudio

Comments are closed.