Issuu on Google+

Arduino • HARDWARE

Arduino: E/S digitales Konstantine Milenin, 123RF.com

HARDWARE DIFERENTE

Arduino es una manera sencilla y divertida de iniciarse en el mundo de la electrónica y una oportunidad de llevar tus ideas al mundo real. POR LUIS MARTÍN

A

rduino es una plataforma de hardware libre basada en una placa con microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares. Arduino también es una oportunidad. Una oportunidad para llevar a cabo todas esas ideas que os rondan por la cabeza. A quién no se le ha ocurrido la típica idea de: ¿Y si pudiera encender la luz de mi cuarto dando una palmada? ¿Podría encender la calefacción de mi casa con el móvil?… pues con Arduino todo esto y mucho más es posible. Puede que suene a anuncio de teletienda, pero lo cierto es que este dispositivo abre las puertas a un mundo de aplicaciones y posibilidades, en el que puedes realizar distintos proyectos sin tener que ser un experto electrónico o programador. Utilizando programas sencillos podemos dar instrucciones al microcontrolador para que trabaje como cerebro de nuestro sistema, recibiendo datos por medio de sus numerosas entradas (analógicas y digitales), las cuales le permiten leer parámetros del entorno, y enviando datos al medio para poder actuar sobre él gracias a una serie de salidas (digitales).

Como ya se vio en el artículo anterior [1], es necesario comenzar con ejemplos muy básicos con el fin de familiarizarnos con el entorno de trabajo y como una primera toma de contacto con la programación, por lo que una vez ya realizado el “Hola Mundo” de Arduino, el cual consiste en hacer parpadear un LED, nos centraremos en el estudio y prueba de las distintas entradas/salidas digitales que nos ofrece Arduino.

Preparación y Puesta a Punto Para comenzar a trabajar es necesario descargar desde la página oficial de Arduino [2] el software necesario para crear los programas y transferirlos a nuestro Arduino. Para ello seguiremos los pasos y consejos del artículo Introducción al Arduino: Contacto físico [1] de Dmitri Popov. Una vez que hemos instalado correctamente el IDE y conocemos los conceptos básicos para utilizarlo y programar en él, podemos comenzar a realizar el diseño del hardware. Cuando que tengamos el hardware y el programa listos, sólo tenemos que conectar el Arduino al ordenador, cargarle el código y observar el resultado de nuestro proyecto.

WWW.LINUX- MAGAZINE.ES

Diseño del Hardware En este proyecto, vamos a leer una entrada digital por medio del Arduino, y en función de esa entrada actuaremos sobre otro pin digital como salida, donde estará conectado un diodo LED. Para realizar este pequeño proyecto vamos a necesitar una serie de componentes electrónicos aparte del Arduino [2]: un pulsador, una resistencia de 10K y una protoboard para el montaje. Todos estos componentes (y algunos más) los encontraremos en el Arduino Starter Kit de Cooking Hacks [3] (Figura 1 y Tabla 1). Para realizar un primer diseño del circuito, como en el anterior artículo [1], nos serviremos de la herramienta Fritzing [4]. Fritzing contiene numerosos circuitos de ejemplo ya diseñados, pudiéndonos servir de base para otros proyectos, pero en este caso lo utilizaremos únicamente para realizar unos diagramas sencillos de conexionado, aunque tiene otras muchas funciones (Figura 2). Conectaremos el LED al pin digital 13, el cual ya tiene incorporada una resistencia limitadora de corriente (impide que el diodo se queme por un exceso de corriente). Lo mas complicado del hard-

Número 83

53


HARDWARE • Arduino

Figura 1: Arduino Starter Kit de Cooking Hacks.

