Top Banner
Plataforma ARDUINO Ricardo Carpio Richart INDICE Sesión 2 (5 horas) 1.- Lectura de entradas digita TrigerSmith. Opto acoplad 2.- Sensor QRD1114. 3.- LCD 16x2 matricial serie. F 4.- Ejemplo de aplicación. 1.-Lectura de entr Una señal digital es aq Generalmente, estos valores interpretar señales que varían realicemos, leer una señal dig o a través de un contacto que Un pin de Arduino está co pinMode () para configurarlo impedancia (alrededor de 100 estado. Esto nos permitirá ca otra parte, también nos induc conectado al pin. Esto es porq por ruido electromagnético p tanto una lectura errónea del Necesitamos fijar un esta se puede conseguir conectand pulldown o a 5V mediante un suelen ser de entre 10K y 20K integradas que se activan por Veamos ahora las diferen nuestro Arduino: Sesión 2 IES JAUME I ales. Rebotes. dor. Funciones. radas digitales.Rebotes. quella que toma dos valores diferentes de tensió son de 0V y 5V pero podemos encontrarnos con n entre 0V y 24V por ejemplo. En cualquier proye gital, es más que frecuente. Ya sea a través de un e bascule, obedeciendo a otra señal, mecánica o onfigurado como entrada por defecto, es decir, n como entrada. Así, el pin se encuentra en estad 0M) por tanto necesita muy poca corriente pa ablear diferentes dispositivos y nos facilitará su le cirá a lecturas erróneas cuando no tengamos nin que con alta impedancia de entrada, con poca co por ejemplo, se puede generar una gran caída de l estado del pin. ado para cuando no tengamos conectado ningún do directamente el pin a masa mediante una res na resistencia de pullup. Valores típicos de estas K. El microcontrolador Atmega dispone de resiste r software como mas adelante veremos. ntes formas de cablear una entrada digital, por ej CEFIRE Página 1 ón. la necesidad de ecto que n pulsador manual no. no necesitas usar do de alta ara cambiar de ectura,pero por ngún dispositivo orriente inducida tensión y por dispositivo. Esto sistencia de resistencias encia de pullup jemplo al pin 3 de
16

Curso Arduino Cefire Sesión 3

Jan 19, 2016

Download

Documents

israaeellll
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Curso Arduino Cefire Sesión 3

Plataforma ARDUINO Sesión 2

Ricardo Carpio Richart

INDICE

Sesión 2 (5 horas)

1.- Lectura de entradas digitales. Rebotes.

TrigerSmith. Opto acoplador.

2.- Sensor QRD1114.

3.- LCD 16x2 matricial serie. Funciones.

4.- Ejemplo de aplicación.

1.-Lectura de entradas digitales

Una señal digital es aquella que toma

Generalmente, estos valores son de 0V y 5V pero podemos encontrarnos con la necesidad de

interpretar señales que varían

realicemos, leer una señal digital, es más que frecuente. Ya sea a través de un pulsador manual

o a través de un contacto que

Un pin de Arduino está configurado

pinMode () para configurarlo como entrada.

impedancia (alrededor de 100M

estado. Esto nos permitirá cablear diferentes dispositivos y nos facilitará su lec

otra parte, también nos inducirá a

conectado al pin. Esto es porque con alta impedancia de entrada, con poca corriente inducida

por ruido electromagnético por ejemplo, se puede generar una gran caída de tensión y por

tanto una lectura errónea del estado del pin.

Necesitamos fijar un estado para cuando no tengamos conectado ningún dispositivo. Esto

se puede conseguir conectando directamente el pin a masa me

pulldown o a 5V mediante una resistencia de

suelen ser de entre 10K y 20K. El microcontrolador Atmega dispone de

integradas que se activan por software como mas a

Veamos ahora las diferentes formas de

nuestro Arduino:

Plataforma ARDUINO Sesión 2

IES JAUME I

Lectura de entradas digitales. Rebotes.

Opto acoplador.

LCD 16x2 matricial serie. Funciones.

Lectura de entradas digitales.Rebotes.

Una señal digital es aquella que toma dos valores diferentes de tensión

Generalmente, estos valores son de 0V y 5V pero podemos encontrarnos con la necesidad de

n entre 0V y 24V por ejemplo. En cualquier proyecto que

s, leer una señal digital, es más que frecuente. Ya sea a través de un pulsador manual

o a través de un contacto que bascule, obedeciendo a otra señal, mecánica o no

Un pin de Arduino está configurado como entrada por defecto, es decir, no necesitas usar

para configurarlo como entrada. Así, el pin se encuentra en estado de alta

100MΩ) por tanto necesita muy poca corriente para cambiar de

