O documento descreve as funções analogRead(), analogWrite() e analogReference() do Arduino. A função analogRead() lê valores de pinos analógicos, analogWrite() gera sinais PWM em pinos digitais e analogReference() configura a tensão de referência para leituras analógicas.
2. Função analogRead()
● Lê o valor de um pino analógico especificado.
● O Arduino Uno possui um conversor analógico-digital de 10 bits
e seis canais
● O Arduino Mega possui 16 canais e as placas Mini e Nano, 8
canais.
● Uma entrada analógica demora cerca de 100 μs para ser lida,
então a taxa máxima de leitura é de cerca de 10.000 vezes por
segundo.
● A função retorna um número inteiro entre 0 e 1023, por padrão.
Bóson Treinamentos
Fábio dos
3. Função analogRead()
● Resolução de 10 bits significa que as tensões de entrada entre
0 e 5 volts aplicadas ao pino serão mapeadas em valores
inteiros entre 0 e 1023 (210
).
● Assim, temos uma resolução de leitura de 5 V / 1024 = 4,9 mV
por unidade de medida.
● Essa resolução é devida ao conversor analógico-digital (ADC)
utilizado no Arduino.
● Tanto a faixa de tensão de entrada quanto a resolução dos
pinos pode ser alterada com a função analogReference()
7. Sintaxe da função analogRead()
analogRead(pino)
Parâmetros:
pino é o número do pino analógico que será lido:
● A0 a A5 na maioria das placas, incluindo o Uno
● A0 a A15 no Arduino Mega
● A0 a A7 nos Arduinos Nano e Mini.
Bóson Treinamentos
Fábio dos Reis
8. Exemplo
Vamos efetuar a leitura de um sinal aplicado à entrada analógica A2 do
Arduino, por meio de um resistor, sensor ou potenciômetro, armazenando
o valor na variável valor e mostrando no Serial Monitor os valores lidos:
int valor = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
valor = analogRead(A2);
Serial.println(valor);
}
Bóson Treinamentos
Fábio dos
9. Função analogWrite()
● Permite escrever um valor analógico (que, na verdade, é um
sinal PWM) em um pino.
● Usamos essa função para ativar / desativar dispositivos
conectados ao Arduino, como LEDs, atuadores, motores, etc.
● A chamada à função analogWrite() gera um sinal de onda
quadrada de uma razão cíclica (duty cicle) especificada, até
que uma nova chamada à função seja realizada.
● A frequência do sinal PWM na maioria dos pinos é de cerca de
490 Hz. No Arduino Uno e similares, os pinos 5 e 6 possuem
uma frequência de cerca de 980 Hz. No Arduino Leonardo os
pinos 3 e 11 também possuem a frequência de 980 Hz.
Bóson Treinamentos
Fábio dos
10. Função analogWrite()
● A função opera nos pinos 3, 5, 6, 9, 10 e 11 na maioria das
placas de Arduino (com chips ATmega168 ou ATmega328).
● No Arduino Mega, funciona nos pinos 2 a 13 e 44 a 46.
● Você pode identificar facilmente esses pinos na placa por
possuírem o sinal ~ ao lado do número do pino, indicando a
funcionalidade de PWM.
● Não é necessário chamar a função pinMode() para configurar o
pino como saída antes de chamar a função analogWrite()
● Cuidado: a função analogWrite() não tem nada a haver com os
pinos analógicos da placa, nem com a função analogRead()
Bóson Treinamentos
Fábio dos
11. Sintaxe da função analogWrite()
analogWrite(pino, valor)
Parâmetros:
pino é o número do pino que receberá o sinal de saída.
valor é a razão cíclica (duty cicle), um valor entre 0 e 255 (sempre
desligado a sempre ligado)
Bóson Treinamentos
Fábio dos
12. Exemplo da função analogWrite()
Vamos iluminar um LED de acordo com um valor de entrada lido a partir de um
potenciômetro. O potenciômetro será ligado ao pino 3 (A3), um pino de entrada
analógica, e o LED ao pino de saída PWM 10.
int entradaPotenciometro = 3
int LED = 10
int valor = 0
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
valor = analogRead(entradaPotenciometro);
analogWrite(LED, valor / 4)
}
Bóson Treinamentos
Fábio dos Reis
13. Função analogReference()
● Função utilizada para configurar a tensão de referência usada nas entradas
analógicas – mais precisamente, o valor superior da faixa de valores de
entrada.
● Quando o Arduino realiza uma leitura analógica, ele efetua uma comparação
entre a tensão medida no pino analógico utilizado com um valor de Tensão
de Referência Analógica, que por padrão é o valor de tensão de operação
normal da placa, 5 volts
● Ao usar uma tensão de referência de 5V, cada unidade retornada na leitura
de valores pela função analogRead() terá o valor de 0,00488V (4,9mV).
● Às precisamos medir valores de tensão em uma faixa distinta, por exemplo,
entre 0 e 3V.
● Nesse caso, para que o ADC saiba qual é o valor superior da faixa usamos a
função analogReference(). O valor mais baixo de tensão de referencia
possível no Arduino é de 1,1V.
Bóson Treinamentos
Fábio dos
14. Função analogReference()
● Assim, se, por exemplo, precisarmos medir valores em uma faixa de tensão
entre 0 e 3V, ajustamos o valor de referência para 3V, e a partir daí cada
unidade de medida do ADC será interpretada pelo Arduino como sendo:
3 V / 1024 = 2,9 mV (0,0292V) por unidade de medida.
● A tensão de referência deve ser aplicada no pino AREF na placa do Arduino.
Bóson Treinamentos
Fábio dos
15. Sintaxe da função analogReference()
analogReference(tipo)
Parâmetros:
tipo: tipo de configuração a usar.
Bóson Treinamentos
Fábio dos
16. Tipos de configurações de analogReference()
● DEFAULT: A tensão de referência analógica padrão, que é de 5 volts, em
placas Arduino de 5V, ou 3,3 volts, nas placas de 3,3V (por exemplo, Arduino
Due).
● INTERNAL: Referência interna, que equivale a 1,1 volts nos chips
ATmega168 e ATmega328, ou 2,56 volts no Atmega8. Não disponível no
Arduino Mega.
● INTERNAL1V1: Tensão de referência interna de 1,1V, somente para o
Arduino Mega.
● INTERNAL2V56: Tensão de referência interna de 2,56V, também somente
para o Arduino Mega.
● EXTERNAL: Este é um valor de tensão aplicada no pino AREF da placa, no
intervalo de 0 a 5 volts apenas, que será usada como referência externa.
Bóson Treinamentos
Fábio dos Reis
18. Exemplo
Precisamos ligar um sensor ao Arduino que gera sinais de saída entre 0 e 4V.
Para que a precisão das leituras seja a melhor possível, vamos alterar a opção de
tensão de referência analógica para o intervalo entre 0 e 4V, usando uma fonte
de tensão externa:
void setup()
{
analogReference(EXTERNAL);
}
Bóson Treinamentos
Fábio dos Reis
● Agora basta aplicar uma tensão de exatos 4V ao pino AREF da placa para
usar esse valor de tensão como referência analógica.
● Tome cuidado para não usar valores de tensão abaixo de 1,1V ou maiores
do que 5V, para não danificar sua placa.