Inicio | Open Source | Arduino | Tutorial Arduino # 0003 – Entrada Analógica y Salida PWM Tutorial Arduino # 0003 – Entrada Analógica y Salida PWM Autor: Pablo Fecha: 19 noviembre, 2011 Compartir en
# 0003 – Entrada Analógica y Salida PWM
Bienvenidos a un nuevo tutorial básico sobre Arduino.
Coste: < 25 €
Parte 1: ¿Qué vamos a hacer?
En este nuevo proyecto vamos a aprender utilizar las entradas analógicas de nuestro pequeño Arduino Uno para utilizarla en dos ejemplos, primero variaremos la frecuencia de parpadeo de un diodo LED con un potenciómetro conectado a una entrada analógica y luego utilizaremos el mismo circuito para realizar una modulación del ancho de un pulso en una salida digital (PWM).
En el siguiente video podemos ver el resultado final de los dos ejemplos…
Material necesario para este proyecto:
1 x Diodo Led
1 x Resistencia 470 Ω
1 x Potenciómetro 1KΩ
Parte 2: Diseñando 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 programación, en cuanto a hardware tenemos la novedad de este proyecto en el uso de un potenciómetro combinado con una entrada analógica, así que primero aclararemos unos conceptos.
Un potenciómetro es una resistencia de tipo variable con tres patillas, entre las dos de sus extremos tendremos siempre una resistencia fija dada por del valor máximo de nuestro potenciómetro, pero entre cualquiera de esos extremos y la patilla central obtendremos la variación de resistencia, tenéis disponible un tutorial sobre este componente AQUI.
En este proyecto, vamos a utilizar el potenciómetro como un divisor de tensión, 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 tensión de salida regulable, esta salida será la que conectemos a Arduino y que variará de 0v a 5v dependiendo de la posición de nuestro potenciómetro.
Podemos ver la variación de tensión en el siguiente video:
Si estamos utilizando un Arduino Uno, las entradas analógicas vienen identificadas desde A0 hasta A5 como podemos ver en la siguiente imagen:
En cuanto a la salida, colocaremos la ya conocida configuración de LED más resistencia, pero deberemos tener algo en cuenta, para el primer ejemplo nos daría igual la salida digital a elegir, pero para el segundo es necesario que seleccionemos una salida con PWM, si tenéis un Arduino Uno, las salidas serán 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 más que una señal 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 más, nos servirá el PWM, que emula una señal analógica a partir de una señal digital.
Las siglas PWM vienen de Pulse Width Modultation, o Modulación de Ancho de Pulso.
Lo que hace este tipo de señal es emitir, en lugar de una señal continua en nuestra salida, emite una serie de pulsos que podremos variar su duración pero con una frecuencia constante de aproximadamente 490Hz, de manera que la tensión promedio resultante, es directamente proporcional a la duración de estos dentro del rango de nuestro periodo, es decir, cuanto más juntos estén esos pulsos de +5v, mayor será la tensión promedio de nuestra salida, y cuanto más distantes sean estos, menor será dicha tensión:
Veamos un video del PWM en acción, observar como se corresponde la intensidad lumínica 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 sección de programación de este tutorial.
El montaje nos quedaría así en nuestra protoboard:
Aquí podemos ver en detalle el esquema eléctrico:
El circuito en si mismo es muy sencillo, pero en el apartado de programación podremos ver la versatilidad del mismo para diferentes aplicaciones, así que no esperemos más…
Parte 3: Programando…
El primer ejemplo que vamos a tratar es la adquisición de datos en la entrada analógica A0 para variar la frecuencia de parpadeo de un diodo LED conectado a una salida digital cualquiera, veamos el código al completo:
Tutorial # 0003 Arduino Academy - Entrada analógica
Funcionamiento de las entradas analógicas configurando
el pin analógico A0 para tomar datos de una señal.
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 público.
int pinSensor = A0;    // Entrada para el potenciómetro.
int pinLed = 9;        // Seleccionamos pin para el Led.
int valorSensor = 0;   // variable para el valor del sensor.
// Declaramos el pin del Led como salida:
// Leemos el valor del sensor y lo almacenamos:
valorSensor = analogRead(pinSensor);
// encendemo el diodo LED:
// Detenemos el programa durante &lt;valorSensor&gt; milisegundos:
delay(valorSensor);
// Apagamos el diodo Led:
En este programa tenemos como novedad la siguiente instrucción:
analogRead(pinSensor)
Esta instrucción nos permite leer cualquier sensor que conectemos al pin analógico establecido en “pinSensor”, por defecto, nuestra placa Arduino nos realizará una conversión analógico-digital para toda señal (40mA máximo) de 0v a 5v con una resolución de 10 bit, lo que nos da 210 (1024) valores de referencia para nuestro programa, siendo 0 en 0v y 1023 en +5v, en posteriores ejemplos veremos como ese rango de tensión 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 quisiéramos aumentar más el tiempo de los intervalos podríamos aplicar alguna operación matemática al valor de nuestro sensor, por ejemplo, si añadiéramos la línea de código que se puede observar debajo de la toma de datos del sensor obtendríamos un incremento del tiempo cuatro veces mayor:
valorSensor = valorSensor*4;
Sin variar el circuito, vamos a introducir un nuevo código para realizar un ejemplo diferente, en este proyecto, nuestro diodo LED variará su intensidad lumínica en función del valor que esté aportando el potenciómetro a nuestra entrada analógica, esto es el llamado efecto fading (desvanecimiento), puede observarse que se ha elegido la salida número 9, ya que esta sí que es compatible con la opción PWM como se explica algo más arriba.
Veamos el código al completo:
Tutorial Arduino # 0003 - Efecto Fading
En este tutorial, mostramos como se desvanece un LED
en función del valor recogido en un entrada analógica.
pinMode(pinLed, OUTPUT); // Establecemos el pin como salida.
// Establecemos el valor analógico para la salida PWM
analogWrite(pinLed, valorSensor / 4);
// Detenemos el programa durante 30 milisegundos:
Podemos observar una nueva instrucción:
Esta será la instrucción que nos permitirá emular una señal analógica a partir de una digital en nuestros circuitos, como explicaba algo más arriba.
El rango de salida de esta instrucción varia de 0 a 255, siendo 0 = 0v y 255 = 5v, por lo que es tan sencillo como introducir un valor determinado para la tensión de salida que nosotros queramos conseguir, si quisiéramos conseguir 2,5v el valor a asignar sería 127.
Así que lo único que debemos hacer es transformar mediante una simple operación matemática la señal tomada en nuestro potenciómetro 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 deducción, y la línea de código por si no caéis en cuenta.
Esta es una manera algo tosca para realizar esta conversión, más adelante veremos como hay una instrucción que hace esto por nosotros.
Bueno, eso es todo por el momento!!
Si necesitáis algún tipo de aclaración no dudéis en dejar un comentario!!
mar, 26 - 2012
Inicia sesión para responder Gracias por tan buenos tutoriales, me han ayudado a entender mejor y de una manera ordenada el funcionamiento y programación de la placa Arduino.
Inicia sesión para responder No comprendía, el delay(30); en el ejemplo “Efecto Fading”, pues si no colocaba esa declaración aparentemente no ocurría nada; fui aumentando poco a poco el tiempo y pude ver como empezaba a cambiar el comportamiento de lectura del sensor.
abr, 2 - 2012
Inicia sesión para responder super bueno los tutoriales muchas gracias
muchos exitos Leandro
oct, 23 - 2012
Inicia sesión para responder muy bueno el aporte gracias, tambienqueria saber si podes llegar a saber algo de conectar sensores piezoelectricos a la placa arduino como para fabricar una bateria electronica y si tendrias algun esquema de conexion muchisimas gracias y muy buenos aportes saludos
oct, 25 - 2012
Inicia sesión para responder Hola!
Échale un ojo a esto a ver si te sirve.
http://www.arduino.cc/es/Tutorial/KnockSensor
nov, 2 - 2012
Inicia sesión para responder muchas gracias por la respuesta lo voy a probar.
En lo que estoy trabado ahora es con el hit hat de la bateria electronica si alguien tendria algun esquema sencillo de como hacerlo me ayudaria mucho en mi proyecto saludos y muchas gracias!!!!!
oct, 27 - 2012
Inicia sesión para responder muy bueno siempre los tutos…. este en particular me abre una puerta para un proyecto que quiero empezar…. en cuanto tenga algo lo comparto. muchas gracias
Txibu
nov, 1 - 2012
Inicia sesión para responder Gracias por los tutoriales, són geniales para inciarse. Una pregunta, al ser una resolución de 10bits, 1024 posibles valores, el rango no sería de 0 a 1023? Quizá se os haya colado un error en el artículo
Inicia sesión para responder Uf! Corregido! Muchas gracias por tu apreciación!!
nov, 18 - 2012
Inicia sesión para responder Genial. Un tutorial fantástico. Muchas gracias.
dic, 5 - 2012
Inicia sesión para responder Hola que tal excelente tutorial me abrio el panorama, pero tengo una duda y problema, estoy trabajando con un cicuito de sensor infrarrojo y me arroja un valor maximo de 4V obviamente cuando coloco algo entre el led y el fotodetector el voltaje disminuye y necesito que Arduino me lea este voltaje para yo poder transferir a processing y ya mostrarlo mas graficamente. Pero no logro comprender como hacerlo, como logro que Arduino lea un valor de voltaje y lo conserve tal cual para yo llamarlo desde processing. Agradeceria tu respuesta. Saludos
Inicia sesión para responder Hola, en este tutorial se hace exactamente eso, no? Capturamos la variación de tensión por una entrada analógica, y la mandamos a una variable, luego esa variable ya la puedes tratar como tu quieras.
Claudia Pincheira
dic, 12 - 2012
Inicia sesión para responder Excelentes tutoriales! me han servido mucho para empezar a interactuar con mi placa Arduino.
Creo haber encontrado un typo en el artículo, cuando dices “…con una resolución de 10 bit, lo que nos da 210 (1024) valores…” creo que debe decir 2^10 y no 210.
Muchas gracias por los aportes! Están buenísimos!
dic, 16 - 2012
Inicia sesión para responder Umm.. a mi me sale bien! Pero gracias!
ene, 13 - 2013
Inicia sesión para responder A mí también me sale 210 (W7, Firefox), le dí un par de vueltas y luego tiré para adelante y seguí leyendo. Es lo que tiene ser un poco patán, no entiendes pero sigues, a ver si luego lo pillas XD
feb, 13 - 2013
Inicia sesión para responder Gracias!!!!!!
Antonio Ranea
feb, 15 - 2013
Inicia sesión para responder Hola Pablo, lo primero que quiero es dar la gracias por las explicaciones sirven de mucha ayuda, yo soy un novato en esto y estoy empezando a realizar cosas con mi Mega 2560. El ejemplo de atenuar la intensidad me ha gustado una preguntilla por que se ponen los 30 milisegundos de retraso para que sirve este parametro, un saludo y gracias de antemano.
Es simplemente para que la velocidad de cada ciclo (loop) se reduzca un poco, puedes probar a quitarlo y ver que pasa! Un delay, no es más que: Espera X milisegundos sin hacer nada.
lauranadelrio
feb, 17 - 2013
Inicia sesión para responder Buenos dias
estoy intentando iniciarme en arduino,pero se ve que soy muy torpe,,sigo los manuales pero esque hay muchas que no entiendo como esto:
http://www.arduteka.com/wp-content/uploads/2011/11/Proyecto-Arduino-0003-Protoboard.jpg
veo la representacion,pero no entiendo como siguen los cables,,aparecen por un lado,,desaparecen,aparecen por otro lado,nose si son el mismo cable o esque hay que pinchar otro,,please una ayuda a esta aprendiz!!
feb, 18 - 2013
Échale un vistazo al tutorial sobre la protoboard! http://www.arduteka.com/2011/11/tutorial-arduino-mi-primera-protoboard/
RONAL JR.
feb, 19 - 2013
Inicia sesión para responder muy bueno el tutorial me sacaste de un apuro, oye amigo y cual es esa instruccion que mensionas para hacer la conversion en lo que se refiere a la salida PWM, te lo agradeceria mucho…..gracias!!!
mar, 21 - 2013
Pásate por el foro http://www.arduteka.com/foro y allí, entre todos, intentaremos solucionar tus dudas!
feb, 21 - 2013
Inicia sesión para responder cual es la otra instrucion que mencionas al final del articulo???
feb, 22 - 2013
Inicia sesión para responder Hola! Muy buenos tutoriales, así parece fácil y todo. Sólo hay una cosa que no me queda clara: en este programa inicializas el pinLed ”pinMode(pinLed, OUTPUT);” pero no el pinSensor. ¿En qué casos declaras un pin como input/output en la función setup y en cuáles no?
feb, 24 - 2013
Inicia sesión para responder Excelente. Muy claro para los que estamos empezando con esto. Gracias
Comparativa - El diodo LED » Arduteka
[...] lugar, viene bien recordar la estructura interna de un diodo LED, para ello, podéis recordar ESTE TUTORIAL donde explicamos … Tutorial Arduino #0006 - El Chupitometro
[...] Salida PWM [...] Comparativa - Pulsadores para proyectos » Arduteka
[...] esas señales para interpretar qué pulsador está accionado en cada momento. También os dejo un link a este tutorial … Comparative: Push Buttons, Arcade Buttons and Keypads
[...] of how to filter a signal to interpret which button is activated in each moment. We also share a … Arduteka » Arduteka, tu espacio web donde aprender a realizar proyectos Arduino desde cero, tutoriales, noticias, componentes y mucho más!
[...] # El diodo LED [...] El Servomotor | ARDUINO ACADEMY
[...] señal que introducimos al servo, es una señal parecida, que no igual, a la del tipo PWM que ya conocemos, … Deja una respuesta Cancelar respuesta
abr17 Escaneado 3D de restos arqueológicos fenicios en Cádizpublicado por pgarcia
abr08 Consigue la miniatura 3D de tu cosplay en el Salón del Manga de Jerezpublicado por pgarcia
abr07 Escanéate gratis en 3D en Valdepeñaspublicado por pgarcia
Filamento ABS 3mm Rojo	19.90 €Últimos TweetsCurioso diseño de un bebé articulado listo para imprimir en 3D, ahora disponible en Shapeways. http://t.co/IrxeZzLMNG17/04/2015 11:10:08 Tr3sDland Jerez escanea restos arqueológicos fenicios en el Museo de Cádiz para un proyecto de investigación. http://t.co/vN6EGgtzWi17/04/2015 09:36:11 Recursos útiles: cinco webinar gratuitos 'online' para iniciarse en la impresión 3D. http://t.co/1RvrwvzcDT17/04/2015 07:34:13 Síguenos en Twitter