ware será el circuito del pulsador. Los pulsadores conectan dos puntos de un circuito al ser pulsados. Como se puede observar (Figura 3), los pulsadores electrónicos parecen llevar cuatro patillas, pero en realidad sólo son dos muy largas que salen por los laterales del pulsador para facilitar las conexiones, de manera que si lo colocamos y el LED se enciende continuamente, es muy posible que lo hayamos conectado mal; si tenéis un polímetro, colocadlo en modo continuidad y aseguraos de la posición correcta. A menudo cuando se trabaja con entradas digitales, nos surge el problema de conocer qué valor de tensión real hay en dicho pin. Cuando nosotros ponemos una tensión fija en esa entrada, es directo el conocer el valor de la tensión (por ejemplo, si colocamos 5 voltios sabemos que hay 5 voltios), pero cuando no fijamos una tensión en ese punto, ¿que tensión hay en esa patilla?. Podría

parecer que la que aparece es de 0 voltios, puesto que no aplicamos ningún voltaje, pero eso no es cierto, ya que ese pin al no estar conectado a nada, trabaja como una antena recibiendo ruido y señales del entorno que le rodea, y por ello puede presentar un valor de tensión muy variable. En este proyecto queremos leer el estado de un pulsador. Para ello debemos conocer qué valor de tensión hay en el pin que lo monitoriza. Las entradas digitales de Arduino pueden detectar 2 valores de tensión: 0 (0 voltios) como valor bajo o 1 (5 voltios) como valor alto. Para solucionar este problema se utilizan resistencias con el fin de que fijen un valor de tensión estable cuando no aplicamos una tensión sobre la entrada digital. Estas resistencias reciben el nombre de Pull Down y Pull Up en función de la tensión que fijen en el pin digital. Las

Listado 1: Lectura Estado Pulsador 01 // Variables estáticas 02 int pulsador = 2; // Declaramos la variable pin del pulsador 03 04 // Variables dinámicas 05 int estadoPulsador = 0; // Variable para estado del pulsador 06 07 void setup() { 08 // Inicializa el pin del pulsador como entrada: 09 pinMode(pulsador, INPUT); 10 // Inicializa el puerto serie: 11 Serial.begin(9600); 12 }

54

Número 83

