Uma grande parte das vezes, será necessário usar algum pino analógico para fazermos leitura de algum sensor ou até para ler algum componente. E pra isso, a gente precisa entender como os pinos analógicos funcionam e como essas leituras são feitas. Na aula de hoje vamos ver um pouco sobre isso.
Na aula anterior, vimos como fazer a leitura digital das portas do Arduino.
Princípio de funcionamento
Definições
Os pinos analógicos, que também podem atuar como pinos digitais, possuem um conversor de sinal analógico para uma representação digital. Que é também conhecido como conversor AD. Mas antes de entender como essa conversão ocorre, precisamos entender o que é um sinal analógico e um digital. O sinal analógico basicamente é um sinal puro que, dependendo, varia em relação ao tempo. Por exemplo, a tensão em cima de algum componente, ou até de um sensor de temperatura. Veja a imagem abaixo para entender melhor.
Já a representação digital, é um sinal binário que é formado por um conjunto de 0s e 1s. Ele representa um determinado valor em forma de número binário. Se pegássemos um determinado ponto no gráfico anterior, a conversão seria algo como:
00110001
O valor depende da escala de conversão e do valor limite.
Como funciona
O conversor AD que existe no Arduino é um conversor de 10 bits, ou seja, um conversor que comporta valores de 0 a 1023. Além disso, esse conversor funciona de 0 a 5V. (NÃO ALIMENTE O PINO ANALÓGICO COM TENSÕES ACIMA DISSO). Sendo assim, se fizermos uma conta básica, ele é capaz de medir de 5mV em 5mV (aproximado). Portanto um valor binário, por exemplo, “0000000001” representa 5mV. E um outro “1111111111” representa 5V.
Mas como o conversor interpreta o sinal analógico? Ele analisa o sinal analógico em vários instantes e, pra cada um, gera um sinal digital (um número binário). Pegando a imagem abaixo como exemplo:
Os pontos azuis representam a conversão em diversos momentos. E se considerarmos o valor máximo (15 na imagem) como 5V e o mínimo (0 na imagem) como 0V. A conversão, da esquerda para direita serial algo como: 0111111111 (511 em decimal que é “metade” de 1023), 1001001000 (584 em decimal), 1010010001 (657 em decimal), … até o 5v, 1111111111 (1023 em decimal), … e assim em diante até o 0000000000. A imagem abaixo mostra a conversão de maneira simplificada (só de alguns pontos).
Circuito
Para aprender a usar a conversão AD, vamos ler a tensão em cima de um potenciômetro.
O circuito é bem fácil de entender, caso não saiba como funciona o potenciômetro, veja o post sobre. É só ligar uma extremidade do potenciômetro no 5v e a outra no GND. Feito isso, o pino central deve ser ligado em qualquer pino analógico do Arduino (A0 ao A5).
Programação
Vamos imprimir no monitor serial os valores de tensão lido pelo pino A0.
Explicação detalhada
Primeiro, vamos nomear nosso pino e definir ele como saída. Além disso, como vamos usar o monitor Serial, temos que inicializar ele
1 2 3 4 5 6 | int sensor = A0; //Pode ser qualquer outro pino analógico void setup() { pinMode(sensor, INPUT); Serial.begin(9600); //Inicializa o monitor Serial } |
Agora, em nosso loop, nós precisamos ler o valor analógico do pino A0 e o comando para isso é o “analogRead(pino)“, que retorna (como foi dito antes) o valor lido em forma de um número decimal de 0 a 1023. E com isso, para fazer uma conversão para valores de tensão, precisamos aplicar uma simples regra de 3.
5 – 1023
v – valor lido
Resumindo: 5v equivale a 1023 e ‘v’ volts equivalem ao valor lido. Portanto, nossa fórmula final é:
Escrevendo isso em forma de código, temos:
1 2 3 4 5 6 | void loop() { float tensao = analogRead(sensor)*5.0/1023.0; Serial.print("Tensao do pino A0 em Volts: "); Serial.println(tensao); delay(1000); } |
Usei uma variavel float pra tensão, pois quero que o programa escreva valores decimais. Com isso, foi necessário escrever 5.0/1023.0 (adicionar o .0 no final).
Código completo
1 2 3 4 5 6 7 8 9 10 11 12 13 | int sensor = A0; void setup() { pinMode(sensor, INPUT); Serial.begin(9600); } void loop() { float tensao = analogRead(sensor)*5.0/1023.0; Serial.print("Tensao do pino A0 em Volts: "); Serial.println(tensao); delay(1000); } |
Controlando o brilho de um LED (PWM) – Aula 6 – AI
Show de bola. Site favoritado aqui. Fiz a lição anterior, e agora acompanhando esta. Muito obrigado!
Eu é que fico agradecido pelo comentário, Francisco! Espero que as demais aulas possam te ajudar também, bem como o novo curso de eletrônica digital que tem muita relação com este.
Amigo, se possível gostaria de saber se exite como criar um aplicativo no computador para efetuar comandos em um sistema Arduino?
Com certeza. Existem diversas formas de se fazer isto, mas uma forma um pouco mais simples seria utiliza o software Processing. Para você ter uma noção básica dele, aqui tem um post sobre como ler valores do Arduino no Processing (o contrário pode ser feito também). E aqui tem um post mostrando como utilizar o Processing para fazer reconhecimento de voz e comandar o Arduino. O lado ruim do Processing é que a construção da parte visual do seu programa é um pouco complicada.
Show de bola, ja vi varios vídeos no you tube, mas so enrolação, detalhado mesmo só aqui. Parabéns meu amigo e muito obrigado pelas informações.
Muitíssimo obrigado, Rui! Eu é que agradeço pelo retorno, pois eu entendo sua frustração e tento justamente seguir o caminho contrário destes tipos de vídeos.
conhecimento bem passado. darei seguimento a outros assuntos relacionado.
Muito obrigado, Rosário! Espero que goste dos demais conteúdos do site.
Muito bom quebrou um galho essa dica.
Que bom, fico feliz que tenha sido útil!