guiÓnde&prÁcticas arduino( san...

25
GUIÓN DE PRÁCTICAS Arduino San Valero ¿Qué es Arduino? Arduino es una plataforma electrónica de prototipos de código abierto (open-source) basada en hardware y software flexible y fácil de usar. Está pensado para artistas, diseñadores, como hobby o para cualquier interesado en crear objetos o entornos interactivos. Arduino nos permite “sentir” el entorno mediante la recepción de datos desde una variedad de sensores y puede interactuar con su alrededor mediante el control de luces, motores o casi cualquier cosa que imaginemos. ARDUINO frente a otros microcontroladores: Barato. Multiplataforma (Windows, Mac y Linux). Entorno de programación simple y claro. Software libre y ampliable por cualquiera. Hardware libre. Descripción básica de la placa ARDUINO UNO:

Upload: phungquynh

Post on 06-Feb-2018

232 views

Category:

Documents


0 download

TRANSCRIPT

GUIÓN  DE  PRÁCTICAS  Arduino  –  San  Valero  

¿Qué  es  Arduino?    Arduino es una plataforma electrónica de prototipos de código abierto (open-source) basada en hardware y software flexible y fácil de usar. Está pensado para artistas, diseñadores, como hobby o para cualquier interesado en crear objetos o entornos interactivos.

Arduino nos permite “sentir” el entorno mediante la recepción de datos desde una variedad de sensores y puede interactuar con su alrededor mediante el control de luces, motores o casi cualquier cosa que imaginemos.

ARDUINO frente a otros microcontroladores:

• Barato. • Multiplataforma (Windows, Mac y Linux). • Entorno de programación simple y claro. • Software libre y ampliable por cualquiera. • Hardware libre.

Descripción básica de la placa ARDUINO UNO:

Práctica  #001  –  Controlando  una  salida  digital    Parte 1: ¿Que vamos a hacer?

Este proyecto básico consiste en aprender a activar una salida digital de nuestra placa Arduino a la que conectaremos mediante una resistencia, un diodo LED que parpadeará en intervalos de un segundo.

Esto tan sencillo a priori, nos será de gran utilidad pues con un LED podremos monitorizar todo tipo de acciones en nuestro Arduino Material necesario:

• 1 x placa Arduino. • 1 x resistencia de 470Ω. (Amarillo, morado, marrón) • 1 x diodo LED. • 1 x protoboard.

Parte 2: Diseñando el Hardware…

Antes de nada, veamos una breve descripción de los componentes elegidos y como utilizarlos, si queréis indagar más sobre estos, o ver más ejemplos, podéis hacerlo a través de Arduino Academy!!:

La protoboard:

Una protoboard o breadboard, es una placa perforada con conexiones internas en la que podemos “pinchar” nuestros componentes para realizar nuestros prototipos sin tener que realizar un solo punto de soldadura tantas veces como queramos.

Las resistencias

Un resistor o resistencia, es un componente electrónico utilizado para añadir una resistencia eléctrica entre dos puntos de un circuito de manera que nos permite distribuir adecuadamente tensiones y corrientes a lo largo del mismo. La unidad de medida de una resistencia es el Ohmio (Ω).

Para identificar los valores de las resistencias (fijas) en aquellas que por su tamaño no es posible serigrafiarlo en su encapsulado por su pequeño tamaño, debemos interpretar una serie de líneas de colores dispuestas a lo largo de la resistencia, para esto disponemos de la siguiente tabla de colores:

Para empezar a leer el código, debemos colocar a la derecha la banda de tolerancia, normalmente dorada o plateada y empezar a leer de izquierda a derecha, la primera y segunda franja la tomaremos solamente como un número y la tercera franja como su multiplicador, es decir, si tenemos marrón – rojo – amarillo tendremos una resistencia de 1 – 2 – x 10000 = 120000 Ω o 120K.

El Diodo LED

Ahora pensemos que tiene que hacer nuestro circuito!!

Debemos lograr, mediante el programa de nuestro Arduino, que se encienda y apague un LED conectado a una salida digital, a través de una resistencia que nos regulará la intensidad que debe llegar al diodo, así que pongámonos a calcular!

Tenemos que, como la tensión de salida digital de la placa de Arduino es de 5v, la tensión de nuestro LED rojo es de 1,8v y la corriente que debe pasar es de 15 mA nos quedará la siguiente fórmula gracias a la ley de Ohm (R = V/I):

Por lo que la resistencia ideal sería de 220Ω, la más cercana a ese valor existente en el mercado, en nuestro caso, adaptándonos a los diodos y resistencias del StarterKit usaremos una de 470 Ω.

Ahora solo nos queda calcular la potencia de dicha resistencia, recordando que P=VxI tenemos que

P = (5-1,8) x 0,015 = 0,048w

Es decir como mínimo debe ser de 48mW por lo que nos vale la más estándar de las resistencias, la de 1/4 de vatio.

Un LED (Light Emitting Diode) básicamente es

un diodo semiconductor que emite luz.

Cuando un LED se encuentra en polarización directa, los

electrones pueden recombinarse con los huecos en el

dispositivo, liberando energía en forma de fotones. Este

efecto es llamado electroluminiscencia y

el color de la luz (correspondiente a la energía

del fotón) se determina a partir de la banda de energía

del semiconductor.  

Veamos el esquema eléctrico:

Y una posible distribución en la protoboard:

3ª Parte: Programando…

Primero observemos la estructura básica de un Sketch (Programa) para Arduino y diferenciemos sus dos partes básicas:

Abrir el archivo Proyecto_001.ino proporcionado en la documentación del curso en vuestro ordenador y observémoslo al completo:

/* www.arduinoacademy.com Proyecto 001 Blink Enciende y apaga un Led en intervalos de un segundo repetidamente. Este código de ejemplo es de uso público. */ //Configuración de nuestra salida. void setup() { pinMode(12, OUTPUT); // Pin 12 como Salida. } //Ahora le decimos que hacer con esa salida. void loop() { digitalWrite(12, HIGH); // Pone la salida 12 a ON delay(1000); // Espera un segundo digitalWrite(12, LOW); // Pone la salida 12 a OFF delay(1000); // Espera un segundo }

 

void setup() { Aquí vendrán las configuraciones de nuestro pines como entradas o salidas entre otras. Como veis debe estar todo incluido entre llaves y solo se ejecutará una vez. } void loop() { Aquí pondremos las instrucciones que ejecutará nuestro programa nuestro programa una y otra vez. }

 

Práctica  #002  –  El  coche  fantástico      Parte 1: ¿Que vamos a hacer?

Ahora que ya sabemos que es un diodo LED y una resistencia, colocando unos pocos más, vamos a intentar simular el famoso efecto de luces del “coche fantástico” Ahora que ya sabemos que es un diodo LED y una resistencia, colocando unos pocos más, vamos a intentar simular el famoso efecto de luces del “coche fantástico” Material necesario:

• 1 x placa Arduino. • 6 x resistencia de 470Ω. • 6 x diodo LED. • 1 x protoboard.

Parte 2: Diseñando el Hardware…

En este proyecto, simplemente hemos de aplicar los cálculos del anterior para cada uno de los Led, utilizando como salidas digitales de la 7 a la 12, de manera que nos va a quedar un esquema de la siguiente manera:

Posible esquema de montaje en la protoboard:

3ª Parte: Programando…

Aquí es donde va a residir la complejidad de nuestro proyecto, lo que tenemos que hacer es, mediante programación, que se enciendan los LED secuencialmente y al llegar a cada extremo, vuelva hacia el otro lado y así sucesivamente, emulando el efecto de “KIT”, además veremos nuevas instrucciones como “for” que nos va a permitir ahorrar muchas líneas de código, así como el uso de variables en nuestros Sketch. Para ello, hemos hecho tres versiones de programa, la primera con las instrucciones básicas, observando la longitud que alcanza el programa al tener que declarar una y otra vez el estado de cada salida, la segunda con el ciclo “for” incluido y una tercera con un pequeño efecto de estela añadido. Abrir el segundo proyecto, primera versión de la documentación del curso llamado Proyecto_002_1.ino Una vez analizado el primer ejemplo, abrir Proyecto_002_2.ino para observar los cambios en las líneas de programa. Para finalizar abrir Proyecto_002_3.ino para ver como hemos conseguido el efecto estela en los LED.

Práctica  #003  –  Entrada  analógica  y  salida  PWM  

En este tercer 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 pulso en una salida digital (PWM).  Material necesario para este proyecto:

1 x Arduino Uno 1 x Diodo Led 1 x Resistencia 470 Ω 1 x Potenciómetro 1KΩ 1 x Protoboard

1 x Juego de cables Parte 2: Diseñando el Hardware…

En este proyecto 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.

¿Qué es un potenciómetro?

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.

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. Entradas analógicas

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, así que 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:

Con todo esto, veamos los circuitos resultantes:

Y la posible distribución en protoboard:

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, para ello abrir el proyecto Proyecto_003_1.ino de la documentación del curso.

Como novedad veremos la instrucción analogRead(entrada a leer)

Sin variar el circuito, vamos a introducir un nuevo código para realizar un ejemplo diferente, abrir el archivo Proyecto_003_2.ino, 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 PWW.

En este código veremos el uso de la instrucción analagogWrite (salida PWM, valor).

 

 

 

 

 

                       

 

Práctica  #004  –    Entradas  digitales  -­‐  Conectando  un  pulsador   Parte 1: ¿Que vamos a hacer?

Con el mismo circuito que hemos montado en el proyecto 2, vamos a añadirle un pulsador con su resistencia de pulldown para accionar una secuencia determinada en los diodo LED. Material necesario:

• 1 x placa Arduino. • 6 x resistencia de 470Ω. • 6 x diodo LED. • 1 x Pulsador. • 1 x Resistencia 10K (marrón, negro, naranja) • 1 x protoboard.

Parte 2: Diseñando el Hardware…

En este proyecto, deberemos interpretar en nuestro programa la lectura de una entrada digital, y en base a su lectura, activaremos, o no, una secuencia de LED, un ejemplo sencillo, pero que nos permite aclarar un concepto muy importe sobre las entradas digitales, las resistencias de Pull-Up o Pull-Down en los pulsadores para evitar errores de lectura.. ¿Qué son las resistencias de Pull-Up o Pull-Down?

En nuestro Arduino, las entradas digitales se interpretan de la siguiente manera:

1 (lógico) = Hight = +5v 0 (lógico) = Low = 0v ¿Esto qué quiere decir? Que si tenemos una tensión de +5v aplicada a una entrada, este nos la interpretara como un 1 (high) sin lugar a dudas, pero no es así al contrario, si nosotros dejamos de aplicar esa tensión a la entrada digital, es posible que recibamos algo de ruido del circuito y que Arduino no nos lo interprete como un 0 (low) por lo que colocamos una resistencia entre la entrada y masa (GND) que derive estos ruidos asegurándonos una señal limpia y sin posibles errores, a la resistencia que se conecta a masa se le llama PULL-DOWN.

De igual manera, si tuviéramos la necesidad de mantener un 1 lógico en una entrada mientras el circuito está en reposo, se le puede aplicar una resistencia entre la entrada y +5v para asegurarnos que le llega suficiente tensión como para que sea interpretada correctamente por nuestro Arduino, a esta última se le denomina PULL-UP.

Aquí podéis ver como se conectaría la resistencia en un circuito básico de 0 o 1 en la entrada 8 de Arduino.

Esquema eléctrico:

Distribución en protoboard:

3ª Parte: Programando…

En este programa vamos a descubrir como leer una entrada digital, además de la instrucción condicional “if” con la que hacer comparaciones, en nuestro caso, comprobaremos si la entrada digital está activada, y si lo está (condición) ejecutará las instrucciones de su interior. Para ello abrir el archivo Proyecto_004.ino

Práctica  #005  –    Sensor  LDR      Parte 1: ¿Que vamos a hacer?

En este proyecto, vamos a utilizar un LDR (Light Dependent Resistor o resistencia dependiente de la luz) para simular una hipotética compensación lumínica de 5 niveles, es decir, a través de una resistencia que varia su valor dependiendo de la luz recibida, aprovecharemos dicha variación para hacer un programa que nos encienda o apague una serie de LED dependiendo de si hay más luz o menos luz, esto podríamos extrapolarlo a un sistema de regulación de luz de un jardín con cinco líneas de luz que se vayan encendiendo según va cayendo la noche compensando progresivamente la deficiencia de luz.

Además le hemos implementado un potenciómetro para ajustar el nivel crítico mínimo de luz que queremos soportar, a partir del cual se activará nuestro circuito y empezará a aumentar la luz del lugar progresivamente. Material necesario para este proyecto:

1 x Arduino Uno 1 x Protoboard 1 x LDR 1 x Potenciómetro 1kΩ 5 x Diodos LED 5 x Resistencias 470Ω 1 x Resistencia 1KΩ 1 x Juego de Cables Parte 2: Diseñando el hardware…

En este proyecto lo que queremos conseguir es que, a partir de una resistencia que varía su valor óhmico en función de que haya más o menos luz, controlar 5 salidas de nuestro Arduino, a las que podríamos conectar líneas de iluminación para un jardín por ejemplo, de manera que según va anocheciendo, nuestra iluminación artificial va aumentando.

Además, vamos a colocar un potenciómetro para regular el umbral de luz mínima, a partir del cual, comenzará a funcionar nuestro circuito de luz artificial para que sea adaptable a cualquier entorno.

Para el diseño de este circuito, dividámoslo en tres partes:

Salidas para los LED Para las salidas, ya hemos aprendido como conectar unos diodos LED y como calcular su resistencia óptima. Conexión LDR a una entrada analógica Aquí tenemos un componente nuevo, el LDR funciona como una resistencia variable de manera que, cuanta más cantidad de luz reciba, menor será su resistencia, para que quede claro, si en un potenciómetro variábamos la resistencia deslizando un patín por la pista de material resistivo, aquí lo hará la cantidad de luz que reciba la foto-resistencia. ¿Qué podemos deducir con esto?

Que si añadimos una resistencia más, podemos utilizar el LDR para hacer el ya conocido divisor de tensión de donde sacaremos la variación de señal para conectar a nuestra entrada analógica de Arduino.

Podemos conectarlo de dos maneras diferentes:

Si utilizamos el LDR como resistencia inferior del divisor de tensión, nos dará la tensión máxima cuando tengamos el LDR en plena oscuridad, ya que estará oponiendo el máximo de su resistencia al paso de la corriente derivándose esta por Vout al completo, si lo utilizamos como resistencia superior, el resultado será el inverso, tendremos la tensión máxima cuando esté completamente iluminado, ya que se comportará prácticamente como un cortocircuito, con una resistencia de 50Ω o 100Ω.

En este caso lo hemos utilizado como resistencia superior, de manera que cuanta más luz haya, más tensión tendremos a la entrada de nuestra entrada analógica pudiendo ajustar así, de una manera muy intuitiva, la tensión de referencia que ahora explicaré.

El regulador de luz mínima

Como tercera parte del circuito, hemos colocado un potenciómetro configurado como divisor de tensión para hacer las funciones de regulación del rango de iluminación a partir del cual se activará nuestro circuito de iluminación.

¿Como hemos conseguido esto?

Primero hay que pensar un par de cosas, nuestra foto-resistencia configurada como divisor resistivo, nos va a dar 0v cuando este COMPLETAMENTE a oscuras, y +5v cuando esté COMPLETAMENTE iluminada, situaciones que pueden ser difíciles de conseguir dependiendo del entorno en el que trabajemos, y por otra parte, ese rango de 0v a 5v habrá que dividirlo en 1024 “pasos” que va a leer nuestro Arduino, pero quizás solo vayamos a trabajar en 500 o 600 pasos, desperdiciando mucha resolución.

Para solucionar esto, además de evitar cambiar el programa de Arduino cada vez que lo cambiemos de entorno, usamos una función que nos proporciona Arduino muy internaste, el pin “Aref”

¿Qué es el pin AREF?

Cuando Arduino toma una señal analógica y la convierte a digital en 1024 cachitos, lo hace por defecto pensando que la señal que va a recibir puede variar entre 0v y 5v lo que nos da aproximadamente un valor por cada 4,88 mV, pero nosotros podemos decirle que no, que realmente va a trabajar entre 0v y 3v, obteniendo así 1024 cachitos distribuidos entre 0v y 3v, lo que nos da un valor por cada 2,9 mV, es decir una resolución mucho mayor.

Debemos tener en cuenta que este pin lleva internamente una resistencia de 32KΩ para evitar dañar el chip, de manera que si vamos a conectar el pin mediante una resistencia fija, se va a producir un nuevo divisor de tensión, con lo que habrá que calcular la resistencia adecuada para la tensión exacta que queremos introducir mediante una sencilla fórmula:

Donde:

Vin = Tensión que introducimos a Vref Rinterna = Resistencia interna de Arduino de 32KΩ Rexterna = Resistencia mediante la cual alimentamos Vref Vrefencia = La tensión sobre que tomará referencia nuestro

programa. De manera que si por ejemplo, estamos introduciendo una tensión de +3v a través de una resistencia de 5KΩ, la tensión real de referencia en nuestro Arduino será de:

(32000/(32000+5000)) x 3 = 2,59v

¿Porqué evita cambiar el programa continuamente?

Por que variando la señal de referencia, le estamos diciendo que nos tome 1024 valores entre 0v una determinada tensión máxima, y el reparto de esos valores ya los hemos fijado equitativamente en nuestro programa para que haga una activación progresiva de las líneas de iluminación, por tanto, aunque tengamos un rango muy bajo de iluminación con el que jugar, de 1v por ejemplo, nos va a distribuir siempre proporcionalmente la activación de las salidas.

Esa tensión de referencia, será el punto de iluminación a partir del cual, si decrece la luz ambiente, empezará a decrecer los valores obtenidos en la señal analógica de entrada.

Si ponemos esa referencia muy baja, empezará a funcionar los led con menos luz ambiente que si ponemos una señal muy alta, recordemos:

Más luz = Menos Resistencia = Mayor Vout Menos luz = Mayor resistencia = Menor Vout

Veamos el circuito final

Y una posible distribución en protoboard:

3ª Parte: Programando…

Abrir el proyecto Proyecto_005.ino de la documentación y observar el programa para empezar a entenderlo, es algo más largo que los anteriores, pero en realidad la única instrucción nueva es analogReference(EXTERNAL); En cuanto a la sucesión de comparaciones os dejo este diagrama de flujo que os hará más sencilla su comprensión:

Práctica  #006  –  LDR  y  Servomotor    Parte 1: ¿Que vamos a hacer.

En esta práctica vamos a tomar la configuración del LDR y del potenciómetro para transportar esa toma de datos a un movimiento físico en un servomotor de una manera muy sencilla. Para ello usaremos los siguientes materiales:  

1 x Arduino Uno 1 x Protoboard 1 x LDR 1 x Potenciómetro 1kΩ 1 x Resistencia 1KΩ 1 x ServoMotor 1 x Juego de Cables   Parte 2: Diseñando el hardware…

La única novedad de este circuito reside en la conexión de un servomotor a nuestro Arduino, de manera que veámoslo a fondo: ¿Que es un servomotor?

Un servomotor, es un motor con un eje de rendimiento controlado, es decir, que podemos posicionarlo a nuestro antojo, siempre dentro de su rango de actuación. Por lo general los servomotores suelen tener un rango de 180º aunque existen de 210º e incluso de rotación continua. ¿Como funcionan los servomotores?

Bien, los servomotores son en realidad motores de corriente continua con una serie de engranajes que transforman su velocidad, en torque (fuerza) y un sistema de control que utiliza un potenciómetro para saber constantemente la ubicación del eje, este sistema de control, además, responderá a una señal que nosotros le enviemos para establecer la posición del eje…

La señal que introducimos al servo, es una señal parecida, que no igual, a la del tipo PWM que ya conocemos, digo esto ya que la función PWM de Arduino, recordemos que la utilizábamos para simular una señal analógica con la función analogWrite(), de manera que dependiendo del ancho de los pulsos digitales emitidos con una frecuencia de 416Hz, nos emulaba una señal analógica, pero para los servos no queremos eso, vamos a emitir pulsos con una frecuencia mucho menor, 50Hz, y serán meramente digitales, sin intención de querer ser nada analógico y dependiendo del ancho del pulso que le enviemos (he ahí el parecido), nuestro servo se situará en una posición o en otra, los pulsos deben llevar una frecuencia de 20ms (los 50Hz) entre ellos para que el servomotor los interprete correctamente, aunque podrían funcionarnos igualmente en un intervalo entre 10ms y 30ms, con esto queremos decir que el servomotor va a leer cada 20ms su entrada de señal, y dependiendo de lo que dure el 1 lógico (ancho del pulso de +5v) calculará el grado del eje en el que se debe situar.

Aquí un pequeño esquema de conexión de los principales servos:

De manera que nos quedarían un esquema de la siguiente manera:

Y la siguiente conexión en protoboard:

3ª Parte: Programando…

Abrir el archivo Proyecto_006.ino de la documentación proporcionada y observar el programa. Descubrimos como añadir la librería que nos permite trabajar con servomotores además de la instrucción:

map(valor, fromLow, fromHigh, toLow, toHigh)