Analogic Write

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Señales PWD (pulse with modulation)

Una señal PWM es una señal que varía periódicamente entre sus dos posibles estados: encendido y apagado. Esos dos valores, en el caso de Arduino son 0 y 5V.

La frecuencia es el número de veces que se repite un evento en un segundo, y su unidad de medida es el hercio (Hz).Por ejemplo, si digo que, escribiendo con el teclado mi frecuencia de escritura es de 5Hz, esto quiere decir que escribo con cinco palabras por segundo.

Hay pines digitales que permiten la programación de señales PWM: 3, 5, 6, 9, 10 y 11. Los podemos identificar en el hardware con el símbolo~.

Los Timers son el mecanismo que utiliza el MCU para generar una señal PWM. Tenemos 3 Timers: el 0, 1 y 2.

  • El timer0 de 980 Hz asociado a los pines 5 y 6.
  • El timer1 de 490 Hz asociado a los pines 9 y 10.
  • El timer3 de 490Hz asociado a los pines 3 y 11.
Analogic Write 1

El periodo es el tiempo que dura una señal.

T (periodo) = 1 / f (frecuencia)
T (segundos) = 1 / f(hercios)

En el caso de usar el timer de 490Hz, cada periodo durará aproximadamente 2 milisegundos. Si queremos que un led esté encendido con la mitad de nergía (2.5V) jugaremos con los tiempos de encendido y apagado de cada señal.

Si generamos 500 señales por segundo (490 redondeado) y cada una de ellas dura 2 milisegundos, si programamos que dicha señal esté activa un milisegundo y apagada un milisegundo, la tensión media a la que trabajará el led será 2.5V.

La función analogicWrite de Arduino nos permitirá imitar los valores analógicos, pudiendo pasarle como parámetro valores comprendidos entre 0 y 255.

Analogic Write 2

Ejercicio potenciometro

int led = 6;
int brillo;
int pot = 0;
void setup() {
  pinMode(led, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  brillo = analogRead(pot) / 4;
  Serial.println("brillo: "+ brillo);
  analogWrite(led, brillo);
}
int brillo = 0;
int ledPin = 6;
void setup() {
  pinMode(ledPin, OUTPUT);
  digitalWrite(11, HIGH);

}

void loop() {
  for (brillo = 0; brillo < 256; brillo ++) {
    analogWrite(ledPin, brillo);
    delay(15);
  }
  for (brillo = 255; brillo >= 0; brillo --) {
    analogWrite(ledPin, brillo);
    delay(15);
  }
}
Analogic Write 3

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.