Control de la intensidad de iluminación de un LED
Como ejemplo práctico de la señal PWM vamos a realizar un control de iluminación sobre un diodo led. Los circuitos que vamos a utilizar en este proyecto se encuentran en la placa EduBásica, también se puede montar en una protoboard, estos son:
- El circuito formado por el potenciómetro conectado a la entrada analógica A0.
- El circuito conectado al pin digital D3, utilizado como salida PWM, de esta manera nos va a permitir variar la luminosidad del LED.
Vamos a ver una pequeña demostración:
Cargamos el programa ejemplo, en la placa Arduino y teniendo acoplada la placa EduBásica o montados los circuitos en una placa protoboard, podemos ver su funcionamiento.
Para ver su funcionamiento activamos el monitor serie del IDE de programación y variamos el potenciómetro. El resultado es una variación de luminosidad y variación de valores en el monitor serie.
El siguiente gráfico es una pantalla del monitor serie con los valores leídos y el valor aplicado a la señal PWM para variar la luminosidad.
/*Lee la entrada analogica A0, mapea el resultado al rango de 0 a 255
y utiliza el resutado para poner la anchura del pulso PWM. Tambien se escribe en el monitor serie el valor binario de A0 y el valor mapeado para la señal PWM. De esta manera controlamos la luminosidad del led verde de la placa Edubasica El circuito: * potenciometro conectado a la entrada analogica A0. Terminal central del potenciometro a pin A0. Resto de terminales del potenciometro a +5V y masa * Circuito de LED verde conectado a D3-PWM. */ // pines usados: const int analogInPin = A0; // Entrada analogica A0 del potenciometro const int analogOutPin = 3; // Salida PWM int potValor = 0; // valor de lectura del potenciometro int outputValor = 0; // valor de salida de la señal PWM void setup() { // inicializacion del monitor serie a 9600 bps: Serial.begin(9600); } void loop() { // lee el valor de la entrada analogica: potValor = analogRead(analogInPin); // mapea el rango para la señal de salida PWM: outputValor = map(potValor, 0, 1023, 0, 255); // asigna el valor cambiado a pin 3 PWM: analogWrite(analogOutPin, outputValor); // escribe el resultado en el monitor serie: Serial.print("Potenciometro = " ); Serial.print(potValor); Serial.print("\t PWM = "); Serial.println(outputValor); // espera 1 segundo cada bucle para una visualizacion aceptable // conviene tener un valor aunque sea pequeño (10ms) // por el proceso de conversion de A/D delay(10); }