. Esto nos permitirá cablear diferentes dispositivos y nos facilitará su lec

, también nos inducirá a lecturas erróneas cuando no tengamos ningún dispositivo

conectado al pin. Esto es porque con alta impedancia de entrada, con poca corriente inducida

por ejemplo, se puede generar una gran caída de tensión y por

tanto una lectura errónea del estado del pin.

un estado para cuando no tengamos conectado ningún dispositivo. Esto

se puede conseguir conectando directamente el pin a masa mediante una resistencia de

o a 5V mediante una resistencia de pullup. Valores típicos de estas resistencias

suelen ser de entre 10K y 20K. El microcontrolador Atmega dispone de resistencia de pull

que se activan por software como mas adelante veremos.

las diferentes formas de cablear una entrada digital, por ejemplo al pin 3 de

Plataforma ARDUINO Sesión 2 CEFIRE

Página 1

dos valores diferentes de tensión.

Generalmente, estos valores son de 0V y 5V pero podemos encontrarnos con la necesidad de

En cualquier proyecto que

s, leer una señal digital, es más que frecuente. Ya sea a través de un pulsador manual

, mecánica o no.

, es decir, no necesitas usar

en estado de alta

muy poca corriente para cambiar de

. Esto nos permitirá cablear diferentes dispositivos y nos facilitará su lectura,pero por

cuando no tengamos ningún dispositivo

conectado al pin. Esto es porque con alta impedancia de entrada, con poca corriente inducida

por ejemplo, se puede generar una gran caída de tensión y por

un estado para cuando no tengamos conectado ningún dispositivo. Esto

diante una resistencia de

. Valores típicos de estas resistencias

resistencia de pullup

a digital, por ejemplo al pin 3 de

Page 2: Curso Arduino Cefire Sesión 3

Plataforma ARDUINO Sesión 2 CEFIRE

Ricardo Carpio Richart IES JAUME I Página 2

a) Con un pulsador N.A. y resistencia de pull-down externa.

Cuando

b) Con un pulsador N.A. y resistencia de pull-up externa.

Pulsado estado_pin=ALTO

Sin pulsar estado_pin=BAJO

Pulsado estado_pin=BAJO

Sin pulsar estado_pin=ALTO

Page 3: Curso Arduino Cefire Sesión 3

Plataforma ARDUINO Sesión 2 CEFIRE

Ricardo Carpio Richart IES JAUME I Página 3

c) Con pulsador N.C. y resistencia de pull-up interna.

En todos estos casos, podremos realizar la lectura del estado del pin sin problemas pero

que pasa si deseamos contar el número de veces que cambia de estado. No queremos

detectar el estado en el que se encuentra el pin sino que queremos contar el número de veces

que cambia de estado. Esto puede ser necesario cuando un mismo pulsador nos debe

determinar comportamientos diferentes o simplemente, para implementar un contador.

Encontraremos el temido problema de los rebotes(debounce). Son los indeseables cambios de

estado que se producen cuando un contacto mecánico cambia de estado.

Por ejemplo, vamos a incrementar el valor de una variable al activar un pulsador. Veamos

que sucede si en el último ejemplo de cableado ejecutamos este código:

Pulsado estado_pin=ALTO

Sin pulsar estado_pin=BAJO

Page 4: Curso Arduino Cefire Sesión 3

Plataforma ARDUINO Sesión 2 CEFIRE

Ricardo Carpio Richart IES JAUME I Página 4

Si abrimos el Serial Monitor de nuestro IDE, observaremos que la variable está lejos de

incrementarse solo en una unidad. Este efecto NO es atribuible únicamente a los rebotes.

También al tiempo que el pulsador está presionado. Si probamos a mantener el pulsador

presionado un tiempo, veremos que el efecto se acentúa.

Modifiquemos un poco el anterior código para aislar el efecto de los debounces:

Podemos observar que el problema no se ha resuelto del todo. Continuemos modificando

el código…

Page 5: Curso Arduino Cefire Sesión 3

Plataforma ARDUINO Sesión 2 CEFIRE

Ricardo Carpio Richart IES JAUME I Página 5

El tiempo en el que el microcontrolador entra en suspensión sin hacer caso a las

