Conhecendo as funções analogread, analogwrite e analogreference

18
Arduino Conhecendo as funções analogRead, analogWrite e analogReference Bóson Treinamentos Fábio dos Reis

Transcript of Conhecendo as funções analogread, analogwrite e analogreference

Page 1: Conhecendo as funções analogread, analogwrite e analogreference

Arduino

Conhecendo as funções analogRead,

analogWrite e analogReference

Bóson Treinamentos

Fábio dos Reis

Page 2: Conhecendo as funções analogread, analogwrite e analogreference

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 Reis

Page 3: Conhecendo as funções analogread, analogwrite e analogreference

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()

Page 4: Conhecendo as funções analogread, analogwrite e analogreference

0 1023

0V 5V

Entrada Analógica

analogRead()

Page 5: Conhecendo as funções analogread, analogwrite e analogreference

Entradas analógicas no Arduino Uno

Page 6: Conhecendo as funções analogread, analogwrite e analogreference

Entradas analógicas no Arduino Mega

Page 7: Conhecendo as funções analogread, analogwrite e analogreference

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

Page 8: Conhecendo as funções analogread, analogwrite e analogreference

ExemploVamos 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 Reis

Page 9: Conhecendo as funções analogread, analogwrite e analogreference

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 Reis

Page 10: Conhecendo as funções analogread, analogwrite e analogreference

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 Reis

Page 11: Conhecendo as funções analogread, analogwrite e analogreference

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 Reis

Page 12: Conhecendo as funções analogread, analogwrite e analogreference

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

Page 13: Conhecendo as funções analogread, analogwrite e analogreference

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 Reis

Page 14: Conhecendo as funções analogread, analogwrite e analogreference

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 Reis

Page 15: Conhecendo as funções analogread, analogwrite e analogreference

Sintaxe da função analogReference()

analogReference(tipo)

Parâmetros:

tipo: tipo de configuração a usar.

Bóson Treinamentos

Fábio dos Reis

Page 16: Conhecendo as funções analogread, analogwrite e analogreference

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

Page 17: Conhecendo as funções analogread, analogwrite e analogreference

Localização do pino AREF no Arduino Uno

Page 18: Conhecendo as funções analogread, analogwrite e analogreference

ExemploPrecisamos 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.