Sensor ultrassônico com NRF24LE1 (Parte 11/14)

Hoje vamos fazer uma interface muito interessante sensor com módulo NRF.

Você já ouviu morcegos se comunicando entre si? Não podemos ouvi-los porque eles usam frequência ultrassônica para se comunicarem. As frequências ultrassônicas não podem ser ouvidas pelos ouvidos humanos. O ser humano só pode ouvir som entre a frequência de 20 a 20 KHz, enquanto a frequência ultrassônica fica acima de 20 KHz e se expande até vários GHz.

Protótipo de interface NRF24LE1 com sensor ultrassônico

Fig. 1: Protótipo de interface NRF24LE1 com sensor ultrassônico

As ondas ultrassônicas têm diferentes velocidades de deslocamento no ar, líquidos e gases. No ar, eles geralmente viajam a 340 m/s. Eles têm a tendência de serem refletidos em uma superfície sólida. Devido a esta funcionalidade são utilizados na medição de distâncias. Se o tempo entre a transmissão e a recepção for conhecido, a distância da superfície sólida do transmissor pode ser calculada.

Usaremos o sensor ultrassônico HCSR04 que possui transmissor, receptor e circuito de controle embutidos. Faremos a interface deste sensor com o NRF24LE1 usando pinos de entrada/saída.

HCSR04 possui 4 pinos:

1. VCC – 5V

2. Trig – Pino de entrada do gatilho

3. Eco – Pino de saída

4. Gnd – Terra

Algumas especificações deste sensor são:

· Faixa de medição de distância de 2 cm a 400 cm

· Frequência de trabalho – 40Khz

· Utiliza pulso de disparo de 10 uS (microssegundos).

· Transmite oito pulsos de 40 kHz quando acionado

· Recebe eco e emite pulso alto com alcance proporcional à distância.

· 60 mS de atraso devem ser dados entre o próximo disparo.

Cálculo da distância

Imagem da interface NRF24LE1 com sensor ultrassônico

Fig. 2: Imagem da interface NRF24LE1 com sensor ultrassônico

Existem duas maneiras de medir distância:

1. Primeiro determine o tempo entre a transmissão e a recepção do eco. Em seguida, use a fórmula = Tempo * velocidade / 2. Na velocidade do ar é 340 m/s.

2. Calcule o tempo durante o qual o pino de saída do sensor está alto. Em seguida, use a fórmula pré-determinada, distância em cm = tempo/58 ou distância em polegadas = tempo/148. A hora estará em nós.

Estaremos usando o segundo método para cálculo de distância.

Por favor, certifique-se de ter lido nossos artigos anteriores sobre Temporizadores e NRF24LE1.

O módulo NRF será utilizado para acionar o sensor com pulso de 10 us. Após o disparo, o sensor enviará sinal de 40 KHz e aguardará o eco. Se o eco for recebido, ele emitirá um pulso alto. Este pulso alto terá uma faixa de largura proporcional à distância.

No NRF, o pino0 da porta0 ou P00 é usado como pino de saída para acionar o sensor, enquanto o pino 1 da porta0 ou P01 é usado como pino de entrada para receber o pulso alto do sensor.

Estamos usando o Timer0 para medir o período de tempo durante o qual o pino de saída permanece alto. O Timer0 é inicializado no Modo1, que é o modo de 16 bits. Isso significa que podemos medir o tempo até (0,75 * 65536) = 49152 uS. Para calcular o tempo medido pelo timer0 usamos time = (valor do registro do timer0 * 0,75) uS. Para calcular a distância do objeto sólido podemos usar distância em cm = tempo/58.

Escrevemos o código para você entender o funcionamento.

Código-fonte do projeto

###

//Program to 
/* Direitos autorais (c) 2009 Nordic Semiconductor. Todos os direitos reservados.
*
* As informações aqui contidas são propriedade confidencial da Nordic * Semiconductor ASA. Os termos e condições de uso são descritos em detalhes * no CONTRATO DE LICENÇA DE SOFTWARE PADRÃO DE SEMICONDUTORES NÓRDICOS. * * Aos licenciados é concedido o uso gratuito e intransferível das informações. NÃO * GARANTIA DE QUALQUER TIPO é fornecida. Este título NÃO deve ser removido do * o arquivo. * *$ÚltimaRevisãoAlterada: 133$ */ #incluir //biblioteca de E/S padrão #include "nrf24le1.h" // Arquivo de cabeçalho de E/S para NRF24LE1 #include "hal_uart.h" // biblioteca contendo funções de comunicação serial #include "hal_clk.h" // biblioteca contendo funções de relógio #incluir //biblioteca padrão #incluir //biblioteca contendo funções de string #incluir //biblioteca contendo funções matemáticas #include "hal_delay.h" // arquivo de cabeçalho contendo funções de atraso sfr16 DPTR = 0X82; //registro funcional para armazenar valor // Putchar repetido para imprimir uma string void putstring(char *s) { enquanto(*s != 0) putchar(*s++); } //função para converter inteiro em array de string vazio itoa(int num, char* str) { int i= 0, contagem = 0; temperatura interna = num; se(num == 0) { str(i++) = '0'; str(i) = ''; retornar; } enquanto (temperatura! = 0) { int rem = temp% 10; temperatura = temperatura/10; contar++; } str(contagem --) = ''; enquanto(num! = 0) { int rem = num% 10; str(contagem --) = (rem > 9) ? (rem - 10) + '1' : rem + '0'; num = num/10; } retornar; }

###

Diagramas de circuito

Diagrama de Circuito-NRF24LE1-Interface-Sensor Ultrassônico

Vídeo do projeto

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.