Está en la página 1de 10

# 0003 - Entrada Analgica y Salida PWM

Parte 1: Qu vamos a hacer?


En este nuevo proyecto vamos a aprender utilizar las entradas analgicas de nuestro pequeo Arduino
Uno para utilizarla en dos ejemplos, primero variaremos la frecuencia de parpadeo de un diodo LED con
un potencimetro conectado a una entrada analgica y luego utilizaremos el mismo circuito para realizar
una modulacin del ancho de un pulso en una salida digital (PWM).


Material necesario para este proyecto:
1 x Arduino Uno
1 x Diodo Led
1 x Resistencia 470
1 x Potencimetro 1K
1 x Protoboard
1 x Juego de cables

Parte 2: Diseando el Hardware
En este proyecto Arduino vamos a realizar dos ejemplos con un mismo circuito, la diferencia entre ellos
la observaremos es el apartado de programacin, en cuanto a hardware tenemos la novedad de este
proyecto en el uso de un potencimetro combinado con una entrada analgica, as que primero
aclararemos unos conceptos.
Qu es un potencimetro?

Un potencimetro es una resistencia de tipo variable con tres patillas, entre las dos de sus extremos
tendremos siempre una resistencia fija dada por del valor mximo de nuestro potencimetro, pero entre
cualquiera de esos extremos y la patilla central obtendremos la variacin de resistencia, tenis disponible
un tutorial sobre este componente AQUI.
En este proyecto, vamos a utilizar el potencimetro como un divisor de tensin, primero veamos como
se conecta para que esto sea posible.

Como podemos ver, debemos colocar uno de los extremos a masa, otro a +Vcc y nuestra patilla central
ser nuestra tensin de salida regulable, esta salida ser la que conectemos a Arduino y que variar de 0v
a 5v dependiendo de la posicin de nuestro potencimetro.
Podemos ver la variacin de tensin en el siguiente video:
Si estamos utilizando un Arduino Uno, las entradas analgicas vienen identificadas desde A0 hasta A5
como podemos ver en la siguiente imagen:

En cuanto a la salida, colocaremos la ya conocida configuracin de LED ms resistencia, pero
deberemos tener algo en cuenta, para el primer ejemplo nos dara igual la salida digital a elegir, pero
para el segundo es necesario que seleccionemos una salida con PWM, si tenis un Arduino Uno, las
salidas sern la 3, 5, 6, 9, 10 y 11 como se puede ver en la siguiente imagen:

Pero.. Qu es el PWM?
A menudo necesitaremos algo ms que una seal de 0 o 1 en nuestros proyectos, para variar la velocidad
de giro de un motor, para variar la intensidad con la que luce un diodo, para transmitir los grados de giro
de un servo, etc..
Para todo esto, y mucho ms, nos servir el PWM, que emula una seal analgica a partir de una seal
digital.
Las siglas PWM vienen de Pulse Width Modultation, o Modulacin de Ancho de Pulso.
Lo que hace este tipo de seal es emitir, en lugar de una seal continua en nuestra salida, emite una serie
de pulsos que podremos variar su duracin pero con una frecuencia constante de aproximadamente
490Hz, de manera que la tensin promedio resultante, es directamente proporcional a la duracin de
estos dentro del rango de nuestro periodo, es decir, cuanto ms juntos estn esos pulsos de +5v, mayor
ser la tensin promedio de nuestra salida, y cuanto ms distantes sean estos, menor ser dicha tensin:

Veamos un video del PWM en accin, observar como se corresponde la intensidad lumnica del LED
con el ancho de pulso observado en el osciloscopio:
La manera de controlar el nivel de salida en nuestro Arduino, la podremos ver en la seccin de
programacin de este tutorial.
El montaje nos quedara as en nuestra protoboard:

Aqu podemos ver en detalle el esquema elctrico:

El circuito en si mismo es muy sencillo, pero en el apartado de programacin podremos ver la
versatilidad del mismo para diferentes aplicaciones, as que no esperemos ms
Parte 3: Programando
El primer ejemplo que vamos a tratar es la adquisicin de datos en la entrada analgica A0 para variar la
frecuencia de parpadeo de un diodo LED conectado a una salida digital cualquiera, veamos el cdigo al
completo:
?
1
2
3
4
5
6
7
8
9
/*
Tutorial # 0003 Arduino Academy - Entrada analgica

Funcionamiento de las entradas analgicas configurando
el pin analgico A0 para tomar datos de una seal.
Esta toma de datos es utilizada para variar la velocidad
de parpadeo de un diodo LED conectado a la salida digital 9.

Este proyecto es de dominio pblico.
*/

