You are on page 1of 18

Plataforma ARDUINO Sesin 3 CEFIRE

INDICE

Sesin 3 (5 horas)

1.- Salidas digitales. Transistor Rel.Zumbador.

2.- Lectura de entradas Analgicas. Potencimetro.

3.- Sensor de temperatura LM35D.

4.- Ejemplo de aplicacin.

1.-Salidas digitales. Transistor Rel. Zumbador.


Al configurar un GPIO como salida con la funcin pinMode (), lo estamos configurando
en un estado de baja impedancia. Por tanto, un pin configurado de esta manera, ser capaz de
suministrar una gran cantidad de corriente. Los pines digitales del Atmega son capaces de
suministrar o absorber hasta un mximo de 40mA, (200 mA mximo entre Vcc y GND) aunque
no es recomendable que trabajen con ms de 20mA. Si excedemos los lmites de corriente
mxima en un pin, puede quedar destruido o incluso inutilizar por completo el
microcontrolador.

No es habitual conectar directamente a los pines digitales actuando como salida,


cargas que no sean un pequeo dodo LED. Para actuar sobre elementos actuadores, se
utilizan elementos auxiliares como transistores, rels, optoacopladores o transistores Mosfet.

a) Salida digital mediante transistor a rel:

Utilizamos un transistor NPN para aumentar la corriente de salida del pin y poder
excitar el rel. Primero medimos la resistencia de la bobina del rel. La resistencia de la bobina
del rel que usaremos es RL=320 . Como necesita una tensin de 12V:


= = 37.5

Es decir, nuestro rel necesita 37.5 mA y


12V para bascular. Esta corriente ser la que
circular por el colector del transistor = =
37.5 .

El dodo est para absorber las descargas


de corriente de la bobina cuando cambia de estado.
Recordemos que en una bobina, su tensin

varia en funcin de la corriente como =
Segn el datasheet del 2N2222 sabemos
que tiene una corriente mxima de colector de
ICmax=800 mA, por tanto no hay problema. La
tensin entre colector y emisor mxima debe ser
como mnimo 12V y segn el datasheet es de 40V.

Ricardo Carpio Richart IES JAUME I Pgina 1


Plataforma ARDUINO Sesin 3 CEFIRE

Para alcanzar la corriente de 37.5 mA en el colector, necesitaremos una corriente de


.
base = = hFE es la ganancia en corriente continua y para ese valor de corriente de

colector, tiene un valor mnimo de entre 75 y 100. Ponindonos en el peor de los casos hFE=75,
tenemos una corriente de base

37.5
= = 0.5 = 500
75
Esta es la corriente que debe suministrar nuestro pin del microcontrolador Atmega. Para
este valor de corriente, podemos obtener un valor de la resistencia de base R1:

5 0.6
= = = 8800 8K2
0.5

Con este valor de R1, nos aseguramos que tendremos una corriente en la base de un
poco mas de 0.5mA y por tanto, una corriente de colector un poco mayor de 37.5 mA. Ms que
suficiente para excitar nuestro rel. Podemos montar el siguiente conexionado y comprobar el
funcionamiento del sistema con el cdigo que acompaa al esquema.

Ricardo Carpio Richart IES JAUME I Pgina 2


Plataforma ARDUINO Sesin 3 CEFIRE

Si queremos un retardo a la desconexin, por ejemplo, podemos probar este otro


cdigo:

b) Salida digital con Optoacoplador sin rel:


En ocasiones necesitamos que la conexin y desconexin de una salida digital,
se realice a una frecuencia alta. El rel, gracias a sus elementos internos
electromecnicos, no podr conmutar tan rpido. En estos casos podemos prescindir del
rel (perdiendo aislamiento) y conectar la carga directamente a la salida del
Optoacoplador:

Evidentemente la carga no podr tener el consumo de corriente que soportaba


antes el rel. Utilizaremos un pequeo indicador que necesita 24V pero unos escasos 20
mA para funcionar.

Ricardo Carpio Richart IES JAUME I Pgina 3


Plataforma ARDUINO Sesin 3 CEFIRE

