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:
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.
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:
Gostou? Confira outros projetos com Arduino aqui mesmo no Arduino e Cia!