Menu

Leitura de valores analógicos

Leitura de valores analógicos

 (se preferir baixe   aqui   a explicação e os códigos)

 

Digital -> ou é ‘0’ (zero) ou é ‘1’ (um)

Analógico:
→ algum valor entre ‘0’ e ‘1’
→ uma faixa de valores entre um mínimo e um máximo

 

O potenciômetro

Trata-se de um resistor variável, ou ajustável.

O terminal ‘do meio’, corresponde ao ajuste. A resistência será ajustada entre um ponto e outro à medida em que eixo é deslocado.

Desta forma, poderemos ter, entre o terminal mediano e uma extremidade, valores entre ‘0’ e o máximo (que é o valor do potenciômetro, por exemplo, 1k ohm – equivalente a 1000 ohms).

 

Valores proporcionais à posição

 

Divisor de tensão

Podemos utilizar um potenciômetro como divisor de tensão:

por exemplo, podemos ligar uma extremidade no +5V e outra no GND (0V); no cursor, em função de sua posição, obteremos tensões proporcionais, entre o mínimo (0V) e o máximo (5V, para este exemplo)

 

Vamos praticar  – Monte um circuito como a seguir

Uma extremidade do potenciômetro está ligado no 5V

Uma extremidade do potenciômetro está ligado no GND

A ligação do meio do potenciômetro está ligada em A0

 

Código:

#define potenciometro A0

void setup() {

Serial.begin(9600);
pinMode(potenciometro, INPUT);

}

void loop() {

Serial.println(analogRead(potenciometro));

}

//(se quiser pode colocar um ‘delay’ ao final)

TESTE a leitura dos valores variando a posição do potenciômetro.

USE o monitor serial E DEPOIS o plotter serial !

 

O Arduino está constantemente lendo e apresentando o resultado; quando você varia a posição do potenciômetro o valor resultante da leitura é atualizado.

O valor apresentado estará entre 0 e 1023; na sequência, veremos o por quê.

 

Por quê entre 0 e 1023?

Existem infinitos valores analógicos
Por exemplo, entre 0 e 1 inteiros, temos:
0,0000000000001
0,000053
0,008
0,03
…

Os circuitos eletrônicos digitais necessitam realizar uma conversão, de valor analógico para valor digital. Daí podem utilizá-los.
Obviamente, por serem os valores analógicos infinitos, nem todos poderão ser convertidos.
Haverá limites para a conversão.

O circuito interno do Arduino UNO, que estamos utilizando em nossos experimentos, trabalha com conversores que utilizam 10 bits de precisão.
10 bits significa a possibilidade de termos uma combinação de ‘zeros e uns’ entre
0000000000 e 1111111111

Na prática, utilizamos potências de ‘2’, por ser a numeração binária (com ‘2’ valores possíveis: ‘0’ e ‘1’)
Assim:

Então, com 10 possibilidades, teremos:

 

E ‘quanto’ vale cada valor?

Para os valores possíveis (entre 0 e 1023), estamos aplicando uma tensão elétrica na entrada analógica, obtida por meio de um divisor de tensão formado por um potenciômetro.
Sabemos que entre o cursor e as extremidades (às quais aplicamos GND e +5V), teremos que ter tensões proporcionais ao deslocamento do eixo.

Cada um dos valores apresentados (entre 0 e 1023) corresponde a uma pequena fração de tensão.
Vem à tona o conceito de resolução.
De quanto é a diferença entre os valores lidos?

A resolução da medida pode ser calculada por:

Ou seja, teremos, para cada valor indicado, uma fração correspondente a cerca de 4,88mV

 

Podemos melhorar a apresentação dos valores multiplicando o valor lido pela relação 5V / 1024 bits antes de mostrá-lo:

#define potenciometro A0

void setup() {

Serial.begin(9600);
pinMode(potenciometro, INPUT);

}

void loop() {

Serial.println(analogRead(potenciometro)*5/1024);

}

Mas, desta forma somente serão apresentados números inteiros (entre 0 e 4).

Para termos mais precisão, podemos modificar nosso código:

#define potenciometro A0

void setup() {

Serial.begin(9600);
pinMode(potenciometro, INPUT);

}

void loop() {

int leitura = analogRead(potenciometro);
float valor = leitura *5.0/1024;
Serial.println(valor);

}

Teste no modo gráfico (plotter serial).

 

Agora vamos usar a leitura do valor do potenciômetro para controlar a luminosidade de um led.

#define potenciometro A0
#define LED 11 //tem que ser um pino que começa com ‘~’

void setup() {

Serial.begin(9600);
pinMode(potenciometro, INPUT);

}

void loop() {

int leitura = analogRead(potenciometro);
float valor = leitura *5.0/1024;
Serial.println(valor);
analogWrite(LED, valor);

}

/*
O pino que começa com ‘~’ admite um controle chamado de PWM, no qual
podemos controlar a quantidade de energia fornecida~’
*/

 

Podemos melhorar o código utilizando a função ‘map’:

#define potenciometro A0
#define LED 11 //tem que ser um pino que começa com ‘~’

void setup() {

Serial.begin(9600);
pinMode(potenciometro, INPUT);

}

void loop() {

int leitura = analogRead(potenciometro);
int valor = map(leitura, 0, 1023, 0, 255);
Serial.println(valor);
analogWrite(LED, valor);

}

 

 

 

 

Universidade Federal do Paraná
TI Aplicada – pesquisa e extensão

Av Pref Lothário Meissner, 632
80210-170 | Curitiba |
simao@ufpr.br
(41) 3360-4420
Universidade Federal do Paraná
TI Aplicada – pesquisa e extensão

Av Pref Lothário Meissner, 632
80210-170 | Curitiba |
simao@ufpr.br
(41) 3360-4420

UFPR nas Redes Sociais


UFPR nas Redes Sociais