Aunque en la siguiente sesin hablaremos de las salidas PWM de nuestra placa Arduino,
vamos a realizar un control PWM manual sobre la lmpara indicadora de 24V para conseguir
una regulacin de su intensidad. Slo vamos a utilizar un pulsador para la conexin y la
desconexin y su propia regulacin en los dos sentidos.

Ricardo Carpio Richart IES JAUME I Pgina 4


Plataforma ARDUINO Sesin 3 CEFIRE

Ricardo Carpio Richart IES JAUME I Pgina 5


Plataforma ARDUINO Sesin 3 CEFIRE

En este ejemplo hemos visto como tratando de forma adecuada un pulsador, podemos
conseguir que una nica entrada digital, tenga varias funciones como aumentar el brillo de la
lmpara, disminuirlo o fijarlo en un determinado valor. Tambin observamos la importancia de
crear funciones para estructurar mejor las tareas a realizar.

La funcin modular, permite realizar un control PWM sobre un pin de salida digital, pero
necesita ejecutarse de forma continua y el tiempo invertido por el microcontrolador en el resto
de cdigo, impide un comportamiento adecuado. En la siguiente sesin aprenderemos a realizar
un control PWM por hardware que no necesita de toda la atencin del microcontrolador para
realizar de forma correcta la tarea.
c) Zumbador piezoelctrico.

Un zumbador piezoelctrico, es un simple disco piezo,


que consiste en una placa cermica con una capa metlica. Los
materiales piezoelctricos (polister o cermica), se deforman
cuando se les aplica una tensin entre sus caras. Estas
deformaciones producen un sonido. Si el disco es controlado
por un circuito oscilante externo se habla de un transductor
pizoelctrico. Si el circuito oscilador est incluido en la carcasa
se lo denomina zumbador piezoelctrico.Los generadores de
sonidos piezoelctricos son aptos para el diseo de alarmas y
controles acsticos de estrecho rango de frecuencia. P.e. en aparatos domsticos y de
medicina.
Los zumbadores piezoelctricos estn disponibles en diversos tamaos con tonos que
van desde suaves hasta agresivamente fuertes. Se ofrecen en las frecuencias ms comunes
entre 20 Hz y 20KHz. El rango de temperatura de operacin es de -40C hasta +120C. Los
voltajes nominales estn entre 3 V y 12 V.
Nuestro modelo lo podemos conectar a un pin de Arduino directamente (ver el
datasheet) y su conexin (tiene polaridad) es tan simple como esto:

Ricardo Carpio Richart IES JAUME I Pgina 6


Plataforma ARDUINO Sesin 3 CEFIRE

Tendremos que generar una seal cuadrada de una determinada frecuencia, para que
nuestro buzzer, emita un sonido de esa frecuencia. Si queremos reproducir la escala musical
por ejemplo tendremos en cuenta la siguiente tabla:

Nota Frecuencia Periodo (us) Anchura del pulso (us)


do 261 Hz 3830 1915
re 294 Hz 3400 1700
mi 329 Hz 3038 1519
fa 349 Hz 2864 1432
sol 392 Hz 2550 1275
la 440 Hz 2272 1136
si 493 Hz 2028 1014
do 523 Hz 1912 956

Si por ejemplo queremos reproducir un LA fundamental, su frecuencia debe ser


440Hz. Su perodo ser por tanto de 2272,72 microsegundos. Necesitamos generar una seal
cuadrada de este tipo:

La duracin de la nota depender de lo largo que sea el tren de pulsos. Esta duracin la
podemos controlar mediante el tiempo o mediante un contador de pulsos como en el
siguiente cdigo de ejemplo.

Ricardo Carpio Richart IES JAUME I Pgina 7


Plataforma ARDUINO Sesin 3 CEFIRE

En el anterior cdigo, si el microcontrolador tuviera que realizar alguna tarea mientras


reproduce las notas musicales, observaramos que las notas se distorsionan. Esto es debido a
que mientras realiza otras tareas consume tiempo y se modificaran los tiempos de LOW y
HIGH, en los trenes de pulsos.
Arduino nos proporciona para resolver este problema la funcin tone () y noTone ().

