10 – ENTRADAS ANALÓGICAS
Antes de continuarmos, uma "lição de casa":
- Dê o significado dos sinais e palavras do vocabulário do Arduino que aprendeu até agora.
{ ...}
;
( ... )
,
=
==
int
unsigned
void
setup { ... }
loop{ ... }
pinMode( ... )
OUTPUT
INPUT
delay
LOW
HIGH
digitalWrite( ... )
digitalRead( ... )
analogWrite( ...)
Se esqueci alguma palavra, complete o exercício...
Existem 6 pinos no Arduino UNO que fazem leitura (Read) de entradas "analógicas" (ou imitação delas): 14, 15, 16, 17, 18, 19, respectivamente chamados de A5, A4, A3, A2, A1, A0.
Estes pinos fazem leitura "modulada" entre 0 e 1024, conforme a tensão neles aplicada esteja entre 0 V e 5 V. Então, 1,25 V corresponde a 512 ou 2,5 V corresponde a 1024 ou ainda 3,75 V corresponde a 1536. E valem todas as proporções correspondentes, de 0 a 2048, desde que varie de 0 a 5V.
Se o sinal de leitura for superior a 5 V temos que reduzir a faixa.
E como fazemos isso?
Com resistores, e usando os cálculos seguintes:
Como os resistores comerciais tem valores pré-determinados, além de um erro possível de até 10%, você terá que fazer várias tentativas até achar os valores mais próximos para a tensão de entrada máxima superior a 5 Volts. Você pode usar um potenciômetro e determinar experimentalmente a posição de seu cursor.
Voltando ao Arduino, usaremos um potenciômetro com um extremo no 5V e o outro no GND (ou 0 V). O cursor central irá coletar uma tensão entre estes valores e passar ao pino A0.
Usaremos ainda o LED da montagem anterior para "ver" o efeito da coleta "modulada" no pino A0.
Para fazer a leitura "analógica" usaremos o comando analogRead aplicado a um pino "A", colocando o valor em uma variável.
int unsigned potencia; //variavel inteira e positiva para saída do LED
int unsigned valor; // variavel inteira e positiva, para coletar o valor do pino A0
void setup() { //identificação dos pinos do arduino -------------------------------------------------
pinMode(A0, INPUT_PULLUP); //determina que o pino 14, ou A0, será entrada de leitura "analogica"
pinMode(11,OUTPUT); //pino 11 como saida para o LED
} //encerra o setup -----------------------------------------------------------------------------------------------------------
void loop() { //**************************************************************
valor = analogRead(A0); //coleta o valor do potenciômetro
potencia = valor / 4; //reduz o valor para a faixa de saída PWM
analogWrite(11,potencia); //aciona o LED
delay(30); //tempo de retenção no olho
} //encerra o loop ************************************************************************************
Como a leitura dos pinos "A" vai até 1024 e a saída PWM vai até 255, tivemos que "corrigir" a leitura do "valor" do A0 para a saída 11, dividindo por 4. Mas existem outras maneiras de converter faixas de valores, que veremos mais adiante. Se quiser pesquisar, é o comando "map(... , ... , ... , ... , ...);"
Se substituir o LED por um motor, como visto na montagem anterior, poderá controlar sua velocidade e potência...