Que tal um dimmer com Arduino para entender como funciona a variação de “dados” na porta analógica dessa placa?

O nosso circuito usa um potenciômetro, ligado à entrada analógica 5, para controlar a luminosidade de um led ligado na porta digital 10. Conforme giramos o potenciômetro no sentido horário, a intensidade de iluminação do led vai se aproximando do ponto máximo.

Circuito dimmer com Arduino

Nesse projeto, vamos usar o seguinte material:

  • Potenciometro de 10 K 
  • Led
  • Resistor de 330 ohms

Monte então o seguinte circuito:

Circuito Dimmer Arduino

O programa usa uma função chamada map (http://arduino.cc/en/Reference/Map), que converte o valor lido da entrada analógica (entre 0 e 1023), para um valor entre 0 e 255 (8 bits), que será utilizado para ajustar a luminosidade do led.

A sintaxe da função map é a seguinte:

map(valor, de_menor_valor, de_maior_valor, para_menor_valor, para_maior_valor)

No nosso caso então, temos :

luminosidade = map(valorpot, 0, 1023, 0, 255);

onde valorpot é o valor lido do potenciometro, entre 0 e 1023, que será convertido para um valor entre 0 e 255, que por sua vez será atribuído à variável luminosidade. Perceba que estamos utilizando a porta 10, digital, como uma porta analógica, usando a função analogWrite. Como o Arduino faz isso?

Repare na foto abaixo que no Arduino os pinos 3, 5, 6, 9, 10 e 11 são PWM (Pulse Width Modulation – Modulação por Largura de Pulso), o que permite que eles sejam usados de forma analógica.

Detalhes portas PWM Arduino

O “truque” do PWM é ligar e desligar essa porta rapidamente, simulando uma tensão entre 0 e 5 volts. O tempo que a porta permanece ligada ou desligada determina o valor da saída analógica, assim, se você quiser 50% da luminosidade, a porta ficaria 50% do tempo em modo ON (ligada), e 50% em modo OFF (desligada).

// Projeto : Controle de luminosidade de led com potenciometro
// Autor : Arduino e Cia

int pinoled = 10;  //Pino ligado ao anodo do led
int pinopot = 5;   //Pino ligado ao pino central do potenciometro
int valorpot = 0;  //Armazena valor lido do potenciometro, entre 0 e 1023

float luminosidade = 0; //Valor de luminosidade do led

void setup()
{
   Serial.begin(9600);        //Inicializa a serial
   pinMode(pinoled, OUTPUT);  //Define o pino do led como saída
   pinMode(pinopot, INPUT);   //Define o pino do potenciometro como entrada
}

void loop()
{
  // Le o valor - analogico - do pino do potenciometro
  valorpot = analogRead(pinopot);

  //Converte e atribui para a variavel "luminosidade" o
  // valor lido do potenciometro
  luminosidade = map(valorpot, 0, 1023, 0, 255);  

  Serial.print("Valor lido do potenciometro : "); 

  //Mostra o valor lido do potenciometro no monitor serial
  Serial.print(valorpot);   
  Serial.print(" = Luminosidade : ");

  //Mostra o valor da luminosidade no monitor serial
  Serial.println(luminosidade);  

  //Envia sinal analogico para a saída do led, com luminosidade variavel
  analogWrite(pinoled, luminosidade);  
}

Para facilitar a visualização de como as portas analógicas se comportam, o programa mostra no monitor serial não só o valor lido do potenciometro, como também o valor da luminosidade após a utilização da função map que expliquei anteriormente:

Dados dimmer Arduino monitor serial

Gostou? Confira outros projetos com Arduino aqui mesmo no Arduino e Cia!

Avalie este post!