Skip to main content

M4 Intensidad LED

Montaje 1-2: 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.

Sin EDUBASICA

En una protoboard montamos el circuito formado por el potenciómetro conectado a la entrada analógica A0.

y también montamos el circuito conectado al pin digital D3, utilizado como salida PWM, de esta manera nos va a permitir variar la luminosidad del LED.

CON EDUBÁSICA

En este caso ya tiene integrado un potenciómetro conectado a la entrada A0.

Esquema del potenciómetro en EDUBASICA

Y vamos a utilizar de salida el diodo verde conectado a D3 y a una resistencia ya integrado en EDUBASICA:

Esquema de LEDs en EDUBASICA

Un vídeo de cómo queda.

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.

Programa. Instrucciones analorRead analogWrite y map

El valor del potenciómetro lo leerá la instrucción analogRead(pin) que lee valores analógicos cada 100µs y los convierte por el conversor analógico digital en valores de 10 bits por lo tanto de 0 a 1024. Los pines para leer sólo pueden ser los A0 al A5. (ver+)

Utilizaremos la instrucción analogWrite(pin,value) para crear la onda PWM en el pin correspondiente, que sólo puede ser en el Arduino Uno el 3, 5, 6, 9, 10, 11. El valor value es un número entre 0 y 255 y es simulado con una onda cuadrada de 490Hz o 980Hz (depende del pin, ver+).

Como uno lee 0 a 1024 y el otro necesita valores de 0 a 255 necesitamos un traductor o mapeo con la instrucción map(value, fromLow, fromHigh, toLow, toHigh) esta instrucción la colocaremos, como suele estar los intérpretes en medio, o sea, entre la instrucción analogRead y la analogWrite

Veremos más adelante esta instrucción map

https://create.arduino.cc/editor/javierquintana/8bee8469-df52-4b88-a406-9f54fe3e20f8/preview

 

Se trata de obtener el mismo efecto que se consiguió en la práctica correspondiente al potenciómetro, las instrucciones principales eran:

void loop() {
  val = analogRead(0);  // val tiene el rango 0-1024
  analogWrite(3, val/4); //dividimos por 4 para entrar en el rango 0-255
}

Pero en este caso utilizaremos el mapeo.  

La descripción de la práctica es la siguiente:

La regulación del potenciómetro provocará una variación de voltaje en el pin de entrada analógico 0 de Arduino. Se realizará una conversión analógica-digital en el que los valores de tensión analógicos entre 0 y 5 V se transforma a un rango discreto de valores de 0 a 1023. Para modificar la intensidad del led rojo le se enviará una señal pseudoanalógica PWM utilizando la salida 5 digital de Arduino. Para ello se enviará un valor de 0 a 255 que marcará el ciclo de trabajo de la onda cuadrada PWM. Previamente habrá que realizar un mapeo (instrucción map) para asignar valores desde el intervalo [0, 1023] al [0, 255].

SIN EDUBASICA

Tienes que conectar un led al D5 y un potenciómetro al A0

CON EDUBÁSICA

No tienes que conectar nada ;) ya está !

Continuamos

Este es el PROGRAMA:

```cpp+lineNumbers:true / Regular la luminosidad del LED rojo con el potenciómetro de Edubásica Conexiones: Pin 5 digital Arduino -> LED rojo Edubásica Pin 0 analógico Arduino -> Potenciómetro Edubásica /

int ledPin = 5; int potenPin = A0; int intensity, valor_poten;

void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); }

void loop() { valor_poten=analogRead(potenPin); intensity = map(valor_poten, 0, 1024, 0, 255); analogWrite(ledPin,intensity); //Envia una onda PWM especificado en la varible: intensity. // Observamos la lectura analogica para comprobar el fondo de escala (0 -> 1024)

Serial.print("valor analógico leído="); Serial.println(analogRead(potenPin)); delay (1000); } ```