Beruflich Dokumente
Kultur Dokumente
INICIO
OPE N SOU RC E
I MPRE SI N 3D
N OTI C I A S
Y OU TU BE
C U RSOS Y TA L L E RE S
A RDUINO UNO, ENT RA DA A NA LGICA , LED, PROY ECT O, PW M, REIST ENCIA , T UT ORIA L
FORO
34
by Pablo Murillo
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:
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
Part e 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
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/*
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.
*/
int pinSensor = A0;
int pinLed = 9;
int valorSensor = 0;
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);
}
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 210 (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
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
/*
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;
int pinLed = 9;
int valorSensor = 0;
void setup() {
pinMode(pinLed, OUTPUT); // Establecemos el pin como salida.
}
18
19
20
21
22
23
24
25
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);
}
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
Esta es una manera algo tosca para realizar esta conversin, ms adelante veremos como hay una instruccin que hace esto por nosotros.
Bueno, eso es todo por el momento!!
Si necesitis algn tipo de aclaracin no dudis en dejar un comentario!!
Hasta pronto!!!
Comprtelo:
Mename
Twitter 45
Facebook 52
Sobre el autor...
Pablo Murillo. Tcnico electrnico apasionado por la tecnologa y el mundo de la impresin 3D. Comprometido en difundir el
movimiento maker en cualquiera de sus vertientes. Fundador de Arduteka.com Colaborador en Arduino.cc
34 Comments
Pingback: El Servomotor | ARDUINO ACADEMY
Gatoloco65
Responder
Gracias por tan buenos tutoriales, me han ayudado a entender mejor y de una manera ordenada el funcionamiento y programacin de la
placa Arduino.
Gatoloco65
Responder
No comprenda, el delay(30); en el ejemplo Efecto Fading, pues si no colocaba esa declaracin aparentemente no ocurra nada; fui
aumentando poco a poco el tiempo y pude ver como empezaba a cambiar el comportamiento de lectura del sensor.
miguel
Responder
Pingback: Arduteka Arduteka, tu espacio web donde aprender a realizar proyectos Arduino desde cero, tutoriales, noticias, componentes y mucho
ms!
Pingback: Comparative: Push Buttons, Arcade Buttons and Keypads
Pingback: Comparativa - Pulsadores para proyectos Arduteka
Pingback: Tutorial Arduino #0006 - El Chupitometro
Leandro
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
Pablo Murillo
Responder
Hola!
chale un ojo a esto a ver si te sirve.
http://www.arduino.cc/es/Tutorial/KnockSensor
Un saludo!!
Leandro
Responder
nicko
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
Responder
Gracias por los tutoriales, sn geniales para inciarse. Una pregunta, al ser una resolucin de 10bits, 1024 posibles valores, el rango no sera
de 0 a 1023? Quiz se os haya colado un error en el artculo
Pablo Murillo
Responder
juan carlos
Responder
Pedro Aldo
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
Pablo Murillo
Responder
Hola, en este tutorial se hace exactamente eso, no? Capturamos la variacin de tensin por una entrada analgica, y la mandamos a
una variable, luego esa variable ya la puedes tratar como tu quieras.
Claudia Pincheira
Responder
Excelentes tutoriales! me han servido mucho para empezar a interactuar con mi placa Arduino.
Creo haber encontrado un typo en el artculo, cuando dices con una resolucin de 10 bit, lo que nos da 210 (1024) valores creo
que debe decir 2^10 y no 210.
Muchas gracias por los aportes! Estn buensimos!
Pablo Murillo
Responder
Caresth
Responder
A m tambin 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 patn, no entiendes pero sigues, a ver si luego lo pillas XD
Ludwing
Responder
Gracias!!!!!!
Antonio Ranea
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.
Pablo Murillo
Responder
Hola!
Es simplemente para que la velocidad de cada ciclo (loop) se reduzca un poco, puedes probar a quitarlo y ver que pasa!
lauranadelrio
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!!
Pablo Murillo
Responder
Hola!
chale un vistazo al tutorial sobre la protoboard!
http://www.arduteka.com/2011/11/tutorial-arduino-mi-primera-protoboard/
Un saludo!
RONAL JR.
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!!!
Pablo Murillo
Responder
Hola!
Psate por el foro http://www.arduteka.com/foro y all, entre todos, intentaremos solucionar tus dudas!
Un saludo!
jose
Responder
Pablo Murillo
Responder
Hola!
Psate por el foro http://www.arduteka.com/foro y all, entre todos, intentaremos solucionar tus dudas!
Un saludo!
Lpez
Responder
Hola! Muy buenos tutoriales, as parece fcil y todo. Slo 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 funcin setup y en cules no?
Pablo Murillo
Responder
Hola!
Psate por el foro http://www.arduteka.com/foro y all, entre todos, intentaremos solucionar tus dudas!
Un saludo!
Santi
Responder
Excelente. Muy claro para los que estamos empezando con esto. Gracias
Djanos un comentario!
Name *
Email *
Website
captcha
Anti-Spam *
Publicar comentario
Sitios de inters
Arduino.cc
Cursos y Talleres
Impresoras 3D y Escner 3D
Meneame
Sicnova 3D