variaciones del pin de entrada (200 ms), se puede ir variando en función de nuestro pulsador

mecánico pero es PELIGROSO abusar de la función delay() (¿Qué pasa si ponemos un retraso

mayor como 1000 ms? ) Mientras el microcontrolador ejecuta la función delay()…no hace

nada, no atiende variaciones en los pines de entrada, no ejecuta ningún código. Bueno, alguna

cosa si hace el microcontrolador.Atender a las interrupciones, mantener los estados de

tensión en los pies de salida (ya sea con digitalWrite() o analogWrite() ) y atender las

recepciones de la comunicación serie. Tampoco es muy aconsejable utilizar los bucles

cerrados while() o alguna de sus variantes como dowhile().

Para realizar un retardo es mejor utilizar la función millis(). Esta función nos devuelve al

ejecutarla, el tiempo que ha transcurrido desde el inicio de ejecución del programa, en

milisegundos. El microcontrolador posee un registro que se incrementa automáticamente cada

milisegundo. Aproximadamente, a los 50días de ejecución, este registro se reinicia y vuelve a

incrementarse (es un registro de 4 byte y almacena un entero sin signo). Para medir el tiempo

entre un evento y otro, guardamos el valor de dicho registro antes y después de que ocurra el

evento. Al realizar la diferencia de los dos valores, obtenemos lo que ha tardado dicho evento

en milisegundos.Observemos el siguiente código:

En este código no hay funciones delay(), no hay bucles como while() y por tanto el

microcontrolador podría atender a otras tareas sin problemas y hemos eliminado por

completo el problema de los rebotes. ¿Qué pasa cuando no soltamos el pulsador?

Page 6: Curso Arduino Cefire Sesión 3

Plataforma ARDUINO Sesión 2 CEFIRE

Ricardo Carpio Richart IES JAUME I Página 6

En algunas aplicaciones, atender a una pulsación continuada puede no ser un problema

pero en otras sí. Veamos cómo podemos resolver este posible problema. Observemos el

siguiente código:

Si nos fijamos, únicamente hemos esperado a que la entrada vuelva a estado bajo, para

realizar la acción que deseamos cuando pulsamos el botón. Concretamente cuando lo

soltamos.

Otra forma de eliminar los rebotes es añadiendo elementos hardware al cableado del

contacto que modifica el estado del pin de Arduino:

Page 7: Curso Arduino Cefire Sesión 3

Plataforma ARDUINO Sesión 2 CEFIRE

Ricardo Carpio Richart IES JAUME I Página 7

d) Con pulsador N.C. y red RC con negador trigger-Smith.

Al activar el pulsador, el condensador C1 se carga a través de R1 y al soltar el pulsador,

se descarga a través de R1+R2 (Figura siguiente)

Cuando pulsamos, C1 pasa de 5V a 0V. Al llegara a 0.9V (VT_ Tensión máxima estado

lógico bajo según el datasheet del IC7414) la puerta trigger Smith convierte ese estado a un

estado alto. Este estado alto es el que lee el pin de nuestro Arduino.

Cuando de nuevo el pulsador se cierra, el condensador se carga de 0V hacia 5V.

Cuando llega a 1.7V (VT+mínimo valor de tensión interpretado como estado lógico por el 7414),

el inversor convierte a un estado bajo que leerá el pin del microcontrolador.

Este comportamiento lo podemos observar en la siguiente ilustración del datasheet

del IC7414:

Pulsamos

Soltamos Pulsado estado_pin=ALTO

Sin pulsar estado_pin=BAJO

Page 8: Curso Arduino Cefire Sesión 3

Plataforma ARDUINO Sesión 2 CEFIRE

Ricardo Carpio Richart IES JAUME I Página 8

e) Señal de 0V 24V con Optoacoplador.

Existen detectores inductivos o capacitivos que se alimentan a 24V mediante dos

conexiones. Disponen de una tercera conexión que bascula a 24V (llamados PNP) o a GND

(llamados NPN), cuando se excitan. En el esquema tenemos un sensor de proximidad PNP o de

suministro de corriente. La conexión Sg, bascula a 24V cuando detecta un objeto en su

proximidad.

Estos detectores no producen los temidos rebotes ya que no tienen un contacto

eléctrico que bascula, sino tienen un pequeño transistor que entra en corte o saturación, para

provocar el comportamiento deseado en la salida.

El IC CNY74-2 es un Optoacoplador de 2 circuitos. Cada uno de ellos cuenta con un