13 14 void loop(){ 15 // Lee el valor del pin del pulsador y lo almacena 16 // en la variable estadoPulsador 17 estadoPulsador = digitalRead(pulsador); 18 // Imprime por el monitor serie el estado del pulsador: 19 Serial.println(estadoPulsador); 20 // Pequeño retardo de tiempo: 21 delay(1000); 22 }

WWW.LINUX- MAGAZINE.ES

Figura 2: Esquema de conexionado del circuito del pulsador.

resistencias Pull Up son resistencias que se sitúan entre el pin digital y un valor de tensión (por ejemplo 5 voltios) positivo, de manera que cuando no aplicamos tensión en el pin, fijan ese valor de tensión positivo, y si aplicamos un valor diferente de tensión en el pin (por ejemplo 0 voltios aplicados al activar un interruptor), no afectan a ese valor. (Figura 4) En nuestro circuito colocaremos una resistencia de 10K de Pull Down. Esta resistencia se coloca entre el pin digital y masa (0 voltios), de manera que cuando no se aplique ninguna tensión sobre dicha entrada se mantenga un valor constante de 0 voltios, evitando que aparezca ruido producido por el entorno. En nuestro circuito (Figura 5), cuando el pulsador esté abierto (sin pulsar) no hay conexión entre las dos patillas del pulsador, por lo que actúa la resistencia de Pull Down, fijando un valor de 0 en nuestra entrada, lo que para nosotros significa que el pulsador no está presionado. Sin embargo, cuando pulsamos se

Figura 3: Interconexión de un pulsador de 4 patillas.


Arduino • HARDWARE

Figura 5: Fritzing nos permite plasmar nuestro diseño en una imagen.

Figura 4: Resistencias pull-up y pull-down.

cierra la conexión, y por lo tanto conectamos 5V a nuestra entrada digital, fijando un valor de 1. Podemos observar el ruido que hay en una entrada digital si no conectamos la resistencia de Pull Down, y de esta manera comprobaremos cómo el valor de tensión que medimos varía de forma errática. Una vez montado el circuito sobre el breadboard, podemos comenzar la programación de los distintos ejemplos que vamos a realizar.

de las instrucciones, ya que es lo que utiliza Arduino para separar unas de otras. pinMode(led, OUTPUT); Serial.begin(9600);

Asimismo, podemos utilizar dos barras (//) al inicio de una línea para realizar anotaciones o comentarios para facilitar la comprensión de nuestro programa. //Esto es un comentario de una línea

Programación El último paso antes de probar nuestro diseño es escribir el código necesario para que funcione. Todas las instrucciones podemos encontrarlas en la web oficial de Arduino, las cuales están basadas en el lenguaje de programación C/ C++, por lo que cualquier prontuario de instrucciones nos puede servir a la hora de programar. Sólo un par de cosas: nótese que es necesario colocar un punto y coma (;) detrás de cada una

De cara a la utilización del circuito que hemos montado, vamos a realizar dos ejemplos: en el primero monitorizaremos el estado del pulsador. En el segundo, en función de ese estado, encenderemos o no un LED. En ambos programas, en primer lugar, debemos declarar las variables globales que vayamos a utilizar antes del setup. Estas variables las organizaremos como

estáticas (las que no van a cambiar de valor a lo largo del programa) y dinámicas (en las que vamos a almacenar un valor que puede ir cambiando a lo largo del programa). En nuestro caso, definiremos un tipo de variable int (que almacena números enteros entre -32768 y 32767), aunque existen otros muchos tipos que iremos conociendo en función de las necesidades de cada momento. A partir de aquí, siempre que utilicemos una de estas variables, únicamente tendremos que llamarla por el nombre que le hemos asignado. En el primer programa de ejemplo, sólo queremos leer el estado del pulsador y mostrarlo por el monitor serie del que dispone el IDE de Arduino. Para ello, en el bucle setup configuraremos el pin al que hemos conectado el pulsador como una entrada, para así poder leer su estado, e inicializaremos la comunicación serie entre el Arduino y el ordenador a una velocidad de 9600 (existen varias velocidades, pero en nuestro caso

Listado 2: Control de LED con Pulsador 01 // Variables estáticas 02 int pulsador = 2; // Declaramos la variable pin del pulsador 03 int led = 13; // Declaramos la variable pin del LED 04 05 // Variables dinámicas 06 int estadoPulsador = 0; // Variable para estado del pulsador 07 08 void setup() { 09 // Inicializa el pin del LED como salida: 10 pinMode(led, OUTPUT); 11 // Inicializa el pin del pulsador como entrada: 12 pinMode(pulsador, INPUT); 13 } 14

15 void loop(){ 16 // Lee el valor del pin del pulsador y lo almacena 17 // en la variable estadoPulsador 18 estadoPulsador = digitalRead(pulsador); 19 20 // Chequea si el pulsador está pulsado: 21 if (estadoPulsador == HIGH) { 22 // Si es así, enciende el LED: 23 digitalWrite(led, HIGH); 24 } 25 26 else { 27 // Si no, lo mantiene apagado: 28 digitalWrite(led, LOW); 29 } 30 }

WWW.LINUX- MAGAZINE.ES

Número 83

55


HARDWARE • Arduino

Figura 6: Carga y apertura del monitor serie de Arduino.

elegimos una estándar). En el bucle loop realizamos tres instrucciones: primero almacenamos el valor de la entrada en la que se encuentra conectado el pulsador (si es un 1 o un 0), después imprimimos este valor en el monitor serie, y por último esperamos 1 segundo para evitar tomar una nueva medida hasta que hayamos leído la actual. Una vez que escribamos el código, es necesario cargarlo en el Arduino, y una vez cargado, pulsar el botón de Serial Monitor para poder ver las lecturas del estado del pulsador (Figura 6). En el segundo programa, la única diferencia es que en vez de mostrar el estado del pulsador, lo utilizamos, y, en función de dicho estado, encendemos o apagamos un LED. La parte de definición de variables y el setup se realizará de manera semejante al anterior ejemplo. Sólo tendremos que definir todos los parámetros necesarios para trabajar con el LED que se encuentra integrado

Tabla 1: Contenido Starter Kit Componente Arduino UNO Rev.3

Cantidad x1

Cables para Arduino

x1

Breadboard

x1

Cable USB

x1

Resistencias 470 ohm

x10

Resistencias 1 K

x10

Resistencias 10K

x10

Potenciómetro 1K

x2

Potenciómetro 100 K

x2

Pulsador

x5

Sensor LDR

x1

Sensor de temperatura

x1

LED rojo

x10

LED verde

x10

Porta-baterías 6AA

x1

56

Número 83

Figura 7: Diseño hardware del ejemplo del coche fantástico.

en el pin 13 digital. La parte del loop es un poco más compleja, pero podemos basarnos nuevamente en el ejemplo anterior. Primero tomamos el valor del pulsador y lo almacenamos en una variable que previamente hemos definido. A partir de aquí debemos utilizar una nueva estructura de código, el bucle if/else, la cual cumple una función condicional básica, indicando que, si se cumple una condición, se realiza la primera parte del bucle, y si no se cumple, la segunda. En nuestro caso, si el pulsador está presionado, enciende el LED, y si no lo está, hace lo contrario. Una vez acabados de teclear los programas, podemos comprobar si existe algún error antes de cargarlo en Arduino. El programa os avisará por medio de la consola inferior si hay errores de programación o sintaxis. Una vez que nos avise que compila correctamente, podemos cargarlo en Arduino sin mayor preocupación. Ambos códigos se encuentran comentados con el fin de facilitar su comprensión, y poder entender paso a paso lo que va ocurriendo en el programa. Para la realización de mas ejemplos básicos, podéis echar un vistazo a la web de Arduteka [5], ya que es un lugar muy interesante y con bastante información que os puede servir de ayuda para aprender más sobre Arduino.

Resultado y Mejoras Una vez cargado el código, podemos comprobar cómo el Arduino está funcionando correctamente y, aunque parezcan unos sencillos ejemplos, nos sirven como base para controlar cualquier sistema que se valga de las entradas y salidas digitales.

WWW.LINUX- MAGAZINE.ES

En este caso ha sido un pulsador, pero podemos realizar proyectos semejantes con relés, bombillas y otros muchos sensores o actuadores digitales. Como ejercicio a realizar, para aquellos que tengan ganas de practicar algo más complejo, os dejo un ejemplo al que llamaremos Knight Rider, en el que, al estilo de la serie de los 80 en la que podíamos ver al famoso David Hasselhoff junto a su magnífico Pontiac inmersos en emocionantes aventuras, utilizaremos usa serie de LEDs para obtener el llamativo efecto de la parte frontal del coche fantástico. Os aconsejo poner únicamente 6 LEDs, y realizar el encendido y apagado de cada uno de ellos en una secuencia de ida y vuelta. Podéis observar en la Figura 8 un ejemplo del hardware necesario. Espero que os haya servido este pequeño proyecto como una de vuestras primeras tomas de contacto con Arduino, y os animo a intentar realizar este último ejemplo. ■

RECURSOS [1] Artículo Introducción a Arduino: Contacto físico, Linux Magazine – Edición en Castellano, número 82, pg. 60. [2] Sitio web oficial de Arduino en español: http://www.arduino.cc/es/ [3] Cooking Hacks: http://www.cooking-hacks.com/ [4] Arduino Starter Kit: http://www.cooking-hacks.com/ index.php/shop/arduino/starter-kits/ arduino-starter-kit.html [5] Fritzing: http://fritzing.org [6] Arduteka: http://www.arduteka.com/ [7] Descargas del código de este artículo: http://www.linux-magazine.es/ Magazine/Downloads/83/Arduino


053-056_Arduino_LM83