YoMaker

Sitio web sobre proyectos de arduino para principiantes. Todo lo necesario para aprender a programar y montar tus primeros proyectos paso a paso.

  • Proyectos con Arduino
  • Herramientas electronica
  • Programar Arduino
  • Blog
  • Sobre mí
  • Contacto

PWM con Arduino. Salidas analógicas.

By Paco Pons 7 Comments

En este artículo vamos a ver como utilizar una salida PWM con arduino para cuando necesitemos una salida analógica en nuestro proyecto.

En la publicación anterior, aprendimos a usar las entradas analógicas con arduino y a leer un potenciómetro.

Hay ocasiones en el diseño de un proyecto, que no tenemos suficiente con una salida digital en la que estamos limitados a dos estados lógicos 1 ó 0 . Con este tipo de salidas podremos controlar el encendido o apagado de el circuito conectado a la salida pero… ¿Que hacemos si tenemos que controlar el brillo de un LED o la velocidad de un motor?

Para estos casos, tenemos las salidas PWM.

Como funcionan las salidas PWM con Arduino.

Tenemos que tener en cuenta que las salidas PWM en arduino son una aproximación o emulación de una salida analógica real. La mayoría de los sistemas digitales de coste económico como es el caso de Arduino, no pueden generar una salida analógica real ya que incorporar esta característica encarecería el microprocesador.

Para poder disponer de una salida analógica, usamos una digital y la hacemos trabajar de manera que nos haga una aproximación de una analógica. El sistema consiste en realizar una variación del estado de esa salida entre 0 y 1 muy rápido y además, controlar el tiempo que permanece en estado alto o 5V. De esta manera, al controlar el tiempo que tenemos la salida activa o a 0, nos dará un termino promedio a lo largo del tiempo que será la tensión analógica que pretendemos tener en esa salida.

pwm-con-arduino

Cronograma de salida PWM en tres ciclo de trabajo distintos.

En conclusión, una salida PWM (Pulse Whith Modulation) o modulación por ancho de pulso, consiste en una señal de una determinada frecuencia (normalmente 490 Hz), a la que modificamos su ciclo de trabajo (tiempo que permanece en estado 1) y tenerla a 0 el resto, para que la media de voltaje a lo largo del tiempo nos de el valor que buscamos.

En el esquema podemos ver la señal PWM en 3 ciclos de trabajo distintos (Duty Cycle) 10%, 50% y 90%.  Como se puede ver, la frecuencia de la señal es la misma (tiempo entre pulsos), pero la anchura del pulso Dutty cycle, la podemos cambiar y por lo tanto la tensión media de la salida será la representada por la línea roja.

Control de intensidad de un led con salida PWM.

Bueno, después de la teoría pasemos a la práctica con un sencillo montaje:

Aprovecharemos el montaje del potenciómetro del articulo anterior y le añadiremos un led a la salida 9 de nuestro arduino que esta marcada como PWM

Observar que no todas las salidas tienen la opción de usarse como PWM, el arduino tiene 6 y todas están marcadas con el símbolo ∼ en la placa.

El proyecto quedará así:

pwm-con-arduino-led

El funcionamiento consiste en regular la intensidad de iluminación del led conectado al pin 9, mediante el giro del potenciómetro conectado a la entrada analógica A0. Simultáneamente podremos ver los valores leídos y enviados a través del puerto serie.

El programa que tendremos que cargar en el arduino, lo encontraremos en los ejemplos:   Archivos-Ejemplos-03.Analog-AnalogInOutSerial

Arduino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
  Analog input, analog output, serial output
 
Reads an analog input pin, maps the result to a range from 0 to 255
and uses the result to set the pulsewidth modulation (PWM) of an output pin.
Also prints the results to the serial monitor.
 
The circuit:
* potentiometer connected to analog pin 0.
   Center pin of the potentiometer goes to the analog pin.
   side pins of the potentiometer go to +5V and ground
* LED connected from digital pin 9 to ground
 
created 29 Dec. 2008
modified 9 Apr 2012
by Tom Igoe
 
This example code is in the public domain.
 
*/
 
// These constants won't change.  They're used to give names
// to the pins used:
const int analogInPin = A0;  // Analog input pin that the potentiometer is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to
 
int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)
 
void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
}
 
void loop() {
  // read the analog in value:
  sensorValue = analogRead(analogInPin);
  // map it to the range of the analog out:
  outputValue = map(sensorValue, 0, 1023, 0, 255);
  // change the analog out value:
  analogWrite(analogOutPin, outputValue);
 
  // print the results to the serial monitor:
  Serial.print("sensor = ");
  Serial.print(sensorValue);
  Serial.print("\t output = ");
  Serial.println(outputValue);
 
  // wait 2 milliseconds before the next loop
  // for the analog-to-digital converter to settle
  // after the last reading:
  delay(2);
}
 

