Requisitos
- AtMega 16 IC /quadro de desenvolvimento
- 2. Acelerômetro de 3 eixos
- 3. Tela LCD 16X2 (para exibir dados X, Y e Z)
Descrição
Este projeto utiliza três dos oito ADCs presentes no AtMega16 IC para exibir os dados digitais correspondentes das saídas X, Y e Z de um acelerômetro em LCD 16X2.
Acelerômetro
Primeiro vamos falar sobre o IC do Acelerômetro; aqui usei o ADXL-335, que é um módulo acelerômetro de 3 eixos.
Figura 1: Imagem do Módulo Acelerômetro ADXL335
É muito fácil lidar com esses tipos de módulos, pois eles só precisam da alimentação VCC e GND para começar, o resto é função dele nos fornecer os dados analógicos. Esses módulos trabalham com um conceito simples como o da força agindo sobre um objeto em um plano inclinado. Ele lida com a parte Mg(sin?) e Mg(cos?) da força e determina o ângulo para cálculos posteriores. Agora também percebe a mudança na força a partir da qual a aceleração será calculada.Conversor Analógico/Digital
Existem 8 ADCs independentes que compartilham seus pinos com os do PORTA. Esses ADCs têm 10 bits, o que significa simplesmente que eles podem converter um determinado valor analógico em seus dados digitais correspondentes de 10 bits.
Antes de prosseguirmos, devemos primeiro discutir o que são ADCs. ADC significa Conversor Analógico para Digital. Todos nós sabemos que os microcontroladores funcionam apenas com valores digitais, mas e se precisarmos interagir com dispositivos ou valores analógicos. Nessas situações necessitamos de um dispositivo que possa funcionar como comunicador entre a parte analógica e a parte digital. ADCs (conversor analógico para digital) jogam o mesmo jogo; eles convertem os valores analógicos em digitais por algum meio de referência (Vref).
No AtMega16, o pino 32 requer uma tensão de referência (normalmente fornecida +5V) ao trabalhar com ADCs. Também há mais um termo que precisa ser introduzido, ou seja, Resolução. Em termos simples, podemos dizer que é a precisão ou exatidão com que um ADC funciona. Para um ADC de 10 bits trabalhando com Vref de 5V, sua resolução é de 4,88mV. Isto significa ainda que para cada aumento ou queda de 4,88mV na entrada analógica, a saída digital aumentará ou diminuirá em uma unidade, respectivamente. Como é um ADC de 10 bits, os dados de saída variam de 0 a 1023 (2 ^ 10 = 1024) com 1024 valores diferentes. Agora voltando a este projeto, conectei os pinos X, Y e Z ao ADC0-ADC2. Eles fornecem valores analógicos individuais e independentes. Também exibi o resultado digital correspondente no LCD. As conexões do LCD são as seguintes: • Os pinos DATA estão conectados ao PB4-PB7, pois ele funciona no modo de 4 bits • Os pinos RS, RW e ES estão conectados a PB0, 1, 2 respectivamente. Ao assistir a parte do vídeo, você notará que os valores de X, Y e Z variam apenas entre 300-500. Isso ocorre porque meu Vref está configurado para 5V enquanto as saídas do acelerômetro permanecem entre 1,6-1,9V. Na parte de codificação utilizei três arquivos de cabeçalho: •Código fonte do projeto
###
#incluir
#incluir
#incluir
#incluir
vazio principal
{
interno adc0;
ADCinit ;
LCDinit ;
LCDclr ;
Cursor LCD DESLIGADO ;
Caracteres ch(16);
enquanto(1)
{
adc0=ler_adc(0); //lendo dados do eixo X
sprintf(ch,"X: %d",adc0); //convertendo int para char
LCDGotoXY(0,0);
Tela de LCD(CH);
LCDsendChar(' ');
adc0=ler_adc(1); //lendo dados do eixo Y
sprintf(ch,"Y: %d",adc0);
LCDGotoXY(0,10);
Tela de LCD(CH);
LCDsendChar(' ');
adc0=ler_adc(2); //lendo dados do eixo Z
sprintf(ch,"Z: %d",adc0);
LCDGotoXY(1,5);
Tela de LCD(CH);
LCDsendChar(' ');
_atraso_ms(500); //um atraso de meio segundo
}
}
###
Diagramas de circuito
Diagrama de circuito-ADXL335-acelerômetro-módulo-interface-AVR-ATMega16 |