Lendo múltiplas entradas analógicas no Arduino: Cuidados e Recomendações – Blá do Chico
Blá do Chico
O que será que o Chico tem a dizer?
Artigo visualizado 980 vezes
Lendo múltiplas entradas analógicas no Arduino: Cuidados e Recomendações
21 de março de 2021 16 de maio de 2021 Chico LopesArduino, Hardware, Maker, Medição de grandeza física, Sensor de luz, Sensor de Temperatura, Sketch, Software
Diversos projetos envolvendo Arduino UNO R3/Arduino Nano (e outros), ou mesmo apenas o microcontrolador ATmega328P, podem necessitar efetuar medições de grandezas analógicas, por vezes mais de uma grandeza na mesma aplicação.
O ATmega328 em encapsulamento plástico com fileira dupla de terminais em linha, mais conhecido como DIP (Dual Inline Package) dispõe de seis pinos de acesso para entrada analógica, e sua versão em encapsulamento TQFP (Thin Profile Quad Flat Package) e QFN/MLF (Quad Flat No-Lead /Micro Lead Frame Package), dispõe de oito pinos de acesso para entrada analógica.
Tipificação
Atmega328-AU
Atmega328-AUR 32A 32 terminais TQFP
(Thin Plastic Quad Flat Package)
Atmega328-MMH
Atmega328-MMHR 28M1 28 terminais QFN/MLF
(Quad Flat No-Lead/Micro Lead Frame Package)
Atmega328-MU
Atmega328-MUR 32M1-A 32 terminais QFN/MLF
Atmega328-PU 28P3 28 terminais PDIP
(Plastic Dual Inline Package)
Tabela 1: Códigos do cmponente X encapsulamento
O dispositivo possui um único Conversor Analógico-Digital (ADC) de aproximação sucessiva com resolução de 10 bits. O ADC é conectado a um multiplexador analógico de 8 canais que permite oito entradas de tensão nos terminais a partir da Porta A do microcontrolador. As entradas de tensão têm como referência o 0V (GND).
O ADC contém um circuito Amostra e Retenção (Sample and Hold) que garante que a tensão de entrada no ADC seja mantida em um nível constante durante a conversão.
O ADC tem um pino de tensão de alimentação analógica separado do restante dos circuitos do microcontrolador, o AVCC. AVCC não deve diferir mais do que ± 0,3V do VCC.
Cuidados no projeto de hardware próprio
Caso esteja fazendo o projeto da placa de circuito impresso para o seus protótipo, ao invés de usar uma placa de Arduino, por exemplo: UNO ou NANO, ou também, se estiver programando fora do framework do Arduino, leve em conta as seguintes recomendações, extraídas da folha de dados do fabricante do ATmega328.
Os circuitos digitais dentro e fora do ATmega328 geram EMI (Interferência Eletromagnética) que pode afetar a precisão das medições analógicas. Se a precisão da conversão for crítica, o nível de ruído pode ser reduzido aplicando as seguintes técnicas:
Mantenha os caminhos dos sinais analógicos o mais curtos possível. Certifique-se de que as trilhas analógicas percorram o plano de aterramento analógico e mantenha-as bem longe das trilhas digitais de comutação de alta velocidade;
O pino AVCC do ATmega328 deve ser conectado à tensão de alimentação VCC digital por meio de uma rede LC, conforme mostrado na figura a seguir;
Use a função de cancelador de ruído do ADC para reduzir o ruído induzido da CPU;
Se qualquer tipo de porta ADC[3:0] for usada como saída digital, é essencial que eles não sejam comutados enquanto uma conversão estiver em andamento. No entanto, o uso da interface de 2 fios (ADC4 e ADC5) afetará apenas a conversão no ADC4 e ADC5 e não nos outros canais ADC.
Figura 1: Diagrama da conexão de energia, para prevenir ruídos indesejados na conversão A/D
Se estiver utilizando o framework do Arduino sem utilizar programação direta do registradores, não terá controle suficiente para determinar como usar a técnica apontada no item 1.2 anterior.
Para melhor compreensão da operação um diagrama de blocos do ADC é mostrado aqui e comentado a seguir.
Figura 2: Diagrama em Blocos do Conversor Analógico Digital do ATmega328P
canal de entrada analógica é selecionado escrevendo nos bits MUX no Registrador de Seleção do Multiplexador ADC ADMUX.MUX[3:0]. Qualquer um dos pinos de entrada do ADC, bem como GND e uma tensão de referência de intervalo fixo de bandgap[1], podem ser selecionados como entradas independentes para o ADC. O ADC é habilitado escrevendo um lógico no bit de Habilitação do ADC no Registrador A de Controle e Status do ADC (ADCSRA.ADEN). As seleções de referência de tensão e canal de entrada não terão efeito até que ADEN seja definido. O ADC não consome energia quando o ADEN é apagado, portanto, é recomendável desligar o ADC antes de entrar no modo de economia de energia.
[1] a) Os AVRs modernos têm uma referência de tensão de bandgap que pode ser usada com o ADC ao invés do AVCC. Na maioria dos AVRs, essa tensão é em torno de 1,1V e permite uma resolução melhorada do ADC ao medir tensões abaixo de 1V. A folha de dados indica que o bandgap pode variar entre 1,0V e 1,2V.
b) Na engenharia de semicondutores, bandgap, ou Banda Proibida em português, é a "quantidade" de energia necessária para que o elétron efetue a transição da banda de valência para a banda de condução.
O ADC gera um resultado de 10 bits que é apresentado nos Registradores de Dados ADC, ADCH e ADCL. Por padrão, o resultado é apresentado alinhado à direita, mas pode ser opcionalmente apresentado alinhado à esquerda definindo o bit ADMUX.ADLAR de Resultado de Ajuste à Esquerda do ADC.
Se o resultado for alinhado à esquerda e não forem necessários mais de 8 bits de precisão, é suficiente ler ADCH. Caso contrário, ADCL deve ser lido primeiro, depois ADCH, para garantir que o conteúdo dos Registradores de Dados pertença à mesma conversão: Uma vez que o ADCL é lido, o acesso do ADC aos Registradores de Dados é bloqueado. Isso significa que se o ADCL tiver sido lido e uma segunda conversão for concluída antes da leitura do ADCH, nenhum dos registradores será atualizado e o resultado da segunda conversão será perdido. Quando ADCH é lido, o acesso ADC aos registradores ADCH e ADCL é reativado.
O ADC tem sua própria interrupção, que pode ser acionada quando uma conversão é concluída. Quando o acesso ADC aos Registradores de Dados é proibido entre a leitura de ADCH e ADCL, a interrupção será acionada mesmo se o resultado for perdido.
Circuito da enrada analógica
O circuito de entrada analógica para canais individuais é ilustrado a seguir. Uma fonte analógica aplicada ao ADCn está sujeita à capacitância do pino e a fuga de entrada desse pino, independentemente de o canal estar selecionado como entrada para o ADC. Quando o canal é selecionado, a fonte deve conduzir o capacitor S/H
(Sample and Hold) através da resistência em série (resistência combinada do caminho de entrada).
O ADC é otimizado para sinais analógicos com uma impedância de saída de aproximadamente 10 kohm ou menos. Se tal fonte for usada, o tempo de amostragem será insignificante. Se uma fonte com impedância mais alta for usada, o tempo de amostragem dependerá de quanto tempo a fonte precisa para carregar o capacitor S/H, que pode variar amplamente. Recomenda-se ao usuário usar apenas fontes de baixa impedância com sinais de variação lenta, pois isso minimiza a transferência de carga necessária para o capacitor S/H.
Os componentes do sinal mais altos do que a frequência de Nyquist[2] (fADC/2) não devem estar presentes para nenhum dos tipos de canais, para evitar distorção da convolução imprevisível do sinal. Ao usuário é aconselhado a remover os componentes de alta frequência com um filtro passa-baixa antes de aplicar os sinais nas entradas do ADC.
Figura 3: Circuito equivalente da Entrada Analógica do ATmega328P
[2] Teorema da amostragem de Nyquist-Shannon
Para saber mais sobre a operação do conversor analógico-digital, busque informações na sessão ADC – Converso Analógico Digital da folha de dados do ATmega328P.
Efetuando leituras analógicas no Arduino
Todo sensor com uma saída analógica, potencialmente, será conectado, e portanto, lido por uma entrada analógica do Arduino (ou do ATmega328).
Porquanto apenas uma leitura analógica for efetuada, não se encontra nenhuma dificuldade, pois o circuito de Amostragem e Retenção (S/H) lerá sempre um mesmo sinal de entrada, assim sua variação será perfeitamente copiada por ele.
Problemas podem surgir a partir do momento em que se efetuam mais de uma leituras analógicas.
Por hipótese, os diferentes sinais conectados às diferentes entradas, podem naturalmente apresentar, num mesmo instante, valores bastante diversos uma vez que podem ser sinais oriundos de fontes não correlacionadas.
A título de exemplo, um escritório de projetos de arquitetura, necessita-se de iluminação farta e temperatura ambiente amena. Desta forma os transdutores tanto de luminosidade, quanto de temperatura podem oferecer tensões de saída proporcionais às grandezas que medem, admitindo-se que a tensão oferecida pelo luxímetro seja razoavelmente maior que a oferecida pelo termômetro.
Assim se luxímetro e termômetro forem cada um conectados a entradas analógicas do Arduino (ou ATmega328), atende que as medições analógicas serão feitas ora sobre uma oferta de tesão alta ora sobre uma oferta de tensão baixa.
Foi visto na introdução que o Arduino (ou ATmega328) se utiliza de um único conversor A/D cuja entrada é multiplexada pelo pinos de entrada analógica. Bem a retenção da tensão a ser quantificada pelo conversor é levada a cabo por um capacitor, que deverá ser carregado, ou descarregado, até o valor de tensão a medir. Em função da impedância tanto da fonte de sinal, quanto do circuito interno do microcontrolador, determina-se um tempo de carga, ou descarga, do capacitor.
Circuito de ensaios utilizado
O diagrama esquemático do circuito utilizado neste ensaio é apresentado a seguir, e mais adiante um registro fotográfico do protótipo.
Deve-se observar que não são utilizadas entradas analógicas contiguas do Arduino, de forma a evitar a inferência de resultados alterados devido a seleção de entrada em sequência.
Figura 4: Diagrama esquemático do circuito de ensaio
As condições ambientais são controladas por meio de iluminação artificial de aproximadamente 520Lux, em câmara escura e temperatura controlada por sistema de ar-condicionado próximo a 26,5 °C.
Imaginemos medir uma tensão de, digamos, 3V relativa ao luxímetro (LDR R2 no diagrama esquemático) correspondendo a aproximadamente aos 500lux acima referidos e no momento seguinte medir uma tensão de, talvez, 250mV relativa ao termômetro (LM35DZ U1 no diagrama esquemático) correspondendo aos 26,5°C acima referidos, que constitui uma diferença considerável de valores entre as tensões.
Leituras realizadas isoladamente
Nestas condições efetuando cada leitura isoladamente ambos são corretamente coletados, a seguir dois sketchs cada um para leitura de um dos sinais analógicos e em seguida uma relação simples dos valores obtidos em cada situação.
/* Leitura do sensor de luz */
#define  sensorLuz A0
int intensLuz = 0;
Serial.println("Iniciando leituras repetitivas.\n");
intensLuz = analogRead(sensorLuz);
Serial.print("Intensidade de luz: ");
Serial.print(intensLuz);
/* Leitura do sensor de temperatura */
#define  sensorTemp A3
int valTemp = 0;
valTemp = analogRead(sensorTemp);
Serial.print((float)map(valTemp,0,1023,0,50000)/100);
1 516 1 26,88
2 516 2 26,39
3 519 3 26,88
4 525 4 26,88
5 532 5 26,88
6 536 6 26,88
7 538 7 26,39
8 537 8 26,88
9 535 9 26,88
10 529 10 26,88
Tabela 2: Leituras efetuadas isoladamente
Temepratura
Moda 516Lux Moda 26,88°C
Média 528,30Lux Média 26,78°C
Desvio Padrão 8,744 Desvio Padrão 0,270
Tabela 3: Relatório analítico das leituras efetuadas isoladamente
razoavelmente elevada estando em 8,744 de desvio padrão e em valores absolutos variando 9,7 Lux para mais e 12,3 Lux para menos em um intervalo de 22,0Lux.
A temperatura média das medições aponta uma diferença de 0,38 °C a maior, com uma baixa dispersão das leituras estando em 0,207 de desvio padrão e em valores absolutos variando 0,343 °C para mais e 0,147 °C para menos em um intervalo de 0,49°C.
Leituras realizadas em sequência
Agora faremos a medição "simultânea" das duas grandezas em um só sketch, mostrado a seguir e logo após os dados coletados.
/* Leitura dos sensores */
Serial.println("Luminosidade - temperatura");
1 517 1 21,99
2 517 2 21,99
3 524 3 21,50
4 533 4 21,50
5 538 5 21,50
6 538 6 21,50
7 533 7 21,50
8 524 8 21,99
9 517 9 21,50
10 515 10 21,50
Tabela 4: Leituras efetuadas em sequência
Moda 517Lux Moda 21,50°C
Média 525,60Lux Média 20,65°C
Desvio Padrão 9,168 Desvio Padrão 0,237
Tabela5: Relatório analítico das leituras efetuadas em sequência
Comparando-se os resultados dos dois métodos de coleta de dados, pode-se observar a alteração das média e a maior dispersão dos dados.
No caso da iluminação, a alteração na média de 2,7 Lux para menos não é significativa (0,5%), no entanto a dispersão das leituras teve um aumento de 4,8% apresentando desvio padrão de 9,168 e em valores absolutos variando 12,4Lux para mais e 10,6Lux para menos em um intervalo de 23Lux.
No caso da temperatura, a alteração na média de 5,14°C para menor é extremamente significativa (19,17%), já a dispersão das leituras teve um aumento significativo porém mais brando de 14,5% apresentando desvio padrão de 0,237 e em valores absolutos variando 0,35°C para mais e 0,15°C para menos em um intervalo de 0,49°C.
Estes resultados, consolidados no quadro comparativo abaixo, deixam claro que há alguma influência em efetuar mais de uma medidas analógicas sequenciadas com o ATmega328.
em [LUX]
em [°C]
Isoladas 528,3 8,744 26,78 0,207
Sequenciadas 525,6 9,168 21,65 0,237
Tabela 6: Resultados dos sketchs 1, 2 e 3 consolidados
Isto leva à hipótese de que o capacitor usado para fazer a retenção do dado para amostra está, falando por analogia, contaminado com a amostra imediatamente anterior e não teve tempo suficiente para alterar sua carga, seja para maior seja para menor. Para verificar está hipótese temos duas experimentações a fazer. A primeira é garantir um tempo mínimo entre as medidas de cada canal, e a segunda é efetuar uma dupla leitura de cada canal.
A primeira possibilidade trabalha no circuito RC equivalente que se forma quando o multiplex conecta um canal de entrada do circuito de Amostra e Retenção (S/H). A segunda possibilidade trabalha na estabilização da conexão do circuito.
Assim teremos novos sketchs em execução, conforme códigos, coletas de dados e relatórios analíticos que seguem.
Leituras com Intervalo de guarda entre si
Neste sketch há a inserção de um intervalo de 50ms entre as medições da grandezas luminosidade e temperatura, e esta é a única diferenciação com o sketch anterior.
1 512 1 27,37
2 518 2 24,92
3 521 3 38,12
4 517 4 24,92
5 508 5 24,92
6 500 6 33,72
7 498 7 36,16
8 504 8 25,41
9 514 9 38,12
10 521 10 24,92
Tabela 7: Leituras efetuadas em sequência comintervalo de 50ms
Moda 521Lux Moda 24,92°C
Média 511,30Lux Média 29,85°C
Desvio Padrão 8,447 Desvio Padrão 5,913
Tabela 8: Relatório analítica dqas leituras efetuadas em sequência com intervalo do 50ms
Os dados coletados demonstram que este método não melhora a qualidade das leituras.
No caso da iluminação, a alteração na média de 17Lux para menos também não é significativa (3,2%), assim como a dispersão das leituras teve uma redução de 3,4% apresentando desvio padrão de 8,447 e em valores absolutos variando 9,7Lux para mais e 13,3Lux para menos em um intervalor der 23Lux.
No caso da temperatura, a alteração na média de 3,1°C para maior é muito significativa (11,49%), já a dispersão de leituras teve um aumento espantoso de 2756,5% apresentando desvio padrão de 5,913 e em valores absolutos variando 8,3°C para mais e 4,9°C para menos em uma intervalo de 13,2°C.
Estes resultados, consolidados no quadro comparativo abaixo, deixam claro que não é o intervalo entre as leituras das grandezas físicas agrava o problema da divergência de valores.
Isoladas 528,3 8,744 26,88 0,207
Com intervalo 511,3 8,447 29,86 5,913
Tabela 9: Resultados dos sketchs 1, 2 e 4 consolidados
Leituras duplas de cada grandeza
Neste outro sketch não há intervalo entre as leitura, no entanto, cada grandeza física é lida duas vezes sendo desprezada a primeira e tomada a segunda como válida.
analogRead(sensorLuz);
analogRead(sensorTemp);
1 537 1 26,39
2 535 2 25,90
3 527 3 25,90
4 516 4 26,39
5 519 5 25,90
6 519 6 25,90
7 527 7 25,90
8 536 8 26,39
9 534 9 26,39
10 524 10 26,39
Tabela 10: Leituras efetuadas em sequência com dupla coleta
Moda 527Lux Moda 26,39°C
Média 527,40Lux Média 26,15°C
Descio Padrão 7,820 Desvio Padrão 0,258
Tabela 11: Relatório analítico das leituras efetuadas em sequência com dupla coleta
Comparando-se os resultados dos dois métodos de coleta de dados, o primeiro e este, pode-se observar a alteração das média e a maior dispersão dos dados.
No caso da iluminação, a alteração na média de 0,9Lux para menos é desprezível (0,17%), e a dispersão das leituras teve uma redução de 10,6% apresentando desvio padrão de 7,820 e em valores absolutos variando 9,6Lux para mais e 11,4Lux para menos em um intervalo de 21Lux.
No caso da temperatura, a alteração na média de 0,64°C para menor é razoavelmente pequena (2,38%), já a dispersão das leituras teve um aumento significativo de 25,0% apresentando desvio padrão de 0,258 e em valores absolutos variando 0,25°C para mais e 0,25°C para menos em um intervalo de 0,49°C.
Estes resultados, consolidados no quadro comparativo abaixo, deixam claro que a influência em efetuar mais de duas medidas analógicas sequenciadas com o ATmega328 deixou de acontecer.
Leituras duplas 527,4 7,820 26,15 0,258
Tabela 12: Resultados dos sketchs 1, 2 e
Desta forma a independência das medições da duas grandezas tomou níveis bastante satisfatórios com esta tática de coleta de dados.
Aquisição de leituras duplas com média móvel
Resta ainda, principalmente na medição de luminosidade, a preocupação com a variação das diversas medições, que na medição de temperatura já está satisfatório. Aplicando-se a tática de cálculo de média móvel nas diversas medições de cada grandeza, teremos uma medição bastante mais estável e para tanto vamos utilizar o sketch a seguir, utilizando como medida a média das últimas 20 medições de cada uma das grandezas (a média de 10 leituras já dá resultados bastante satisfatórios).
#define AMOSTRAS  20  // Quantidade de componentes da média móvel
#define ENTIDADES 2     // Quantidade de médias móveis a serem calculadas
#define LUMINOSIDADE  0  // Índice da média 1
#define TEMPERATURA   1             // Índice da média 2
/* Matriz com as medições para as médias móveis
Cada linha é o conjunto de dados de uma média */
int values[ENTIDADES+1][AMOSTRAS+1];
float mLumi;              // Média das medições de luminosidade
float mTemp;              // Média das medições de temperatura
/* *****************************************************************
movingAverage - Cálculo de média móvel
Parâmetros de entrada:
PARM1: grandeza - Entidade a ter a média calculada
PARM2: newValue - Novo valor a entrar para a média móvel
Observações e Notas:
A operação segue as seguintes etapas:
1- Desloca todos os elementos do vetor na dimensão
informada no primeiro parâmetro da chamada, desprezando
o elemento mais antigo
2- Insere o novo valor informado na chamada na primeira
posição do vetor na dimensão indicada por PARM1
3- Efetua a somatória de todos os elementos do vetor na dimensão
informada por PARM1
4- Calcula a razão da soma dos elementos pelo número de elementos
e retorna com este valor para o chamador da função
*************************************************************** */
int moving_average(byte grandeza, int newValue) {
int i;          //variável auxiliar para iterações
long acc = 0;   //acumulador
// Desloca elementos do vetor eliminando o mais antigo
for (i = AMOSTRAS; i > 0; i--)
values[grandeza][i] = values[grandeza][i-1];
// Insere o novo valor informado
values[grandeza][0] = newValue;
// Calcula a média dos AMOSTRAS valores
for (i = 0; i < AMOSTRAS; i++)
acc += values[grandeza][i];
return (int)(acc / AMOSTRAS);      //Retorna a média móvel
} // Fim moving_average
/* ************************************************************** */
mLumi = moving_average(LUMINOSIDADE, analogRead(sensorLuz));
mTemp = (float)moving_average(TEMPERATURA, \
map(analogRead(sensorTemp), 0, 1023, 0, 50000))/100;
Serial.print(mLumi, 0);
Serial.print(mTemp);
1 524 1 26,41
2 523 2 26,41
3 524 3 26,41
4 524 4 26,41
5 524 5 26,41
6 524 6 26,41
7 523 7 26,41
8 524 8 26,41
9 524 9 26,41
10 524 10 26,41
Tabela 13: Leituras efetuadas em sequência com coleta dupla e média móvel de 20 medições
Moda 524Lux Moda 26,41°C
Média 523,88Lux Média 26,41°C
Desvio Padrão 0,422 Desvio Padrão 0,0
Comparando-se os resultados do primeiro método de coleta de dados, com os resultados desta tática aprimorada temos resultados estáveis (baixíssima dispersão de dados) suficientemente fiéis aos padrões impostos ao ambiente de teste.
No caso da medição de luminosidade, a alteração na média de 4,5 Lux para menos implica em uma variação desprezível na prática (0,85%), igualmente a dispersão das leituras teve uma redução de 95,2% apresentando desvio padrão de 0,422 e em valores absolutos variando 0,2Lux para mais e 0,8Lux para menos em um intervalo de 1Lux.
No caso da temperatura, a alteração na média de 0,37°C para menor é pouco significativa (1,4%) podendo ser desprezada. Já a dispersão das leituras teve uma melhora absoluta, deixando de haver dispersão das leituras apresentando desvio padrão de 0,0 , portanto, sem valores absolutos a exibir.
Estes resultados, consolidados no quadro comparativo a seguir, deixam claro que há alguma influência em efetuar mais de uma medidas analógicas sequenciadas com o ATmega328.
Com média móvel 523,8 0,422 26,41 0,0
Tabela 15: Resultados do sketchs 1, 2 e 6 consolidados
Agora aplicados todos os dispositivos de melhoria das medições obtemos dados muito estáveis e bastante próximos dos parâmetros ambientais estipulados para as medições.
É importante ressaltar que a variação observada nas leituras de luminosidade é devida à fonte de luz, uma lâmpada de LEDs tubular ligada na rede elétrica que leva a uma variação com frequência de 120Hz, como mostra a fotografia abaixo da captura de sinal em TP1.
Figura 5: Registro do sinal de leitura do sensor de luminosidade
Segue um registro da montagem do protótipo de ensaio usado nas tomadas de leituras. Foi usado um Arduino UNO um protoboard de 400 pontos, um LM35DZ como sensor de temperatura, um LDR um resistor de 10kohm à terra fazendo o divisor de tensão com o LDR para sensoriar a luminosidade.
Figura 6: Fotografia da montagem do protótipo de ensaio, ligado ao osciloscópio exibindo em tela o sinal do sensor de luminosidade
Uma vez realizados estes seis ensaios é possível tirar algumas boas práticas do processo como um todo.
Inicialmente as recomendações do fabricante do ATmega328:
Mantenha os caminhos dos sinais analógicos o mais curtos possível. Certifique-se de que as trilhas analógicas percorram o plano de aterramento analógico e mantenha-as bem longe das trilhas digitais de comutação de alta velocidade.
O pino AVCC do ATmega328 deve ser conectado à tensão de alimentação VCC digital por meio de uma rede LC, observando a máxima diferença de potencial entre VCC e AVCC (máximo de 0,3V).
Se qualquer tipo de porta ADC[3:0] for usada como saída digital, é essencial que eles não sejam comutadas enquanto uma conversão estiver em andamento. No entanto, o uso da interface de 2 fios (ADC4 e ADC5) afetará apenas a conversão no ADC4 e ADC5 e não nos outros canais ADC.
Se trabalhando fora do framework do Arduino use a função de cancelador de ruído do ADC para reduzir o ruído induzido da CPU.
E as recomendações resultantes da observações deste trabalho:
Procure, sempre que possível, seja por custo ou por tamanho do circuito, utilizar filtro passa-baixa na linha do sinal analógico a ser lido (como aqui no sensor de luminosidade).
Se efetuando a leitura analógica de mais de uma entrada efetuar leitura dupla da entrada, desprezando a primeira leitura e tomando a segunda como válida.
Se não for um limitador em relação ao espaço utilizado na RAM, empregue uma rotina de cálculo de média móvel para as leituras dos sinais analógicos.
Banda Proibida. In: Wikipédia: a enciclopédia livre. 21 out. 2020. Disponível em: <https://pt.wikipedia.org/wiki/Banda_proibida>. Acessado em 15 mar. 2021
Iazzetta, Fernando. Comprimento de Onda. [s.d.] Disponível em: <http://www2.eca.usp.br/prof/iazzetta/tutor/audio/a_digital/a_digital.html>. Acesso em: 16 mar. 2021
MICROCHIP. ATmega328P 8-bit AVR Microcontroller with 32K Bytes In-Systems Programmable Flash: Datasheet. 2015. Disponível em: <https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf>. Acesso em: 01 mar. 2021
Ralph, Nerd. ATmega328p bandgap voltage reference. 23 out. 2015. Disponível em: <http://nerdralph.blogspot.com/2015/10/atmega328p-bandgap-voltage-reference.html>. Acesso em: 15 mar. 2021
Shenzhen Senba Optical & Eletronic CO. LTD. GL55 Series Photoresistor. [s.d.]. Disponível em: <http://akizukidenshi.com/download/ds/senba/GL55%20Series%20Photoresistor.pdf>. Acesso em: 19 mar. 2021
Tavares. Projeto de filtro passivo RC. In: Caderno de Laboratório. 29 nov. 2020. Disponível em: <https://cadernodelaboratorio.com.br/projeto-de-filtro-passivo-rc/>. Acesso em: 17 mar. 2021
Teorema de Nyquist-Shannon. In: EA – Elettro Amici. 18 jun. 2018. Disponível em: <https://www.elettroamici.org/pt/teorema-di-nyquist-shannon/>. Acesso em: 16 mar. 2021
Teorema da amostragem de Nyquist-Shannon. In: Wikipédia: a enciclopédia livre. 12 dez. 2019. Disponível em: <https://pt.wikipedia.org/wiki/Teorema_da_amostragem_de_Nyquist%E2%80%93Shannon>. Acesso em: 16 mar. 2021
Texas Instruments. LM35 Precision Centigrade Temperature Sensors datasheet. dec 2017. Disponível em: <https://www.ti.com/lit/ds/symlink/lm35.pdf>. Acesso em: 18 mar. 2021
analog inputArduinoArduino NanoArduino StandaloneArduino UNOentrada analógicaLight sensormakerSensor de LuzSensor de temperaturasketch
Codificador Rotativo e Arduino: Considerações para uso
Arduino Standalone: Montado em uma Protoboard
Busca de postagens
Eu, o Chico, tenho mais de 30 anos de experiência em desenvolvimento, mais de 15 anos de prática docente e estou aqui para dar o meu blá!
Categoria de Assuntos
Administração de sistemas (12)
Agendamento de tarefas (1)
Compartilhamento de arquivos (1)
Configuração (11)
Configuração de IP (1)
Configuração de IP dinâmico (1)
Configuração de IP estático (1)
Componente eletrônico (4)
ATmega328P (2)
Hardware de comunicação (6)
Sensor de Movimento (1)
Sensor de Movimento Rotativo (1)
Sistema operacional (11)
Software de comunicação (3)
Protocolo de comunicação (1)
Software de segurança (2)
Chaves Assimétricas (1)
Criptografia assimétrica (1)
Medição de grandeza física (2)
Teoria de conjuntos (2)
Aqui mesmo no blog, ou pelo e-mail: chicote@qaplaweb.com.br
segunda–domingo: 0:00–23:59
administração de sistemas agendamento de tarefas apt Arch Linux Arduino Arduino Nano Arduino Standalone Arduino UNO ATmega328P atualização bootloader Chaves Assimétricas Chaves Públicas de Autenticação Conexão remota configuração configuração de IP configuração de IP dinâmico configuração de IP estático criptografia Criptografia assimétrica Debian DNS firmware HD instalação instalação de hardware installation laptop LED Linux maker matriz de LEDs notebook protocolo de comunicação Raspberry Pi segurança Sensor de temperatura sketch solução criativa SPI SSD static IP configuration System administration systemd Ubuntu