díodo emisor de radiación infrarroja, que satura el fototransistor que tiene en la salida. Según

su datasheet, para una corriente del díodo de IF=10 mA, tenemos el fototransistor saturado

con una VCEsat=0.3V. Con R1=2k2, tenemos aproximadamente una corriente de IF=10mA por el

díodo emisor. Al saturarse el fototransistor, tenemos 4.7V a la entrada del pin, interpretado

como estado alto. R2 es una simple resistencia de pulldown.

No existe conexión eléctricaentre la entrada y la salida. Con el Optoacoplador,

podemos cambiar valores de tensión y aislar eléctricamente, para proteger el

microcontrolador.

Probemos el siguiente código con el anterior conexionado en nuestra placa Arduino:

Excitado estado_pin=ALTO

Sin Excitar estado_pin=BAJO

Page 9: Curso Arduino Cefire Sesión 3

Plataforma ARDUINO Sesión 2 CEFIRE

Ricardo Carpio Richart IES JAUME I Página 9

2.- Sensor QRD1114.

Este Sensor óptico reflexivo, está compuesto

por un diodo infrarrojo y un fototransistor (NPN) para

detectar el reflejo de luz infrarroja. Está formado por

un encapsulado de forma que al aproximarse algún

objeto (rango entre 5mm y 10mm), la luz emitida por

el díodo emisor, se refleja en el objeto detectado y

incide en la base del fototransistor que queda así,

polarizado.

En función de la proximidad del objeto y de

su capacidad para reflejar la luz infrarroja (color), el

fototransistor conducirá más o menos pudiendo llegar a la saturación. Dispone de un filtro en

el encapsulado, que filtra la luz exterior no proveniente del la reflexión. Es similar al más

utilizado de todos los sensores ópticos reflexivos, el CNY70, pero con un alcance mayor.

Aplicaciones típicas de este sensor es la detección de negro sobre blanco en la

superficie de un objeto (robot seguidor de línea) o simplemente la detección por proximidad

de un objeto ya que no necesita contacto físico para la detección.

A continuación podemos ver un ejemplo de conexionado típico para un solo QRD1114

con salida analógica:

Page 10: Curso Arduino Cefire Sesión 3

Plataforma ARDUINO Sesión 2 CEFIRE

Ricardo Carpio Richart IES JAUME I Página 10

• En presencia de un objeto cercano que refleje toda la radiación infrarroja

(color blanco), el fototransistor entrará en saturación y tendremos una tensión

en la salida cercana a los 0V (VCEsaturación=0.4V).

• En ausencia de objeto o de color negro, el fototransistor estará en corte y en

la salida tendremos un valor alto de tensión cercano a los 5V.

Es común ver al sensor QRD1114, trabajar junto elya conocido IC 7414. Tendremos

siempre en la salida un valor TTL que reconocerá el microcontrolador fácilmente. Tendremos

pues, una salida digital:

En este caso, en presencia de objeto, tendremos un estado alto en la salida. Sin objeto,

tendremos un estado bajo.

Podemos encontrar el QRD1114 trabajando en grupos formando matrices. Incluso

existen modelos comerciales que incluyen las resistencias de polarización:

Page 11: Curso Arduino Cefire Sesión 3

Plataforma ARDUINO Sesión 2 CEFIRE

Ricardo Carpio Richart IES JAUME I Página 11

Vamos a realizar una medición digital de la salida del sensor. Montemos el siguiente

conexionado con nuestra placa Arduino:

Realizaremos una lectura digital del sensor QRD1114 de forma más simple que de un

pulsador ya que no tendremos el problema de los rebotes. Usaremos el siguiente código:

Page 12: Curso Arduino Cefire Sesión 3

Plataforma ARDUINO Sesión 2 CEFIRE

Ricardo Carpio Richart IES JAUME I Página 12

3.- LCD matricial 16x2 serie. Funciones.

En cualquier proyecto nos puede ser de

mucha utilidad, poder mostrar información al

exterior. Los LCD matriciales son los más

simples y rápidos en el refresco de los

caracteres mostrados, además de muy

económicos. Sólo pueden mostrar caracteres

alfanuméricos y los hay de 2 filas de 16 matrices

(16x2) o de 4 filas de 20 matrices (20x4)

generalmente.

En función de cómo se cablean, los hay de conexión en paralelo y de conexión serie.

