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++;
}
}
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
Publicar un comentario