Neste tutorial vamos discutir e projetar um circuito para medir distâncias. Este circuito é desenvolvido pela interface do sensor ultrassônico “HC-SR04” com o microcontrolador AVR. Este sensor usa uma técnica chamada “ECHO” que é algo que você obtém quando o som é refletido de volta após atingir uma superfície.
Sabemos que as vibrações sonoras não podem penetrar nos sólidos. O que acontece é que, quando uma fonte de som gera vibrações, elas viajam pelo ar a uma velocidade de 220 metros por segundo. Essas vibrações, quando chegam ao nosso ouvido, nós as descrevemos como som. Como dito anteriormente, essas vibrações não podem passar pelo sólido, então quando elas atingem uma superfície como uma parede, elas são refletidas de volta na mesma velocidade para a fonte, o que é chamado de eco.
O sensor ultrassônico “HC-SR04” fornece um sinal de saída proporcional à distância com base no eco. O sensor aqui gera uma vibração sonora na faixa ultrassônica ao acionar um gatilho, depois disso ele espera o retorno da vibração sonora. Agora com base nos parâmetros, velocidade do som (220m / s) e tempo necessário para o eco chegar à fonte, ele fornece pulso de saída proporcional à distância.
Conforme mostrado na figura, primeiro precisamos iniciar o sensor para medição de distância, que é um sinal lógico ALTO no pino de gatilho do sensor por mais de 10uS, após isso uma vibração sonora é enviada pelo sensor, após um eco, o sensor fornece um sinal no pino de saída cuja largura é proporcional à distância entre a fonte e o obstáculo.
Esta distância é calculada como distância (em cm) = largura da saída de pulso (em EUA) / 58.
Aqui, a largura do sinal deve ser tomada em múltiplos de uS (micro segundo ou 10 ^ -6).
Componentes necessários
Hardware: ATMEGA32, Fonte de alimentação (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), capacitor 1000uF, resistor 10KΩ (2 peças), sensor HC-SR04.
Software: Atmel studio 6.1, progisp ou flash magic.
Diagrama de circuito e explicação de trabalho
Aqui, estamos usando PORTB para conectar à porta de dados LCD (D0-D7). Quem não quiser trabalhar com FUSE BITS de ATMEGA32A não pode usar PORTC, pois PORTC contém um tipo especial de comunicação que só pode ser desabilitado alterando FUSEBITS.
No circuito, você observa, tirei apenas dois pinos de controle, isso dá a flexibilidade de um melhor entendimento. O bit de contraste e READ / WRITE não são usados com frequência, portanto, podem entrar em curto com o aterramento. Isso coloca o LCD em maior contraste e modo de leitura. Precisamos apenas controlar os pinos ENABLE e RS para enviar caracteres e dados de acordo.
As conexões que são feitas para LCD são fornecidas abaixo:
PIN1 ou VSS para aterrar
PIN2 ou VDD ou VCC para alimentação de + 5v
PIN3 ou VEE para aterrar (oferece contraste máximo, melhor para um iniciante)
PIN4 ou RS (seleção de registro) para PD6 de uC
PIN5 ou RW (leitura / gravação) para aterrar (coloca o LCD no modo de leitura facilita a comunicação para o usuário)
PIN6 ou E (habilitar) para PD5 de uC
PIN7 ou D0 a PB0 de uC
PIN8 ou D1 a PB1 de uC
PIN9 ou D2 a PB2 de uC
PIN10 ou D3 a PB3 de uC
PIN11 ou D4 a PB4 de uC
PIN12 ou D5 a PB5 de uC
PIN13 ou D6 a PB6 de uC
PIN14 ou D7 a PB7 de uC
No circuito você pode ver que usamos comunicação de 8 bits (D0-D7) porém não é obrigatória e podemos usar comunicação de 4 bits (D4-D7) mas com 4 bits o programa de comunicação torna-se um pouco complexo. Como mostrado na tabela acima, estamos conectando 10 pinos do LCD ao controlador, em que 8 pinos são pinos de dados e 2 pinos para controle.
O sensor ultrassônico é um dispositivo de quatro pinos, PIN1-VCC ou + 5V; PIN2-TRIGGER; PIN3- ECHO; PIN4- TERRA. O pino do gatilho é onde damos o gatilho para dizer ao sensor para medir a distância. Echo é o pino de saída onde obtemos a distância na forma de largura de pulso. O pino de eco aqui é conectado ao controlador como uma fonte de interrupção externa. Portanto, para obter a largura da saída do sinal, o pino de eco do sensor é conectado a INT0 (interrupção 0) ou PD2.
1. Acione o sensor puxando o pino do gatilho por pelo menos 12µS.
2. Quando o eco fica alto, obtemos uma interrupção externa e vamos iniciar um contador (habilitando um contador) no ISR (Rotina de Serviço de Interrupção) que é executado logo após o disparo de uma interrupção.
3. Assim que o eco ficar baixo novamente, uma interrupção é gerada, desta vez vamos parar o contador (desabilitando o contador).
4. Portanto, para um pulso alto a baixo no pino de eco, iniciamos um contador e o interrompemos. Essa contagem é atualizada na memória para obter a distância, pois agora temos a largura do eco na contagem.
5. Vamos fazer mais cálculos na memória para obter a distância em cm
6. A distância é exibida no display LCD 16x2.
Para configurar os recursos acima, vamos definir os seguintes registros:
Os três registros acima devem ser configurados de acordo para que a configuração funcione e vamos discuti-los brevemente, AZUL (INT0): este bit deve ser definido alto para habilitar a interrupção externa0, uma vez que este pino é definido, podemos sentir as mudanças lógicas no pino PIND2.
BROWN (ISC00, ISC01): estes dois bits são ajustados para a mudança lógica apropriada no PD2, que deve ser considerada como interrupção.
Como dito antes, precisamos de uma interrupção para iniciar uma contagem e pará-la. Portanto, definimos ISC00 como um e obtemos uma interrupção quando há uma lógica LOW a HIGH em INT0; outra interrupção quando há uma lógica HIGH para LOW.
VERMELHO (CS10): Este bit serve simplesmente para ativar e desativar o contador. Embora funcione junto com outros bits CS10, CS12. Não estamos fazendo nenhum pré-escalonamento aqui, então não precisamos nos preocupar com eles.
Algumas coisas importantes a serem lembradas aqui são:
Estamos usando o clock interno do ATMEGA32A que é 1MHz. Sem pré-escalonamento aqui, não estamos fazendo a rotina de geração de interrupção de comparação de correspondência, portanto, nenhuma configuração de registro complexa.
O valor da contagem após a contagem é armazenado no registro TCNT1 de 16 bits.
Verifique também este projeto com o arduino: Medição de distâncias usando o Arduino
Explicação de programação
O funcionamento do sensor de medição de distância é explicado passo a passo no programa C abaixo.
#include // cabeçalho para habilitar o controle de fluxo de dados sobre os pinos #define F_CPU 1000000 // informando a frequência de cristal do controlador anexado #include