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);
}