10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
int pinSensor = A0; // Entrada para el potencimetro.
int pinLed = 9; // Seleccionamos pin para el Led.
int valorSensor = 0; // variable para el valor del sensor.

void setup() {
// Declaramos el pin del Led como salida:
pinMode(pinLed, OUTPUT);
}

void loop() {
// Leemos el valor del sensor y lo almacenamos:
valorSensor = analogRead(pinSensor);
// encendemo el diodo LED:
digitalWrite(pinLed, HIGH);
// Detenemos el programa durante <valorSensor> milisegundos:
delay(valorSensor);
// Apagamos el diodo Led:
digitalWrite(pinLed, LOW);
// Detenemos el programa durante <valorSensor> milisegundos:
delay(valorSensor);
}
En este programa tenemos como novedad la siguiente instruccin:
?
1
analogRead(pinSensor)
Esta instruccin nos permite leer cualquier sensor que conectemos al pin analgico establecido en
pinSensor, por defecto, nuestra placa Arduino nos realizar una conversin analgico-digital para toda
seal (40mA mximo) de 0v a 5v con una resolucin de 10 bit, lo que nos da 2
10
(1024) valores de
referencia para nuestro programa, siendo 0 en 0v y 1023 en +5v, en posteriores ejemplos veremos como
ese rango de tensin en el que se realizan las mediciones se puede variar para que, por ejemplo, empiece
a lanzarnos valores a partir de 2,2v.
Con esto, y observando un poco el programa, podemor ver que el intervalo entre encendido y apagado de
nuestro diodo LED podr variar entre 0 y 1023 milisegundos, si quisiramos aumentar ms el tiempo de
los intervalos podramos aplicar alguna operacin matemtica al valor de nuestro sensor, por ejemplo, si
aadiramos la lnea de cdigo que se puede observar debajo de la toma de datos del sensor
obtendramos un incremento del tiempo cuatro veces mayor:
?
1
2
3
// Leemos el valor del sensor y lo almacenamos:
valorSensor = analogRead(pinSensor);
valorSensor = valorSensor*4;
Sin variar el circuito, vamos a introducir un nuevo cdigo para realizar un ejemplo diferente, en este
proyecto, nuestro diodo LED variar su intensidad lumnica en funcin del valor que est aportando el
potencimetro a nuestra entrada analgica, esto es el llamado efecto fading (desvanecimiento), puede
observarse que se ha elegido la salida nmero 9, ya que esta s que es compatible con la opcin PWM
como se explica algo ms arriba.
Veamos el cdigo al completo:
?
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
/*
Tutorial Arduino # 0003 - Efecto Fading

En este tutorial, mostramos como se desvanece un LED
en funcin del valor recogido en un entrada analgica.

Este proyecto es de dominio pblico.
*/

int pinSensor = A0; // Entrada para el potencimetro.
int pinLed = 9; // Seleccionamos pin para el Led.
int valorSensor = 0; // variable para el valor del sensor.

void setup() {
pinMode(pinLed, OUTPUT); // Establecemos el pin como salida.
}

void loop() {
// Leemos el valor del sensor y lo almacenamos:
valorSensor = analogRead(pinSensor);
// Establecemos el valor analgico para la salida PWM
analogWrite(pinLed, valorSensor / 4);
// Detenemos el programa durante 30 milisegundos:
delay(30);
}
Podemos observar una nueva instruccin:
?
1
analogWrite(pinLed, valorSensor / 4);
Esta ser la instruccin que nos permitir emular una seal analgica a partir de una digital en nuestros
circuitos, como explicaba algo ms arriba.
El rango de salida de esta instruccin varia de 0 a 255, siendo 0 = 0v y 255 = 5v, por lo que es tan
sencillo como introducir un valor determinado para la tensin de salida que nosotros queramos
conseguir, si quisiramos conseguir 2,5v el valor a asignar sera 127.
As que lo nico que debemos hacer es transformar mediante una simple operacin matemtica la seal
tomada en nuestro potencimetro para adaptarla a nuestra salida PWM.
Como hemos visto en el ejemplo anterior, los niveles de entrada son de 0 a 1023, y si los niveles de
salida, deben ser de 0 a 255 Os dejo a vosotros la deduccin, y la lnea de cdigo por si no cais en
cuenta.
?
1
analogWrite(pinLed, valorSensor / 4);
Esta es una manera algo tosca para realizar esta conversin, ms adelante veremos como hay una
instruccin que hace esto por nosotros.

También podría gustarte