INDICADOR LUMINOSO DE VOLUMEN DE UN EQUIPO DE SONIDO (PROGRAMACIÓN EN ARDUINO)


DESCRIPCION DEL PROYECTO
El equipo de sonido tiene una perilla para que le subas el volumen y además cuenta con 5 indicadores luminosos (LED) dispuestos uno tras otro en una línea recta ( así como lo ves en el montaje) en la medida que el valor del potenciómetro va aumentando al girarlo, se va encendiendo el LED1, luego el LED2, luego el LED3 y así hasta el LED5. Si llegas al valor de 1023 todos los LED deberían estar prendidos y si comienzas a girar el potenciómetro en sentido contrario se van apagando los LED uno tras otro en el sentido inverso en que se encendieron, al final si estás en el valor 0 todos los LED deben estar apagados. Generar una sensación de movimiento.

DIAGRAMA DEL EJERCICIO
Conectamos 5 leds con sus respectivas resistencias de 220 ohms en sus polos negativos y que van para la tierra (Ground) del Arduino; los polos positivos de los leds, están conectados a los pines 2,3, 4, 5 y 6 del Arduino.
La resistencia variable o sea el potenciómetro, el cual nos servirá para simular el control del volumen del equipo de sonido. Este elemento lo conectamos de la siguiente manera:
  • ·         La primera pata va para el negativo común del Arduino.
  • ·         La segunda es la salida de la resistencia, este lo conectamos a la entrada analógica A0 del Arduino.
  • ·         La tercera pata, la conectamos a los 5V del microcontrolador (Arduino).



NOTA: para que lo planteado arriba se cumpla, lo que se hizo fue poner un rango para cada Led, así poder controlar cuales tendrían que estar encendidos o apagados. A continuación, los rangos utilizados
RANGO
LEDS ENCENDIDOS
0
Todos apagados
1 - 204
Led 1
205 - 408
Led 1, led 2
409 - 612
Led 1, led 2, led 3
613 - 816
Led 1, led 2, led 3, led 4
817 - 1023
Led 1, led 2, led 3, led 4, led 5

CODIGO DEL PROGRAMA
int valorpotenciometro=0;
int i=0,pin=2;
int leds[]={0,0,0,0,0};
void setup() {
  pinMode(A0,INPUT);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  Serial.begin(9600);
}

void loop() {
  valorpotenciometro=analogRead(A0);
  if(valorpotenciometro==0){
    leds[0]=0; leds[1]=0; leds[2]=0; leds[3]=0; leds[4]=0;
  }
  if(valorpotenciometro>0 && valorpotenciometro<=204){
    leds[0]=1; leds[1]=0; leds[2]=0; leds[3]=0; leds[4]=0;
  }
  if(valorpotenciometro>204 && valorpotenciometro<=408){
    leds[0]=1; leds[1]=1; leds[2]=0; leds[3]=0; leds[4]=0;
  }
  if(valorpotenciometro>408 && valorpotenciometro<=612){
    leds[0]=1; leds[1]=1; leds[2]=1; leds[3]=0; leds[4]=0;
  }
  if(valorpotenciometro>612 && valorpotenciometro<=816){
    leds[0]=1; leds[1]=1; leds[2]=1; leds[3]=1; leds[4]=0;
  }
  if(valorpotenciometro>816){
    leds[0]=1; leds[1]=1; leds[2]=1; leds[3]=1; leds[4]=1;
  }
   Serial.println(valorpotenciometro);

  i=0;
  pin=2;
  while(i<5){
    if(leds[i]==1){
      digitalWrite(pin,HIGH);
    }
    else{
      digitalWrite(pin,LOW);
    }
    i++;
    pin++;
  }
}

PUEDE VER EL SIGUIENTE VÍDEO PARA VER LA CODIFICACIÓN PASO A PASO 



EXPLICACION DEL CODIGO
int valorpotenciometro=0; (variable para guardar el valor del potenciómetro)
int i=0,pin=2; (variables de iteración y para recorrer los pines de salida)
int leds[]={0,0,0,0,0}; (se crea un arreglo de tipo entero para guardar los valores de cada led, 0 ó 1)
void setup() {
(declaración de pines de Entrada y salida)
  pinMode(A0,INPUT);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  Serial.begin(9600);
}

void loop() {
  valorpotenciometro=analogRead(A0); (lectura del valor del potenciómetro)
  if(valorpotenciometro==0){ (si el valor del potenciómetro es cero, los valores en el vector van a ser todos 0 ya que tienen que estar apagados)
    leds[0]=0; leds[1]=0; leds[2]=0; leds[3]=0; leds[4]=0;
  }
  if(valorpotenciometro>0 && valorpotenciometro<=204){ (si el valor del potenciómetro esta entre 1 y 204, el primer índice del vector tendrá valor de 1 y los demás 0.)
    leds[0]=1; leds[1]=0; leds[2]=0; leds[3]=0; leds[4]=0;
  }
  if(valorpotenciometro>204 && valorpotenciometro<=408){ (si el valor del potenciómetro esta entre 205 y 408, el primer y segundo índice del vector tendrán valores de 1 y los demás 0.)
    leds[0]=1; leds[1]=1; leds[2]=0; leds[3]=0; leds[4]=0;
  }
  if(valorpotenciometro>408 && valorpotenciometro<=612){ (si el valor del potenciómetro esta entre 409 y 612, el primer, segundo y tercer índice del vector tendrán valores de 1 y los demás 0.)
    leds[0]=1; leds[1]=1; leds[2]=1; leds[3]=0; leds[4]=0;
  }
  if(valorpotenciometro>612 && valorpotenciometro<=816){ (si el valor del potenciómetro esta entre 613 y 816, el primer, segundo, tercer y cuarto índice del vector tendrán valores de 1 y los demás 0.)
    leds[0]=1; leds[1]=1; leds[2]=1; leds[3]=1; leds[4]=0;
  }
  if(valorpotenciometro>816){ (si el valor del potenciómetro es mayor que 816, todos los índices del vector tendrán valores de 1 ya que ahí es cuando todos se mantendrán prendidos)
    leds[0]=1; leds[1]=1; leds[2]=1; leds[3]=1; leds[4]=1;
  }
   Serial.println(valorpotenciometro); (para conocer los valores del potenciómetro, lo imprimimos en el monitor serial.
(aquí utilizamos un ciclo while para prender los leds según los valores almacenados en el vector)
  i=0;
  pin=2;
  while(i<5){
    if(leds[i]==1){ (si el valor del vector en la posición especificada es 1, entonces la led que se encuentra en la posición se encenderá)
      digitalWrite(pin,HIGH);
    }
    else{
      digitalWrite(pin,LOW);(si tienen valores de 0, se apagaran)
    }
    i++;
    pin++;(esta variable lleva el control de los pines, empieza con el valor de 2, ya que el primer led esta conectado al pin 2 del Arduino)
  }
}

Comentarios

Entradas más populares de este blog

Como ser romántico nivel programador

Felicitaciones de cumpleaños para un programador [tomado de frasesparacumpleaños.com]