Estos últimos son muy cómodos de utilizar ya que sólo necesitan alimentación de 5V (+5V y

GND) y otra de datos. Incluso poseen un potenciómetro incorporado para regular el contraste.

Tienen retroiluminación para facilitar la lectura en ambientes oscuros.

Existen otro tipo de displays que podemos conectar a nuestro Arduino como los LCD

gráficos o incluso mini pantallas TFT táctiles. Los LCD gráficos pueden representar figuras

geométricas como círculos, rectángulos o líneas y disponen varios tipos de letra.

El LCD serie que vamos a utilizar lleva incorporado un microcontrolador para la

comunicación serie con el microcontrolador de Arduino. A través de un protocolo propio se

pueden realizar una serie de acciones que ahora describiremos.

Si nos fijamos en el anterior esquema de conexionado, observamos que no hemos

utilizado el pin Tx del puerto serie hardware de Arduino. Vamos a utilizar la librería

SoftwareSerial.h, que nos permitirá utilizar cualquier pin digital de Arduino como Tx o RX de un

hipotético puerto serie virtual. De esta manera, el puerto hardware serie utilizado para la

programación de la placa, queda libre. Observemos el siguiente código:

Page 13: Curso Arduino Cefire Sesión 3

Plataforma ARDUINO Sesión 2 CEFIRE

Ricardo Carpio Richart IES JAUME I Página 13

El anterior código, pretende mostrar un asterisco desplazándose por cada una de las

32 posiciones disponibles en nuestro LCD 16x2. Aparecen unas funciones ( BorrarLCD(),

Retroiluminacion() y IrA_16x2() ) que no conocemos y que no están en la librería

SoftwareSerial.h. Por tanto si compilamos el anterior sketch, aparecerán errores.

El fabricante del LCD, Sparkfun, en el datasheet del LCD nos da una serie de pautas para poder

comunicarse con el microcontrolador que incorpora el LCD.

Por ejemplo, para borrar el LCD tenemos que enviar por el puerto serie virtual, los

valores hexadecimales 0xFE y 0x01. Con esto la función BorrarLCD podría implementarse de la

siguiente manera (copiar el siguiente código después de la función voidloop() )

S i lo añadimos y verificamos de nuevo el código, observaremos que el compilador ya

no se queja de la función BorrarLCD() sino de la siguiente,Retroiluminacion(142).

La función Retroiluminación controla la iluminación del LCD mediante software

Page 14: Curso Arduino Cefire Sesión 3

Plataforma ARDUINO Sesión 2 CEFIRE

Ricardo Carpio Richart IES JAUME I Página 14

Y por último, la función para situar el cursor, en cualquiera de las 32 matrices de

nuestro LCD. La primera fila contiene las posiciones entre la 0 y la 15. La segunda fila está

formada por las posiciones entre la 16 y la 31.

Si ahora verificamos el código, vemos que ya no tenemos errores y lo podemos enviar

a nuestra placa Arduino. Observaremos el asterisco correr a lo largo de las diferentes posiciones

de nuestro LCD.Para los curiosos, aquí está la función para situar el cursor, en un LCD 20x4.

Page 15: Curso Arduino Cefire Sesión 3

Plataforma ARDUINO Sesión 2 CEFIRE

Ricardo Carpio Richart IES JAUME I Página 15

4.- Ejemplo de Aplicación. En este ejemplo vamos a leer dos pulsadores de forma que con uno incrementaremos

una variable y con el otro, la decrementaremos. En todo momento visualizaremos el valor de la

variable y el estado de los 2 pulsadores. Fijémonos primero en el esquema de conexionado:

Lo que queremos es monitorizar el estado de dos entradas digitales, sin mostrar los

rebotes. Cada entrada tendrá una misión diferente, en este caso, aumentar el valor de una

variable. Se utilizará el LCD como monitor de todo el proceso. Con el siguiente código,

tendremos un problema. Se deja para el lector avispado, detectar el problema y corregirlo:

SW1=0 SW2=0

Variable=0

Page 16: Curso Arduino Cefire Sesión 3

Plataforma ARDUINO Sesión 2 CEFIRE

Ricardo Carpio Richart IES JAUME I Página 16

Por supuesto también tenemos que incluir las funciones BorrarLCD() ,

Retroiluminacion()y IrA_16x2(). El problema al que se hacía referencia, se manifiesta cuando

la variable contador, disminuye en su longitud. Es decir, cuando disminuyen el número de sus

dígitos. Se resuelve imprimiendo 3 espacios después de imprimir la variable contador.