Framework Arduino Básico Aula 04: Entradas Analógicas

 Imagem meramente ilustrativa

Relembrando

    Na aula passada conhecemos a função analogWrite() que permitia escrever em um pino pwm do Arduino Uno um valor de 0 a 255 que fez com que um led conectado a esse pino pudesse acender com diferentes luminosidades. 

    No exemplo daquela aula usamos um laço for para trabalhar essa variação do valor do pwm com uma variável. Para você lembrar bem, vou colocar o código, a imagem da montagem e um link para você abrir o projeto no Wokwi para darmos continuidade a ele:

  1. int led=3; //alterei a variável
  2. int pwm;
  3. void setup() {
  4.   pinMode(led, OUTPUT); //configurando o pino como saída
  5.   Serial.begin(9600) ;//iniciando o monitor serial
  6. }

  7. void loop() {
  8.   //laço aumentando o valor de pwm
  9.   //pwm variando de 0 a 255
  10.   //incrementando o valor de 5 em 5
  11.   for(pwm=0;pwm<=255;pwm+=5){
  12.     analogWrite(led, pwm);
  13.     Serial.print(("pwm:"));//escrevendo uma string
  14.     Serial.println(pwm);//escrevendo a variável
  15.     delay(10);// pausa de 10 milissegundos
  16.   }
  17.   //laço diminuindo o valor de pwm
  18.   //pwm variando de 255 a 0
  19.   //diminuindo o valor de 5 em 5  
  20.   for(pwm=255;pwm>=0;pwm-=5){
  21.     analogWrite(led, pwm);
  22.     Serial.print(("pwm:"));
  23.     Serial.println(pwm);
  24.     delay(10);
  25.   }  
  26. }
Montagem da última aula
Montagem da última aula

    

    Link para abrir o projeto: https://wokwi.com/projects/411821180838312961

    Também vimos na aula 2 desse curso, que o Arduino Uno possuía também seis pinos para entradas analógicas na sua parte inferior. Lembrou?

Entradas analógicas do Arduino Uno
Entradas analógicas do Arduino Uno

    Pois bem, hoje vamos mostrar como essas entradas analógicas podem ser utilizadas para controlar  a intensidade do led com o auxílio de um potenciômetro.

Potenciômetro

    É um componente eletrônico que funciona como um resistor ajustável. Conforme giramos seu cursor ele altera a resistência total do componente e isso permite que ele devolva diferentes níveis de tensão que podem ser usado para controlar volumes, velocidade e no nosso caso o brilho do led.

    Ele possui três terminais: dois para alimentação (GND e VCC) e outro para que fornecerá essa voltagem variável.  A propósito: VCC significa Voltage common collector ou coletor comum de tensão, portanto, no nosso caso será o terminal que receberá os 5V do Arduino. O GND deverá ser ligado em um GND do Arduino e o terceiro terminal será ligado em uma entrada analógica.

Representação de um potenciômetro no Wokwi com seus terminais na parte inferior
Representação de um potenciômetro no Wokwi com seus terminais na parte inferior

Nova montagem

    Para fazer nossa nova montagem, se você abriu o meu link da última aula, vou pedir que clique no botão de seta azul para baixo "v" ao lado do botão Save, peça Save a Copy e salve com outro nome esse projeto, por exemplo, Framework Arduino Básico Aula 04: Entradas Analógicas.

Botão para salvar o projeto com outro nome no Wokwi
Botão para salvar o projeto com outro nome no Wokwi


    Como vou precisar de um potenciômetro, preciso que você clique no botão + para adicionar componentes no Wokwi. Quando abrir a janela de adição de componente, digite pot no campo de pesquisa de componente e depois clique em potenciometer

Botão para adicionar componentes no Wokwi
Botão para adicionar componentes no Wokwi

Como adicionar um potenciômetro no Wokwi
Como adicionar um potenciômetro no Wokwi


    Após adicionar o potenciômetro, clique para selecioná-lo e arraste o para o lado esquerdo inferior do Arduino Uno conforme a imagem abaixo:

Layout da montagem com potenciômetro
Layout da montagem com potenciômetro

    Agora clique no ponto assinalado com GND do potenciômetro e arraste criando uma conexão com um dos pinos GND da parte inferior da placa. Depois clique no ponto assinalado como VCC do potenciômetro e arraste criando uma conexão com o pino 5V da placa. 

    Por último clique no ponto assinalado como SIG do potenciômetro e arraste criando uma conexão com o pino analógico A0. SIG vem de signal ou sinal. É ele que vai passar valores variáveis para a placa conforme giramos o potenciômetro. Use a imagem acima como orientação (clique para ampliar).

    Reparou que ao criar as conexões ele automaticamente escolheu a cor preta para o GND e vermelho para o VCC? A partir agora tente seguir esse padrão de montagem utilizando fios pretos para o negativo ou terra e vermelho para o positivo ou VCC. 

