10 outubro 2015

Arduino - Programa 08: LED Pulsante

Neste tutorial será apresentado um efeito pulsante com LED. Para isso faremos uso de uma saída PWM (Pulse Width Modulation). 


Figura 1 - LED Pulsante
Este programa traz uma aplicação com iluminação, ou seja, se antes o LED era aceso e apagado, agora veremos uma maneira de ajustar o brilho. Entretanto, neste tutorial veremos uma introdução às saídas PWM do arduino, e como ela será aplicada neste exemplo. Abaixo o programa que apesar de pequeno contém muita informação.


// Programa 07 – LED pulsante

int ledPin = 11;

float sinVal; // armazena um valor ponto flutuante (fracionário)

int ledVal;

void setup() {

pinMode(ledPin, OUTPUT);

}

void loop() {

for (int x=0; x<180; x++) {  // define o angulo em graus

// converte graus para radianos e, então, obtém o valor do seno

sinVal = (sin(x*(3.1416/180)));

ledVal = int(sinVal*255);  // converte o fracionário em inteiro

analogWrite(ledPin, ledVal);

delay(25);

}

}

Analisando este código, que apesar de pequeno contém informações muito importantes. Como de costume, não estenderei o tutorial analisando comandos já apresentados.

No Inicio deste programa declaramos a variável sinVal como float, ou seja, ela armazenará números fracionários (com vírgula). Em void loop() utilizamos o comando for para incrementar x graus a cada delay de 25ms. Em seguida temos que converter o ângulo em graus para radianos, pois o arduino e a maioria dos outros microcontroladores trabalham com ângulos em radianos. Observe que a conversão é realizada dentro da função sin() que calcula o valor do seno. Outro ponto a destacar é a ordem das operações separadas pelos parênteses, o que retorna cada operação de forma adequada, ou seja, as operações são realizadas do termo mais interno para o externo. Efetuando primeiro a divisão e em seguida a multiplicação.


Atente-se em como a multiplicação é feita (não utilizamos x e sim *), isso porque x tem significado literal em um programa. Continuando, em seguida o valor do ângulo é convertido para uma variável do tipo byte, que armazena de 0 a 255 valores. Isso implica que o valor obtido do seno estará compreendido entre -1 e 1. Como foi definido no loop for que x vai de 0 a 179, o valor de seno vai até 1. O que implica que não temos como aplicar um seno de um angulo maior  na saída, e obtermos um sinal negativo de tensão.


Em seguida acionamos uma saída PWM, que para o arduino uno são os pinos 3, 5, 6, 9, 10 e 11. Observe a sintaxe do comando a seguir: analogWrite(porta, estado); essa é a sintaxe do comando para utilizar o PWM. Com esse comando podemos obter uma saída analógica por uma porta digital. O que acontece é que o arduino aciona a porta digital em alta frequência, o que é imperceptível a olho nu. Isso é feito pela variação do tempo em que a porta permanece acionada e desligada. Este tempo é chamado de largura de pulso (também conhecido como: duty cicle; razão cíclica; ciclo de trabalho ou ciclo ativo). 


Como a variável ledVal é convertida para inteiro ela é aplicada na saída analógica e controla a razão cíclica do PWM. Logo o incremento no valor em x traz um aumento no seno que implica o controle da saída PWM. Faça o teste você mesmo para alguns valores de seno entre 0 e 180 e confira o crescimento e o decrescimento da função.


Logo após o último ângulo o programa espera 25ms segundos e entra em loop, apresentando este efeito pulsante com LED.


Os componentes necessários para montagem são:


  • 1 LED;
  • 1 resistor de 150 Ohm;
  • Fios e jumpers;
  • 1 Arduino.

O esquema está apresentado logo abaixo:
Figura 2 - Esquema para montagem
A seguir as fotos da minha montagem.
Figura 3 - Minha montagem
Figura 4 - Minha montagem
Depois de tudo pronto e funcionando, trago um vídeo demonstrando o funcionamento do programa.


Este tutorial termina por aqui, qualquer dúvida deixe seu comentário. O programa também pode ser baixado, clique aqui e escolha o programa que desejar.

Se gostou, ajude o blog, compartilhe, curta nossa fan page e se inscreva no nosso canal para ficar por dentro de mais novidades !

Até o próximo !


EmoticonEmoticon