Los dimmer de luz son dispositivos utilizados para hacer variar la intensidad lumínica de una luz. Utilizando un sensor de rotación podemos ajustar la intensidad de salida de la luz. Mientras más rotas la perilla, el LED brillará más, en este tutorial te enseñaremos como fabricar un dimmer.
Los sensores de rotación pueden ser utilizados para multiples aplicaciones, como para controlar motores servo, controlar la velocidad de un motor DC, etc.
Componentes necesarios:
- 1x Luz digital piranha LED:
- 1x Sensor de rotación análogo
Pin out de conexión:
- Sensor de rotación análogo –> Pin análogo 0
- Luz Digital Piranha LED –> Pin digital 9
Código de programación Arduino:
// Dimmer de luz
int potPin = 0; // Sensor de rotación análogo conectad al Pin 0
int ledPin = 9; // Led contectado al Pin 9
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
int sensorValue = analogRead(potPin); //Lee el valor análogo
// reduce el rango desde 0~1023 a 0~255 mediante la función map()
int outputValue = map(sensorValue, 0, 1023, 0, 255);
analogWrite(ledPin, outputValue); //Escribe en el LED
delay(2);
}
Luego de cargar este sketch, haz girar la perilla y verás cómo varía la intensidad de la luz del LED.
Fundamento del ejemplo (Entrada digital – Salida digital):
Revisión del código de programación Arduino:
Revisemos la función map(). Este es el formato de la función:
map(value, fromLow, fromHigh, toLow, toHigh)
Esta función “remapea” un número de un rango a otro, esto quiere decir que un valor fromLow se mapearía a toLow, un valor fromHigh se mapearía a toHigh, o sea valores intermedios a valores intermedios.
Parametros de la función map():
Value: el número a mapear
fromLow: La cota inferior del valor del rango actual
fromHigh: La cota superior del valor del rango
toLow: La cota inferior del valor de rango deseado
toHigh: La cota superiordel valor de rango deseado
Nota que la cota inferior puede ser mayor o menos que la cota superior, por lo que la función map() puede ser utilizada para invertir un rango de números, por ejemplo:
y = map(x, 1, 50, 50, 1);
La función maneja también valores negativos, como en este ejemplo:
y = map(x, 1, 50, 50, -100);
Volviendo a nuestro ejemplo,
int outputValue = map(sensorValue, 0, 1023, 0, 255);
Lo que queremos es reducir el valor de nuestro rango 0 ~ 1023(desde los valores análogos) a 0 ~ 255 (al PWM de salida, en este caso el ancho de onda)