tone(pin, frecuencia, duracion);

Donde pin, es el pin donde hemos cableado el zumbador. Frecuencia es la frecuencia en Hz


que queremos generar y duracin, la duracin de la seal en milisegundos. Este ltimo
parmetro es opcional. Si no utilizamos este parmetro y una vez generada la seal, se
reproducir hasta que se llame a la funcin:
noTone(pin);

Esta funcin no tiene efecto alguno si previamente no se haba generado la seal con
la funcin tone(). Podemos utilizar esta funcin en nuestros cdigos cuando queramos emitir
una seal acstica por ejemplo de aceptacin de activacin de pulsador:
Podemos realizar por ejemplo.

Ricardo Carpio Richart IES JAUME I Pgina 8


Plataforma ARDUINO Sesin 3 CEFIRE

2.- Lectura de entradas Analgicas. Potencimetro.


El microcontrolador Atmega de nuestra placa Arduino, tiene un conversor
analgicodigital de 6 canales con una impedancia de entrada de 100My una resolucin de 10
bits. Eso significa que desde el programa, cuando hagamos una lectura analgica mediante la
funcin analogRead (pin), obtendremos un valor entero entre 0 y 1023. Cuando la tensin en el
pin analgico sea 0V, obtendremos una lectura de 0 y cuando tengamos la tensin de referencia
(por defecto 5V pero podra ser de 1.1V o tensin externa), obtendremos una lectura de 1023.

Tendremos pues una resolucin de:


= = = 0.00488 = 4.88analogReference (DEFAULT)

.
= = = 0.00107 = 1.07analogReference (INTERNAL)

. ( )
=
=
= 0.00244 = 2.44analogReference (EXTERNAL)

Es decir, cuando mayor sea la tensin de referencia utilizada, menor resolucin


dispondr el sistema. Lo mas conveniente es adaptar esta tensin a la tensin analgica que
queramos leer. Si tenemos una que leer una tensin analgica que varia entre 0V y 2V, lo ms
conveniente seria utilizar una tensin de referencia externa de 2V. De esta manera, los 1024
estados diferentes, se repartirn de forma uniforme entre los 2V a mostrear.

En la placa Arduino los 6 canales analgicos, corresponden a los pines A0,A1,A5 que
como vimos en la primera sesin, tambin pueden ser tratados como GPIO y trabajar como
entrada digital o salida digital. Su enumeracin, en ese caso, es 14,15,19. Tenemos que tener
la precaucin, en caso de tratarlos como pines digitales y haber activado la resistencia de pullup
o haber escrito un valor HIGH en el pin, de desconectar la resistencia de pullup o reescribir un
estado digital LOW y configurarlo como entrada digital, antes de usarlos en una lectura
analgica. Serecomienda hacer un pequeo delay (10) antes de realizar una lectura
analgica en un pin analgico, usado digitalanteriormente como digital, o entre dos
lecturas analgicas consecutivas.
Podemos encontrarnos en la necesidad de leer el valor analgico de un potencimetro
controlado manualmente, de un sensor que nos presente una resistencia variable en funcin de
algn parmetro (LDR) o de un sensor que nos proporcione una tensin analgica en funcin de
un parmetro determinado (sensor de temperatura LM35).
a) Lectura de un potencimetro con tensin de referencia de 5V interna:
Vamos a realizar una lectura de la entrada analgica 0 (entre 0V y 5V) con
analogReference (DEFAULT)y mostraremos por el LCD 3 valores distintos:
a) El valor devuelto por analogRead () que variar entre 0 y 1023.
b) La tensin en voltios que variar entre 0V y 5V.
c) El tanto por cien que variar entre 0% y 100%.

Ricardo Carpio Richart IES JAUME I Pgina 9


Plataforma ARDUINO Sesin 3 CEFIRE

Lectura=714
v=3.49V 69%

200K

Ricardo Carpio Richart IES JAUME I Pgina 10


Plataforma ARDUINO Sesin 3 CEFIRE

b) Lectura de una LDR con tensin de referencia externa:


La LDR es una resistencia cuyo valor vara en funcin de la luz que incide sobre
ella.Depende del modelo, puede presentar una resistencia entre sus extremos con plena
intensidad de luz, 300 y en oscuridad 5 M. Usaremos esa resistencia variable del sensor,
para crear una tensin que pueda leer el microcontrolador.
En esta ocasin utilizaremos analogReference (EXTERNAL) (una tensin de referencia
exterior) y variable para que podamos comprobar el efecto de la variacin de esta tensin, en la
lectura analgica.

Lectura=801
Intensidad= 79%

Antes de empezar, hay que tener precaucin, al usar una tensin de referencia externa,
de que esta no sea menor de 0Vni tampoco mayor de 5V. Tampoco debemos conectar una
tensin directa al pin AREF, si no usamos la instruccin analogReference (EXTERNAL). Estas
acciones pueden daar el microcontrolador.
Si necesitamos cambiar la tensin de referencia durante la ejecucin del programa,
como por ejemplo si tenemos que leer dos sensores y nos interesa que uno se lea con la tensin
de referencia de 5V (analogReference (DEFAULT) y el otro con una tensin de referencia de 3V
externa (analogReference (EXTERNAL)), deberemos conectar la tensin de referencia externa a
travs de una resistencia en serie de 5K. Con esto al usar la tensin de referencia interna, no
daaremos el microcontrolador, aunque la tensin de referencia real no ser exactamente la que
hemos conectado sino un poco menor.
En ocasiones puede ser til conectar un condensador a masa desde la tensin externa
para librarnos de ruido electromagntico.
Si por ejemplo conectamos una tensin al pin AREF de 3V a travs de una resistencia de
5K, esta resistencia junto con una interna del microcontrolador de 32K, formaran un divisor de
tensin que desvirtualizaria la tensin de referencia real, de la siguiente manera:

32
= = 2.59
32 + 5

Tener en cuenta tambin que la primera lectura realizada, despus de cambiar la


referencia analgica, puede ser errnea y debe ser descartada.

Ahora carguemos el siguiente cdigo en nuestra placa Arduino:

Ricardo Carpio Richart IES JAUME I Pgina 11


Plataforma ARDUINO Sesin 3 CEFIRE

Observamos que cuando tenemos una intensidad medida del 50% o menos, conectamos
una salida digital y cuando la intensidad medida es mayor del 50%, desconectamos la salida
digital. Hemos escogido la salida 13 ya que tiene el led indicador ya incorporado.
Con el potencimetro proporcionando una tensin de 5V al pin AREF y con un grado
de iluminacin dada, observamos que acercando la mano a la LDR, a una determinada distancia,
la salida digital 13 se activa. Si disminuimos el valor del potencimetro por ejemplo hasta que
tengamos 2,5V en el pin AREF, deberemos acercar ms la mano a la LDR, para hacer bascular
la salida.
En el siguiente punto, veremos como hacer uso del sensor de temperatura LM35DZ
usando la instruccin analogReference (INTERNAL) i trabajar con 1,1V de tensin de referencia.

Ricardo Carpio Richart IES JAUME I Pgina 12


Plataforma ARDUINO Sesin 3 CEFIRE

3.- Sensor de temperatura LM35D.


El LM35 es un sensor de temperatura integrado cuya tensin de
salida es linealmente proporcional a la temperatura en C (grados
centgrados). Proporciona una tensin de 10mV por cada grado centgrado.
Por tanto a 25C, nos proporcionar una tensin en su pin de salida de 0.25V.
El LM35 no requiere ninguna calibracin externa o ajuste para proporcionar
una precisin tpica de 0.25 C a temperatura ambiente y 0.75 C a lo
largo de su rango de temperatura (de -55 a 150 C depende del modelo consultar su datasheet).
El dispositivo se ajusta y calibra durante el proceso de produccin. La baja impedancia
de salida, la salida lineal y la precisa calibracin inherente, permiten la creacin de circuitos de
lectura o control especialmente sencillos.
Requiere slo 60 A para alimentarse, y bajo factor de auto-calentamiento, menos de
0,1 C en aire esttico.
Resumen caractersticas:
Calibrado directamente en grados Celsius (Centgrados)
Factor de escala lineal de +10 mV / C
0,5C de precisin a +25 C
Rango de trabajo: -55 C a +150 C
Bajo coste
Funciona con alimentaciones entre 4V y 30V
Menos de 60 A de consumo

Vamos a realizar una lectura de la temperatura utilizando nuestra placa Arduino con una
tensin de referencia interna de 1.1V. Fijmonos que 1.1V correspondera a una temperatura
de 110C y no vamos a llegar a ella. Montemos el siguiente conexionado y carguemos en
nuestra placa, el cdigo siguiente:

Temperatura=26C
Tmax=28 Tmin=25

Ricardo Carpio Richart IES JAUME I Pgina 13


Plataforma ARDUINO Sesin 3 CEFIRE

Fijmonos que en el setup, realizamos una primera lectura y la descartamos. Esto es as


porque la primera lectura suele ser unos grados por debajo de la lectura realizada una vez el
sistema se ha estabilizado. Si no tuviramos que registrar la temperatura mxima y mnima, esto
no seria necesario. Podemos ejecutar el cdigo sin esta instruccin en el setup y observar que
pasa.
Otro detalle importante es la iniciacin de las variables para guardar la temperatura
mxima y mnima con los valores extremos que el sensor puede medir. Esto es necesario para
que en la primera iteracin de la funcin loop, los valores de temperatura mxima y mnima
deben ser conocidos.

Ricardo Carpio Richart IES JAUME I Pgina 14


Plataforma ARDUINO Sesin 3 CEFIRE

4.- Ejemplo de aplicacin.


En este ejemplo vamos a disear un sistema para controlar la temperatura a travs de un
calefactor y un sensor de temperatura LM35. Al arrancar el sistema, nos pedir a travs del LCD
y con la ayuda de un potencimetro y un pulsador de confirmacin, la temperatura mxima y
mnima.
Una vez determinadas la temperatura mxima y mnima, el sistema conectar una salida
digital que activar un rel que a su vez, activar el calefactor, cuando la temperatura leda est
por debajo de la almacenada como mnima. Tambin indicar el estado del calefactor en el LCD
y mediante otra salida digital que actuar sobre un led indicador. El sistema desconectar el
calefactor cuando la temperatura leda est por encima de la almacenada como mxima.
Fijmonos en el siguiente conexionado:

Temperatura=26C
Estado R=ON

Utilizaremos las estructuras ya conocidas para leer un pulsador, leer un potencimetro y


activar una salida digital. Para la lectura del sensor de temperaturas vamos a utilizar una matriz
de nmeros reales para realizar una lectura cada 100 ms y cada medio segundo, realizar la
media de las 5 lecturas realizadas para mostrar el valor de temperatura y utilizarlo para el
procesamiento del resto de acciones.

Ricardo Carpio Richart IES JAUME I Pgina 15


Plataforma ARDUINO Sesin 3 CEFIRE

Fijmonos en el cdigo hasta ahora. Hemos declarado una matriz de nmeros reales
(float) de tamao 5. En la funcin setup (), hacemos una primera lectura que desechamos y
despus llamamos a dos funciones para pedir al usuario la temperatura mxima y la mnima.
El cdigo de estas funciones las pondremos despus de la funcin principal, loop ().

Ricardo Carpio Richart IES JAUME I Pgina 16


Plataforma ARDUINO Sesin 3 CEFIRE

Ricardo Carpio Richart IES JAUME I Pgina 17


Plataforma ARDUINO Sesin 3 CEFIRE

Observamos que en esta ocasin, mientras se ejecuta la funcin principal, se llama a dos
funciones diferentes para mostrar informacin por el LCD. Mientras no se active el pulsador, se
muestra informacin de ejecucin, es decir, mostramos la temperatura leda en tiempo real y el
estado del calefactor. Al presionar el pulsador, se muestra los valores de configuracin,
temperatura mxima y temperatura mnima. Se deja para el lector avispado la tarea de modificar
el cdigo de forma que tambin sea posible modificar estos dos valores en tiempo de ejecucin.

Ricardo Carpio Richart IES JAUME I Pgina 18