Prática 2 – Leitura analógica, Potenciômetro, e PWM
Nesta prática, continuaremos abordando as funcionalidades básicas do Arduino e
dispositivos comumente utilizados em projetos de eletrônica. Vamos começar com
um texto apresentando a construção, modelo, e uso do pontenciômetro, que vai
ser nosso dispositivo para enviar comandos de ajuste ao Arduino. Em seguida,
será explicado o que é leitura analógica e como utilizá-la no Arduino.
Esses dois assuntos são demonstrados com uma montagem de teste que pode ser
simulada no Tinkercad ou montada em casa, para quem tiver os componentes.
A prática termina com uma explicação da modulação por largura de pulso, que
é a técnica utilizada para emular saídas analógicas com saídas digitais.
Há uma demonstração do uso do PWM para variação contínua da intensidade de um
LED e a prática termina com uma atividade simples para juntar todos esses
elementos: a utilização do potenciômetro para comandar a intensidade do LED.
Para fazer essa prática, será necessário utilizar um protoboard. Se você não
lembra o que é ou como usar um protoboard, veja o roteiro da prática anterior
ou este vídeo do Vinícius Alves.
Potenciômetros são resistores de três terminais com um terminal móvel.
Esses dispositivos são muito utilizados em eletrônica como uma entrada contínua
do usuário ou algum ajuste como tensão, volume ou brilho.
A construção de um potenciômetro está representada no diagrama da abaixo.
Há uma tira de material resistivo entre os terminais A e B,
e sobre ela desliza um terminal móvel conectado ao pino m do
potenciômetro.
Como a resistência de um material é proporcional ao seu comprimento,
a resistência entre os terminais fixos é fixa e a resistência entre os
terminais fixos e o móvel depende da distância entre eles.
Diagrama da construção de um potenciômetro.
Um potenciômetro sem a cobertura externa pode ser visto na figura abaixo.
Em primeiro plano temos o terminal móvel fazendo contato com a tira de material
resistivo. Ao fundo temos os três terminais do dispositivo. Para ver melhor
o que há dentro de um potenciômetro, você pode abrir ele e sacrificá-lo, em
nome da ciência, ou ver outra pessoa fazendo isso
neste vídeo ou este outro
que é um pouco melhor produzido, mas em inglês.
Um potenciômetro sem a cobertura externa.
Fonte: Wikimedia Commons, licença Creative Commons
CC0 1.0 Universal – Dedicação ao Domínio Público.
Abaixo temos o símbolo do potenciômetro em diagramas de circuito.
Simbolo de um potenciômetro, mostrando os terminais fixos (A, B)
e o móvel (m).
Existem 2 tipos principais de potenciômetros: o linear e o logarítmico.
O logarítmico geralmente é usado em aplicações analógicas de áudio, pois
a percepção humana de quase todos os estímulos segue escala logarítmica,
o que é conhecido como a Lei de Weber-Fechner.
O comportamento do potenciômetro linear, que é o mais comum em circuitos
de uso geral, pode ser modelado de uma maneira bem simples.
Representando a posição do terminal móvel por \(p\in[0,1]\), onde \(p=0\)
corresponde ao terminal móvel sobre o terminal A e \(p=1\) correponde
ao terminal móvel sobre o terminal B, o potenciômetro equivale ao
circuito da figura abaixo, no qual \(R_{AB}\) é a resistência
fixa do material entre os terminais A e B.
Circuito equivalente ao potenciômetro, em função da posição
do terminal móvel \(p\in[0,1]\).
Na aplicação mais comum com o Arduino, os terminais fixos do potenciômetro são
ligados entre o terra e o 5 V.
Além disso, o terminal móvel é conectado a algum
circuito de medição com alta resistência de entrada, de forma que a corrente
por ele seja desprezível. Dessa forma, a tensão no terminal móvel é
proporcional à sua posição:
\[V_m = p V_{AB} = p \cdot 5\,\mathrm{V}.\]
Aplicações aeronáuticas
O funcionamento simples do potenciômetro como divisor de tensão tem uma
aplicação interessante: medição de posição ou ângulo. Um desses dispositivos
que muitos já utilizaram é servomotor de aeromodelo. O eixo do servo é um
potenciômetro bem parecido com o da prática, e a tensão é proporcional ao
ângulo de rotação. Quando ligado
a um circuito de controle, essa medida define o acionamento de um motor de
corrente contínua que atua em uma caixa de engrenagens conectada ao eixo,
fechando a malha. O potenciômetro e os outros componentes de um pequeno servo
podem ser vistos na figura abaixo, obtida do tutorial de servos
da Sparkfun.
O interior de um servo sacrificado em nome da ciência.
O potenciômetro é o dispositivo da direita, de três terminais,
conectados nos fios preto, vermelho e branco.
Fonte: Sparkfun, licença CC BY-SA 4.0.
Mesmo em aeronaves tripuladas, potenciômetros são sensores simples para medição
das deflexões de superfícies de comando em ensaios em voo. Nos ensaios em voo
do ACS-100 Sora, do qual participei para realização do meu TCC,
utilizamos potenciômetros de deslocamento linear para medição das deflexões do
manche e da manete de potência. Apesar de maiores e um pouco mais caros que
os potenciômetros pequenos utilizados nesta prática, seu funcionamento e
princípio de operação são idênticos. Na figura abaixo temos os potenciômetros
instalados no avião, e eu ainda como aluno em um dos voos da campanha.
Potenciômetros usados na campanha de ensaios em voo do ACS-100 Sora,
realizada pelo Centro de Estudos Aeronáuticos da UFMG. Em sentido horário,
a partir do canto superior direito: potenciômetros na cadeia de comando da
aeronave para medição do comando de profundor; do pedal de leme; e da posição
da manete de potência. Os potenciômetros estão indicados com uma linha rosa.
No canto superior esquerdo: eu sem bigode, ainda como aluno e não professor,
feliz de estar voando no avião do meu TCC e ao mesmo tempo apreensivo porque
estava voando no avião do meu TCC.
Conversão analógico-digital
Processadores digitais como o Arduino representam toda a informação disponível
na forma de números inteiros. A combinação de números inteiros em estruturas
de dados mais complexas permite, por exemplo, a representação de frações
(como números de ponto fixo) ou de números em notação científica (chamados de
ponto flutante). No entanto, grandezas contínuas no mundo real devem ser
convertidas para números inteiros para representação e manipulação no
processador. O dispositivo que faz isso é o conversor analógico-digital,
às vezes abreviado como conversor A/D ou ADC).
O ADC converte uma tensão contínua para um número inteiro, e é parte integral
de qualquer sistema de sensoriamento ou instrumentação digital. O conversor
do Arduino é de uso geral e funciona como um voltímetro digital que mede níveis
de tensão entre 0V e 5V, em relação ao potencial terra da placa. O conversor
analógico/digital do Arduino possui resolução de 10 bits, o que significa que
os valores lidos variam de 0 a 1023 (\(2^{10}\) valores possíveis). A função
analogRead(pino) retorna a leitura analógica do canal especificado.
Confira a documentação oficial dessa função para
mais informações. Este vídeo do Vinícius Alves também apresenta
o funcionamento básico das portas analógicas e a diferença entre sinais
analógicos e digitais.
Montagem: Arduino como voltímetro
Vamos então fazer uma montagem (ou simulação) simples para explorar o uso
do potenciômetro como divisor de tensão e da conversão analógico-digital:
utilizar o Arduino como voltímetro. Este é, inclusive, um dos exemplos
Básicos do Arduino, cujo código vem junto com a IDE e pode ser acessado
através do menu Arquivo \(\to\) Exemplos \(\to\) 01.Basics
\(\to\) AnalogReadSerial. Este procedimento mostra como utilizar
elementos que são importantes para as outras atividades da prática mas não
precisa ser entregue para avaliação.
Para começar, monte no protoboard o circuito mostrado na figura abaixo, onde
um potenciômetro tem seus terminais fixos ligados à alimentação e o terminal
móvel (que no Tinkercad é chamado de limpador devido a uma falha de
tradução automática) conectado na entrada analógica A0. A tensão no ADC
será proporcional à posição do potenciômetro.
Montagem com potenciômetro para leitura analógica.
Este circuito pode ser testado com o código abaixo, cuja lógica é explicada
nos comentários. Os dados coletados podem ser visualizados com o
Monitor Serial ou Plotter Serial, como mostrado nas figuras abaixo,
onde eu estava girando o potenciômetro para teste. Carregue o programa no
Arduino (real ou simulado), varie a posição do potenciômetro e veja seu
funcionamento. Para carregar o código no Tinkercad, escolha o formato de
texto (o default é uma programação simplificada em blocos). Observe também
que para utilizar o Plotter Serial do Tinkercad é necessário remover o
texto da impressão Serial, mantendo só os números com espaços para separar as
as colunas e quebra de linha para separar as amostras (eixo x).
voidsetup(){Serial.begin(230400);//Inicializa porta serial}voidloop(){intleitura=analogRead(A0);//leitura será um inteiro de 0 a 1023//o fator de conversão para volts é 0.0048828125, ou 5 / 1024.0//Imprime a leitura do conversorSerial.print("leitura: ");Serial.print(leitura);//Imprime o valor em VoltsSerial.print(" tensao: ");Serial.print(0.0048828125*leitura);Serial.print(" V");Serial.print("\n");//Imprime quebra de linhadelay(100);// Aguarda 100ms}
Dados enviados pelo Arduino, vistos com o Monitor Serial.
Dados enviados pelo Arduino, vistos com o Plotter Serial. A tensão
em Volts é mais difícil de visualizar devido à escala vertical.
Modulação por largura de pulso
A modulação por largura de pulso (pulse width modulation, ou PWM) é uma
técnica para se emular saídas analógicas utilizando saídas digitais.
Como as saídas digitais do Arduino possuem somente dois estados, 0V e 5V,
seu estado é variado em alta frequência para que, na média, a carga perceba
uma tensão média entre os estados discretos possíveis.
PWM é uma técnica muito utilizada pois o hardware para sua implementação é
bem simples e eficiente, especialmente para aplicações de potência.
Essa é a mesma técnica utilizada para se variar a luminosidade do LED na
prática 1, e é muito utilizada em controle de motores (como veremos na próxima
prática), reguladores de tensão, carregadores de celular, ou telas de
OLED e AMOLED.
Considere a imagem abaixo.
A razão cíclica (duty cycle) é o fração do período em que a onda permanece
no nível lógico alto.
Se uma onda de tensão com razão cíclica de 75% for aplicada a um componente,
a tensão média é 75% da tensão máxima.
Dessa forma, a tensão média no componente pode ser variada entre 0
e a tensão do nível lógico alto.
A razão cíclica de 0% corresponde ao nível lógico baixo de de 100% corresponde
ao nível lógico alto.
O microcontrolador do Arduino possui um periférico para sinal de PWM em
hardware, sem intervenção do usuário.
A função analogWrite(pino,razao_ciclica) é usada para gerar uma onda com
PWM.
O argumento razao_ciclica é um número de 0 a 255, correspondendo a uma razão
de 0% a 100%.
Confira a documentação oficial da função analogWrite para maiores informações.
Montagem: PWM para alterar o brilho de um LED
Vamos então fazer uma montagem (ou simulação) simples para explorar o uso
do PWM: utilizá-lo no acionamento de um LED para alterar a intensidade do
brilho. Este também é um dos exemplos básicos do Arduino, cujo código vem
junto com a IDE e pode ser acessado através do menu Arquivo \(\to\)
Exemplos \(\to\) 01.Basics \(\to\) Fade. Este procedimento mostra
como utilizar elementos que são importantes para as outras atividades desta
prática e da próxima, mas não precisa ser entregue para avaliação.
Este procedimento utiliza o circuito representado no diagrama esquemático
abaixo. O LED é alimentado pela saída digital número 9 do Arduino.
Quando a razão cíclica da onda no pino 9 for 0% o LED irá apagar e quando
for 100% o LED estará no brilho máximo. O resistor pode ser qualquer um
acima de 150 Ω ou o apropriado para o seu LED. Lembre-se também que a corrente
de cada pino do microcontrolador deve ser mantida abaixo de 20 mA por
segurança.
Montagem para acionamento do LED por PWM.
O código abaixo altera a razão cíclica periodicamente de 0 a 100% e de
volta a 0%. Carrege-o, conecte à montagem e observe o comportamento do LED.
intpino_led=9;// Número do pino do LEDvoidsetup(){pinMode(pino_led,OUTPUT);// Define o pino do LED como saída}voidloop(){for(intrc=0;rc<255;rc++){analogWrite(pino_led,rc);delay(10);}for(intrc=255;rc>0;rc--){analogWrite(pino_led,rc);delay(10);}}
Atividade para entrega: Comando do brilho do LED com potenciômetro
Temos agora uma atividade simples que utiliza tanto as leituras analógicas
quanto a modulação por largura de pulso: comandar o brilho do LED com o
potenciômetro. Realize a leitura analógica e utilize o valor lido para definir
a razão cíclica da saída que aciona o LED. Para o terminal móvel do
potenciômetro em cada um dos extremos o LED deverá estar com brilho máximo ou
apagado. Nas posições intermediárias o brilho deverá ser proporcional à tensão
medida. Observe que a conexão entre o potenciômetro e o LED deve ser feita em
software, e não colocando o potenciômetro em série com o LED. O resistor
do LED é o mesmo da montagem anterior.
Montagem para comando do brilho do LED com potenciômetro, uma combinação
das montagens feitas anteriormente.
Para quem fizer por simulação, salve a montagem no Tinkercad com o
nome “Prática 2 - PWM”. Mostre no relatório a imagem da montagem e o código
fonte do Arduino, com comentários para explicar a lógica do programa.
Dica: observe que a saída analógica possui representação de 10 bits,
variando de 0 a 1023, enquanto que o gerador de PWM utiliza 8 bits, aceitando
valores de 0 a 255. Isso significa que o fator de conversão é de 2 bits, que
corresponde a \(2^2=4\).