View on GitHub

Eletrônica Industrial

Material auxiliar da disciplina EMA248 da UFMG

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.

Tópicos:

Potenciômetro

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

void setup() {
  Serial.begin(230400); //Inicializa porta serial
}

void loop() {
  int leitura = 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 conversor
  Serial.print("leitura: ");
  Serial.print(leitura);
  
  //Imprime o valor em Volts
  Serial.print(" tensao: ");
  Serial.print(0.0048828125 * leitura); 
  Serial.print(" V");
  Serial.print("\n"); //Imprime quebra de linha

  delay(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.

Fonte: Sparkfun, licença CC BY-SA 4.0.

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.

int pino_led = 9; // Número do pino do LED

void setup() {
  pinMode(pino_led, OUTPUT); // Define o pino do LED como saída
}

void loop() {
  for (int rc=0; rc<255; rc++) {
    analogWrite(pino_led, rc);
    delay(10);
  }

  for (int rc=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\).