Luz gradual

pwm_led2
[tecnoloxia.org CC By-SA]

Descrición:

Imos facer que un LED conectado no pin 9 (pin PWM) se acenda cunha determinada intensidade utilizando a funcion analogWrite(). Tamén veremos como visualizar datos na consola serie.

Montaxe:

Necesitamos un LED conectado no pin 9 e dous pulsadores conectados nos pins 2 e 3.

Programas:

1. Distinta intensidade

1. Distinta intensidade: Imos facer que cando premamos un pulsador o LED se acenda cunha intensidade baixa (50), cando prememos noutro pulsador, a intensidade será máxima (255), e cando non pulsamos ningún o LED estará apagado (0).

Para iso xa non utilizamos a función digitalWrite(led,LOW ou HIGH), senón a función analogWrite(led, valor de 0 a 255);

Ademais mostraremos eses valores a través da consola serie.

// Declaración de variables:
 
int led = 9;          
int pulsador1 = 2;    
int pulsador2 = 3;    
 

// Configuración:
 
void setup(){
  pinMode(led, OUTPUT);      
  Serial.begin(9600);        // Inicia a comunicación serie
}
 
// Programa:
 
void loop(){
  
  int estado1 = digitalRead(pulsador1); 
  int estado2 = digitalRead(pulsador2);
  
  if (estado1 == 1){          
    analogWrite(led, 255); 
    Serial.println("255");      //Imprime 255 no monitor serie 
  } 
  else if(estado2 == 1){
    analogWrite(led,50);
    Serial.println("50");     //Imprime  50 no monitor serie
  }
  else{
      analogWrite(led,0);
      Serial.println("0");      //Imprime 0 no monitor serie 
  } 
}

2. Luz gradual

2. Luz gradual: Imos facer que a luminosidade dun LED vaia aumentando progresivamente enviando un valor de 0 a 255 a través da variable brillo mediante a función analogWrite(led, brillo);

Cando a variable brillo chega ao valor de 255, poñemos o brillo a 0, apagamos o LED, agardamos uns segundos e volta e empezar.

// Declaración de variables:

 int led = 9;             // LED conectado no pin 9
 int brillo = 0;          // Indica a luminosidade do LED. Inicialmente poñemos un valor 0.
 int variacion = 5;       // Indica cantos puntos varia a luminosidade

 // Configuración:

 void setup(){ 
   pinMode(led, OUTPUT);   // Declaramos o pin 9 como de saída
 } 

// Programa:

 void loop(){ 

   analogWrite(led, brillo);            // Enviamos ao LED o valor do brillo   
   brillo = brillo + variacion;         // Sumamos a variación ao valor do brillo 

   if (brillo == 255){                 // Cando o brillo vale 255    
     brillo = 0 ;                       // poñemos o brillo a 0
     analogWrite(led, brillo);          // apagamos o LED
     delay(3000);                       // e agardamos 3 segundos
   } 
   delay(200);              //Retardo de 200ms para a visualización

 }

3. Aumenta e diminúe

3. Aumenta e diminúe unha e outra vez. Agora facemos que a variación cambie de signo cada vez que a variable brillo chegue a 255 ou a 0, conseguindo que primeiro aumente progresivamente a luminosidade do LED e despois vaia esvaecendo, repetíndose indefinidamente o proceso.

 // Declaración de variables:

 int led = 9;             // LED conectado no pin 9
 int brillo = 0;          // Indica a luminosidade do LED. Inicialmente poñemos un valor 0.
 int variacion = 5;       // Indica cantos puntos varia a luminosidade

 // Configuración:

 void setup(){ 
   pinMode(led, OUTPUT);   // Declaramos o pin 9 como de saída
 } 

// Programa:

 void loop(){ 

   analogWrite(led, brillo);               // Enviamos ao LED o valor do brillo  
   brillo = brillo + variacion;           // Sumamos a variación ao valor do brillo 

   if (brillo == 0 || brillo == 255){    // Cando o brillo vale 0 ou 255...
     variacion = -variacion ;             // ... cambiamos o sentido
   } 
   delay(100);                            // Agardamos 100ms

 }

Propostas:

  1. Outros valores PWM: Modifica os valores do programa “1. Distinta intensidade” e observa o resultado
  2. Consola serie: Engade aos programas 2 e 3 o necesario para visualizar o valor da variable brillo no monitor serie, e observa o resultado.
  3. Lume: Imos simular cun LED o efecto do lume. Xera un brillo aleatorio e un tempo de espera aleatorio para cada escintileo do LED. Podes utilizar a función random. Por exemplo:
    tempo=random(10,500);  // dá un valor ao aleatorio entre 10 e 500.
    delay(tempo);

 


Deixa un comentario