Modificando o Sketch

    Nos vamos reaproveitar boa parte do nosso código e dessa vez não precisaremos configurar um pino como entrada ou saída, porque o pino A0 é sempre uma entrada analógica. No entanto é necessário que a gente conheça como identifica-lo.

    As entradas analógicas de A0 a A5 podem ser identificadas por essas mesmas descrições, isto é, A1, A2, A3, etc ou usar uma numeração que seria a sequência após o último pino digital. No nosso caso, ele é o pino 13. Assim, A0 seria o 14, A1, seria o 15 e assim por diante até o A5 que seria o 19.

    Para ler as informações analógicas que o potenciômetro passara para o pino A0 precisaremos da função analogRead() que faz o caminho inverso da analogWrite(), isto é, ela lê o que o pino está recebendo. Basta informar como parâmetro o pino em questão.

    Diferentemente das saídas pwm que variável de 0 a 255, nossas entradas digitais vão fornecer valores variando de 0 até 1023, conforme iremos ajustando o potenciômetro. Sendo assim é necessário converter essa escala de 0 a 1023 em uma escala que a nossa saída pwm entenda.

    Para isso podemos utilizar a função map() que recebe cinco parâmetros dessa forma:

map(valor_leituraorigem_menororigem_maiordestino_menordestino_maior)

    São eles:

  • valor_leitura: que é a leitura a ser convertida
  • origem_menor: o limite inferior da escala a ser convertida
  • origem_maior: o limite superior da escala a ser convertida
  • destino_menor: o limite inferior da nova escala
  • destino_maior: o limite superior da nova escala

  Sendo assim o nosso valor de pwm será convertido por map(leitura,0,1023,0,255), onde leitura será uma variável para armazenar o valor passado pelo potenciômetro e os demais números os limites inferiores e superiores das duas escalas.

    Para ver essa conversão de leitura analógica para saída pwm vamos usar também o monitor serial como na aula passada, para escrever o valor da leitura e do pwm. Usaremos um delay de 1 segundo para poder visualizar tranquilamente o monitor.

       Vamos ao código que você poderá copiar e colar no seu Sketch ou pegar direto indo ao nosso link:

  1. int led=3;
  2. int pwm;
  3. //atribuindo o pino do potenciometro
  4. int potenciometro=14;
  5. //variável para leitura do potenciometro
  6. int leitura=0;
  7. void setup() {
  8.   pinMode(led, OUTPUT);
  9.   Serial.begin(9600) ;
  10. }

  11. void loop() {
  12.   leitura=analogRead(potenciometro);
  13.   pwm=map(leitura,0,1023,0,255);
  14.   analogWrite(led, pwm);
  15.   Serial.print(("leitura:"));
  16.   Serial.println(leitura);
  17.   Serial.print(("pwm:"));
  18.   Serial.println(pwm);
  19.   delay(1000);
  20. }

    Para executar esse código basta clicar no botão start simulation. Para pará-lo clique no botão Stop:

Botão Start e Stop Simulation, respectivamente
Botão Start e Stop Simulation, respectivamente

Atenção:      

    Para ver o potenciômetro funcionando clique primeiro no botão para iniciar a simulação e depois clique e arraste devagar o cursor do potenciômetro no sentido horário até sua posição final e observe as mudanças de brilho do led e dos valores no monitor serial. Depois faça o movimento do sentido anti-horário.

Ilustração das diferentes posições do potenciômetro
Ilustração das diferentes posições do potenciômetro

Monitor serial mostrando o potenciômetro no máximo
Monitor serial mostrando o potenciômetro no máximo


    Não esqueça de salvar o seu projeto com o botão Save. Na próxima aula falaremos sobre entradas digitais.


Próxima Aula                                                                                                                        Aula Anterior

Referências

ARDUINO DOCS. Arduino Documentation. Disponível em: <https://docs.arduino.cc/> Acesso em 05 ago. 2024.

OLIVEIRA, Cláudio Luis Vieira et al. Aprenda Arduino: Uma abordagem prática. Duque de Caixas: Katzen Editora, 2018. 181p. Disponível em: <https://www.fatecjd.edu.br/fatecino/material/ebook-aprenda-arduino.pdf> Acesso em 05 ago. 2024.

OLIVEIRA, Cláudio Luis Vieira. Arduino Descomplicado - Como Elaborar Projetos de Eletrônica. São Paulo: Editora Érica, 2015. 287p. 

TINKERCAD. Centro de Aprendizagem. Disponível em: <https://www.tinkercad.com/learn> Acesso em 05 ago. 2024.

WOKWI. Referência do wokwi-arduino-uno. Disponível em: <https://docs.arduino.cc/> Acesso em 05 ago. 2024.