Proyecto 4: PWM
PWM (Pulse Width Modulation) o modulación de ancho de pulso es una técnica usada para simular señales analógicas utilizando señales digitales. Una computadora no pude dar una salida análoga, solo puede dar salidas digitales, alto o bajo, encendido o apagado, 0 o 5 volts. El truco se logra encendiendo y apagando el pulso a gran velocidad, miles de veces (ciclos) cada segundo, dependiendo de cuánto tiempo permanezca encendido y cuánto tiempo permanezca apagado en cada ciclo se obtiene un “promedio” de voltaje distinto, por ejemplo: 100% encendido, 0% apagado = salida 5 V, 50 % del tiempo de cada ciclo estará encendido el otro 50% estará apagado, (esto es imperceptible para el ojo humano) el resultado será que obtendremos una lectura del 50% del voltaje 2.5 V.
Cambiando el tiempo de encendido y apagado por cada ciclo podemos generar diferentes voltajes. Observa la siguiente tabla:
PWM tiene muchas aplicaciones: intensidad de brillo en una lámpara, velocidad de un motor, generación de sonido en distintos tonos,etc.
En la placa Arduino Mega hay 15 pines que soportan PMW, siendo las más utilizadas las de los pines 2 al 13. En este proyecto utilizaremos un potenciómetro (resistencia variable) para controlar la intensidad del brillo de un LED.
Hardware a utilizar
Placa Arduino
Cable USB
Potenciometro
LED
Resistencia 220 ohms
Protoboard
Cables
Diagrama esquemático
La salida del potenciómetro es análoga (pata central) así que la conectamos a una entrada análoga de la tarjeta Arduino (A0), el lado positivo del LED lo conectaremos a una salida digital que soporte PWM. (11)
Conexiones del circuito
En este sketch utilizaremos la función analogWrite (solo disponible para los pines digitales de la placa Arduino que soportan PWM), en este proyecto leeremos el valor analógico de la salida del potenciómetro y asignaremos ese valor a la salida del puerto PMW, el brillo del LED conectado a ese puerto cambiará en función del valor introducido. En la parte final del programa enviaremos el valor a la ventana del monitor serial para verlo en pantalla.
Sketch de ejemplo:
/////
int potpin=0; // declaramos la variable potpin y le asignamos el valor cero
int ledpin=11; // declaramos la variable ledpin y le asignamos el valor 11
int val = 0; // declaramos variable entera val y le asigna valor de cero
void setup() //______________________________________________
{ //______________________________________________
pinMode(ledpin,OUTPUT); //__________________________________
Serial.begin(9600); //___________________________________
// no se declaró potpin como entrada (INPUT) los pines análogos siempre son entrada
} //____________________________________
void loop() //_______________________________________________
{ //________________________________________________
val=analogRead(potpin); // lee el valor de potpin y se lo asigna a la variable val
Serial.println(val); // envía el valor de val al monitor serial
if(val>1012) // si val es mayor que 1012 ejecuta el código de la función if
{ //________________________________________________
val = 1012; // asigna el valor 1012 a la variable val
} //________________________________________________
analogWrite(ledpin,val/4); // envía pulso al led dependiendo el valor de val entre 4
delay(10); //___________________________________________________
}
/////
En el programa de Arduino se verá así:
Da clic en revisar y si no tienes errores da clic en subir. Gira el potenciómetro hacia la derecha y hacia la izquierda, observa como el LED cambia su intensidad de brillo.
Ahora abre el monitor serial de la aplicación Arduino, observa cómo cambia el valor de val girando hacia la izquierda llega a 0, girando hacia la derecha llega a hasta 1023, entonces el potenciómetro puede tomar 1024 valores distintos, desde 0 hasta 1023.
La salida PWM solo puede tomar 256 valores, desde 0 hasta255 por esta razón el valor de la variable val se dividió entre 4 en la línea del programa:
analogWrite(ledpin,val/4); // envía pulso al led dependiendo el valor de val dividido entre 4
La división de 1023 entre 4 es 255.75 y nuestro valor máximo debe ser 255, las siguientes líneas del programa limitan el valor superior de lavariable val
if(val>1012) //si val es mayor que 1012 ejecuta el código de la función if
{ // se abre llave de la funciónif
val = 1012; // asigna el valor 1012 a la variable val
} // se cierra llave de la función if
Reto del proyecto 4: agrega unsegundo LED (utiliza el pin 10 de tu placa Arduino) y haz que la intensidad desu brillo sea inversa a la del primer LED (cuando el brillo de uno sube, el otro baja y viceversa) necesitarás declarar una nueva variable, yo usé brillo y tendrás que limitar sus valores para que no sean mayores a 255 y no sean menores a 0
********************************************************************************
Problemas escribiendo el código? descarga los ejemplos desde mi carpeta compartida en Dropbox:
https://www.dropbox.com/sh/w5h38cdrynqdwhf/AABP7b9T3ADbO4KqiPm4pO-9a?dl=0
Sigue: Proyecto 5: Luces de semáforo
http://www.taringa.net/posts/ciencia-educacion/19688853/Tutoriales-Arduino-Proyecto-5-Luces-de-semaforo.html
PWM (Pulse Width Modulation) o modulación de ancho de pulso es una técnica usada para simular señales analógicas utilizando señales digitales. Una computadora no pude dar una salida análoga, solo puede dar salidas digitales, alto o bajo, encendido o apagado, 0 o 5 volts. El truco se logra encendiendo y apagando el pulso a gran velocidad, miles de veces (ciclos) cada segundo, dependiendo de cuánto tiempo permanezca encendido y cuánto tiempo permanezca apagado en cada ciclo se obtiene un “promedio” de voltaje distinto, por ejemplo: 100% encendido, 0% apagado = salida 5 V, 50 % del tiempo de cada ciclo estará encendido el otro 50% estará apagado, (esto es imperceptible para el ojo humano) el resultado será que obtendremos una lectura del 50% del voltaje 2.5 V.
Cambiando el tiempo de encendido y apagado por cada ciclo podemos generar diferentes voltajes. Observa la siguiente tabla:
PWM tiene muchas aplicaciones: intensidad de brillo en una lámpara, velocidad de un motor, generación de sonido en distintos tonos,etc.
En la placa Arduino Mega hay 15 pines que soportan PMW, siendo las más utilizadas las de los pines 2 al 13. En este proyecto utilizaremos un potenciómetro (resistencia variable) para controlar la intensidad del brillo de un LED.
Hardware a utilizar
Placa Arduino
Cable USB
Potenciometro
LED
Resistencia 220 ohms
Protoboard
Cables
Diagrama esquemático
La salida del potenciómetro es análoga (pata central) así que la conectamos a una entrada análoga de la tarjeta Arduino (A0), el lado positivo del LED lo conectaremos a una salida digital que soporte PWM. (11)
Conexiones del circuito
En este sketch utilizaremos la función analogWrite (solo disponible para los pines digitales de la placa Arduino que soportan PWM), en este proyecto leeremos el valor analógico de la salida del potenciómetro y asignaremos ese valor a la salida del puerto PMW, el brillo del LED conectado a ese puerto cambiará en función del valor introducido. En la parte final del programa enviaremos el valor a la ventana del monitor serial para verlo en pantalla.
Sketch de ejemplo:
/////
int potpin=0; // declaramos la variable potpin y le asignamos el valor cero
int ledpin=11; // declaramos la variable ledpin y le asignamos el valor 11
int val = 0; // declaramos variable entera val y le asigna valor de cero
void setup() //______________________________________________
{ //______________________________________________
pinMode(ledpin,OUTPUT); //__________________________________
Serial.begin(9600); //___________________________________
// no se declaró potpin como entrada (INPUT) los pines análogos siempre son entrada
} //____________________________________
void loop() //_______________________________________________
{ //________________________________________________
val=analogRead(potpin); // lee el valor de potpin y se lo asigna a la variable val
Serial.println(val); // envía el valor de val al monitor serial
if(val>1012) // si val es mayor que 1012 ejecuta el código de la función if
{ //________________________________________________
val = 1012; // asigna el valor 1012 a la variable val
} //________________________________________________
analogWrite(ledpin,val/4); // envía pulso al led dependiendo el valor de val entre 4
delay(10); //___________________________________________________
}
/////
En el programa de Arduino se verá así:
Da clic en revisar y si no tienes errores da clic en subir. Gira el potenciómetro hacia la derecha y hacia la izquierda, observa como el LED cambia su intensidad de brillo.
Ahora abre el monitor serial de la aplicación Arduino, observa cómo cambia el valor de val girando hacia la izquierda llega a 0, girando hacia la derecha llega a hasta 1023, entonces el potenciómetro puede tomar 1024 valores distintos, desde 0 hasta 1023.
La salida PWM solo puede tomar 256 valores, desde 0 hasta255 por esta razón el valor de la variable val se dividió entre 4 en la línea del programa:
analogWrite(ledpin,val/4); // envía pulso al led dependiendo el valor de val dividido entre 4
La división de 1023 entre 4 es 255.75 y nuestro valor máximo debe ser 255, las siguientes líneas del programa limitan el valor superior de lavariable val
if(val>1012) //si val es mayor que 1012 ejecuta el código de la función if
{ // se abre llave de la funciónif
val = 1012; // asigna el valor 1012 a la variable val
} // se cierra llave de la función if
Reto del proyecto 4: agrega unsegundo LED (utiliza el pin 10 de tu placa Arduino) y haz que la intensidad desu brillo sea inversa a la del primer LED (cuando el brillo de uno sube, el otro baja y viceversa) necesitarás declarar una nueva variable, yo usé brillo y tendrás que limitar sus valores para que no sean mayores a 255 y no sean menores a 0
********************************************************************************
Problemas escribiendo el código? descarga los ejemplos desde mi carpeta compartida en Dropbox:
https://www.dropbox.com/sh/w5h38cdrynqdwhf/AABP7b9T3ADbO4KqiPm4pO-9a?dl=0
Sigue: Proyecto 5: Luces de semáforo
http://www.taringa.net/posts/ciencia-educacion/19688853/Tutoriales-Arduino-Proyecto-5-Luces-de-semaforo.html