Interface do Acelerômetro com NRF24LE1 (Parte 12/14)

Acelerômetro de interface com NRF24LE1

Nesta série, aprendemos as funcionalidades e recursos básicos do NRF24LE1. Agora é hora de usá-los para realizar tarefas mais elevadas. No futuro, combinaremos diversas funcionalidades da NRF com o mundo exterior. Hoje, faremos a interface de um sensor acelerômetro com NRF24LE1 usando ADC (conversor analógico para digital). Também enviaremos a leitura da aceleração para o nosso PC usando comunicação serial.

Protótipo de interface NRF24LE1 com acelerômetro

Fig. 1: Protótipo de interface NRF24LE1 com acelerômetro

Consulte nossos artigos anteriores sobre ADC e comunicação serial.

Todos nós estudamos a definição de aceleração, que diz que é a taxa de variação da velocidade. Anteriormente, costumávamos calcular a aceleração manualmente usando fórmulas, mas esta é uma era de mundo digital; agora estão disponíveis sensores para substituir a tarefa manual. Esses sensores têm uma ampla gama de aplicações, seja um braço robótico ou um foguete. O sensor acelerômetro que usaremos é o ADXL335.

Alguns recursos básicos do ADXL335:

· Detecção de 3 eixos

· Baixa potência – 350 uA (típico)

· Operação 1,8 V – 3,6 V

· Tamanho pequeno

· Faixa de detecção de -3g a +3g

Funcionamento:

Este módulo possui 3 pinos de saída analógica para aceleração nas direções X, Y e Z. A tensão de saída nesses pinos varia de 0 – 3,3V.

Layout de PCB de interface NRF24LE1 com acelerômetro

Fig. 2: Layout de PCB da interface NRF24LE1 com acelerômetro

3,3V corresponde a +3g onde g é a aceleração gravitacional.

Usaremos o ADC embutido do NRF para converter a tensão analógica detectada no módulo e a tensão de referência para ADC será 3,3V. O pino analógico X será conectado ao Pin0.0, Y ao Pin0.1 e Z ao Pin0.2. O módulo para ADXL335 já possui um IC regulador de 3,3V embutido. Portanto, forneceremos 5V para este módulo.

Depois de obter o valor digital convertido para diferentes direções, temos que subtrair o valor 0g deles. 0g significa que não há aceleração, mas o sensor do acelerômetro ainda emite alguma tensão analógica para ele. Então temos que reduzir esse valor do valor digital detectado.

O valor de saída 0g pode ser encontrado na folha de dados do sensor. O valor 0g que estamos usando é 1,33 V para X, 1,6 V para Y e 0,84 V para direção Z. Os valores digitais correspondentes são 103, 124 e 65.

Após subtrair os valores 0g dividiremos o resultado pela sensibilidade do sensor. A sensibilidade é medida em mV/g. Ele pode ser encontrado na ficha técnica. Estamos usando um valor de quase 300mv/g para Sensibilidade. O valor digital correspondente fica em torno de 23. Após a divisão, o resultado será em termos de g.

Portanto, a fórmula para calcular a aceleração é:

Aceleração em X= (x – 103,0)/23,0;

Aceleração em Y = (y – 124,0)/23,0;

Aceleração em Z = (z – 65,0)/21,0;

Onde x, y e z são os valores analógicos detectados no módulo.

Transmitiremos a aceleração calculada para o PC através de comunicação serial. O pino para transmissão serial é P0.3. Também mencionamos o código para uma compreensão mais clara.

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 #incluir //biblioteca padrão #include "nrf24le1.h" // biblioteca NRF24LE1 #include "hal_adc.h" // biblioteca de funções ADC #include "hal_uart.h" // biblioteca de funções UART #include "hal_clk.h" #incluir //Biblioteca de funções de string #incluir //Biblioteca de funções matemáticas #include "hal_delay.h" // biblioteca de funções de atraso /////////////////////////// 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; } // Putchar repetido para imprimir uma string void putstring(char *s) { enquanto(*s != 0) hal_uart_putchar(*s++); }

###

Diagramas de circuito

Diagrama de Circuito-NRF24LE1-Acelerômetro de Interface

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.