Para usar la salida PWM, usaremos la instrucción analogWrite(Pin,valor)

El valor que podemos mandar a la salida tiene que ser un número entre 0-255. Por lo tanto tenemos 255 niveles diferentes que podemos escribir en el pin 9.

La lectura del potenciómetro conectado a A0 nos dará un valor entre 0-1023 ya que la entrada analógica tiene mas resolución.

Será necesario hacer una adaptación (mapeado) de la entrada a la salida y esto lo haremos con la instrucción map(valor, fromLow, fromHigh,toLow,toHigh)

Como vemos en la línea 39, adaptamos la variable leída del potenciómetro, sensorValue, que tenia valores en el rango 0-1023, a valores entre 0-255 y los guardamos en outputValue, para poderlos sacar en el pin 9.

Igualmente enviamos los valores por el puerto serie para poder verlos en la ventana del monitor serie.

Como veis, las salidas PWM con arduino son muy útiles y necesarias cuando necesitamos regular el funcionamiento de algo conectado a nuestras salidas, haciendo variar la tensión de la misma.

Puedes ir a este enlace para conseguir todos los componentes necesarios, arduino y otras herramientas para poder montar este y otros muchos proyectos que publicaré en futuros artículos.

Próximamente publicaré un articulo donde es fundamental el uso de las señales PWM, el control de servos.

Hasta luego…

Opt In Image
Si te ha gustado este artículo suscríbete al blog.
No te pierdas nada!!

Recibe los artículos directamente en tu email el día de la publicación.

Garantía 100% libre de spam.

Si te ha gustado, compártelo en tu red...
Share on Facebook
Facebook
Tweet about this on Twitter
Twitter
Share on LinkedIn
Linkedin

Filed Under: Programar Arduino

Comments

  1. Beatrice says

    14 julio, 2017 at 12:52

    What’s up, yes this article is truly good and I have learned lot of things from it concerning blogging.
    thanks.

    Responder
    • Paco Pons says

      8 agosto, 2017 at 09:39

      You’re welcome Beatrice

      Responder
  2. Pascal says

    6 febrero, 2018 at 21:08

    Hola Paco.
    Estoy con el capitulo «PWM con Arduino. Salidas analógicas.» intentando controlar aquel LED.
    ¿que resistencia hay que usar? he probado varias pero no me va.
    Un saludo

    Responder
    • Paco Pons says

      7 febrero, 2018 at 10:37

      Hola Pascal:
      Con una resistencia de 220 a 500 ohm. te irá bien, a mas resistencia menos luminosidad.

      Responder
  3. daniel says

    6 octubre, 2018 at 11:43

    como harías (programa arduino)para controlar (velocidad) efecto desvanecimiento y aumento (progresivo) del brillo de un led…,gracias

    Responder
    • Paco Pons says

      6 octubre, 2018 at 17:57

      Hola Daniel:
      yo lo plantearía con un bucle en el que la variable que uses sea outputValue y el bucle vaya de 0 a 255 así la intensidad del led irá aumentando hasta el máximo (intercala un delay porque sino lo hará demasiado rápido). A continuación programas otro bucle igual pero que empiece en 255 hasta 0 para apagarlo.

      Un saludo.

      Responder

Trackbacks

  1. Control de servo con Arduino y potenciómetro. - YoMaker dice:
    12 diciembre, 2016 a las 12:56

    […] tipo PWM (control de ancho de pulso). Este tipo de señales las tratamos en el anterior artículo PWM con Arduino. Salidas analógicas. que te recomiendo leer antes de seguir con este para entender mejor como funcionan este tipo de […]

    Responder

Deja un comentario Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Acerca de Francisco Pons

francisco-pons-acerca-de

Tecnófilo, en continua formación. Apasionado de la electrónica, robótica y automatización. Ingeniero industrial electrónico con vocación maker.

Sígueme en:
Ver el perfil de Francisco Pons Ruiz en LinkedIntwitter

Kit Arduino recomendado principiantes

comprar arduino kit

Ver mejor precio Starter Kit for Arduino UNO R3. Envío gratis a través de Aliexpress

New title

Licencias de contenido

El contenido de este sitio web se ofrecen bajo las licencias de Creative Commons

by-nc-sa.eu

Categorías

  • Blog
  • Herramientas electronica
  • Programar Arduino
  • Proyectos con Arduino

Copyright Yomaker.com © 2023 Politica de privacidad | Politica de cookies | Aviso Legal